<?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>86630</bug_id>
          
          <creation_ts>2012-05-16 07:37:09 -0700</creation_ts>
          <short_desc>Web Inspector: Emulate pseudo styles (hover etc.) of non-selected elements</short_desc>
          <delta_ts>2012-07-04 09:11:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86625</dependson>
    
    <dependson>86847</dependson>
    
    <dependson>88706</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>625417</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-05-16 07:37:09 -0700</bug_when>
    <thetext>Upstreaming http://code.google.com/p/chromium/issues/detail?id=128011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662224</commentid>
    <comment_count>1</comment_count>
      <attachid>150610</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-03 08:07:10 -0700</bug_when>
    <thetext>Created attachment 150610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662259</commentid>
    <comment_count>2</comment_count>
      <attachid>150610</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-03 08:52:13 -0700</bug_when>
    <thetext>Comment on attachment 150610
Patch

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

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:137
&gt; +    typedef HashMap&lt;Node*, unsigned&gt; NodeToForcedPseudoState;

So you rely upon the fact that nodes in this map are alive (retained in InspectorDOMAgent) + you use the listener to clean it up. It does look good to me.
Another option would be to have a mapping from node id (int) to the state. It would look less suspicious: Node* as a key makes one think that it could be collected. It does add indirection into the recalcStyleForPseudoStateIfNeeded though.

Anyways, I like latter a bit more, so please consider using that approach.

&gt; Source/WebCore/inspector/front-end/ElementsPanel.js:178
&gt; +            if (pseudoClasses.indexOf(pseudoClass) &gt;= 0)

I would simply use {} here, you can store pseudoclasses as object keys.

&gt; Source/WebCore/inspector/front-end/ElementsPanel.js:186
&gt; +            if (!pseudoClasses.length)

This would need to be Object.keys(pseudoClasses).length, but this happens less frequently.

&gt; Source/WebCore/inspector/front-end/ElementsPanel.js:349
&gt; +        var treeElement = this.treeOutline.findTreeElement(node);

I am sure you can re-use some of this code elsewhere. Otherwise, it is not clear why we have a whole new method operating close tab and pushing styles / metrics updates.

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:233
&gt; +    decorationForTreeElement: function(treeElement)

This should be private and can be declared on the tree element itself.

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:257
&gt; +        decorationElement.addStyleClass(&quot;gutter-decoration&quot;);

Style name could be more specific (elements-gutter-decoration)

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:259
&gt; +            decorationElement.addStyleClass(&quot;children-decoration&quot;);

ditto

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:642
&gt; +        if (!propertyValue)

This check pretty much kills the benefit of the base class. I&apos;d merge the two.

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:1168
&gt; +        var pseudoSubMenu = contextMenu.appendSubMenuItem(WebInspector.UIString(&quot;Pseudoclasses&quot;));

&quot;Force state&quot;?

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:1181
&gt; +        var elementsPanel = WebInspector.panels.elements;

You should not access elements panel from here, elements tree outline should not depend on it. r- is for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662896</commentid>
    <comment_count>3</comment_count>
      <attachid>150779</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-04 05:48:32 -0700</bug_when>
    <thetext>Created attachment 150779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662907</commentid>
    <comment_count>4</comment_count>
      <attachid>150779</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-04 06:07:05 -0700</bug_when>
    <thetext>Comment on attachment 150779
Patch

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

&gt; Source/WebCore/English.lproj/localizedStrings.js:20
&gt; +localizedStrings[&quot;%d descendant with forced pseudo state&quot;] = &quot;%d descendant with forced pseudo state&quot;;

i think you should remove the &quot;pseudo&quot; part from all the captions.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:537
&gt; +    if (m_nodeIdToForcedPseudoState.isEmpty())

I don&apos;t think you need this check, it&apos;ll return later.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:1048
&gt; +        Element* element = static_cast&lt;Element*&gt;(m_domAgent-&gt;nodeForId(it-&gt;first));

toElement

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:144
&gt; +    int boundNodeId(Node* node) { return m_domAgent-&gt;boundNodeId(node); }

I&apos;d implement it in .cpp

&gt; Source/WebCore/inspector/front-end/ElementsPanel.js:195
&gt; +        this.treeOutline.updateOpenCloseTags(node);

It would be great if this was driven by the events.

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:40
&gt; +WebInspector.ElementsTreeOutline = function(omitRootDOMNode, selectEnabled, showInElementsPanelEnabled, contextMenuCallback, setPseudoClassCallback)

I would introduce WebInspector.DOMAgent.prototype.addUserPropertyListener(name, listener) to resolve this dependency.

&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:194
&gt; +    updateOpenCloseTags: function(node)

This will become private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663006</commentid>
    <comment_count>5</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-04 09:11:03 -0700</bug_when>
    <thetext>Committed r121860: &lt;http://trac.webkit.org/changeset/121860&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150610</attachid>
            <date>2012-07-03 08:07:10 -0700</date>
            <delta_ts>2012-07-04 05:48:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86630-20120703190708.patch</filename>
            <type>text/plain</type>
            <size>26527</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU5MzAxODZjYzJmZDc0
MTE1ZDc0ZDRlNzViMmY1NGUxOTU0ZWMyNi4uOTk1MGFkOTJjOGI5MjI0MTMzY2M1YTE1ZWIxYTVk
Yzk3ZmUzZDVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYzIEBACiAyMDEyLTA3LTAzICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogRW11bGF0ZSBwc2V1ZG8gc3R5bGVzIChob3ZlciBldGMuKSBvZiBub24tc2VsZWN0ZWQg
ZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2NjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBBIG1hcCBvZiBwc2V1ZG8tc3RhdGVzIGZvciBhbGwgYm91bmQgRE9NIG5vZGVzIGlzIG1haW50
YWluZWQgaW4gdGhlIGJhY2tlbmQgYW5kIHF1ZXJpZWQgd2hlbmV2ZXIgU3R5bGVSZXNvbHZlcgor
ICAgICAgICBjYWxjdWxhdGVzIHRoZSBlZmZlY2l0dmUgZWxlbWVudCBzdHlsZS4KKyAgICAgICAg
LSBJbiB0aGUgZnJvbnRlbmQsIG1hcmtlcnMgYXJlIGludHJvZHVjZWQgdG8gZGlzdGluZ3Vpc2gg
ZWxlbWVudHMgdGhhdCBoYXZlIGZvcmNlZCBwc2V1ZG8tc3R5bGVzIHNldCBmb3IgdGhlbS4KKyAg
ICAgICAgQWRkaXRpb25hbGx5LCBkaW1tZWQgbWFya2VycyBhcmUgYWRkZWQgZm9yIGNvbGxhcHNl
ZCBub2Rlcywgd2hvc2UgZGVzY2VuZGFudHMgaGF2ZSBmb3JjZWQgcHNldWRvLXN0eWxlcy4KKyAg
ICAgICAgTW9yZSBFbGVtZW50RGVjb3JhdG9yIHN1YnR5cGVzIHdpbGwgYmUgYWRkZWQgZm9yIG90
aGVyIHR5cGVzIG9mIG1hcmtlcnMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3Rv
ckNTU0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpjbGVhckZy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9T
dGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRS
ZW1vdmVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlk
UmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVz
ZXRQc2V1ZG9TdGF0ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
OgorICAgICAgICAoSW5zcGVjdG9yQ1NTQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
dW5iaW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUuc2V0UHNldWRv
Q2xhc3NGb3JOb2RlSWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJv
dG90eXBlLnVwZGF0ZU5vZGVEZWNvcmF0aW9ucyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxp
bmUucHJvdG90eXBlLl9jcmVhdGVOb2RlRGVjb3JhdG9ycyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUuZGVjb3JhdGlvbkZvclRyZWVFbGVtZW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNv
cmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVu
dERlY29yYXRvci5wcm90b3R5cGUuZGVjb3JhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVudERlY29yYXRvci5wcm90b3R5cGUuZGVjb3JhdGVBbmNl
c3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5FbGVtZW50
RGVjb3JhdG9yLnByb3RvdHlwZS5kb0RlY29yYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNvcmF0b3IucHJvdG90eXBlLmRvRGVjb3JhdGVB
bmNlc3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5Qc2V1
ZG9TdGF0ZURlY29yYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0
bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvci5wcm90b3R5cGUuZG9EZWNvcmF0ZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvci5w
cm90b3R5cGUuZG9EZWNvcmF0ZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fcG9wdWxhdGVUYWdDb250ZXh0TWVudSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3BvcHVsYXRl
Rm9yY2VkUHNldWRvU3RhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlVGl0bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVEZWNvcmF0aW9ucyk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUuZ2V0IGZvcmNlZFBzZXVk
b0NsYXNzZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3Rv
dHlwZS5fdXBkYXRlRm9yY2VkUHNldWRvU3RhdGVJbnB1dHMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5fcmVmcmVzaFVwZGF0ZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9yZWJ1aWxkVXBk
YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUu
X3RvZ2dsZUVsZW1lbnRTdGF0ZVBhbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1Np
ZGViYXJQYW5lLnByb3RvdHlwZS5fY3JlYXRlRWxlbWVudFN0YXRlUGFuZS5jbGlja0xpc3RlbmVy
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzOgorICAg
ICAgICAoI2VsZW1lbnRzLWNvbnRlbnQgLmd1dHRlci1kZWNvcmF0aW9uKToKKyAgICAgICAgKCNl
bGVtZW50cy1jb250ZW50IC5ndXR0ZXItZGVjb3JhdGlvbi5jaGlsZHJlbi1kZWNvcmF0aW9uKToK
KworMjAxMi0wNy0wMyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFtSRUdSRVNTSU9OXSBDcmFzaCB3aGVuIGNvcHlpbmcgYSBTdHlsZVJ1bGVNZWRp
YSB3aXRoIGEgTlVMTCBtX21lZGlhUXVlcmllcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0NTkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggOTE3MDI3ZmIyYzA0NzE3M2U4YWFhNGQzMDkz
M2JlODc2MTM4OWU4My4uM2NjZWU1ZWVhYWQxNjExZDcwMDQ1NDdhYTc4Nzc1OWE1NWNkYzE2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBA
IC00NjEsNyArNDYxLDYgQEAgSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkKICAgICA6IEluc3BlY3Rv
ckJhc2VBZ2VudDxJbnNwZWN0b3JDU1NBZ2VudD4oIkNTUyIsIGluc3RydW1lbnRpbmdBZ2VudHMs
IHN0YXRlKQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkK
LSAgICAsIG1fbGFzdFBzZXVkb1N0YXRlKDApCiAgICAgLCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkK
IHsKICAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcih0aGlzKTsKQEAgLTQ4NSw3ICs0ODQs
NyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpjbGVhckZyb250ZW5kKCkKIHsKICAgICBBU1NF
UlQobV9mcm9udGVuZCk7CiAgICAgbV9mcm9udGVuZCA9IDA7Ci0gICAgY2xlYXJQc2V1ZG9TdGF0
ZSh0cnVlKTsKKyAgICByZXNldFBzZXVkb1N0YXRlcygpOwogICAgIFN0cmluZyBlcnJvclN0cmlu
ZzsKICAgICBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nLCBmYWxzZSk7CiB9
CkBAIC01MTQsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAg
IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwogICAgIG1fbm9k
ZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5jbGVhcigpOwogICAgIG1fZG9jdW1lbnRUb0luc3BlY3Rv
clN0eWxlU2hlZXQuY2xlYXIoKTsKKyAgICByZXNldFBzZXVkb1N0YXRlcygpOwogfQogCiB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQpAQCAtNTM0LDE4ICs1MzQs
MjAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKQog
CiBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1l
bnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUpCiB7Ci0gICAgaWYgKG1fbGFz
dEVsZW1lbnRXaXRoUHNldWRvU3RhdGUgIT0gZWxlbWVudCkKKyAgICBOb2RlVG9Gb3JjZWRQc2V1
ZG9TdGF0ZTo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0ZvcmNlZFBzZXVkb1N0YXRlLmZpbmQoZWxl
bWVudCk7CisgICAgaWYgKGl0ID09IG1fbm9kZVRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0g
aXQtPnNlY29uZDsKICAgICBzd2l0Y2ggKHBzZXVkb1R5cGUpIHsKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9BY3RpdmU6Ci0gICAgICAgIHJldHVybiBtX2xhc3RQc2V1ZG9TdGF0ZSAmIFBz
ZXVkb0FjdGl2ZTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZFBzZXVkb1N0YXRlICYgUHNldWRvQWN0
aXZlOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgotICAgICAgICByZXR1cm4g
bV9sYXN0UHNldWRvU3RhdGUgJiBQc2V1ZG9Gb2N1czsKKyAgICAgICAgcmV0dXJuIGZvcmNlZFBz
ZXVkb1N0YXRlICYgUHNldWRvRm9jdXM7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92
ZXI6Ci0gICAgICAgIHJldHVybiBtX2xhc3RQc2V1ZG9TdGF0ZSAmIFBzZXVkb0hvdmVyOworICAg
ICAgICByZXR1cm4gZm9yY2VkUHNldWRvU3RhdGUgJiBQc2V1ZG9Ib3ZlcjsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICByZXR1cm4gbV9sYXN0UHNldWRvU3Rh
dGUgJiBQc2V1ZG9WaXNpdGVkOworICAgICAgICByZXR1cm4gZm9yY2VkUHNldWRvU3RhdGUgJiBQ
c2V1ZG9WaXNpdGVkOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkBAIC01NTQsMTEgKzU1NiwxNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVk
b1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9UeQogdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQq
IGVsZW1lbnQsIEluc3BlY3RvckFycmF5KiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewogICAgIHVu
c2lnbmVkIGZvcmNlUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBz
ZXVkb0NsYXNzZXMpOwotICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZWxlbWVudCAhPSBtX2xh
c3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlIHx8IGZvcmNlUHNldWRvU3RhdGUgIT0gbV9sYXN0UHNl
dWRvU3RhdGU7Ci0gICAgbV9sYXN0UHNldWRvU3RhdGUgPSBmb3JjZVBzZXVkb1N0YXRlOwotICAg
IG1fbGFzdEVsZW1lbnRXaXRoUHNldWRvU3RhdGUgPSBlbGVtZW50OwotICAgIGlmIChuZWVkU3R5
bGVSZWNhbGMpCi0gICAgICAgIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZl
ckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CisgICAgTm9kZVRvRm9yY2VkUHNldWRv
U3RhdGU6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5maW5kKGVsZW1l
bnQpOworICAgIHVuc2lnbmVkIGN1cnJlbnRGb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9k
ZVRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCkgPyAwIDogaXQtPnNlY29uZDsKKyAgICBib29sIG5l
ZWRTdHlsZVJlY2FsYyA9IGZvcmNlUHNldWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0
YXRlOworICAgIGlmICghbmVlZFN0eWxlUmVjYWxjKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZm9yY2VQc2V1ZG9TdGF0ZSkKKyAgICAgICAgbV9ub2RlVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5z
ZXQoZWxlbWVudCwgZm9yY2VQc2V1ZG9TdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBtX25vZGVU
b0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShlbGVtZW50KTsKKyAgICBlbGVtZW50LT5vd25lckRv
Y3VtZW50KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwog
fQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNv
bnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlBzZXVkb0lkUnVsZXM+ID4mIHBzZXVkb0lk
UnVsZXMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJp
dGVkU3R5bGVFbnRyeT4gPiYgaW5oZXJpdGVkRW50cmllcykKQEAgLTk4NSw3ICs5OTMsNiBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVEb2N1bWVudChEb2N1bWVudCogZG9jdW1l
bnQpCiB7CiAgICAgaWYgKGRvY3VtZW50KQogICAgICAgICBtX2RvY3VtZW50VG9JbnNwZWN0b3JT
dHlsZVNoZWV0LnJlbW92ZShkb2N1bWVudCk7Ci0gICAgY2xlYXJQc2V1ZG9TdGF0ZShmYWxzZSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9k
ZSkKQEAgLTk5Myw4ICsxMDAwLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3Zl
RE9NTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fbGFzdEVsZW1lbnRXaXRoUHNldWRvU3RhdGUuZ2V0KCkgPT0gbm9kZSkKLSAgICAg
ICAgY2xlYXJQc2V1ZG9TdGF0ZShmYWxzZSk7CisgICAgbV9ub2RlVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZSk7CiAKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRv
ciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKG5vZGUpOwogICAgIGlmIChp
dCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpCkBAIC0xMDIyLDE2ICsxMDI4
LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3Rv
clN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnN0eWxlU2hlZXRD
aGFuZ2VkKHN0eWxlU2hlZXQtPmlkKCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpj
bGVhclBzZXVkb1N0YXRlKGJvb2wgcmVjYWxjU3R5bGVzKQordm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6cmVzZXRQc2V1ZG9TdGF0ZXMoKQogewotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0g
bV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZTsKLSAgICBtX2xhc3RFbGVtZW50V2l0aFBzZXVk
b1N0YXRlID0gMDsKLSAgICBtX2xhc3RQc2V1ZG9TdGF0ZSA9IDA7Ci0gICAgaWYgKHJlY2FsY1N0
eWxlcyAmJiBlbGVtZW50KSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQt
Pm93bmVyRG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KQotICAgICAgICAgICAgZG9j
dW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOworICAg
IEhhc2hTZXQ8RG9jdW1lbnQqPiBkb2N1bWVudHNUb0NoYW5nZTsKKyAgICBmb3IgKE5vZGVUb0Zv
cmNlZFBzZXVkb1N0YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvRm9yY2VkUHNldWRvU3RhdGUu
YmVnaW4oKSwgZW5kID0gbV9ub2RlVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oaXQtPmZpcnN0KTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50c1RvQ2hhbmdlLmFkZChlbGVtZW50LT5vd25lckRvY3VtZW50KCkp
OwogICAgIH0KKworICAgIG1fbm9kZVRvRm9yY2VkUHNldWRvU3RhdGUuY2xlYXIoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBkb2N1bWVudHNUb0NoYW5nZS5i
ZWdpbigpLCBlbmQgPSBkb2N1bWVudHNUb0NoYW5nZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAoKml0KS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggZDYzOTBmN2JkNWJlZjRkMWZjZTY5NWY4ZmFl
ZjRkZWU4MTJlYzc2Yi4uMDhhYTVkZDk1YzRhYzE2YTAzYmE4NjNhZDI3YTUxODBkNzc5ODhmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTEz
NCw2ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0
KiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9y
U3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8g
Ym9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGVsZW1lbnRzJyBpbmxpbmUgc3R5bGVzCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0
PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIg
c3R5bGVzaGVldHMKKyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBOb2RlVG9G
b3JjZWRQc2V1ZG9TdGF0ZTsKIAogICAgIHZvaWQgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlm
TmVlZGVkKEVsZW1lbnQqLCBJbnNwZWN0b3JBcnJheSogZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hl
ZXQoRWxlbWVudCogZWxlbWVudCk7CkBAIC0xNTYsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBJbnNwZWN0b3JDU1NBZ2VudDo6TGlzdGVuZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopOwogCi0gICAgdm9p
ZCBjbGVhclBzZXVkb1N0YXRlKGJvb2wgcmVjYWxjU3R5bGVzKTsKKyAgICB2b2lkIHJlc2V0UHNl
dWRvU3RhdGVzKCk7CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6Q1NTKiBtX2Zyb250ZW5kOwog
ICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwpAQCAtMTY1LDkgKzE2Niw3IEBAIHBy
aXZhdGU6CiAgICAgQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldCBtX2Nzc1N0eWxl
U2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVl
dCBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgRG9jdW1lbnRUb1ZpYUluc3BlY3Rv
clN0eWxlU2hlZXQgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKLQotICAgIFJlZlB0
cjxFbGVtZW50PiBtX2xhc3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlOwotICAgIHVuc2lnbmVkIG1f
bGFzdFBzZXVkb1N0YXRlOworICAgIE5vZGVUb0ZvcmNlZFBzZXVkb1N0YXRlIG1fbm9kZVRvRm9y
Y2VkUHNldWRvU3RhdGU7CiAKICAgICBpbnQgbV9sYXN0U3R5bGVTaGVldElkOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA3MWRiMTdh
YTRmMDEzOGYzOTZkNjk3MzY0NmM4YTY2NjQzYjAwMmE5Li4xMjBjNjQ2MDYzN2NkODdmYjE0MWMy
NTdjN2E2ZDM5YTZkOWUzMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKQEAgLTM1MCw2ICszNTAsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIH0KIAog
ICAgIG5vZGVzTWFwLT5yZW1vdmUobm9kZSk7CisgICAgaWYgKG1fZG9tTGlzdGVuZXIpCisgICAg
ICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisKICAgICBib29sIGNo
aWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhpZCk7CiAgICAg
aWYgKGNoaWxkcmVuUmVxdWVzdGVkKSB7CiAgICAgICAgIC8vIFVuYmluZCBzdWJ0cmVlIGtub3du
IHRvIGNsaWVudCByZWN1cnNpdmVseS4KQEAgLTE0NDMsOSArMTQ0Niw2IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIAogICAgIGludCBwYXJl
bnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKIAotICAgIGlmIChtX2Rv
bUxpc3RlbmVyKQotICAgICAgICBtX2RvbUxpc3RlbmVyLT5kaWRSZW1vdmVET01Ob2RlKG5vZGUp
OwotCiAgICAgaWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewog
ICAgICAgICAvLyBObyBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBj
aGFuZ2VzIG9mIGhhc0NoaWxkcmVuLgogICAgICAgICBpZiAoaW5uZXJDaGlsZE5vZGVDb3VudChw
YXJlbnQpID09IDEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0VsZW1lbnRzUGFuZWwuanMKaW5kZXggM2FkMjUzNGFhNDYyOGZkZDhhODJiZjRiYWNkYTZjYTk1
ZmI2ZmRjNi4uN2RiNDU3ZGZmZWZmM2EzNjE0NDg2ODcyNTY0ZjUzZGQ1N2E4NjZjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5q
cwpAQCAtMTY2LDYgKzE2NiwzMCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYlNpemVzKCk7CiAgICAgfSwKIAor
ICAgIHNldFBzZXVkb0NsYXNzRm9yTm9kZUlkOiBmdW5jdGlvbihub2RlSWQsIHBzZXVkb0NsYXNz
LCBlbmFibGUpCisgICAgeworICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2Vu
dC5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHZhciBwc2V1ZG9DbGFzc2VzID0gbm9kZS5nZXRVc2VyUHJvcGVydHko
InBzZXVkb1N0YXRlIik7CisgICAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgICAgIHBzZXVk
b0NsYXNzZXMgPSBwc2V1ZG9DbGFzc2VzIHx8IFtdOworICAgICAgICAgICAgaWYgKHBzZXVkb0Ns
YXNzZXMuaW5kZXhPZihwc2V1ZG9DbGFzcykgPj0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBwc2V1ZG9DbGFzc2VzLnB1c2gocHNldWRvQ2xhc3MpOworICAgICAgICAg
ICAgbm9kZS5zZXRVc2VyUHJvcGVydHkoInBzZXVkb1N0YXRlIiwgcHNldWRvQ2xhc3Nlcyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXBzZXVkb0NsYXNzZXMgfHwgcHNldWRv
Q2xhc3Nlcy5pbmRleE9mKHBzZXVkb0NsYXNzKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcHNldWRvQ2xhc3Nlcy5yZW1vdmUocHNldWRvQ2xhc3MpOworICAgICAg
ICAgICAgaWYgKCFwc2V1ZG9DbGFzc2VzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBub2RlLnJl
bW92ZVVzZXJQcm9wZXJ0eSgicHNldWRvU3RhdGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMudXBkYXRlTm9kZURlY29yYXRpb25zKG5vZGUpOworICAgIH0sCisKICAgICBfc2VsZWN0ZWRO
b2RlQ2hhbmdlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9
IHRoaXMuc2VsZWN0ZWRET01Ob2RlKCk7CkBAIC0zMjAsNiArMzQ0LDE5IEBAIFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRyZWVFbGVtZW50LnVw
ZGF0ZVNlbGVjdGlvbigpOyAvLyBSZWNhbGN1bGF0ZSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGRpbWVu
c2lvbnMuCiAgICAgfSwKIAorICAgIHVwZGF0ZU5vZGVEZWNvcmF0aW9uczogZnVuY3Rpb24obm9k
ZSkKKyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMudHJlZU91dGxpbmUuZmlu
ZFRyZWVFbGVtZW50KG5vZGUpOworICAgICAgICBpZiAodHJlZUVsZW1lbnQpCisgICAgICAgICAg
ICB0cmVlRWxlbWVudC51cGRhdGVUaXRsZSgpOworICAgICAgICB2YXIgY2hpbGRyZW4gPSB0cmVl
RWxlbWVudC5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGNsb3NpbmdUYWdFbGVtZW50ID0gY2hpbGRy
ZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07CisgICAgICAgIGlmIChjbG9zaW5nVGFnRWxlbWVudCAm
JiBjbG9zaW5nVGFnRWxlbWVudC5fZWxlbWVudENsb3NlVGFnKQorICAgICAgICAgICAgY2xvc2lu
Z1RhZ0VsZW1lbnQudXBkYXRlVGl0bGUoKTsKKyAgICAgICAgdGhpcy5fbWV0cmljc1BhbmVFZGl0
ZWQoKTsKKyAgICAgICAgdGhpcy5fc3R5bGVzUGFuZUVkaXRlZCgpOworICAgIH0sCisKICAgICBz
d2l0Y2hUb0FuZEZvY3VzOiBmdW5jdGlvbihub2RlKQogICAgIHsKICAgICAgICAgLy8gUmVzZXQg
c2VhcmNoIHJlc3RvcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggZjc5NDk1YTVlMjQ3MTU5OGYw
MDdhOWE4NzkwYmE1MDJmNWYxMWIxNS4uYjQ3ZjllYmUwNDgxOWJlM2QxNThhZjg1ZDVjMmU2ZDAw
NGZhYmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1RyZWVPdXRsaW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwpAQCAtNjIsNiArNjIsNyBAQCBXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlT3V0bGluZSA9IGZ1bmN0aW9uKG9taXRSb290RE9NTm9kZSwgc2VsZWN0
RW5hYmxlZCwgc2hvdwogCiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRl
eHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyksIHRydWUpOwog
ICAgIHRoaXMuX2NvbnRleHRNZW51Q2FsbGJhY2sgPSBjb250ZXh0TWVudUNhbGxiYWNrOworICAg
IHRoaXMuX2NyZWF0ZU5vZGVEZWNvcmF0b3JzKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5FbGVtZW50
c1RyZWVPdXRsaW5lLkV2ZW50cyA9IHsKQEAgLTY5LDYgKzcwLDEyIEBAIFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVPdXRsaW5lLkV2ZW50cyA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZU91dGxpbmUucHJvdG90eXBlID0geworICAgIF9jcmVhdGVOb2RlRGVjb3JhdG9yczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbm9kZURlY29yYXRvcnMgPSBbXTsKKyAgICAg
ICAgdGhpcy5fbm9kZURlY29yYXRvcnMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZU91dGxpbmUuUHNldWRvU3RhdGVEZWNvcmF0b3IoKSk7CisgICAgfSwKKwogICAgIHdpcmVUb0Rv
bUFnZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9lbGVtZW50c1RyZWVVcGRh
dGVyID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVVcGRhdGVyKHRoaXMpOwpAQCAtMjIz
LDYgKzIzMCwzNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0sCiAKKyAgICBkZWNvcmF0aW9uRm9yVHJl
ZUVsZW1lbnQ6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUg
PSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAgICAgdmFyIGRlY29yYXRvck1l
c3NhZ2VzID0gW107CisgICAgICAgIHZhciBwYXJlbnREZWNvcmF0b3JNZXNzYWdlcyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX25vZGVEZWNvcmF0b3JzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgZGVjb3JhdG9yID0gdGhpcy5fbm9kZURlY29yYXRvcnNb
aV07CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGRlY29yYXRvci5kZWNvcmF0ZShub2RlKTsK
KyAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgZGVjb3JhdG9yTWVz
c2FnZXMucHVzaChtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50LmV4cGFuZGVkIHx8IHRyZWVFbGVt
ZW50Ll9lbGVtZW50Q2xvc2VUYWcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSBkZWNvcmF0b3IuZGVjb3JhdGVBbmNlc3Rvcihub2RlKTsKKyAgICAg
ICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgIHBhcmVudERlY29yYXRvck1lc3Nh
Z2VzLnB1c2gobWVzc2FnZSkKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlY29yYXRvck1lc3Nh
Z2VzLmxlbmd0aCAmJiAhcGFyZW50RGVjb3JhdG9yTWVzc2FnZXMubGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIGRlY29yYXRpb25FbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGRlY29yYXRpb25FbGVtZW50LmFkZFN0
eWxlQ2xhc3MoImd1dHRlci1kZWNvcmF0aW9uIik7CisgICAgICAgIGlmICghZGVjb3JhdG9yTWVz
c2FnZXMubGVuZ3RoKQorICAgICAgICAgICAgZGVjb3JhdGlvbkVsZW1lbnQuYWRkU3R5bGVDbGFz
cygiY2hpbGRyZW4tZGVjb3JhdGlvbiIpOworICAgICAgICBkZWNvcmF0aW9uRWxlbWVudC50aXRs
ZSA9IGRlY29yYXRvck1lc3NhZ2VzLmNvbmNhdChwYXJlbnREZWNvcmF0b3JNZXNzYWdlcykuam9p
bigiXG4iKTsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRpb25FbGVtZW50OworICAgIH0sCisKICAg
ICBzZXQgc3VwcHJlc3NSZXZlYWxBbmRTZWxlY3QoeCkKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9zdXBwcmVzc1JldmVhbEFuZFNlbGVjdCA9PT0geCkKQEAgLTU1NSw2ICs1OTMsNjkgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVP
dXRsaW5lLnByb3RvdHlwZTsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAqLworV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVudERlY29yYXRvciA9IGZ1bmN0aW9uKHByb3Bl
cnR5TmFtZSkKK3sKKyAgICB0aGlzLl9wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Cit9CisK
K1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNvcmF0b3IucHJvdG90
eXBlID0geworICAgIGRlY29yYXRlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KG5vZGUubm9kZVR5cGUoKSAhPT0gTm9kZS5FTEVNRU5UX05PREUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9EZWNvcmF0ZShub2RlLmdldFVzZXJQ
cm9wZXJ0eSh0aGlzLl9wcm9wZXJ0eU5hbWUpLCBub2RlKTsKKyAgICB9LAorCisgICAgZGVjb3Jh
dGVBbmNlc3RvcjogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLm5vZGVU
eXBlKCkgIT09IE5vZGUuRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHJldHVybiB0aGlzLmRvRGVjb3JhdGVBbmNlc3Rvcihub2RlLmRlc2NlbmRhbnRV
c2VyUHJvcGVydHlDb3VudCh0aGlzLl9wcm9wZXJ0eU5hbWUpKTsKKyAgICB9LAorCisgICAgZG9E
ZWNvcmF0ZTogZnVuY3Rpb24ocHJvcGVydHlWYWx1ZSwgbm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH0sCisKKyAgICBkb0RlY29yYXRlQW5jZXN0b3I6IGZ1bmN0aW9uKGRl
c2NlbmRhbnRDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlT3V0bGluZS5FbGVtZW50RGVjb3JhdG9yfQorICovCitXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5FbGVtZW50RGVjb3JhdG9yLmNhbGwodGhpcywg
InBzZXVkb1N0YXRlIik7Cit9CisKK1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBz
ZXVkb1N0YXRlRGVjb3JhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBkb0RlY29yYXRlOiBmdW5jdGlv
bihwcm9wZXJ0eVZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkVsZW1lbnQgUHNldWRvIFN0YXRlOiAlcyIsICI6IiArIHByb3BlcnR5VmFsdWUuam9pbigi
LCA6IikpOworICAgIH0sCisKKyAgICBkb0RlY29yYXRlQW5jZXN0b3I6IGZ1bmN0aW9uKGRlc2Nl
bmRhbnRDb3VudCkKKyAgICB7CisgICAgICAgIGlmICghZGVzY2VuZGFudENvdW50KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiVkIGRlc2NlbmRhbnQocykgd2l0aCBmb3JjZWQgcHNldWRvIHN0YXRlIiwgZGVzY2VuZGFudENv
dW50KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBzZXVk
b1N0YXRlRGVjb3JhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5FbGVtZW50RGVjb3JhdG9yLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29u
c3RydWN0b3IKICAqIEBleHRlbmRzIHtUcmVlRWxlbWVudH0KICAqIEBwYXJhbSB7Ym9vbGVhbj19
IGVsZW1lbnRDbG9zZVRhZwogICovCkBAIC0xMDY0LDExICsxMTY1LDI2IEBAIFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGF0dHJpYnV0
ZSAmJiAhbmV3QXR0cmlidXRlKQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMo
KSA/ICJFZGl0IGF0dHJpYnV0ZSIgOiAiRWRpdCBBdHRyaWJ1dGUiKSwgdGhpcy5fc3RhcnRFZGl0
aW5nQXR0cmlidXRlLmJpbmQodGhpcywgYXR0cmlidXRlLCBldmVudC50YXJnZXQpKTsKICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIHZhciBwc2V1ZG9TdWJN
ZW51ID0gY29udGV4dE1lbnUuYXBwZW5kU3ViTWVudUl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJQc2V1ZG9jbGFzc2VzIikpOworICAgICAgICB0aGlzLl9wb3B1bGF0ZUZvcmNlZFBzZXVkb1N0
YXRlSXRlbXMocHNldWRvU3ViTWVudSk7CisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFy
YXRvcigpOwogCiAgICAgICAgIHRoaXMuX3BvcHVsYXRlTm9kZUNvbnRleHRNZW51KGNvbnRleHRN
ZW51KTsKICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5fcG9wdWxhdGVDb250ZXh0TWVudShjb250
ZXh0TWVudSwgdGhpcy5yZXByZXNlbnRlZE9iamVjdCk7CiAgICAgfSwKIAorICAgIF9wb3B1bGF0
ZUZvcmNlZFBzZXVkb1N0YXRlSXRlbXM6IGZ1bmN0aW9uKHN1Yk1lbnUpCisgICAgeworICAgICAg
ICBjb25zdCBwc2V1ZG9DbGFzc2VzID0gWyJhY3RpdmUiLCAiaG92ZXIiLCAiZm9jdXMiLCAidmlz
aXRlZCJdOworICAgICAgICB2YXIgbm9kZSA9IHRoaXMucmVwcmVzZW50ZWRPYmplY3Q7CisgICAg
ICAgIHZhciBmb3JjZWRQc2V1ZG9TdGF0ZSA9IChub2RlID8gbm9kZS5nZXRVc2VyUHJvcGVydHko
InBzZXVkb1N0YXRlIikgOiBudWxsKSB8fCBbXTsKKyAgICAgICAgdmFyIGVsZW1lbnRzUGFuZWwg
PSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBzZXVkb0NsYXNzZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBwc2V1ZG9D
bGFzc0ZvcmNlZCA9IGZvcmNlZFBzZXVkb1N0YXRlLmluZGV4T2YocHNldWRvQ2xhc3Nlc1tpXSkg
Pj0gMDsKKyAgICAgICAgICAgIHN1Yk1lbnUuYXBwZW5kQ2hlY2tib3hJdGVtKCI6IiArIHBzZXVk
b0NsYXNzZXNbaV0sIGVsZW1lbnRzUGFuZWwuc2V0UHNldWRvQ2xhc3NGb3JOb2RlSWQuYmluZChl
bGVtZW50c1BhbmVsLCBub2RlLmlkLCBwc2V1ZG9DbGFzc2VzW2ldLCAhcHNldWRvQ2xhc3NGb3Jj
ZWQpLCBwc2V1ZG9DbGFzc0ZvcmNlZCwgZmFsc2UpOworICAgICAgICB9CisgICAgfSwKKwogICAg
IF9wb3B1bGF0ZVRleHRDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUsIHRleHROb2Rl
KQogICAgIHsKICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFZGl0IHRleHQi
IDogIkVkaXQgVGV4dCIpLCB0aGlzLl9zdGFydEVkaXRpbmdUZXh0Tm9kZS5iaW5kKHRoaXMsIHRl
eHROb2RlKSk7CkBAIC0xNDY5LDYgKzE1ODUsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVl
RWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBoaWdobGlnaHRFbGVtZW50LmNsYXNz
TmFtZSA9ICJoaWdobGlnaHQiOwogICAgICAgICAgICAgaGlnaGxpZ2h0RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9ub2RlVGl0bGVJbmZvKFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlKS50
aXRsZURPTSk7CiAgICAgICAgICAgICB0aGlzLnRpdGxlID0gaGlnaGxpZ2h0RWxlbWVudDsKKyAg
ICAgICAgICAgIHRoaXMuX3VwZGF0ZURlY29yYXRpb25zKCk7CiAgICAgICAgICAgICBkZWxldGUg
dGhpcy5faGlnaGxpZ2h0UmVzdWx0OwogICAgICAgICB9CiAKQEAgLTE0NzksNiArMTU5NiwxNSBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuX2hpZ2hsaWdodFNlYXJjaFJlc3VsdHMoKTsKICAgICB9LAogCisgICAgX3VwZGF0ZURl
Y29yYXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZGVjb3JhdG9y
RWxlbWVudCAmJiB0aGlzLl9kZWNvcmF0b3JFbGVtZW50LnBhcmVudEVsZW1lbnQpCisgICAgICAg
ICAgICB0aGlzLl9kZWNvcmF0b3JFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhp
cy5fZGVjb3JhdG9yRWxlbWVudCk7CisgICAgICAgIHRoaXMuX2RlY29yYXRvckVsZW1lbnQgPSB0
aGlzLnRyZWVPdXRsaW5lID8gdGhpcy50cmVlT3V0bGluZS5kZWNvcmF0aW9uRm9yVHJlZUVsZW1l
bnQodGhpcykgOiBudWxsOworICAgICAgICBpZiAodGhpcy5fZGVjb3JhdG9yRWxlbWVudCAmJiB0
aGlzLmxpc3RJdGVtRWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50Lmlu
c2VydEJlZm9yZSh0aGlzLl9kZWNvcmF0b3JFbGVtZW50LCB0aGlzLmxpc3RJdGVtRWxlbWVudC5m
aXJzdENoaWxkKTsKKyAgICB9LAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuRE9NTm9kZT19IG5vZGUKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgc3RyaW5n
LCBzdHJpbmcsIGJvb2xlYW49LCBzdHJpbmc9KT19IGxpbmtpZnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4
IGVmMDkxY2RhYzYzNTZlMTUyN2NmNWUyYzUwN2YzZTk0ODU0YmFiOTcuLjkzYmFmMDk2YzViNTMz
ODU5M2M2NDYxNzE0NjM5YzAwNTE2NjM1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMjExLDcgKzIx
MSwyMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAg
ICAgZ2V0IGZvcmNlZFBzZXVkb0NsYXNzZXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2ZvcmNlZFBzZXVkb0NsYXNzZXM7CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUgPyAodGhpcy5u
b2RlLmdldFVzZXJQcm9wZXJ0eSgicHNldWRvU3RhdGUiKSB8fCB1bmRlZmluZWQpIDogdW5kZWZp
bmVkOworICAgIH0sCisKKyAgICBfdXBkYXRlRm9yY2VkUHNldWRvU3RhdGVJbnB1dHM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5ub2RlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHZhciBub2RlUHNldWRvU3RhdGUgPSB0aGlzLmZvcmNlZFBzZXVkb0NsYXNz
ZXM7CisgICAgICAgIGlmICghbm9kZVBzZXVkb1N0YXRlKQorICAgICAgICAgICAgbm9kZVBzZXVk
b1N0YXRlID0gW107CisKKyAgICAgICAgdmFyIGlucHV0cyA9IHRoaXMuX2VsZW1lbnRTdGF0ZVBh
bmUuaW5wdXRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIGlucHV0c1tpXS5jaGVja2VkID0gbm9kZVBzZXVkb1N0YXRlLmluZGV4
T2YoaW5wdXRzW2ldLnN0YXRlKSA+PSAwOwogICAgIH0sCiAKICAgICB1cGRhdGU6IGZ1bmN0aW9u
KG5vZGUsIGZvcmNlVXBkYXRlKQpAQCAtMjM4LDYgKzI1Miw4IEBAIFdlYkluc3BlY3Rvci5TdHls
ZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5v
ZGUgPSB0aGlzLm5vZGU7CiAKKyAgICAgICAgdGhpcy5fdXBkYXRlRm9yY2VkUHNldWRvU3RhdGVJ
bnB1dHMoKTsKKwogICAgICAgICBpZiAocmVmcmVzaCkKICAgICAgICAgICAgIHRoaXMuX3JlZnJl
c2hVcGRhdGUoKTsKICAgICAgICAgZWxzZQpAQCAtMjc5LDcgKzI5NSw3IEBAIFdlYkluc3BlY3Rv
ci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHRoaXMuX2Nv
bXB1dGVkU3R5bGVQYW5lLmV4cGFuZGVkIHx8IGZvcmNlRmV0Y2hDb21wdXRlZFN0eWxlKSB7CiAg
ICAgICAgICAgICB0aGlzLl9yZWZyZXNoVXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jKG5vZGUuaWQs
IHRoaXMuX2ZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKHRo
aXMpKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxl
QXN5bmMobm9kZS5pZCwgdGhpcy5mb3JjZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZFN0eWxlQ2Fs
bGJhY2suYmluZCh0aGlzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aGlzLl9p
bm5lclJlZnJlc2hVcGRhdGUobm9kZSwgbnVsbCwgZWRpdGVkU2VjdGlvbik7CiAgICAgICAgICAg
ICBpZiAodXNlckNhbGxiYWNrKQpAQCAtMzM3LDExICszNTMsMTQgQEAgV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0
aGlzLl9jb21wdXRlZFN0eWxlUGFuZS5leHBhbmRlZCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9kZS5pZCwgdGhpcy5fZm9yY2VkUHNl
dWRvQ2xhc3NlcywgY29tcHV0ZWRDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9kZS5pZCwgdGhpcy5m
b3JjZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZENhbGxiYWNrLmJpbmQodGhpcykpOwogICAgICAg
ICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5saW5lU3R5bGVzQXN5bmMobm9kZS5pZCwgaW5s
aW5lQ2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5n
ZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5pZCwgdGhpcy5fZm9yY2VkUHNldWRvQ2xhc3Nlcywg
dHJ1ZSwgdHJ1ZSwgc3R5bGVzQ2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5nZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5pZCwgdGhpcy5mb3JjZWRQ
c2V1ZG9DbGFzc2VzLCB0cnVlLCB0cnVlLCBzdHlsZXNDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAg
ICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtmdW5jdGlvbigpPX0gdXNlckNhbGxiYWNr
CisgICAgICovCiAgICAgX3ZhbGlkYXRlTm9kZTogZnVuY3Rpb24odXNlckNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLm5vZGUpIHsKQEAgLTgxMywxMyArODMyLDYgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTdGF0ZUJ1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJ0
b2dnbGVkIik7CiAgICAgICAgICAgICB0aGlzLl9lbGVtZW50U3RhdGVQYW5lLnJlbW92ZVN0eWxl
Q2xhc3MoImV4cGFuZGVkIik7Ci0gICAgICAgICAgICAvLyBDbGVhciBmbGFncyBvbiBoaWRlLgot
ICAgICAgICAgICAgaWYgKHRoaXMuX2ZvcmNlZFBzZXVkb0NsYXNzZXMpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VsZW1lbnRTdGF0ZVBhbmUuaW5wdXRzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50U3RhdGVQYW5lLmlu
cHV0c1tpXS5jaGVja2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Zv
cmNlZFBzZXVkb0NsYXNzZXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVidWlsZFVwZGF0ZSgp
OwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSwKIApAQCAtODM0LDEzICs4NDYsMTAg
QEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICBmdW5jdGlvbiBjbGlja0xpc3RlbmVyKGV2ZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgcHNldWRvQ2xhc3NlcyA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
bnB1dHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRzW2ldLmNoZWNr
ZWQpCi0gICAgICAgICAgICAgICAgICAgIHBzZXVkb0NsYXNzZXMucHVzaChpbnB1dHNbaV0uc3Rh
dGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fZm9yY2VkUHNldWRvQ2xhc3Nl
cyA9IHBzZXVkb0NsYXNzZXMubGVuZ3RoID8gcHNldWRvQ2xhc3NlcyA6IHVuZGVmaW5lZDsKLSAg
ICAgICAgICAgIHRoaXMuX3JlYnVpbGRVcGRhdGUoKTsKKyAgICAgICAgICAgIHZhciBub2RlID0g
dGhpcy5fdmFsaWRhdGVOb2RlKCk7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5z
ZXRQc2V1ZG9DbGFzc0Zvck5vZGVJZChub2RlLmlkLCBldmVudC50YXJnZXQuc3RhdGUsIGV2ZW50
LnRhcmdldC5jaGVja2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNo
ZWNrYm94KHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9lbGVtZW50c1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvZWxlbWVudHNQYW5lbC5jc3MKaW5kZXggNmI3NDU1YjczNThjYzVlZTE5MjNjYzk4MWVhZjU5
MzlkMzM5MTQ2Yi4uZDM0YTEzZmRiMWJjNDUyMDFkZGIyOWU1ZWVkZjRkMjAwNDQ1MmU1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVs
LmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFu
ZWwuY3NzCkBAIC0zOSw2ICszOSwyMSBAQAogICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiB9CiAKKyNl
bGVtZW50cy1jb250ZW50IC5ndXR0ZXItZGVjb3JhdGlvbiB7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIGxlZnQ6IDFweDsKKyAgICBtYXJnaW4tdG9wOiAycHg7CisgICAgaGVpZ2h0OiA4
cHg7CisgICAgd2lkdGg6IDhweDsKKyAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgICAgYm9yZGVy
OiAxcHggc29saWQgb3JhbmdlOworICAgIGJhY2tncm91bmQtY29sb3I6IG9yYW5nZTsKK30KKwor
I2VsZW1lbnRzLWNvbnRlbnQgLmd1dHRlci1kZWNvcmF0aW9uLmNoaWxkcmVuLWRlY29yYXRpb24g
eworICAgIG9wYWNpdHk6IDAuNTsKK30KKwogLmVsZW1lbnRzLXRyZWUtZWRpdG9yIHsKICAgICAt
d2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwogICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQt
d3JpdGUtcGxhaW50ZXh0LW9ubHk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150779</attachid>
            <date>2012-07-04 05:48:32 -0700</date>
            <delta_ts>2012-07-04 06:07:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86630-20120704164830.patch</filename>
            <type>text/plain</type>
            <size>32295</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNmODc5NTIwYWE0Y2Q5
NGEzZjBlNjczMmZiMDRiYzliNjY4NzM2ZS4uYzBjYThlNWMyMDc2ZjhiZGUxY2VjMmQzZGU3ZWZi
MWMzOTY3NWJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA3LTAzICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogRW11bGF0ZSBwc2V1ZG8gc3R5bGVzIChob3ZlciBldGMuKSBvZiBub24tc2VsZWN0ZWQg
ZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2NjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBBIG1hcCBvZiBwc2V1ZG8tc3RhdGVzIGZvciBhbGwgYm91bmQgRE9NIG5vZGVzIGlzIG1haW50
YWluZWQgaW4gdGhlIGJhY2tlbmQgYW5kIHF1ZXJpZWQgd2hlbmV2ZXIgU3R5bGVSZXNvbHZlcgor
ICAgICAgICBjYWxjdWxhdGVzIHRoZSBlZmZlY3RpdmUgZWxlbWVudCBzdHlsZS4KKyAgICAgICAg
LSBJbiB0aGUgZnJvbnRlbmQsIG1hcmtlcnMgYXJlIGludHJvZHVjZWQgdG8gZGlzdGluZ3Vpc2gg
ZWxlbWVudHMgdGhhdCBoYXZlIGZvcmNlZCBwc2V1ZG8gc3R5bGVzIHNldCBmb3IgdGhlbS4KKyAg
ICAgICAgQWRkaXRpb25hbGx5LCBkaW1tZWQgbWFya2VycyBhcmUgYWRkZWQgZm9yIGNvbGxhcHNl
ZCBub2Rlcywgd2hvc2UgZGVzY2VuZGFudHMgaGF2ZSBmb3JjZWQgcHNldWRvIHN0eWxlcy4KKyAg
ICAgICAgTW9yZSBFbGVtZW50RGVjb3JhdG9yIHN1YnR5cGVzIHdpbGwgYmUgYWRkZWQgZm9yIG90
aGVyIHR5cGVzIG9mIG1hcmtlcnMuCisKKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXpl
ZFN0cmluZ3MuanM6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlY2FsY1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRvU3Rh
dGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAg
KEluc3BlY3RvckNTU0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
Ojpib3VuZE5vZGVJZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5FbGVtZW50c1BhbmVsLmdldCB0aGlzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
bGVtZW50c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5fc2V0UHNldWRvQ2xhc3NGb3JOb2RlSWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVPdXRsaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRs
aW5lLnByb3RvdHlwZS5fY3JlYXRlTm9kZURlY29yYXRvcnMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLnVwZGF0ZU9wZW5DbG9zZVRhZ3MpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuRWxlbWVudERlY29yYXRv
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0
ZURlY29yYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUuX3BvcHVsYXRlVGFnQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZUZvcmNlZFBzZXVkb1N0YXRl
SXRlbXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90
eXBlLnVwZGF0ZVRpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LnByb3RvdHlwZS5fY3JlYXRlRGVjb3JhdG9yRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3VwZGF0ZURlY29yYXRpb25zKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUuZ2V0IGZvcmNlZFBzZXVkb0NsYXNzZXMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5fdXBk
YXRlRm9yY2VkUHNldWRvU3RhdGVJbnB1dHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxl
c1NpZGViYXJQYW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5fcmVmcmVzaFVwZGF0ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9yZWJ1aWxkVXBkYXRlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3RvZ2dsZUVs
ZW1lbnRTdGF0ZVBhbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5l
LnByb3RvdHlwZS5fY3JlYXRlRWxlbWVudFN0YXRlUGFuZS5jbGlja0xpc3RlbmVyKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzOgorICAgICAgICAoI2Vs
ZW1lbnRzLWNvbnRlbnQgLmVsZW1lbnRzLWd1dHRlci1kZWNvcmF0aW9uKToKKyAgICAgICAgKCNl
bGVtZW50cy1jb250ZW50IC5lbGVtZW50cy1ndXR0ZXItZGVjb3JhdGlvbi5lbGVtZW50cy1oYXMt
ZGVjb3JhdGVkLWNoaWxkcmVuKToKKwogMjAxMi0wNy0wNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEyMTgxMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcwppbmRleCAyN2FlYTdiNmUxMmNiODAxMjM4NGJkZWE3Zjg1OTZkMDZhNGFjMjVhLi5k
MjhlZGM4YWQ0ZWM2YzVkZDYyODhjZmE2OGNlNDExZTkwYzIyODQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCkBAIC0xNyw2ICsxNyw4
IEBAIGxvY2FsaXplZFN0cmluZ3NbIiUuMmZzIl0gPSAiJS4yZnMiOwogbG9jYWxpemVkU3RyaW5n
c1siJS4zZm1zIl0gPSAiJS4zZm1zIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIGNvbnNvbGUgbWVz
c2FnZXMgYXJlIG5vdCBzaG93bi4iXSA9ICIlZCBjb25zb2xlIG1lc3NhZ2VzIGFyZSBub3Qgc2hv
d24uIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIGNvb2tpZXMgKCVzKSJdID0gIiVkIGNvb2tpZXMg
KCVzKSI7Citsb2NhbGl6ZWRTdHJpbmdzWyIlZCBkZXNjZW5kYW50IHdpdGggZm9yY2VkIHBzZXVk
byBzdGF0ZSJdID0gIiVkIGRlc2NlbmRhbnQgd2l0aCBmb3JjZWQgcHNldWRvIHN0YXRlIjsKK2xv
Y2FsaXplZFN0cmluZ3NbIiVkIGRlc2NlbmRhbnRzIHdpdGggZm9yY2VkIHBzZXVkbyBzdGF0ZSJd
ID0gIiVkIGRlc2NlbmRhbnRzIHdpdGggZm9yY2VkIHBzZXVkbyBzdGF0ZSI7CiBsb2NhbGl6ZWRT
dHJpbmdzWyIlZCBlcnJvciJdID0gIiVkIGVycm9yIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIGVy
cm9yLCAlZCB3YXJuaW5nIl0gPSAiJWQgZXJyb3IsICVkIHdhcm5pbmciOwogbG9jYWxpemVkU3Ry
aW5nc1siJWQgZXJyb3IsICVkIHdhcm5pbmdzIl0gPSAiJWQgZXJyb3IsICVkIHdhcm5pbmdzIjsK
QEAgLTE4MSw2ICsxODMsNyBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJFZGl0IFRleHQiXSA9ICJFZGl0
IFRleHQiOwogbG9jYWxpemVkU3RyaW5nc1siRWRpdCB0ZXh0Il0gPSAiRWRpdCB0ZXh0IjsKIGxv
Y2FsaXplZFN0cmluZ3NbIkVkaXQgYXMgSFRNTCJdID0gIkVkaXQgYXMgSFRNTCI7CiBsb2NhbGl6
ZWRTdHJpbmdzWyJFZGl0Il0gPSAiRWRpdCI7Citsb2NhbGl6ZWRTdHJpbmdzWyJFbGVtZW50IHBz
ZXVkbyBzdGF0ZTogJXMiXSA9ICJFbGVtZW50IHBzZXVkbyBzdGF0ZTogJXMiOwogbG9jYWxpemVk
U3RyaW5nc1siRWxlbWVudHMgUGFuZWwiXSA9ICJFbGVtZW50cyBQYW5lbCI7CiBsb2NhbGl6ZWRT
dHJpbmdzWyJFbGVtZW50cyJdID0gIkVsZW1lbnRzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVtdWxh
dGUgdG91Y2ggZXZlbnRzIl0gPSAiRW11bGF0ZSB0b3VjaCBldmVudHMiOwpAQCAtMjAyLDYgKzIw
NSw4IEBAIGxvY2FsaXplZFN0cmluZ3NbIkV4cGVjdGVkIENvbnRlbnQgTGVuZ3RoIl0gPSAiRXhw
ZWN0ZWQgQ29udGVudCBMZW5ndGgiOwogbG9jYWxpemVkU3RyaW5nc1siRXhwaXJlcyJdID0gIkV4
cGlyZXMiOwogbG9jYWxpemVkU3RyaW5nc1siRmlsZSBzaXplIl0gPSAiRmlsZSBzaXplIjsKIGxv
Y2FsaXplZFN0cmluZ3NbIkZpdCBpbiB3aW5kb3ciXSA9ICJGaXQgaW4gd2luZG93IjsKK2xvY2Fs
aXplZFN0cmluZ3NbIkZvcmNlIFBzZXVkbyBTdGF0ZSJdID0gIkZvcmNlIFBzZXVkbyBTdGF0ZSI7
Citsb2NhbGl6ZWRTdHJpbmdzWyJGb3JjZSBwc2V1ZG8gc3RhdGUiXSA9ICJGb3JjZSBwc2V1ZG8g
c3RhdGUiOwogbG9jYWxpemVkU3RyaW5nc1siR28gdG8gdGhlIHBhbmVsIHRvIHRoZSBsZWZ0L3Jp
Z2h0Il0gPSAiR28gdG8gdGhlIHBhbmVsIHRvIHRoZSBsZWZ0L3JpZ2h0IjsKIGxvY2FsaXplZFN0
cmluZ3NbIkdvIGJhY2svZm9yd2FyZCBpbiBwYW5lbCBoaXN0b3J5Il0gPSAiR28gYmFjay9mb3J3
YXJkIGluIHBhbmVsIGhpc3RvcnkiOwogbG9jYWxpemVkU3RyaW5nc1siRmluaXNoIExvYWRpbmci
XSA9ICJGaW5pc2ggTG9hZGluZyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAppbmRleCA5MTcwMjdmYjJjMDQ3MTczZThhYWE0ZDMwOTMzYmU4NzYx
Mzg5ZTgzLi44YTBjYWQ4ZDdmZGQ4ZmZmZTQ3Y2RiOTUwOTE1OWU2NjI0NTE2YWQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQ2MSw3
ICs0NjEsNiBAQCBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSQogICAgIDogSW5zcGVjdG9yQmFzZUFn
ZW50PEluc3BlY3RvckNTU0FnZW50PigiQ1NTIiwgaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUp
CiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2RvbUFnZW50KGRvbUFnZW50KQotICAgICwg
bV9sYXN0UHNldWRvU3RhdGUoMCkKICAgICAsIG1fbGFzdFN0eWxlU2hlZXRJZCgxKQogewogICAg
IG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKHRoaXMpOwpAQCAtNDg1LDcgKzQ4NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogewogICAgIEFTU0VSVChtX2Zy
b250ZW5kKTsKICAgICBtX2Zyb250ZW5kID0gMDsKLSAgICBjbGVhclBzZXVkb1N0YXRlKHRydWUp
OworICAgIHJlc2V0UHNldWRvU3RhdGVzKCk7CiAgICAgU3RyaW5nIGVycm9yU3RyaW5nOwogICAg
IHN0b3BTZWxlY3RvclByb2ZpbGVySW1wbCgmZXJyb3JTdHJpbmcsIGZhbHNlKTsKIH0KQEAgLTUx
NCw2ICs1MTMsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCiAgICAgbV9jc3NT
dHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNsZWFyKCk7CiAgICAgbV9ub2RlVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNsZWFyKCk7CiAgICAgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVT
aGVldC5jbGVhcigpOworICAgIHJlc2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCkBAIC01MzQsMTggKzUzNCwyNyBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCiAKIGJvb2wg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NT
U2VsZWN0b3I6OlBzZXVkb1R5cGUgcHNldWRvVHlwZSkKIHsKLSAgICBpZiAobV9sYXN0RWxlbWVu
dFdpdGhQc2V1ZG9TdGF0ZSAhPSBlbGVtZW50KQorICAgIGlmIChtX25vZGVJZFRvRm9yY2VkUHNl
dWRvU3RhdGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpbnQgbm9k
ZUlkID0gYm91bmROb2RlSWQoZWxlbWVudCk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU6Oml0ZXJhdG9yIGl0
ID0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmZpbmQobm9kZUlkKTsKKyAgICBpZiAoaXQg
PT0gbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGl0LT5zZWNvbmQ7CiAgICAg
c3dpdGNoIChwc2V1ZG9UeXBlKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZl
OgotICAgICAgICByZXR1cm4gbV9sYXN0UHNldWRvU3RhdGUgJiBQc2V1ZG9BY3RpdmU7CisgICAg
ICAgIHJldHVybiBmb3JjZWRQc2V1ZG9TdGF0ZSAmIFBzZXVkb0FjdGl2ZTsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAgcmV0dXJuIG1fbGFzdFBzZXVkb1N0YXRl
ICYgUHNldWRvRm9jdXM7CisgICAgICAgIHJldHVybiBmb3JjZWRQc2V1ZG9TdGF0ZSAmIFBzZXVk
b0ZvY3VzOwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgotICAgICAgICByZXR1
cm4gbV9sYXN0UHNldWRvU3RhdGUgJiBQc2V1ZG9Ib3ZlcjsKKyAgICAgICAgcmV0dXJuIGZvcmNl
ZFBzZXVkb1N0YXRlICYgUHNldWRvSG92ZXI7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
VmlzaXRlZDoKLSAgICAgICAgcmV0dXJuIG1fbGFzdFBzZXVkb1N0YXRlICYgUHNldWRvVmlzaXRl
ZDsKKyAgICAgICAgcmV0dXJuIGZvcmNlZFBzZXVkb1N0YXRlICYgUHNldWRvVmlzaXRlZDsKICAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTUzLDEyICs1NjIs
MjIgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFbGVtZW50KiBl
bGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVHkKIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIEluc3Bl
Y3RvckFycmF5KiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQogewotICAgIHVuc2lnbmVkIGZvcmNlUHNl
dWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwot
ICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZWxlbWVudCAhPSBtX2xhc3RFbGVtZW50V2l0aFBz
ZXVkb1N0YXRlIHx8IGZvcmNlUHNldWRvU3RhdGUgIT0gbV9sYXN0UHNldWRvU3RhdGU7Ci0gICAg
bV9sYXN0UHNldWRvU3RhdGUgPSBmb3JjZVBzZXVkb1N0YXRlOwotICAgIG1fbGFzdEVsZW1lbnRX
aXRoUHNldWRvU3RhdGUgPSBlbGVtZW50OwotICAgIGlmIChuZWVkU3R5bGVSZWNhbGMpCi0gICAg
ICAgIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxj
U3R5bGVJbW1lZGlhdGVseSk7CisgICAgaW50IG5vZGVJZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQp
OworICAgIGlmICghbm9kZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBmb3Jj
ZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soZm9yY2VkUHNldWRvQ2xhc3Nl
cyk7CisgICAgTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTo6aXRlcmF0b3IgaXQgPSBtX25vZGVJ
ZFRvRm9yY2VkUHNldWRvU3RhdGUuZmluZChub2RlSWQpOworICAgIHVuc2lnbmVkIGN1cnJlbnRG
b3JjZWRQc2V1ZG9TdGF0ZSA9IGl0ID09IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5lbmQo
KSA/IDAgOiBpdC0+c2Vjb25kOworICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZm9yY2VkUHNl
dWRvU3RhdGUgIT0gY3VycmVudEZvcmNlZFBzZXVkb1N0YXRlOworICAgIGlmICghbmVlZFN0eWxl
UmVjYWxjKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZm9yY2VkUHNldWRvU3RhdGUpCisg
ICAgICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5zZXQobm9kZUlkLCBmb3JjZWRQc2V1
ZG9TdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUu
cmVtb3ZlKG5vZGVJZCk7CisgICAgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVJlc29s
dmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9D
bGFzc2VzLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBib29sKiBpbmNsdWRlSW5o
ZXJpdGVkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1
bGU+ID4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPiA+JiBwc2V1ZG9JZFJ1bGVzLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+ID4mIGlu
aGVyaXRlZEVudHJpZXMpCkBAIC05ODUsNyArMTAwNCw2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBpZiAoZG9j
dW1lbnQpCiAgICAgICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQucmVtb3ZlKGRv
Y3VtZW50KTsKLSAgICBjbGVhclBzZXVkb1N0YXRlKGZhbHNlKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQpAQCAtOTkzLDggKzEwMTEs
OSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUp
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9sYXN0RWxlbWVu
dFdpdGhQc2V1ZG9TdGF0ZS5nZXQoKSA9PSBub2RlKQotICAgICAgICBjbGVhclBzZXVkb1N0YXRl
KGZhbHNlKTsKKyAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQobm9kZSk7CisgICAgaWYgKG5v
ZGVJZCkKKyAgICAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQp
OwogCiAgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQgPSBtX25vZGVU
b0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChub2RlKTsKICAgICBpZiAoaXQgPT0gbV9ub2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKQpAQCAtMTAyMiwxNiArMTA0MSwxOCBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KQogICAgICAgICBtX2Zyb250ZW5kLT5zdHlsZVNoZWV0Q2hhbmdlZChzdHlsZVNo
ZWV0LT5pZCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJQc2V1ZG9TdGF0
ZShib29sIHJlY2FsY1N0eWxlcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHNldWRv
U3RhdGVzKCkKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG1fbGFzdEVsZW1lbnRX
aXRoUHNldWRvU3RhdGU7Ci0gICAgbV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZSA9IDA7Ci0g
ICAgbV9sYXN0UHNldWRvU3RhdGUgPSAwOwotICAgIGlmIChyZWNhbGNTdHlsZXMgJiYgZWxlbWVu
dCkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5vd25lckRvY3VtZW50
KCk7Ci0gICAgICAgIGlmIChkb2N1bWVudCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdHlsZVJl
c29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAgICBIYXNoU2V0PERvY3Vt
ZW50Kj4gZG9jdW1lbnRzVG9DaGFuZ2U7CisgICAgZm9yIChOb2RlSWRUb0ZvcmNlZFBzZXVkb1N0
YXRlOjppdGVyYXRvciBpdCA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5iZWdpbigpLCBl
bmQgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fZG9t
QWdlbnQtPm5vZGVGb3JJZChpdC0+Zmlyc3QpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxl
bWVudC0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnRzVG9DaGFuZ2UuYWRk
KGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSk7CiAgICAgfQorCisgICAgbV9ub2RlSWRUb0ZvcmNl
ZFBzZXVkb1N0YXRlLmNsZWFyKCk7CisgICAgZm9yIChIYXNoU2V0PERvY3VtZW50Kj46Oml0ZXJh
dG9yIGl0ID0gZG9jdW1lbnRzVG9DaGFuZ2UuYmVnaW4oKSwgZW5kID0gZG9jdW1lbnRzVG9DaGFu
Z2UuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnN0eWxlUmVzb2x2ZXJD
aGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4
IGQ2MzkwZjdiZDViZWY0ZDFmY2U2OTVmOGZhZWY0ZGVlODEyZWM3NmIuLjEzMDE0M2FiYTY3ZGI1
Y2ZjNmU5ZTFjOWI4OTA0NmMwY2JiYTNmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0xMzQsMTIgKzEzNCwxNCBAQCBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhh
c2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4g
Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGVs
ZW1lbnRzJyBpbmxpbmUgc3R5bGVzCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVu
dD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JT
dHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKyAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCB1bnNpZ25lZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKIAogICAgIHZv
aWQgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqLCBJbnNwZWN0b3JB
cnJheSogZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCk7CiAgICAg
RWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCk7CiAgICAgdm9p
ZCBjb2xsZWN0U3R5bGVTaGVldHMoQ1NTU3R5bGVTaGVldCosIFR5cGVCdWlsZGVyOjpBcnJheTxX
ZWJDb3JlOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiopOwogCisgICAg
aW50IGJvdW5kTm9kZUlkKE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1fZG9tQWdlbnQtPmJvdW5kTm9k
ZUlkKG5vZGUpOyB9CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NT
U3R5bGVTaGVldCopOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHZpYUluc3BlY3RvclN0eWxl
U2hlZXQoRG9jdW1lbnQqLCBib29sIGNyZWF0ZUlmQWJzZW50KTsKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
KTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIC8vIEluc3BlY3RvckNTU0FnZW50
OjpMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVNoZWV0Q2hh
bmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAKLSAgICB2b2lkIGNsZWFyUHNldWRvU3RhdGUo
Ym9vbCByZWNhbGNTdHlsZXMpOworICAgIHZvaWQgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsKIAogICAg
IEluc3BlY3RvckZyb250ZW5kOjpDU1MqIG1fZnJvbnRlbmQ7CiAgICAgSW5zcGVjdG9yRE9NQWdl
bnQqIG1fZG9tQWdlbnQ7CkBAIC0xNjUsOSArMTY3LDcgQEAgcHJpdmF0ZToKICAgICBDU1NTdHls
ZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldDsKICAgICBEb2N1bWVudFRvVmlhSW5zcGVjdG9yU3R5bGVTaGVldCBtX2RvY3Vt
ZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGFzdEVs
ZW1lbnRXaXRoUHNldWRvU3RhdGU7Ci0gICAgdW5zaWduZWQgbV9sYXN0UHNldWRvU3RhdGU7Cisg
ICAgTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7
CiAKICAgICBpbnQgbV9sYXN0U3R5bGVTaGVldElkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA3MWRiMTdhYTRmMDEzOGYzOTZkNjk3
MzY0NmM4YTY2NjQzYjAwMmE5Li4xMjBjNjQ2MDYzN2NkODdmYjE0MWMyNTdjN2E2ZDM5YTZkOWUz
MjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKQEAgLTM1MCw2ICszNTAsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9k
ZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIH0KIAogICAgIG5vZGVzTWFwLT5y
ZW1vdmUobm9kZSk7CisgICAgaWYgKG1fZG9tTGlzdGVuZXIpCisgICAgICAgIG1fZG9tTGlzdGVu
ZXItPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisKICAgICBib29sIGNoaWxkcmVuUmVxdWVzdGVk
ID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhpZCk7CiAgICAgaWYgKGNoaWxkcmVuUmVx
dWVzdGVkKSB7CiAgICAgICAgIC8vIFVuYmluZCBzdWJ0cmVlIGtub3duIHRvIGNsaWVudCByZWN1
cnNpdmVseS4KQEAgLTE0NDMsOSArMTQ0Niw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRp
ZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIAogICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKIAotICAgIGlmIChtX2RvbUxpc3RlbmVyKQotICAg
ICAgICBtX2RvbUxpc3RlbmVyLT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwotCiAgICAgaWYgKCFt
X2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAgICAgICAvLyBObyBj
aGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFuZ2VzIG9mIGhhc0No
aWxkcmVuLgogICAgICAgICBpZiAoaW5uZXJDaGlsZE5vZGVDb3VudChwYXJlbnQpID09IDEpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFu
ZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwu
anMKaW5kZXggM2FkMjUzNGFhNDYyOGZkZDhhODJiZjRiYWNkYTZjYTk1ZmI2ZmRjNi4uM2ZlYWYz
NTRmYWZhYjc5MGYwMzk1ZGQ2M2U4MTQzYjAyZjFiNmY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtNTUsNyArNTUs
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMu
Y29udGVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250
ZXh0TWVudUV2ZW50RmlyZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKLSAgICB0aGlzLnRyZWVPdXRs
aW5lID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lKHRydWUsIHRydWUsIGZh
bHNlLCB0aGlzLl9wb3B1bGF0ZUNvbnRleHRNZW51LmJpbmQodGhpcykpOworICAgIHRoaXMudHJl
ZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUodHJ1ZSwgdHJ1
ZSwgZmFsc2UsIHRoaXMuX3BvcHVsYXRlQ29udGV4dE1lbnUuYmluZCh0aGlzKSwgdGhpcy5fc2V0
UHNldWRvQ2xhc3NGb3JOb2RlSWQuYmluZCh0aGlzKSk7CiAgICAgdGhpcy50cmVlT3V0bGluZS53
aXJlVG9Eb21BZ2VudCgpOwogCiAgICAgdGhpcy50cmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkV2ZW50cy5TZWxlY3RlZE5vZGVDaGFu
Z2VkLCB0aGlzLl9zZWxlY3RlZE5vZGVDaGFuZ2VkLCB0aGlzKTsKQEAgLTY3LDcgKzY3LDcgQEAg
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLnNpZGVi
YXJQYW5lcyA9IHt9OwogICAgIHRoaXMuc2lkZWJhclBhbmVzLmNvbXB1dGVkU3R5bGUgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVTaWRlYmFyUGFuZSgpOwotICAgIHRoaXMuc2lkZWJh
clBhbmVzLnN0eWxlcyA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUodGhpcy5z
aWRlYmFyUGFuZXMuY29tcHV0ZWRTdHlsZSk7CisgICAgdGhpcy5zaWRlYmFyUGFuZXMuc3R5bGVz
ID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZSh0aGlzLnNpZGViYXJQYW5lcy5j
b21wdXRlZFN0eWxlLCB0aGlzLl9zZXRQc2V1ZG9DbGFzc0Zvck5vZGVJZC5iaW5kKHRoaXMpKTsK
ICAgICB0aGlzLnNpZGViYXJQYW5lcy5tZXRyaWNzID0gbmV3IFdlYkluc3BlY3Rvci5NZXRyaWNz
U2lkZWJhclBhbmUoKTsKICAgICB0aGlzLnNpZGViYXJQYW5lcy5wcm9wZXJ0aWVzID0gbmV3IFdl
Ykluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUoKTsKICAgICB0aGlzLnNpZGViYXJQYW5l
cy5kb21CcmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50c1NpZGViYXJQYW5l
OwpAQCAtMTY2LDYgKzE2NiwzNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYlNpemVzKCk7CiAgICAgfSwKIAor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKKyAgICAgKiBA
cGFyYW0ge3N0cmluZ30gcHNldWRvQ2xhc3MKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJs
ZQorICAgICAqLworICAgIF9zZXRQc2V1ZG9DbGFzc0Zvck5vZGVJZDogZnVuY3Rpb24obm9kZUlk
LCBwc2V1ZG9DbGFzcywgZW5hYmxlKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7CisgICAgICAgIGlmICghbm9kZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgcHNldWRvQ2xhc3NlcyA9IG5vZGUuZ2V0
VXNlclByb3BlcnR5KCJwc2V1ZG9TdGF0ZSIpOworICAgICAgICBpZiAoZW5hYmxlKSB7CisgICAg
ICAgICAgICBwc2V1ZG9DbGFzc2VzID0gcHNldWRvQ2xhc3NlcyB8fCBbXTsKKyAgICAgICAgICAg
IGlmIChwc2V1ZG9DbGFzc2VzLmluZGV4T2YocHNldWRvQ2xhc3MpID49IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcHNldWRvQ2xhc3Nlcy5wdXNoKHBzZXVkb0NsYXNz
KTsKKyAgICAgICAgICAgIG5vZGUuc2V0VXNlclByb3BlcnR5KCJwc2V1ZG9TdGF0ZSIsIHBzZXVk
b0NsYXNzZXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFz
c2VzIHx8IHBzZXVkb0NsYXNzZXMuaW5kZXhPZihwc2V1ZG9DbGFzcykgPCAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHBzZXVkb0NsYXNzZXMucmVtb3ZlKHBzZXVkb0Ns
YXNzKTsKKyAgICAgICAgICAgIGlmICghcHNldWRvQ2xhc3Nlcy5sZW5ndGgpCisgICAgICAgICAg
ICAgICAgbm9kZS5yZW1vdmVVc2VyUHJvcGVydHkoInBzZXVkb1N0YXRlIik7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnVwZGF0ZU9wZW5DbG9zZVRhZ3Mobm9kZSk7Cisg
ICAgICAgIHRoaXMuX21ldHJpY3NQYW5lRWRpdGVkKCk7CisgICAgICAgIHRoaXMuX3N0eWxlc1Bh
bmVFZGl0ZWQoKTsKKyAgICB9LAorCiAgICAgX3NlbGVjdGVkTm9kZUNoYW5nZWQ6IGZ1bmN0aW9u
KCkKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkRE9NTm9k
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1RyZWVPdXRsaW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4IGY3OTQ5NWE1ZTI0NzE1OThmMDA3YTlhODc5MGJh
NTAyZjVmMTFiMTUuLjJiZWQ0MDQ0YjFkNzk3NDVhZmJkOGYwNzQyZjE0NjM2Mjk2MzA2ZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVl
T3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzVHJlZU91dGxpbmUuanMKQEAgLTM1LDggKzM1LDkgQEAKICAqIEBwYXJhbSB7Ym9vbGVhbj19
IHNlbGVjdEVuYWJsZWQKICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNob3dJbkVsZW1lbnRzUGFuZWxF
bmFibGVkCiAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5Db250ZXh0TWVudSwgV2Vi
SW5zcGVjdG9yLkRPTU5vZGUpPX0gY29udGV4dE1lbnVDYWxsYmFjaworICogQHBhcmFtIHtmdW5j
dGlvbihET01BZ2VudC5Ob2RlSWQsIHN0cmluZywgYm9vbGVhbik9fSBzZXRQc2V1ZG9DbGFzc0Nh
bGxiYWNrCiAgKi8KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lID0gZnVuY3Rpb24o
b21pdFJvb3RET01Ob2RlLCBzZWxlY3RFbmFibGVkLCBzaG93SW5FbGVtZW50c1BhbmVsRW5hYmxl
ZCwgY29udGV4dE1lbnVDYWxsYmFjaykKK1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
ID0gZnVuY3Rpb24ob21pdFJvb3RET01Ob2RlLCBzZWxlY3RFbmFibGVkLCBzaG93SW5FbGVtZW50
c1BhbmVsRW5hYmxlZCwgY29udGV4dE1lbnVDYWxsYmFjaywgc2V0UHNldWRvQ2xhc3NDYWxsYmFj
aykKIHsKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwog
ICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9vbm1v
dXNlZG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7CkBAIC02Miw2ICs2Myw4IEBAIFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVPdXRsaW5lID0gZnVuY3Rpb24ob21pdFJvb3RET01Ob2RlLCBzZWxlY3RF
bmFibGVkLCBzaG93CiAKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4
dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudUV2ZW50RmlyZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAg
ICAgdGhpcy5fY29udGV4dE1lbnVDYWxsYmFjayA9IGNvbnRleHRNZW51Q2FsbGJhY2s7CisgICAg
dGhpcy5fc2V0UHNldWRvQ2xhc3NDYWxsYmFjayA9IHNldFBzZXVkb0NsYXNzQ2FsbGJhY2s7Cisg
ICAgdGhpcy5fY3JlYXRlTm9kZURlY29yYXRvcnMoKTsKIH0KIAogV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUuRXZlbnRzID0gewpAQCAtNjksNiArNzIsMTIgQEAgV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZU91dGxpbmUuRXZlbnRzID0gewogfQogCiBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5wcm90b3R5cGUgPSB7CisgICAgX2NyZWF0ZU5vZGVEZWNvcmF0b3JzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9ub2RlRGVjb3JhdG9ycyA9IFtdOworICAg
ICAgICB0aGlzLl9ub2RlRGVjb3JhdG9ycy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvcigpKTsKKyAgICB9LAorCiAgICAgd2lyZVRv
RG9tQWdlbnQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2VsZW1lbnRzVHJlZVVw
ZGF0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZVVwZGF0ZXIodGhpcyk7CkBAIC0x
ODIsNiArMTkxLDE3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgZWxlbWVudC51cGRhdGVTZWxlY3Rpb24oKTsKICAgICB9LAogCisgICAg
dXBkYXRlT3BlbkNsb3NlVGFnczogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciB0
cmVlRWxlbWVudCA9IHRoaXMuZmluZFRyZWVFbGVtZW50KG5vZGUpOworICAgICAgICBpZiAodHJl
ZUVsZW1lbnQpCisgICAgICAgICAgICB0cmVlRWxlbWVudC51cGRhdGVUaXRsZSgpOworICAgICAg
ICB2YXIgY2hpbGRyZW4gPSB0cmVlRWxlbWVudC5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGNsb3Np
bmdUYWdFbGVtZW50ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07CisgICAgICAgIGlm
IChjbG9zaW5nVGFnRWxlbWVudCAmJiBjbG9zaW5nVGFnRWxlbWVudC5fZWxlbWVudENsb3NlVGFn
KQorICAgICAgICAgICAgY2xvc2luZ1RhZ0VsZW1lbnQudXBkYXRlVGl0bGUoKTsKKyAgICB9LAor
CiAgICAgX3NlbGVjdGVkTm9kZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRo
aXMuX2V2ZW50U3VwcG9ydC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZU91dGxpbmUuRXZlbnRzLlNlbGVjdGVkTm9kZUNoYW5nZWQsIHRoaXMuX3NlbGVj
dGVkRE9NTm9kZSk7CkBAIC01NTQsNiArNTc0LDY3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVPdXRsaW5lLnByb3RvdHlwZSA9IHsKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBUcmVlT3V0bGluZS5wcm90b3R5cGU7CiAKIC8qKgorICog
QGludGVyZmFjZQorICovCitXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5FbGVtZW50
RGVjb3JhdG9yID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVl
T3V0bGluZS5FbGVtZW50RGVjb3JhdG9yLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5ET01Ob2RlfSBub2RlCisgICAgICovCisgICAgZGVjb3JhdGU6
IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5ET01Ob2RlfSBub2RlCisgICAgICovCisgICAgZGVjb3JhdGVBbmNlc3Rv
cjogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3Rv
cgorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLkVsZW1l
bnREZWNvcmF0b3J9CisgKi8KK1dlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLlBzZXVk
b1N0YXRlRGVjb3JhdG9yID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5FbGVtZW50
c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNvcmF0b3IuY2FsbCh0aGlzKTsKK30KKworV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuUHNldWRvU3RhdGVEZWNvcmF0b3IuUHJvcGVydHlOYW1l
ID0gInBzZXVkb1N0YXRlIjsKKworV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUuUHNl
dWRvU3RhdGVEZWNvcmF0b3IucHJvdG90eXBlID0geworICAgIGRlY29yYXRlOiBmdW5jdGlvbihu
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUoKSAhPT0gTm9kZS5FTEVNRU5U
X05PREUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgdmFyIHByb3BlcnR5VmFs
dWUgPSBub2RlLmdldFVzZXJQcm9wZXJ0eShXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGlu
ZS5Qc2V1ZG9TdGF0ZURlY29yYXRvci5Qcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIXByb3Bl
cnR5VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRWxlbWVudCBwc2V1ZG8gc3RhdGU6ICVzIiwgIjoiICsgcHJvcGVy
dHlWYWx1ZS5qb2luKCIsIDoiKSk7CisgICAgfSwKKworICAgIGRlY29yYXRlQW5jZXN0b3I6IGZ1
bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSgpICE9PSBOb2Rl
LkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBk
ZXNjZW5kYW50Q291bnQgPSBub2RlLmRlc2NlbmRhbnRVc2VyUHJvcGVydHlDb3VudChXZWJJbnNw
ZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5Qc2V1ZG9TdGF0ZURlY29yYXRvci5Qcm9wZXJ0eU5h
bWUpOworICAgICAgICBpZiAoIWRlc2NlbmRhbnRDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICBpZiAoZGVzY2VuZGFudENvdW50ID09PSAxKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgZGVzY2VuZGFudCB3aXRoIGZvcmNlZCBwc2V1
ZG8gc3RhdGUiLCBkZXNjZW5kYW50Q291bnQpOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlZCBkZXNjZW5kYW50cyB3aXRoIGZvcmNlZCBwc2V1ZG8gc3RhdGUiLCBkZXNj
ZW5kYW50Q291bnQpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxp
bmUuUHNldWRvU3RhdGVEZWNvcmF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVPdXRsaW5lLkVsZW1lbnREZWNvcmF0b3IucHJvdG90eXBlOworCisvKioK
ICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1RyZWVFbGVtZW50fQogICogQHBhcmFtIHti
b29sZWFuPX0gZWxlbWVudENsb3NlVGFnCkBAIC0xMDY0LDExICsxMTQ1LDI4IEBAIFdlYkluc3Bl
Y3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZSAmJiAhbmV3QXR0cmlidXRlKQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRs
ZXMoKSA/ICJFZGl0IGF0dHJpYnV0ZSIgOiAiRWRpdCBBdHRyaWJ1dGUiKSwgdGhpcy5fc3RhcnRF
ZGl0aW5nQXR0cmlidXRlLmJpbmQodGhpcywgYXR0cmlidXRlLCBldmVudC50YXJnZXQpKTsKICAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGlmICh0aGlzLnRy
ZWVPdXRsaW5lLl9zZXRQc2V1ZG9DbGFzc0NhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgcHNl
dWRvU3ViTWVudSA9IGNvbnRleHRNZW51LmFwcGVuZFN1Yk1lbnVJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkZvcmNlIHBz
ZXVkbyBzdGF0ZSIgOiAiRm9yY2UgUHNldWRvIFN0YXRlIikpOworICAgICAgICAgICAgdGhpcy5f
cG9wdWxhdGVGb3JjZWRQc2V1ZG9TdGF0ZUl0ZW1zKHBzZXVkb1N1Yk1lbnUpOworICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIH0KIAogICAgICAgICB0
aGlzLl9wb3B1bGF0ZU5vZGVDb250ZXh0TWVudShjb250ZXh0TWVudSk7CiAgICAgICAgIHRoaXMu
dHJlZU91dGxpbmUuX3BvcHVsYXRlQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRoaXMucmVwcmVz
ZW50ZWRPYmplY3QpOwogICAgIH0sCiAKKyAgICBfcG9wdWxhdGVGb3JjZWRQc2V1ZG9TdGF0ZUl0
ZW1zOiBmdW5jdGlvbihzdWJNZW51KQorICAgIHsKKyAgICAgICAgY29uc3QgcHNldWRvQ2xhc3Nl
cyA9IFsiYWN0aXZlIiwgImhvdmVyIiwgImZvY3VzIiwgInZpc2l0ZWQiXTsKKyAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OworICAgICAgICB2YXIgZm9yY2VkUHNldWRv
U3RhdGUgPSAobm9kZSA/IG5vZGUuZ2V0VXNlclByb3BlcnR5KCJwc2V1ZG9TdGF0ZSIpIDogbnVs
bCkgfHwgW107CisgICAgICAgIHZhciBlbGVtZW50c1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVs
cy5lbGVtZW50czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwc2V1ZG9DbGFzc2VzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcHNldWRvQ2xhc3NGb3JjZWQgPSBmb3JjZWRQ
c2V1ZG9TdGF0ZS5pbmRleE9mKHBzZXVkb0NsYXNzZXNbaV0pID49IDA7CisgICAgICAgICAgICBz
dWJNZW51LmFwcGVuZENoZWNrYm94SXRlbSgiOiIgKyBwc2V1ZG9DbGFzc2VzW2ldLCB0aGlzLnRy
ZWVPdXRsaW5lLl9zZXRQc2V1ZG9DbGFzc0NhbGxiYWNrLmJpbmQobnVsbCwgbm9kZS5pZCwgcHNl
dWRvQ2xhc3Nlc1tpXSwgIXBzZXVkb0NsYXNzRm9yY2VkKSwgcHNldWRvQ2xhc3NGb3JjZWQsIGZh
bHNlKTsKKyAgICAgICAgfQorICAgIH0sCisKICAgICBfcG9wdWxhdGVUZXh0Q29udGV4dE1lbnU6
IGZ1bmN0aW9uKGNvbnRleHRNZW51LCB0ZXh0Tm9kZSkKICAgICB7CiAgICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dl
ckNhc2VNZW51VGl0bGVzKCkgPyAiRWRpdCB0ZXh0IiA6ICJFZGl0IFRleHQiKSwgdGhpcy5fc3Rh
cnRFZGl0aW5nVGV4dE5vZGUuYmluZCh0aGlzLCB0ZXh0Tm9kZSkpOwpAQCAtMTQ2OSw2ICsxNTY3
LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgaGlnaGxpZ2h0RWxlbWVudC5jbGFzc05hbWUgPSAiaGlnaGxpZ2h0IjsKICAgICAg
ICAgICAgIGhpZ2hsaWdodEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbm9kZVRpdGxlSW5mbyhX
ZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9kZSkudGl0bGVET00pOwogICAgICAgICAgICAgdGhp
cy50aXRsZSA9IGhpZ2hsaWdodEVsZW1lbnQ7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVEZWNv
cmF0aW9ucygpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodFJlc3VsdDsKICAg
ICAgICAgfQogCkBAIC0xNDc5LDYgKzE1NzgsNDYgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9oaWdobGlnaHRTZWFyY2hSZXN1
bHRzKCk7CiAgICAgfSwKIAorICAgIF9jcmVhdGVEZWNvcmF0b3JFbGVtZW50OiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgbm9kZSA9IHRoaXMucmVwcmVzZW50ZWRPYmplY3Q7CisgICAg
ICAgIHZhciBkZWNvcmF0b3JNZXNzYWdlcyA9IFtdOworICAgICAgICB2YXIgcGFyZW50RGVjb3Jh
dG9yTWVzc2FnZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyZWVP
dXRsaW5lLl9ub2RlRGVjb3JhdG9ycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGRl
Y29yYXRvciA9IHRoaXMudHJlZU91dGxpbmUuX25vZGVEZWNvcmF0b3JzW2ldOworICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBkZWNvcmF0b3IuZGVjb3JhdGUobm9kZSk7CisgICAgICAgICAgICBp
ZiAobWVzc2FnZSkgeworICAgICAgICAgICAgICAgIGRlY29yYXRvck1lc3NhZ2VzLnB1c2gobWVz
c2FnZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0aGlzLmV4cGFuZGVkIHx8IHRoaXMuX2VsZW1lbnRDbG9zZVRhZykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbWVzc2FnZSA9IGRlY29yYXRvci5k
ZWNvcmF0ZUFuY2VzdG9yKG5vZGUpOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAg
ICAgICAgICAgcGFyZW50RGVjb3JhdG9yTWVzc2FnZXMucHVzaChtZXNzYWdlKQorICAgICAgICB9
CisgICAgICAgIGlmICghZGVjb3JhdG9yTWVzc2FnZXMubGVuZ3RoICYmICFwYXJlbnREZWNvcmF0
b3JNZXNzYWdlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2
YXIgZGVjb3JhdG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
ICAgICBkZWNvcmF0b3JFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImVsZW1lbnRzLWd1dHRlci1kZWNv
cmF0aW9uIik7CisgICAgICAgIGlmICghZGVjb3JhdG9yTWVzc2FnZXMubGVuZ3RoKQorICAgICAg
ICAgICAgZGVjb3JhdG9yRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlbGVtZW50cy1oYXMtZGVjb3Jh
dGVkLWNoaWxkcmVuIik7CisgICAgICAgIGRlY29yYXRvckVsZW1lbnQudGl0bGUgPSBkZWNvcmF0
b3JNZXNzYWdlcy5jb25jYXQocGFyZW50RGVjb3JhdG9yTWVzc2FnZXMpLmpvaW4oIlxuIik7Cisg
ICAgICAgIHJldHVybiBkZWNvcmF0b3JFbGVtZW50OworICAgIH0sCisKKyAgICBfdXBkYXRlRGVj
b3JhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kZWNvcmF0b3JF
bGVtZW50ICYmIHRoaXMuX2RlY29yYXRvckVsZW1lbnQucGFyZW50RWxlbWVudCkKKyAgICAgICAg
ICAgIHRoaXMuX2RlY29yYXRvckVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlz
Ll9kZWNvcmF0b3JFbGVtZW50KTsKKyAgICAgICAgdGhpcy5fZGVjb3JhdG9yRWxlbWVudCA9IHRo
aXMuX2NyZWF0ZURlY29yYXRvckVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHRoaXMuX2RlY29yYXRv
ckVsZW1lbnQgJiYgdGhpcy5saXN0SXRlbUVsZW1lbnQpCisgICAgICAgICAgICB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fZGVjb3JhdG9yRWxlbWVudCwgdGhpcy5saXN0
SXRlbUVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkRPTU5vZGU9fSBub2RlCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihz
dHJpbmcsIHN0cmluZywgc3RyaW5nLCBib29sZWFuPSwgc3RyaW5nPSk9fSBsaW5raWZ5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQ
YW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFy
UGFuZS5qcwppbmRleCBlZjA5MWNkYWM2MzU2ZTE1MjdjZjVlMmM1MDdmM2U5NDg1NGJhYjk3Li5h
MDUxODJlOTQ1ZGI2YjY4YTY2NjU5ZGI0NTk1OGQ3YWIxMTVmMmM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMK
QEAgLTMwLDggKzMwLDEwIEBACiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5TaWRlYmFyUGFuZX0KKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbXB1dGVk
U3R5bGVTaWRlYmFyUGFuZX0gY29tcHV0ZWRTdHlsZVBhbmUKKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
RE9NQWdlbnQuTm9kZUlkLCBzdHJpbmcsIGJvb2xlYW4pfSBzZXRQc2V1ZG9DbGFzc0NhbGxiYWNr
CiAgKi8KLVdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKGNvbXB1dGVk
U3R5bGVQYW5lKQorV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lID0gZnVuY3Rpb24oY29t
cHV0ZWRTdHlsZVBhbmUsIHNldFBzZXVkb0NsYXNzQ2FsbGJhY2spCiB7CiAgICAgV2ViSW5zcGVj
dG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdHlsZXMi
KSk7CiAKQEAgLTgyLDYgKzg0LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lID0g
ZnVuY3Rpb24oY29tcHV0ZWRTdHlsZVBhbmUpCiAKICAgICB0aGlzLl9jb21wdXRlZFN0eWxlUGFu
ZSA9IGNvbXB1dGVkU3R5bGVQYW5lOwogICAgIGNvbXB1dGVkU3R5bGVQYW5lLl9zdHlsZXNTaWRl
YmFyUGFuZSA9IHRoaXM7CisgICAgdGhpcy5fc2V0UHNldWRvQ2xhc3NDYWxsYmFjayA9IHNldFBz
ZXVkb0NsYXNzQ2FsbGJhY2s7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNv
bnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcyksIHRydWUp
OwogICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jb2xvckZvcm1hdC5hZGRDaGFuZ2VMaXN0ZW5l
cih0aGlzLl9jb2xvckZvcm1hdFNldHRpbmdDaGFuZ2VkLmJpbmQodGhpcykpOwogCkBAIC0yMTEs
NyArMjE0LDIxIEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7
CiAKICAgICBnZXQgZm9yY2VkUHNldWRvQ2xhc3NlcygpCiAgICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fZm9yY2VkUHNldWRvQ2xhc3NlczsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZSA/ICh0
aGlzLm5vZGUuZ2V0VXNlclByb3BlcnR5KCJwc2V1ZG9TdGF0ZSIpIHx8IHVuZGVmaW5lZCkgOiB1
bmRlZmluZWQ7CisgICAgfSwKKworICAgIF91cGRhdGVGb3JjZWRQc2V1ZG9TdGF0ZUlucHV0czog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLm5vZGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIG5vZGVQc2V1ZG9TdGF0ZSA9IHRoaXMuZm9yY2VkUHNldWRv
Q2xhc3NlczsKKyAgICAgICAgaWYgKCFub2RlUHNldWRvU3RhdGUpCisgICAgICAgICAgICBub2Rl
UHNldWRvU3RhdGUgPSBbXTsKKworICAgICAgICB2YXIgaW5wdXRzID0gdGhpcy5fZWxlbWVudFN0
YXRlUGFuZS5pbnB1dHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgaW5wdXRzW2ldLmNoZWNrZWQgPSBub2RlUHNldWRvU3RhdGUu
aW5kZXhPZihpbnB1dHNbaV0uc3RhdGUpID49IDA7CiAgICAgfSwKIAogICAgIHVwZGF0ZTogZnVu
Y3Rpb24obm9kZSwgZm9yY2VVcGRhdGUpCkBAIC0yMzgsNiArMjU1LDggQEAgV2ViSW5zcGVjdG9y
LlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbm9kZSA9IHRoaXMubm9kZTsKIAorICAgICAgICB0aGlzLl91cGRhdGVGb3JjZWRQc2V1ZG9T
dGF0ZUlucHV0cygpOworCiAgICAgICAgIGlmIChyZWZyZXNoKQogICAgICAgICAgICAgdGhpcy5f
cmVmcmVzaFVwZGF0ZSgpOwogICAgICAgICBlbHNlCkBAIC0yNzksNyArMjk4LDcgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhp
cy5fY29tcHV0ZWRTdHlsZVBhbmUuZXhwYW5kZWQgfHwgZm9yY2VGZXRjaENvbXB1dGVkU3R5bGUp
IHsKICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hVcGRhdGVJblByb2dyZXNzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9k
ZS5pZCwgdGhpcy5fZm9yY2VkUHNldWRvQ2xhc3NlcywgY29tcHV0ZWRTdHlsZUNhbGxiYWNrLmJp
bmQodGhpcykpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVk
U3R5bGVBc3luYyhub2RlLmlkLCB0aGlzLmZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbXB1dGVkU3R5
bGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRo
aXMuX2lubmVyUmVmcmVzaFVwZGF0ZShub2RlLCBudWxsLCBlZGl0ZWRTZWN0aW9uKTsKICAgICAg
ICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCkBAIC0zMzcsMTEgKzM1NiwxNCBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHRoaXMuX2NvbXB1dGVkU3R5bGVQYW5lLmV4cGFuZGVkKQotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCB0aGlzLl9mb3Jj
ZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZENhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCB0
aGlzLmZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbXB1dGVkQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAg
ICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRJbmxpbmVTdHlsZXNBc3luYyhub2RlLmlk
LCBpbmxpbmVDYWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLmdldE1hdGNoZWRTdHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFz
c2VzLCB0cnVlLCB0cnVlLCBzdHlsZXNDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLmdldE1hdGNoZWRTdHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLmZv
cmNlZFBzZXVkb0NsYXNzZXMsIHRydWUsIHRydWUsIHN0eWxlc0NhbGxiYWNrLmJpbmQodGhpcykp
OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk9fSB1c2VyQ2Fs
bGJhY2sKKyAgICAgKi8KICAgICBfdmFsaWRhdGVOb2RlOiBmdW5jdGlvbih1c2VyQ2FsbGJhY2sp
CiAgICAgewogICAgICAgICBpZiAoIXRoaXMubm9kZSkgewpAQCAtODEzLDEzICs4MzUsNiBAQCBX
ZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgdGhpcy5fZWxlbWVudFN0YXRlQnV0dG9uLnJlbW92ZVN0eWxlQ2xh
c3MoInRvZ2dsZWQiKTsKICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTdGF0ZVBhbmUucmVtb3Zl
U3R5bGVDbGFzcygiZXhwYW5kZWQiKTsKLSAgICAgICAgICAgIC8vIENsZWFyIGZsYWdzIG9uIGhp
ZGUuCi0gICAgICAgICAgICBpZiAodGhpcy5fZm9yY2VkUHNldWRvQ2xhc3NlcykgewotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZWxlbWVudFN0YXRlUGFuZS5pbnB1
dHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTdGF0ZVBh
bmUuaW5wdXRzW2ldLmNoZWNrZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fZm9yY2VkUHNldWRvQ2xhc3NlczsKLSAgICAgICAgICAgICAgICB0aGlzLl9yZWJ1aWxkVXBk
YXRlKCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogCkBAIC04MzQsMTMgKzg0
OSwxMCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAg
ICAgICAgIGZ1bmN0aW9uIGNsaWNrTGlzdGVuZXIoZXZlbnQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHZhciBwc2V1ZG9DbGFzc2VzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGlucHV0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpbnB1dHNbaV0u
Y2hlY2tlZCkKLSAgICAgICAgICAgICAgICAgICAgcHNldWRvQ2xhc3Nlcy5wdXNoKGlucHV0c1tp
XS5zdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9mb3JjZWRQc2V1ZG9D
bGFzc2VzID0gcHNldWRvQ2xhc3Nlcy5sZW5ndGggPyBwc2V1ZG9DbGFzc2VzIDogdW5kZWZpbmVk
OwotICAgICAgICAgICAgdGhpcy5fcmVidWlsZFVwZGF0ZSgpOworICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLl92YWxpZGF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0aGlzLl9zZXRQc2V1ZG9DbGFzc0NhbGxi
YWNrKG5vZGUuaWQsIGV2ZW50LnRhcmdldC5zdGF0ZSwgZXZlbnQudGFyZ2V0LmNoZWNrZWQpOwog
ICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gY3JlYXRlQ2hlY2tib3goc3RhdGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwu
Y3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNz
cwppbmRleCA2Yjc0NTViNzM1OGNjNWVlMTkyM2NjOTgxZWFmNTkzOWQzMzkxNDZiLi44YzliYzNj
NTg0YzUwOTY0NjgyMjIzM2UwOTA0NDgwNzMwMDAwOTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MKQEAgLTM5LDYgKzM5
LDIxIEBACiAgICAgbWFyZ2luLWxlZnQ6IDhweDsKIH0KIAorI2VsZW1lbnRzLWNvbnRlbnQgLmVs
ZW1lbnRzLWd1dHRlci1kZWNvcmF0aW9uIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
bGVmdDogMXB4OworICAgIG1hcmdpbi10b3A6IDJweDsKKyAgICBoZWlnaHQ6IDhweDsKKyAgICB3
aWR0aDogOHB4OworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICBib3JkZXI6IDFweCBzb2xp
ZCBvcmFuZ2U7CisgICAgYmFja2dyb3VuZC1jb2xvcjogb3JhbmdlOworfQorCisjZWxlbWVudHMt
Y29udGVudCAuZWxlbWVudHMtZ3V0dGVyLWRlY29yYXRpb24uZWxlbWVudHMtaGFzLWRlY29yYXRl
ZC1jaGlsZHJlbiB7CisgICAgb3BhY2l0eTogMC41OworfQorCiAuZWxlbWVudHMtdHJlZS1lZGl0
b3IgewogICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CiAgICAgLXdlYmtpdC11c2VyLW1v
ZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsK
</data>
<flag name="review"
          id="159078"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>