<?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>40781</bug_id>
          
          <creation_ts>2010-06-17 08:54:48 -0700</creation_ts>
          <short_desc>Web Inspector: show actual breakpoint position in UI.</short_desc>
          <delta_ts>2010-06-29 10:34:45 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239410</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-17 08:54:48 -0700</bug_when>
    <thetext>We should use actual breakpoint position provided by debugger when displaying breakpoint in UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239413</commentid>
    <comment_count>1</comment_count>
      <attachid>59000</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-17 09:17:06 -0700</bug_when>
    <thetext>Created attachment 59000
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239415</commentid>
    <comment_count>2</comment_count>
      <attachid>59002</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-17 09:21:24 -0700</bug_when>
    <thetext>Created attachment 59002
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239548</commentid>
    <comment_count>3</comment_count>
      <attachid>59002</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-17 13:15:27 -0700</bug_when>
    <thetext>Comment on attachment 59002
Proposed patch.

WebCore/ChangeLog:5
 +          Web Inspector: show actual breakpoint position in UI.
Could you please provide more details on the scenario in the ChangeLog?

WebCore/ChangeLog:9
 +          No new tests. (OOPS!)
Remove this line (or add tests!)

WebCore/bindings/js/ScriptDebugServer.cpp:141
 +  bool ScriptDebugServer::setBreakpoint(const String&amp; sourceID, ScriptBreakpoint breakpoint, int* lineNumber)
I don&apos;t like the fact that lineNumber is [inout] here. We should only use input or output parameters. I would return int instead of bool with actual line. -1 could indicate unsuccessful attempt. r- is for this.

WebCore/inspector/front-end/BreakpointManager.js:99
 +      _saveBreakpointOnBackend: function(breakpoint, callback)
Every time I look at the method name, I find it confusing. Lets rename to _setBreakpointOnBackend ?

WebCore/inspector/front-end/BreakpointManager.js:110
 +      _didSetBreakpoint: function(breakpoint, success, line)
I think this needs to be a local function in _saveBreakpointOnBackend defined as

function didSetBreakpoint()
{
...
}

I see that you don&apos;t want to call it for the one-timers, but it makes the overall logic more confusing. In fact, I would probably use same code for one-time-breakpoints and make them show up in the UI (probably using a bit different rendering).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243033</commentid>
    <comment_count>4</comment_count>
      <attachid>59770</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-25 08:53:39 -0700</bug_when>
    <thetext>Created attachment 59770
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243360</commentid>
    <comment_count>5</comment_count>
      <attachid>59770</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-26 04:25:22 -0700</bug_when>
    <thetext>Comment on attachment 59770
Proposed patch.

WebCore/bindings/js/ScriptDebugServer.cpp:140
 +  bool ScriptDebugServer::setBreakpoint(const String&amp; sourceID, ScriptBreakpoint breakpoint, int lineNumber, int* actualLineNumber)
Given that you still prefer returning bool, you don&apos;t need to encode -1, so you should use unsigned values for line numbers.

WebCore/inspector/InspectorController.h:387
 +      HashMap&lt;String, int&gt; m_breakpointsMapping;
So why do you need this mapping after all? Why does sourceID:line not identify breakpoint properly?

Btw, if you really need unique breakpoint ids, now that setBreakpoint has a callback, you could assign them on backend (using progress counter) and send them back to the backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243697</commentid>
    <comment_count>6</comment_count>
      <attachid>59898</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-28 08:04:07 -0700</bug_when>
    <thetext>Created attachment 59898
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243703</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-28 08:11:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 59770 [details])
&gt; WebCore/bindings/js/ScriptDebugServer.cpp:140
&gt;  +  bool ScriptDebugServer::setBreakpoint(const String&amp; sourceID, ScriptBreakpoint breakpoint, int lineNumber, int* actualLineNumber)
&gt; Given that you still prefer returning bool, you don&apos;t need to encode -1, so you should use unsigned values for line numbers.

Done.

&gt; WebCore/inspector/InspectorController.h:387
&gt;  +      HashMap&lt;String, int&gt; m_breakpointsMapping;
&gt; So why do you need this mapping after all? Why does sourceID:line not identify breakpoint properly?

This mapping is needed to preserve existing behavior. If breakpoint was restored to several scripts in didParseSource, and user removes that breakpoint from one of the scripts, we want it to be removed from settings. And since line numbers do not necessarily match now, we need such a mapping.

&gt; 
&gt; Btw, if you really need unique breakpoint ids, now that setBreakpoint has a callback, you could assign them on backend (using progress counter) and send them back to the backend.

Let me introduce it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243716</commentid>
    <comment_count>8</comment_count>
      <attachid>59898</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-28 08:48:01 -0700</bug_when>
    <thetext>Comment on attachment 59898
Proposed patch.

WebCore/inspector/InspectorController.cpp:1752
 +      String breakpointId = String::format(&quot;%s:%d&quot;, sourceID.utf8().data(), actualLineNumber);
Extract this code in a function please.

WebCore/inspector/InspectorController.cpp:1780
 +      it-&gt;second.remove(stickyLine);
You may want to remove &quot;it&quot; from the map if it-&gt;second becomes empty.

WebCore/inspector/InspectorController.h:387
 +      HashMap&lt;String, int&gt; m_breakpointsMapping;
Shouldn&apos;t the value type be unsigned here?

WebCore/inspector/front-end/BreakpointManager.js:122
 +          var that = this;
Use .bind(this) instead, for consistency with the rest code.

WebCore/inspector/InspectorController.cpp:1772
 +      int stickyLine = m_breakpointsMapping.take(breakpointId);
This mapping is a bit confusing. One breakpoint may result is several breakpoints with same URL and different line numbers and deleting any of them will clear the original setting while leaving intact all other breakpoints restored from that setting in other scripts. Probably we should delete all the breakpoints in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243733</commentid>
    <comment_count>9</comment_count>
      <attachid>59903</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-28 09:26:20 -0700</bug_when>
    <thetext>Created attachment 59903
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243745</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-28 10:08:27 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 59898 [details])
&gt; WebCore/inspector/InspectorController.cpp:1752
&gt;  +      String breakpointId = String::format(&quot;%s:%d&quot;, sourceID.utf8().data(), actualLineNumber);
&gt; Extract this code in a function please.
Done.

&gt; 
&gt; WebCore/inspector/InspectorController.cpp:1780
&gt;  +      it-&gt;second.remove(stickyLine);
&gt; You may want to remove &quot;it&quot; from the map if it-&gt;second becomes empty.
Empty SourceBreakpoints are skipped by saveBreakpoints method.

&gt; 
&gt; WebCore/inspector/InspectorController.h:387
&gt;  +      HashMap&lt;String, int&gt; m_breakpointsMapping;
&gt; Shouldn&apos;t the value type be unsigned here?
Done.

&gt; 
&gt; WebCore/inspector/front-end/BreakpointManager.js:122
&gt;  +          var that = this;
&gt; Use .bind(this) instead, for consistency with the rest code.
Done.

&gt; 
&gt; WebCore/inspector/InspectorController.cpp:1772
&gt;  +      int stickyLine = m_breakpointsMapping.take(breakpointId);
&gt; This mapping is a bit confusing. One breakpoint may result is several breakpoints with same URL and different line numbers and deleting any of them will clear the original setting while leaving intact all other breakpoints restored from that setting in other scripts. Probably we should delete all the breakpoints in that case?
This mapping is used to preserve current behavior. Probably we should change this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243746</commentid>
    <comment_count>11</comment_count>
      <attachid>59905</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-28 10:08:57 -0700</bug_when>
    <thetext>Created attachment 59905
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244143</commentid>
    <comment_count>12</comment_count>
      <attachid>59905</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-29 00:43:42 -0700</bug_when>
    <thetext>Comment on attachment 59905
Proposed patch.

Clearing flags on attachment: 59905

Committed r62095: &lt;http://trac.webkit.org/changeset/62095&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244144</commentid>
    <comment_count>13</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-29 00:43:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244148</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 01:00:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62095 might have broken Qt Windows 32-bit Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/62093
http://trac.webkit.org/changeset/62094
http://trac.webkit.org/changeset/62095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244174</commentid>
    <comment_count>15</comment_count>
      <attachid>59905</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-29 03:05:34 -0700</bug_when>
    <thetext>Comment on attachment 59905
Proposed patch.

WebCore/inspector/InspectorController.cpp:1758
 +      m_breakpointsMapping.set(breakpointId, actualLineNumber);
I still do not understand why you need this mapping. Again, name is confusing in either case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244367</commentid>
    <comment_count>16</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-29 10:34:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 59905 [details])
&gt; WebCore/inspector/InspectorController.cpp:1758
&gt;  +      m_breakpointsMapping.set(breakpointId, actualLineNumber);
&gt; I still do not understand why you need this mapping. Again, name is confusing in either case.

Please look at the patch for https://bugs.webkit.org/show_bug.cgi?id=40669.
This mapping is moved to front-end, and doesn&apos;t look so weird now (I hope).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59000</attachid>
            <date>2010-06-17 09:17:06 -0700</date>
            <delta_ts>2010-06-17 09:21:24 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>18320</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTM1YjU5MC4uMzRkOTYxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNi0xNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBVc2UgYWN0dWFsIGJyZWFrcG9pbnQgcG9zaXRp
b24gcHJvdmlkZWQgYnkgU2NyaXB0RGVidWdTZXJ2ZXIgd2hlbiBkaXNwbGF5aW5nIGJyZWFrcG9p
bnQgaW4gVUkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDc4MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQmFja2VuZDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkU2V0QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYWRkQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlLl9zYXZlQnJlYWtwb2ludE9uQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fZGlkU2V0
QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIu
cHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTE3ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGNocm9taXVtIHRl
c3RzIGZpeC4gQWRkZWQgSW5zcGVjdG9yQmFja2VuZCBkZWxlZ2F0ZXMgZm9yIG5ldyBpbnNwZWN0
b3IgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5k
ZXggZWIwOTIzYi4uNDNmNGYzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKQEAgLTEzOCwxOCArMTM4LDE5IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhh
c0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4gbV9wYWdl
TGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBi
cmVha3BvaW50LCBpbnQqIGxpbmVOdW1iZXIpCiB7CiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1
ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBCcmVha3BvaW50c01hcDo6aXRl
cmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0
ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9icmVha3BvaW50cy5zZXQo
c291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29u
ZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7CisgICAgaXQtPnNlY29uZC5zZXQoKmxpbmVO
dW1iZXIsIGJyZWFrcG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQogewogICAgIGludHB0cl90
IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0cigpOwogICAgIGlmICghc291cmNlSURW
YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCBhNDVmYWU0
Li5hZDcyOWYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC02
Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCk7
Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIGludCogbGluZU51bWJlcik7Cisg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5l
TnVtYmVyKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmNwcAppbmRleCBiOGU1ZWM0Li45MGE2NzZlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgYnJlYWtwb2ludHMg
c2V0IGJ5IHRoZSBhZ2VudC4KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRC
cmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwg
aW50KiBsaW5lTnVtYmVyKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKQEAgLTEzMiwxNiArMTMyLDE3IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5z
aWduZWQgbGluZU51bWJlCiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gYXJncyA9IHY4OjpP
YmplY3Q6Ok5ldygpOwogICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoInNjcmlwdElkIiks
IHY4U3RyaW5nKHNvdXJjZUlEKSk7Ci0gICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibGlu
ZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1iZXIpKTsKKyAgICBhcmdzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2VyOjpOZXcoKmxpbmVOdW1i
ZXIpKTsKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJp
bmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3
KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7Ci0gICAgdjg6OkRlYnVnOjpDYWxsKHNldEJy
ZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3Vs
dCA9IHY4OjpEZWJ1Zzo6Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAgIHJl
dHVybiB0cnVlOwogI2VuZGlmCiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7CiAjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJW
RVIpCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5oCmluZGV4IDk0MzljMTYuLjM4MjllMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmgKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogICAgIHZvaWQg
YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKICAgICB2b2lkIHJlbW92
ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKik7CiAKLSAgICB2b2lkIHNldEJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgU2Ny
aXB0QnJlYWtwb2ludCBicmVha3BvaW50KTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIGludCogbGluZU51bWJlcik7CisgICAgdm9pZCByZW1v
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKTsKICAg
ICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZh
dGVkKGJvb2wgYWN0aXZhdGVkKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cAppbmRleCAwNzE0MGM5Li5lYTIxMDhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNh
YmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBi
b29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9u
KQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwg
Y29uZGl0aW9uKTsKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRCcmVha3BvaW50
KGNhbGxJZCwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCmluZGV4IGEzOWJhNTAuLjk0NjMyMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmgKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlRGVidWdnZXIo
Ym9vbCBhbHdheXMpOwogICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKIAot
ICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2
b2lkIHNldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24p
OwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyKTsKICAgICB2b2lkIGFjdGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICB2
b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmlkbAppbmRleCA2ODIwMTcxLi4xMTFjMDg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmlkbApAQCAtNTIsNyArNTIsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZv
aWQgZW5hYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogICAgICAgICB2b2lkIGRpc2Fi
bGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CiAKLSAgICAgICAgdm9pZCBzZXRCcmVha3Bv
aW50KGluIERPTVN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBp
biBib29sZWFuIGVuYWJsZWQsIGluIERPTVN0cmluZyBjb25kaXRpb24pOworICAgICAgICB2b2lk
IHNldEJyZWFrcG9pbnQoaW4gbG9uZyBjYWxsSWQsIGluIERPTVN0cmluZyBzb3VyY2VJRCwgaW4g
dW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyLCBpbiBib29sZWFuIGVuYWJsZWQsIGluIERPTVN0cmlu
ZyBjb25kaXRpb24pOwogICAgICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW4gRE9NU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIpOwogICAgICAgICB2b2lkIGFj
dGl2YXRlQnJlYWtwb2ludHMoKTsKICAgICAgICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMzI1ZTEy
Yy4uMjk4YTg0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTE2NzEsMTAgKzE2NzEsMTIgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5q
ZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgaW50IGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRp
b24pCiB7CiAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KGVuYWJsZWQsIGNvbmRpdGlv
bik7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNl
SUQsIGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQpOworICAgIGJvb2wgcmVzdWx0ID0gU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsICZs
aW5lTnVtYmVyKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwgcmVz
dWx0LCBsaW5lTnVtYmVyKTsKKwogICAgIFN0cmluZyB1cmwgPSBtX3NvdXJjZUlEVG9VUkwuZ2V0
KHNvdXJjZUlEKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTY4NSw3ICsxNjg3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW0KICAgICBpdC0+c2Vjb25k
LnNldChsaW5lTnVtYmVyLCBicmVha3BvaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxp
bmVOdW1iZXIpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7CiAgICAgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIpOwog
CkBAIC0xNzExLDEwICsxNzEzLDExIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFy
c2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJy
ZWFrcG9pbnRzLmZpbmQodXJsKTsKICAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5l
bmQoKSkgewogICAgICAgICBmb3IgKFNvdXJjZUJyZWFrcG9pbnRzOjppdGVyYXRvciBicmVha3Bv
aW50SXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IGJyZWFrcG9pbnRJdCAhPSBpdC0+c2Vjb25kLmVu
ZCgpOyArK2JyZWFrcG9pbnRJdCkgewotICAgICAgICAgICAgaWYgKGZpcnN0TGluZSA8PSBicmVh
a3BvaW50SXQtPmZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnRJdC0+Zmlyc3QsIGJyZWFr
cG9pbnRJdC0+c2Vjb25kKTsKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXN0b3JlZEJy
ZWFrcG9pbnQoc291cmNlSUQsIHVybCwgYnJlYWtwb2ludEl0LT5maXJzdCwgYnJlYWtwb2ludEl0
LT5zZWNvbmQuZW5hYmxlZCwgYnJlYWtwb2ludEl0LT5zZWNvbmQuY29uZGl0aW9uKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGludCBsaW5lID0gYnJlYWtwb2ludEl0LT5maXJzdDsKKyAg
ICAgICAgICAgIGlmIChmaXJzdExpbmUgPiBsaW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQo
c291cmNlSUQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLCAmbGluZSk7CisgICAgICAgICAgICBtX2Zy
b250ZW5kLT5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgYnJlYWtwb2lu
dEl0LT5zZWNvbmQuZW5hYmxlZCwgYnJlYWtwb2ludEl0LT5zZWNvbmQuY29uZGl0aW9uKTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmlu
ZGV4IGFmMzYzODMuLjM4ZTBiMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKQEAgLTI4NSw4ICsyODUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2b2lkIHNldEJyZWFr
cG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5lTnVtYmVy
LCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4g
UHJvZmlsZXNNYXA7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRl
eCBmYWQzMzAzLi43NWFkMjhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCkBAIC0zMTUsNiArMzE1LDE2IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2Vy
V2FzRGlzYWJsZWQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigiZGVidWdnZXJXYXNEaXNhYmxl
ZCIpOwogfQogCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRCcmVha3BvaW50KGxvbmcg
Y2FsbElkLCBib29sIHN1Y2Nlc3MsIGludCBsaW5lKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoImRpZFNldEJyZWFrcG9pbnQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOworICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGxpbmUpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30K
Kwogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBm
aXJzdExpbmUsIGludCBzY3JpcHRXb3JsZFR5cGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaAppbmRleCAwZTk2Njg4Li5jYWM1NjIyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTk4LDYgKzk4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogICAgICAgICB2b2lkIGRlYnVn
Z2VyV2FzRGlzYWJsZWQoKTsKIAorICAgICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQobG9uZyBj
YWxsSWQsIGJvb2wgc3VjY2VzcywgaW50IGxpbmUpOworCiAgICAgICAgIHZvaWQgcGFyc2VkU2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBzY3JpcHRXb3JsZFR5cGUpOwogICAg
ICAgICB2b2lkIHJlc3RvcmVkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25z
dCBTdHJpbmcmIHVybCwgaW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25k
aXRpb24pOwogICAgICAgICB2b2lkIGZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGlu
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDNjY2NjYWMuLjFhMzZhYjQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMK
QEAgLTU3LDkgKzU3LDkgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYmICh0aGlzLl9vbmVU
aW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtw
b2ludC5pZF0gPSBicmVha3BvaW50OwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9uQmFj
a2VuZChicmVha3BvaW50KTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
ImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAgICB9LCAgICAKKyAgICAgICAgdGhp
cy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCwgdGhpcy5fZGlkU2V0QnJlYWtw
b2ludC5iaW5kKHRoaXMsIGJyZWFrcG9pbnQpKTsKKyAgICB9LAogCiAgICAgcmVtb3ZlQnJlYWtw
b2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CkBAIC05NiwxNCArOTYsMjggQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRl
IHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwogICAgIH0sCiAKLSAgICBfc2F2ZUJyZWFrcG9pbnRP
bkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX3NhdmVCcmVha3BvaW50T25CYWNr
ZW5kOiBmdW5jdGlvbihicmVha3BvaW50LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50
LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAg
ICB2YXIgY2FsbGJhY2tJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKTsK
KyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGNhbGxiYWNrSWQsIGJyZWFr
cG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVh
a3BvaW50LmNvbmRpdGlvbik7CiAgICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3BvaW50RnJvbUJh
Y2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5l
KTsKKyAgICB9LAorCisgICAgX2RpZFNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQs
IHN1Y2Nlc3MsIGxpbmUpCisgICAgeworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChsaW5lID09IGJyZWFrcG9pbnQubGluZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFr
cG9pbnQtcmVtb3ZlZCIsIGJyZWFrcG9pbnQpOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtw
b2ludHNbYnJlYWtwb2ludC5pZF07CisgICAgICAgIHZhciBuZXdCcmVha3BvaW50ID0gbmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50KHRoaXMsIGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9p
bnQuc291cmNlVVJMLCBsaW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0
aW9uKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbbmV3QnJlYWtwb2ludC5pZF0gPSBuZXdC
cmVha3BvaW50OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtw
b2ludC1hZGRlZCIsIG5ld0JyZWFrcG9pbnQpOwogICAgIH0KIH0KIApAQCAtMTgwLDMgKzE5NCw1
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuZGlkU2V0QnJlYWtwb2ludCA9IFdlYkluc3BlY3Rv
ci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKaW5kZXggZjZjZjM0NC4uMWVmMDRlZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRT
dHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcwpAQCAtMTcwLDggKzE3MCw5IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlcldhc0Rpc2Fi
bGVkKCk7CiAgICAgfSwKIAotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oY2Fs
bElkLCBzb3VyY2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmRpZFNldEJyZWFrcG9pbnQoY2FsbElkLCB0cnVlLCBsaW5lKTsKICAgICB9
LAogCiAgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCA2MzAxOTdlLi45ODEzMzQ0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxMC0wNi0xNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZXR1cm4gbGluZSBudW1iZXIgd2hlcmUgYnJlYWtwb2ludCB3YXMgYWN0dWFsbHkg
c2V0IGJ5IHY4IGZyb20gc2V0QnJlYWtwb2ludCBmdW5jdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisKKyAgICAgICAgKiBzcmMvanMv
RGVidWdnZXJTY3JpcHQuanM6CisgICAgICAgICgpOgorCiAyMDEwLTA2LTE3ICBQYXZlbCBGZWxk
bWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGNocm9t
aXVtIHRlc3RzIGZpeC4gQWRkZWQgSW5zcGVjdG9yQmFja2VuZCBkZWxlZ2F0ZXMgZm9yIG5ldyBp
bnNwZWN0b3IgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVi
dWdnZXJTY3JpcHQuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0Lmpz
CmluZGV4IGJhZGRiN2QuLjE0NzUyMDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvRGVidWdnZXJTY3JpcHQuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dl
clNjcmlwdC5qcwpAQCAtMTA4LDcgKzEwOCwxMSBAQCBEZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3Bv
aW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQogICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVh
a3BvaW50c1trZXldID0gYnJlYWtJZDsKICAgICBpZiAoIWFyZ3MuZW5hYmxlZCkKICAgICAgICAg
RGVidWcuZGlzYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7Ci0gICAgcmV0dXJuIGJyZWFr
SWQ7CisKKyAgICB2YXIgbG9jYXRpb24gPSBEZWJ1Zy5maW5kQnJlYWtQb2ludChicmVha0lkKS5h
Y3R1YWxfbG9jYXRpb247CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKKyAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQuX3Y4VG9XZWJraXRMaW5lTnVtYmVyKGxv
Y2F0aW9uLmxpbmUpOwogfQogCiBEZWJ1Z2dlclNjcmlwdC5yZW1vdmVCcmVha3BvaW50ID0gZnVu
Y3Rpb24oZXhlY1N0YXRlLCBhcmdzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59002</attachid>
            <date>2010-06-17 09:21:24 -0700</date>
            <delta_ts>2010-06-25 08:53:39 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>18301</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTM1YjU5MC4uMzRkOTYxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNi0xNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBVc2UgYWN0dWFsIGJyZWFrcG9pbnQgcG9zaXRp
b24gcHJvdmlkZWQgYnkgU2NyaXB0RGVidWdTZXJ2ZXIgd2hlbiBkaXNwbGF5aW5nIGJyZWFrcG9p
bnQgaW4gVUkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDc4MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQmFja2VuZDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkU2V0QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYWRkQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlLl9zYXZlQnJlYWtwb2ludE9uQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fZGlkU2V0
QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIu
cHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTE3ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGNocm9taXVtIHRl
c3RzIGZpeC4gQWRkZWQgSW5zcGVjdG9yQmFja2VuZCBkZWxlZ2F0ZXMgZm9yIG5ldyBpbnNwZWN0
b3IgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5k
ZXggZWIwOTIzYi4uNDNmNGYzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKQEAgLTEzOCwxOCArMTM4LDE5IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhh
c0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4gbV9wYWdl
TGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBi
cmVha3BvaW50LCBpbnQqIGxpbmVOdW1iZXIpCiB7CiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1
ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAgaWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBCcmVha3BvaW50c01hcDo6aXRl
cmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0
ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9icmVha3BvaW50cy5zZXQo
c291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29u
ZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7CisgICAgaXQtPnNlY29uZC5zZXQoKmxpbmVO
dW1iZXIsIGJyZWFrcG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQogewogICAgIGludHB0cl90
IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0cigpOwogICAgIGlmICghc291cmNlSURW
YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCBhNDVmYWU0
Li5hZDcyOWYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC02
Myw4ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCk7
Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIGludCogbGluZU51bWJlcik7Cisg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5l
TnVtYmVyKTsKICAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKICAgICB2b2lkIHNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmNwcAppbmRleCBiOGU1ZWM0Li45MGE2NzZlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxp
c3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgYnJlYWtwb2ludHMg
c2V0IGJ5IHRoZSBhZ2VudC4KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRC
cmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCwg
aW50KiBsaW5lTnVtYmVyKQogewogI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKQEAgLTEzMiwxNiArMTMyLDE3IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5z
aWduZWQgbGluZU51bWJlCiAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gYXJncyA9IHY4OjpP
YmplY3Q6Ok5ldygpOwogICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpOZXcoInNjcmlwdElkIiks
IHY4U3RyaW5nKHNvdXJjZUlEKSk7Ci0gICAgYXJncy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibGlu
ZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1iZXIpKTsKKyAgICBhcmdzLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJsaW5lTnVtYmVyIiksIHY4OjpJbnRlZ2VyOjpOZXcoKmxpbmVOdW1i
ZXIpKTsKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJp
bmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3
KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7Ci0gICAgdjg6OkRlYnVnOjpDYWxsKHNldEJy
ZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3Vs
dCA9IHY4OjpEZWJ1Zzo6Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAgIHJl
dHVybiB0cnVlOwogI2VuZGlmCiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7CiAjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJW
RVIpCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5oCmluZGV4IDk0MzljMTYuLmRiYTk1ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmgKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogICAgIHZvaWQg
YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKICAgICB2b2lkIHJlbW92
ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKik7CiAKLSAgICB2b2lkIHNldEJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgU2Ny
aXB0QnJlYWtwb2ludCBicmVha3BvaW50KTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgYm9vbCBzZXRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtw
b2ludCwgaW50KiBsaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpOwogICAgIHZvaWQgY2xlYXJCcmVha3Bv
aW50cygpOwogICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQp
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDA3MTQwYzkuLmVh
MjEwOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0xNjYsMTAg
KzE2NiwxMCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29sIGFs
d2F5cykKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlRGVidWdnZXIoYWx3
YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEJyZWFrcG9pbnQo
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiB7CiAgICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRCcmVh
a3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoY2FsbElkLCBzb3VyY2VJRCwg
bGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxp
bmVOdW1iZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggYTM5YmE1MC4u
OTQ2MzIyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtNzcsNyArNzcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAgICAg
dm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwogCi0gICAgdm9pZCBzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5h
YmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgc2V0QnJlYWtwb2ludChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwg
Ym9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgdm9pZCByZW1vdmVC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwog
ICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFr
cG9pbnRzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4IDY4MjAx
NzEuLjExMWMwODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCkBAIC01
Miw3ICs1Miw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihp
biBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xl
YW4gYWx3YXlzKTsKIAotICAgICAgICB2b2lkIHNldEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5nIHNv
dXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwg
aW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgc2V0QnJlYWtwb2ludChpbiBs
b25nIGNhbGxJZCwgaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVO
dW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CiAgICAg
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2ln
bmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygp
OwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzMjVlMTJjLi4yOThhODRmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTY3MSwxMCArMTY3MSwx
MiBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSW5zcGVjdG9yQ29udHJvbGxl
cjo6Y3VycmVudENhbGxGcmFtZXMoKQogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC5jYWxsRnJh
bWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVh
a3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBpbnQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKIHsKICAgICBTY3JpcHRC
cmVha3BvaW50IGJyZWFrcG9pbnQoZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgYnJl
YWtwb2ludCk7CisgICAgYm9vbCByZXN1bHQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgJmxpbmVOdW1iZXIpOworICAgIG1f
ZnJvbnRlbmQtPmRpZFNldEJyZWFrcG9pbnQoY2FsbElkLCByZXN1bHQsIGxpbmVOdW1iZXIpOwor
CiAgICAgU3RyaW5nIHVybCA9IG1fc291cmNlSURUb1VSTC5nZXQoc291cmNlSUQpOwogICAgIGlm
ICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjg1LDcgKzE2ODcsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bQogICAgIGl0LT5zZWNvbmQuc2V0KGxpbmVOdW1iZXIsIGJy
ZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBpbnQgbGluZU51bWJlcikKIHsKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVt
b3ZlQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CiAKQEAgLTE3MTEsMTAgKzE3MTMs
MTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHUKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNl
QnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwp
OwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZv
ciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9yIGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQu
YmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5zZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0
KSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RMaW5lIDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsK
LSAgICAgICAgICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2lu
dChzb3VyY2VJRCwgYnJlYWtwb2ludEl0LT5maXJzdCwgYnJlYWtwb2ludEl0LT5zZWNvbmQpOwot
ICAgICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc3RvcmVkQnJlYWtwb2ludChzb3VyY2VJRCwg
dXJsLCBicmVha3BvaW50SXQtPmZpcnN0LCBicmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVkLCBi
cmVha3BvaW50SXQtPnNlY29uZC5jb25kaXRpb24pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW50IGxpbmUgPSBicmVha3BvaW50SXQtPmZpcnN0OworICAgICAgICAgICAgaWYgKGZpcnN0
TGluZSA+IGxpbmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2lu
dEl0LT5zZWNvbmQsICZsaW5lKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc3RvcmVkQnJl
YWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBicmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVk
LCBicmVha3BvaW50SXQtPnNlY29uZC5jb25kaXRpb24pOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggYWYzNjM4My4uMzhlMGIy
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMjg1LDggKzI4
NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
dW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
bik7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIpOworICAgIHZvaWQgc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IGZhZDMzMDMuLjc1YWQyOGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTMxNSw2ICszMTUs
MTYgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGVidWdnZXJXYXNEaXNhYmxlZCgpCiAgICAg
Y2FsbFNpbXBsZUZ1bmN0aW9uKCJkZWJ1Z2dlcldhc0Rpc2FibGVkIik7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZFNldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGJvb2wgc3VjY2Vz
cywgaW50IGxpbmUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0
QnJlYWtwb2ludCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQobGluZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpwYXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IHNjcmlw
dFdvcmxkVHlwZSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOyAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmlu
ZGV4IDBlOTY2ODguLmNhYzU2MjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aApAQCAtOTgsNiArOTgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVi
dWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxlZCgpOwog
CisgICAgICAgIHZvaWQgZGlkU2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNz
LCBpbnQgbGluZSk7CisKICAgICAgICAgdm9pZCBwYXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50
IGZpcnN0TGluZSwgaW50IHNjcmlwdFdvcmxkVHlwZSk7CiAgICAgICAgIHZvaWQgcmVzdG9yZWRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQg
bGluZSwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgICAgIHZv
aWQgZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludE1hbmFnZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dE1hbmFnZXIuanMKaW5kZXggM2NjY2NhYy4uMWEzNmFiNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpAQCAtNTcsOSArNTcsOSBAQCBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAo
dGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09
IGJyZWFrcG9pbnQuaWQpKQogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3Bv
aW50OwogICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9p
bnQ7Ci0gICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOwog
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1hZGRlZCIs
IGJyZWFrcG9pbnQpOwotICAgIH0sICAgIAorICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9u
QmFja2VuZChicmVha3BvaW50LCB0aGlzLl9kaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcywgYnJl
YWtwb2ludCkpOworICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVh
a3BvaW50KQogICAgIHsKQEAgLTk2LDE0ICs5NiwyOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFr
cG9pbnQ7CiAgICAgfSwKIAotICAgIF9zYXZlQnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24o
YnJlYWtwb2ludCkKKyAgICBfc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFr
cG9pbnQsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVh
a3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5l
bmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgIHZhciBjYWxsYmFja0lkID0g
V2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldEJyZWFrcG9pbnQoY2FsbGJhY2tJZCwgYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJl
YWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsK
ICAgICB9LAogCiAgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJl
YWtwb2ludCkKICAgICB7CiAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2lu
dChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUpOworICAgIH0sCisKKyAgICBf
ZGlkU2V0QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCwgc3VjY2VzcywgbGluZSkKKyAg
ICB7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKGxpbmUgPT0gYnJlYWtwb2ludC5saW5lKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1yZW1vdmVkIiwgYnJl
YWtwb2ludCk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50Lmlk
XTsKKyAgICAgICAgdmFyIG5ld0JyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQodGhpcywgYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5zb3VyY2VVUkwsIGxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICB0aGlz
Ll9icmVha3BvaW50c1tuZXdCcmVha3BvaW50LmlkXSA9IG5ld0JyZWFrcG9pbnQ7CisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LWFkZGVkIiwgbmV3QnJl
YWtwb2ludCk7CiAgICAgfQogfQogCkBAIC0xODAsMyArMTk0LDUgQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKK1dlYklu
c3BlY3Rvci5kaWRTZXRCcmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3ND
YWxsYmFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JCYWNrZW5kU3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcwppbmRleCBmNmNmMzQ0Li4xZWYwNGVmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0xNzAsOCAr
MTcwLDkgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICB9LAogCi0g
ICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbikKKyAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihjYWxsSWQsIHNvdXJjZUlELCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZGlkU2V0
QnJlYWtwb2ludChjYWxsSWQsIHRydWUsIGxpbmUpOwogICAgIH0sCiAKICAgICByZW1vdmVCcmVh
a3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDYzMDE5N2Uu
Ljk4MTMzNDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTE3ICBQYXZl
bCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJldHVybiBsaW5l
IG51bWJlciB3aGVyZSBicmVha3BvaW50IHdhcyBhY3R1YWxseSBzZXQgYnkgdjggZnJvbSBzZXRC
cmVha3BvaW50IGZ1bmN0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA3ODEKKworICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qczoK
KyAgICAgICAgKCk6CisKIDIwMTAtMDYtMTcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDogY2hyb21pdW0gdGVzdHMgZml4LiBBZGRl
ZCBJbnNwZWN0b3JCYWNrZW5kIGRlbGVnYXRlcyBmb3IgbmV3IGluc3BlY3RvciBtZXRob2RzLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKaW5kZXggYmFkZGI3ZC4uMTQ3
NTIwNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5q
cworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC0xMDgs
NyArMTA4LDExIEBAIERlYnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVj
U3RhdGUsIGFyZ3MpCiAgICAgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0gPSBicmVh
a0lkOwogICAgIGlmICghYXJncy5lbmFibGVkKQogICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0
QnJlYWtQb2ludChicmVha0lkKTsKLSAgICByZXR1cm4gYnJlYWtJZDsKKworICAgIHZhciBsb2Nh
dGlvbiA9IERlYnVnLmZpbmRCcmVha1BvaW50KGJyZWFrSWQpLmFjdHVhbF9sb2NhdGlvbjsKKyAg
ICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgIHJldHVybiBE
ZWJ1Z2dlclNjcmlwdC5fdjhUb1dlYmtpdExpbmVOdW1iZXIobG9jYXRpb24ubGluZSk7CiB9CiAK
IERlYnVnZ2VyU2NyaXB0LnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFy
Z3MpCg==
</data>
<flag name="review"
          id="45577"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59770</attachid>
            <date>2010-06-25 08:53:39 -0700</date>
            <delta_ts>2010-06-28 08:04:07 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>29880</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTRlN2FkYi4uZWE3NjE1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxMC0wNi0yNSAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBXaGVuIHVzZXIgc2V0cyBicmVha3BvaW50IGZy
b20gVUksIGphdmFzY3JpcHQgZW5naW5lIG1heSBhY3R1YWxseSBzZXQKKyAgICAgICAgaXQgb24g
YSBkaWZmZXJlbnQgbGluZS4gSWYgc28sIG1vdmUgYnJlYWtwb2ludCB0byB0aGUgY29ycmVjdCBw
b3NpdGlvbgorICAgICAgICBpbiBmcm9udGVuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFz
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0
Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjplbmFi
bGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlT25l
VGltZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZS5zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9zZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludE9uQmFja2VuZC5kaWRTZXRCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3Nl
dEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQu
cHJvdG90eXBlLnNldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0
b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlw
dFZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UubXljYWxsYmFjayk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNlKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTI1
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKaW5kZXggMjE0MDBkMy4uMTcyNDg5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTEzNywxOCArMTM3LDIwIEBAIGJvb2wgU2NyaXB0RGVi
dWdTZXJ2ZXI6Omhhc0xpc3RlbmVyc0ludGVyZXN0ZWRJblBhZ2UoUGFnZSogcGFnZSkKICAgICBy
ZXR1cm4gbV9wYWdlTGlzdGVuZXJzTWFwLmNvbnRhaW5zKHBhZ2UpOwogfQogCi12b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0
QnJlYWtwb2ludCBicmVha3BvaW50LCBpbnQgbGluZU51bWJlciwgaW50KiBhY3R1YWxMaW5lTnVt
YmVyKQogewogICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0cigp
OwogICAgIGlmICghc291cmNlSURWYWx1ZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9icmVha3BvaW50
cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX2JyZWFrcG9pbnRzLmVuZCgp
KQogICAgICAgICBpdCA9IG1fYnJlYWtwb2ludHMuc2V0KHNvdXJjZUlEVmFsdWUsIFNvdXJjZUJy
ZWFrcG9pbnRzKCkpLmZpcnN0OwogICAgIGl0LT5zZWNvbmQuc2V0KGxpbmVOdW1iZXIsIGJyZWFr
cG9pbnQpOworICAgICphY3R1YWxMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBpbnQgbGlu
ZU51bWJlcikKIHsKICAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQ
dHIoKTsKICAgICBpZiAoIXNvdXJjZUlEVmFsdWUpCkBAIC0xNTgsNyArMTYwLDcgQEAgdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCB1bnNpZ25lZCBsaW5lTnUKICAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlcik7
CiB9CiAKLWJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0Citib29sIFNjcmlwdERlYnVnU2VydmVy
OjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikgY29uc3QK
IHsKICAgICBpZiAoIW1fYnJlYWtwb2ludHNBY3RpdmF0ZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTI1NSw3ICsyNTcsNyBAQCBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZSgpCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhdXNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIEFTU0VSVCht
X3BhdXNlZCk7Ci0gICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOyAgICAgICAgCisgICAgU2Ny
aXB0U3RhdGUqIHN0YXRlID0gbV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIGxpc3RlbmVyLT5kaWRQYXVzZShzdGF0ZSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCBkY2YyOTBlLi4y
ZWZkZDE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC02Myw4
ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVu
ZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVy
KiwgUGFnZSopOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCk7Ci0g
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIGludCBsaW5lTnVtYmVyLCBpbnQqIGFj
dHVhbExpbmVOdW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcik7CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7
CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7CiAKQEAg
LTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIFNjcmlwdERlYnVnU2VydmVyKCk7CiAgICAg
flNjcmlwdERlYnVnU2VydmVyKCk7CiAKLSAgICBib29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qg
c291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0OworICAgIGJvb2wgaGFzQnJlYWtw
b2ludChpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpIGNvbnN0OwogICAgIGJvb2wg
aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFnZShQYWdlKik7CiAKICAgICB2b2lkIHNldEphdmFT
Y3JpcHRQYXVzZWQoY29uc3QgUGFnZUdyb3VwJiwgYm9vbCBwYXVzZWQpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAzOGZjZDhhLi45MTNjMjJlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMTI2LDcgKzEyNiw3
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlCiAgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgYnJl
YWtwb2ludHMgc2V0IGJ5IHRoZSBhZ2VudC4KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpz
ZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJl
YWtwb2ludCwgaW50IGxpbmVOdW1iZXIsIGludCogYWN0dWFsTGluZU51bWJlcikKIHsKICNpZiBF
TkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CkBAIC0xNDAsMTEgKzE0MCwxNSBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZQogICAgIGFyZ3Mt
PlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWQiKSwgdjg6OkJvb2xlYW46Ok5ldyhicmVha3Bv
aW50LmVuYWJsZWQpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3Bv
aW50RnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2Ny
aXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRCcmVha3BvaW50IikpKTsKLSAgICB2
ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludEZ1bmN0aW9uLCBhcmdzKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRGdW5j
dGlvbiwgYXJncyk7CisgICAgaWYgKCFyZXN1bHQtPklzTnVtYmVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAqYWN0dWFsTGluZU51bWJlciA9IHJlc3VsdC0+SW50MzJWYWx1ZSgpOwor
ICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9CiAKLXZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7CiAjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwpAQCAtMjk5LDcgKzMwMyw3IEBA
IFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJl
bnRDYWxsRnJhbWUoKQogICAgICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3VycmVudENh
bGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dl
clNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7
CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IG1fZXhlY3V0aW9uU3Rh
dGUuZ2V0KCkgfTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRDYWxsRnJh
bWVWOCA9IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbi0+Q2FsbChtX2RlYnVnZ2VyU2NyaXB0Lmdl
dCgpLCAxLCBhcmd2KTsKLSAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENh
bGxGcmFtZTo6Y3JlYXRlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoY3VycmVudENhbGxGcmFtZVY4KSk7IAorICAgICAgICBtX2N1cnJl
bnRDYWxsRnJhbWUgPSBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUodjg6OkRlYnVnOjpHZXRE
ZWJ1Z0NvbnRleHQoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjdXJyZW50Q2FsbEZy
YW1lVjgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZTsKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCBiNDZmNjczLi4zMGQyMGRmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC01NSw4ICs1NSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqLCBQYWdl
Kik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSop
OwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCk7Ci0gICAgdm9pZCBy
ZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIGludCBsaW5lTnVtYmVyLCBpbnQqIGFjdHVhbExpbmVO
dW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBpbnQgbGluZU51bWJlcik7CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9p
ZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggOGU5ZTMzMC4uM2EzNzFiNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIElu
c3BlY3RvckJhY2tlbmQ6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKIAogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjplbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKIHsKLSAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQorICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgIVNjcmlwdERl
YnVnU2VydmVyOjpzaGFyZWQoKS5pc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpKQogICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFsd2F5cyk7
CiB9CiAKQEAgLTE3OCwxMCArMTc4LDEwIEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzYWJs
ZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRp
c2FibGVEZWJ1Z2dlcihhbHdheXMpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9v
bCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6c2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5z
aWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikK
IHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGVuYWJsZWQsIGNv
bmRpdGlvbik7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0QnJlYWtwb2ludChj
YWxsSWQsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOwogfQogCiB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aAppbmRleCBjZTVkZDk5Li4wMzVhYmY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKTsKICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAKLSAg
ICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CisgICAgdm9p
ZCBzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsK
ICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlcik7CiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgdm9p
ZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5pZGwKaW5kZXggZWFhY2FmMC4uYjRhNjhjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5pZGwKQEAgLTU1LDcgKzU1LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lk
IGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKICAgICAgICAgdm9pZCBkaXNhYmxl
RGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOwogCi0gICAgICAgIHZvaWQgc2V0QnJlYWtwb2lu
dChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlciwgaW4g
Ym9vbGVhbiBlbmFibGVkLCBpbiBET01TdHJpbmcgY29uZGl0aW9uKTsKKyAgICAgICAgdm9pZCBz
ZXRCcmVha3BvaW50KGluIGxvbmcgY2FsbElkLCBpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVu
c2lnbmVkIGxvbmcgbGluZU51bWJlciwgaW4gYm9vbGVhbiBlbmFibGVkLCBpbiBET01TdHJpbmcg
Y29uZGl0aW9uKTsKICAgICAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGluIERPTVN0cmluZyBz
b3VyY2VJRCwgaW4gdW5zaWduZWQgbG9uZyBsaW5lTnVtYmVyKTsKICAgICAgICAgdm9pZCBhY3Rp
dmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGYwNzlkYjgu
LmQzZGY1YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBA
IC0yNCw3ICsyNCw3IEBACiAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC03MTIsNiArNzEyLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAg
IG1fc291cmNlSURUb1VSTC5jbGVhcigpOwogICAgICAgICBtX3NjcmlwdElEVG9Db250ZW50LmNs
ZWFyKCk7CiAgICAgICAgIG1fc3RpY2t5QnJlYWtwb2ludHMuY2xlYXIoKTsKKyAgICAgICAgbV9i
cmVha3BvaW50c01hcHBpbmcuY2xlYXIoKTsKICAgICAgICAgbV9icmVha3BvaW50c0xvYWRlZCA9
IGZhbHNlOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShK
U0MpCkBAIC0xNzM1LDIzICsxNzM2LDMxIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBJbnNwZWN0b3JDb250cm9sbGVyOjpjdXJyZW50Q2FsbEZyYW1lcygpCiAgICAgcmV0dXJu
IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGludCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29u
ZGl0aW9uKQogewogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFibGVkLCBjb25k
aXRpb24pOwotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNv
dXJjZUlELCBsaW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBpbnQgYWN0dWFsTGluZU51bWJl
ciA9IDA7CisgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNl
dEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsICZhY3R1YWxMaW5l
TnVtYmVyKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwgc3VjY2Vz
cywgYWN0dWFsTGluZU51bWJlcik7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47
CisKICAgICBTdHJpbmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3VyY2VJRCk7CiAgICAg
aWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZyBicmVha3Bv
aW50SWQgPSBTdHJpbmc6OmZvcm1hdCgiJXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgpLCBh
Y3R1YWxMaW5lTnVtYmVyKTsKKyAgICBtX2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2lu
dElkLCBhY3R1YWxMaW5lTnVtYmVyKTsKKwogICAgIFN0cmluZyBrZXkgPSBtZDVCYXNlMTYodXJs
KTsKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9
IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N0aWNreUJy
ZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KGtl
eSwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7Ci0gICAgaXQtPnNlY29uZC5zZXQobGluZU51
bWJlciwgYnJlYWtwb2ludCk7CisgICAgaXQtPnNlY29uZC5zZXQoYWN0dWFsTGluZU51bWJlciwg
YnJlYWtwb2ludCk7CiAgICAgc2F2ZUJyZWFrcG9pbnRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKQogewogICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVt
YmVyKTsKIApAQCAtMTc1OSw5ICsxNzY4LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lCiAg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZyBicmVh
a3BvaW50SWQgPSBTdHJpbmc6OmZvcm1hdCgiJXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgp
LCBsaW5lTnVtYmVyKTsKKyAgICBpbnQgc3RpY2t5TGluZSA9IG1fYnJlYWtwb2ludHNNYXBwaW5n
LnRha2UoYnJlYWtwb2ludElkKTsKKyAgICBpZiAoc3RpY2t5TGluZSA8IDEpCisgICAgICAgIHJl
dHVybjsKKwogICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9y
IGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKG1kNUJhc2UxNih1cmwpKTsKLSAgICBpZiAo
aXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5yZW1v
dmUobGluZU51bWJlcik7CisgICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNvbmQucmVtb3ZlKHN0aWNreUxpbmUpOwog
ICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCkBAIC0xNzc5LDEwICsxNzk1LDE2IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgY29uc3QgU3RyaW5nJiB1CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRz
Pjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkp
OwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZv
ciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9yIGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQu
YmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5zZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0
KSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RMaW5lIDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsK
LSAgICAgICAgICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2lu
dChzb3VyY2VJRCwgYnJlYWtwb2ludEl0LT5maXJzdCwgYnJlYWtwb2ludEl0LT5zZWNvbmQpOwot
ICAgICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc3RvcmVkQnJlYWtwb2ludChzb3VyY2VJRCwg
dXJsLCBicmVha3BvaW50SXQtPmZpcnN0LCBicmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVkLCBi
cmVha3BvaW50SXQtPnNlY29uZC5jb25kaXRpb24pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIgPSBicmVha3BvaW50SXQtPmZpcnN0OworICAgICAgICAgICAgaWYg
KGZpcnN0TGluZSA+IGxpbmVOdW1iZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpbnQgYWN0dWFsTGluZU51bWJlciA9IDA7CisgICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwg
YnJlYWtwb2ludEl0LT5zZWNvbmQsIGxpbmVOdW1iZXIsICZhY3R1YWxMaW5lTnVtYmVyKTsKKyAg
ICAgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIG1fZnJvbnRlbmQtPnJlc3RvcmVkQnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBhY3R1
YWxMaW5lTnVtYmVyLCBicmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVkLCBicmVha3BvaW50SXQt
PnNlY29uZC5jb25kaXRpb24pOworICAgICAgICAgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IFN0
cmluZzo6Zm9ybWF0KCIlczolZCIsIHNvdXJjZUlELnV0ZjgoKS5kYXRhKCksIGFjdHVhbExpbmVO
dW1iZXIpOworICAgICAgICAgICAgbV9icmVha3BvaW50c01hcHBpbmcuc2V0KGJyZWFrcG9pbnRJ
ZCwgbGluZU51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAppbmRleCBiMmQxZDVhLi4xNTliMThlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0yODksOCArMjg5LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHZvaWQg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKLSAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7
CisgICAgdm9pZCBzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBpbnQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlv
bik7CisgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGlu
dCBsaW5lTnVtYmVyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0
cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzTWFwOwogCkBAIC0zODQsNiArMzg0LDcgQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9VUkw7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9zY3JpcHRJRFRvQ29udGVudDsKICAgICBIYXNoTWFw
PFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CisgICAgSGFz
aE1hcDxTdHJpbmcsIGludD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAgYm9vbCBtX2JyZWFr
cG9pbnRzTG9hZGVkOwogCiAgICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBjZGU1YTcwLi41OWZhZTYxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC0zMjEsNiArMzIxLDE2IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQoKQogICAgIGNhbGxTaW1w
bGVGdW5jdGlvbigiZGVidWdnZXJXYXNEaXNhYmxlZCIpOwogfQogCit2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MsIGludCBs
aW5lKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rvciwg
ImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZFNldEJyZWFrcG9p
bnQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGxp
bmUpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBzY3JpcHRXb3JsZFR5
cGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCAwYjE5
OTgzLi43MjdiN2QwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTEw
MSw2ICsxMDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGVidWdnZXJX
YXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxlZCgpOwogCisgICAg
ICAgIHZvaWQgZGlkU2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBpbnQg
bGluZSk7CisKICAgICAgICAgdm9pZCBwYXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBz
b3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0
TGluZSwgaW50IHNjcmlwdFdvcmxkVHlwZSk7CiAgICAgICAgIHZvaWQgcmVzdG9yZWRCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZSwg
Ym9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgICAgIHZvaWQgZmFp
bGVkVG9QYXJzZVNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBk
YXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dE1hbmFnZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanMKaW5kZXggNGY2OTY1YS4uMzY0OGZiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpAQCAtMzYsMzkgKzM2LDM2IEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlz
Ll9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KQotICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
QnJlYWtwb2ludEZyb21CYWNrZW5kKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KTsKKyAgICAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KHRoaXMuX29uZVRpbWVCcmVha3Bv
aW50LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5saW5lKTsKICAgICAgICAgdGhp
cy5fb25lVGltZUJyZWFrcG9pbnQgPSBicmVha3BvaW50OwogICAgICAgICAvLyBGSVhNRSg0MDY2
OSk6IG9uZSB0aW1lIGJyZWFrcG9pbnQgd2lsbCBiZSBwZXJzaXN0ZWQgaW4gaW5zcGVjdG9yIHNl
dHRpbmdzIGlmIG5vdCBoaXQuCi0gICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5k
KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFr
cG9pbnQsIHRydWUpOwogICAgIH0sCiAKICAgICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KSB7Ci0g
ICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQodGhpcy5fb25lVGlt
ZUJyZWFrcG9pbnQpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3Bv
aW50KHRoaXMuX29uZVRpbWVCcmVha3BvaW50LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1lQnJlYWtw
b2ludC5saW5lKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsK
ICAgICAgICAgfQogICAgIH0sCiAKLSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJ
RCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2lu
dDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9u
KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50KHNv
dXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgICAgICBpZiAoYnJlYWtwb2ludCkKLSAgICAg
ICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAg
ICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChicmVha3BvaW50KTsKICAgICB9LAog
CiAgICAgcmVzdG9yZWRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB0aGlzLl9hZGRCcmVha3Bv
aW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAg
ICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24o
YnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIGlmICghKGJyZWFrcG9pbnQuaWQgaW4gdGhpcy5f
YnJlYWtwb2ludHMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWxldGUgdGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF07Ci0gICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9p
bnRGcm9tQmFja2VuZChicmVha3BvaW50KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIGJyZWFrcG9pbnQpOworICAgICAgICBpZiAo
dGhpcy5fcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KSkKKyAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50
LmxpbmUpOwogICAgIH0sCiAKICAgICBicmVha3BvaW50c0ZvclNvdXJjZUlEOiBmdW5jdGlvbihz
b3VyY2VJRCkKQEAgLTk3LDcgKzk0LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50Owog
ICAgIH0sCiAKLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVS
TCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIF9zZXRCcmVha3BvaW50OiBmdW5jdGlv
bihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewog
ICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlz
LCBzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgICAg
ICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCkBAIC0xMDksMTQgKzEwNiwz
NSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICByZXR1cm4gYnJlYWtwb2ludDsKICAgICB9LAogCi0gICAgX3NhdmVCcmVha3BvaW50T25CYWNr
ZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJl
YWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgfSwKLQotICAgIF9y
ZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX3Jl
bW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewotICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtw
b2ludC5saW5lKTsKKyAgICAgICAgaWYgKCEoYnJlYWtwb2ludC5pZCBpbiB0aGlzLl9icmVha3Bv
aW50cykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9i
cmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIGJyZWFrcG9pbnQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnQsIGlzT25lVGltZSkKKyAgICB7CisgICAgICAgIHZhciB0aGF0ID0gdGhpczsK
KyAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChzdWNjZXNzLCBsaW5lKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBsaW5lID09IGJyZWFrcG9pbnQubGluZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNPbmVUaW1lKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgICAgIHRoYXQuX29u
ZVRpbWVCcmVha3BvaW50LmxpbmUgPSBsaW5lOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHRoYXQuX29uZVRpbWVCcmVha3BvaW50OworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGF0Ll9yZW1vdmVCcmVha3BvaW50KGJyZWFr
cG9pbnQpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgICAg
ICB0aGF0Ll9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQuc291
cmNlVVJMLCBsaW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGRpZFNldEJyZWFrcG9pbnQpOworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoY2FsbGJhY2tJZCwgYnJlYWtwb2ludC5zb3VyY2VJRCwg
YnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9u
KTsKICAgICB9CiB9CiAKQEAgLTE0NSw3ICsxNjMsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fZW5h
YmxlZCA9IHg7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zYXZlQnJlYWtwb2lu
dE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NldEJy
ZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CiAgICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQogICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKICAgICAg
ICAgZWxzZQpAQCAtMTg3LDkgKzIwNSwxMSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gYzsKICAgICAgICAgaWYgKHRo
aXMuZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zYXZlQnJl
YWtwb2ludE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5h
Z2VyLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwogICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsKICAgICB9CiB9CiAKIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLmRpZFNldEJyZWFrcG9pbnQgPSBXZWJJbnNw
ZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDFhZTMyYjUuLjc2MWU4
NzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFj
a2VuZFN0dWIuanMKQEAgLTE2NSw4ICsxNjUsOSBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFj
a2VuZFN0dWIucHJvdG90eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJXYXNE
aXNhYmxlZCgpOwogICAgIH0sCiAKLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJ
RCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGNhbGxJZCwgc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwgdHJ1ZSwgbGluZSk7CiAg
ICAgfSwKIAogICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwppbmRleCAxODgzZmIzLi5j
NTc2NTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmll
dy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwpAQCAt
OTYsNyArOTYsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CiAKICAg
ICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKICAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHRoaXMuc2NyaXB0LnNvdXJjZUlE
LCB0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRydWUsICIiKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQodGhpcy5zY3JpcHQuc291cmNl
SUQsIHRoaXMuc2NyaXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOwogICAgIH0sCiAKICAg
ICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24obmV3Qm9keSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IGMyM2RiMTQuLjgzODYwMDMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMzY2LDcgKzM2
Niw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07CiAgICAgICAgICAgICAgICAg
aWYgKHN1Y2Nlc3MgJiYgYnJlYWtwb2ludC5saW5lID49IGxpbmUpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrcG9pbnQubGluZSArPSBsaW5lc0NvdW50VG9TaGlmdDsKLSAgICAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2ludChicmVha3BvaW50
KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJl
YWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LnVybCwgYnJlYWtwb2ludC5s
aW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfTsKICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChteWNhbGxiYWNrLmJpbmQodGhpcykpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VWaWV3LmpzCmluZGV4IGU0ZDdmZWQuLmFhYzNhNzUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0xMjcsNyArMTI3LDcgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgIF9hZGRCcmVha3BvaW50OiBm
dW5jdGlvbihsaW5lKQogICAgIHsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmUpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
YWRkQnJlYWtwb2ludChzb3VyY2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHRydWUsICIi
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQo
c291cmNlSUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7CiAgICAgfSwKIAog
ICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggNTQzZWRhYi4uODcxZDEyOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAt
MDYtMTcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmV0dXJuIGxpbmUgbnVtYmVyIHdoZXJlIGJyZWFrcG9pbnQgd2FzIGFjdHVhbGx5IHNldCBieSB2
OCBmcm9tIHNldEJyZWFrcG9pbnQgZnVuY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDc4MQorCisgICAgICAgICogc3JjL2pzL0RlYnVnZ2Vy
U2NyaXB0LmpzOgorICAgICAgICAoKToKKwogMjAxMC0wNi0yNSAgSm9obiBHcmVnZyAgPGpvaG5u
eWdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwppbmRleCBiYWRkYjdkLi40YTU4MWU2
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKQEAgLTkzLDIyICs5
MywxOSBAQCBEZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0ID0gZnVuY3Rpb24oc2NyaXB0KQog
RGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykK
IHsKICAgICBhcmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVO
dW1iZXIoYXJncy5saW5lTnVtYmVyKTsKLSAgICB2YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6
IiArIGFyZ3MubGluZU51bWJlcjsKLSAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9i
cmVha3BvaW50c1trZXldOwotICAgIGlmIChicmVha0lkKSB7Ci0gICAgICAgIGlmIChhcmdzLmVu
YWJsZWQpCi0gICAgICAgICAgICBEZWJ1Zy5lbmFibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2lu
dChicmVha0lkKTsKLSAgICAgICAgRGVidWcuY2hhbmdlU2NyaXB0QnJlYWtQb2ludENvbmRpdGlv
bihicmVha0lkLCBhcmdzLmNvbmRpdGlvbik7Ci0gICAgICAgIHJldHVybiBicmVha0lkOwotICAg
IH0KLQotICAgIGJyZWFrSWQgPSBEZWJ1Zy5zZXRTY3JpcHRCcmVha1BvaW50QnlJZChhcmdzLnNj
cmlwdElkLCBhcmdzLmxpbmVOdW1iZXIsIDAgLyogY29sdW1uICovLCBhcmdzLmNvbmRpdGlvbik7
Ci0gICAgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0gPSBicmVha0lkOworICAgIHZh
ciBicmVha0lkID0gRGVidWcuc2V0U2NyaXB0QnJlYWtQb2ludEJ5SWQoYXJncy5zY3JpcHRJZCwg
YXJncy5saW5lTnVtYmVyLCAwIC8qIGNvbHVtbiAqLywgYXJncy5jb25kaXRpb24pOwogICAgIGlm
ICghYXJncy5lbmFibGVkKQogICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChi
cmVha0lkKTsKLSAgICByZXR1cm4gYnJlYWtJZDsKKworICAgIHZhciBhY3R1YWxMaW5lTnVtYmVy
ID0gYXJncy5saW5lTnVtYmVyOyAvLyBUT0RPOiByZXBsYWNlIHdpdGggcmVhbCBzdHVmZiBhZnRl
ciB2OCByb2xsLgorCisgICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0SWQgKyAiOiIgKyBhY3R1YWxM
aW5lTnVtYmVyOworICAgIGlmIChrZXkgaW4gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7
CisgICAgICAgIC8vIFJlbW92ZSBvbGQgYnJlYWtwb2ludC4KKyAgICAgICAgRGVidWcuZmluZEJy
ZWFrUG9pbnQoRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0sIHRydWUpOworICAgIH0K
KyAgICBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7CisgICAgcmV0
dXJuIERlYnVnZ2VyU2NyaXB0Ll92OFRvV2Via2l0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVy
KTsKIH0KIAogRGVidWdnZXJTY3JpcHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNT
dGF0ZSwgYXJncykK
</data>
<flag name="review"
          id="46843"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59898</attachid>
            <date>2010-06-28 08:04:07 -0700</date>
            <delta_ts>2010-06-28 09:26:20 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>28031</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjVlZDJkZC4uM2NlZWJiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wNi0yOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBXaGVuIHVzZXIgc2V0cyBicmVha3BvaW50IGZy
b20gVUksIGphdmFzY3JpcHQgZW5naW5lIG1heSBhY3R1YWxseSBzZXQKKyAgICAgICAgaXQgb24g
YSBkaWZmZXJlbnQgbGluZS4gSWYgc28sIG1vdmUgYnJlYWtwb2ludCB0byB0aGUgY29ycmVjdCBw
b3NpdGlvbgorICAgICAgICBpbiBmcm9udGVuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlz
cGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldEJyZWFrcG9p
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVt
b3ZlT25lVGltZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9z
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludE9uQmFja2VuZC5kaWRTZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQucHJvdG90eXBlLnNldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTI4ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBU
YW11cmEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDFm
ZDlhZTQuLmQxYjUxMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCkBAIC0xMzcsMTUgKzEzNywxNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNMaXN0
ZW5lcnNJbnRlcmVzdGVkSW5QYWdlKFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIG1fcGFnZUxpc3Rl
bmVyc01hcC5jb250YWlucyhwYWdlKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtw
b2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7
CiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAg
aWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQo
c291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAg
ICAgIGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2lu
dHMoKSkuZmlyc3Q7CiAgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7
CisgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0yNTUsNyArMjU3LDcgQEAgSmF2
YVNjcmlwdENhbGxGcmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQog
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZShTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKICAgICBBU1NFUlQobV9wYXVzZWQpOwotICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsgICAgICAgIAorICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IG1fY3VycmVu
dENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmgKaW5kZXggZGNmMjkwZS4uNmE4MjA5YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7
CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0Fj
dGl2YXRlZChib29sIGFjdGl2YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCmluZGV4IDM4ZmNkOGEuLjg4NzBlNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZ2UKICAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhl
IGFnZW50LgogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQg
YnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50LCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCogYWN0dWFsTGluZU51bWJlcikKIHsKICNpZiBFTkFCTEUoVjhf
U0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC0xNDAs
NyArMTQwLDEyIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlCiAgICAgYXJncy0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGJyZWFrcG9pbnQuZW5hYmxl
ZCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRGdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCkt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9pbnQiKSkpOwotICAgIHY4OjpEZWJ1Zzo6
Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZXN1bHQgPSB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludEZ1bmN0aW9uLCBhcmdz
KTsKKyAgICBpZiAoIXJlc3VsdC0+SXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEFTU0VSVChyZXN1bHQtPkludDMyVmFsdWUoKSA+PSAwKTsKKyAgICAqYWN0dWFsTGluZU51
bWJlciA9IHJlc3VsdC0+SW50MzJWYWx1ZSgpOworICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9
CiAKQEAgLTI5OSw3ICszMDQsNyBAQCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IFNj
cmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXco
ImN1cnJlbnRDYWxsRnJhbWUiKSkpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJn
dltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CiAgICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjggPSBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rpb24tPkNh
bGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7Ci0gICAgICAgIG1fY3VycmVudENh
bGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSh2ODo6RGVidWc6OkdldERlYnVn
Q29udGV4dCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGN1cnJlbnRDYWxsRnJhbWVW
OCkpOyAKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6
Y3JlYXRlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY3VycmVudENhbGxGcmFtZVY4KSk7CiAgICAgfQogICAgIHJldHVybiBtX2N1cnJl
bnRDYWxsRnJhbWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKaW5k
ZXggYjQ2ZjY3My4uMjZjYTc4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0
RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CiAgICAgdm9pZCBjbGVhckJy
ZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2
YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDhlOWUzMzAu
LmU4ODY2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0xNzgs
MTAgKzE3OCwxMCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlRGVidWdnZXIo
YWx3YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiB7CiAgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRC
cmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOworICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoY2FsbElkLCBzb3VyY2VJ
RCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggY2U1ZGQ5
OS4uMDM1YWJmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtODAsNyAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAg
ICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwogCi0gICAgdm9pZCBzZXRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgc2V0QnJlYWtwb2lu
dChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgdm9pZCByZW1v
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIp
OwogICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJy
ZWFrcG9pbnRzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4IGVh
YWNhZjAuLmI0YTY4Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCkBA
IC01NSw3ICs1NSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJv
b2xlYW4gYWx3YXlzKTsKIAotICAgICAgICB2b2lkIHNldEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxl
ZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgc2V0QnJlYWtwb2ludChp
biBsb25nIGNhbGxJZCwgaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVu
c2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA1MDIwNjM0Li4zNDYyOTRhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQsNyArMjQsNyBA
QAogICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtNzEyLDYgKzcxMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
Q29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgICAgICBtX3NvdXJjZUlEVG9V
UkwuY2xlYXIoKTsKICAgICAgICAgbV9zY3JpcHRJRFRvQ29udGVudC5jbGVhcigpOwogICAgICAg
ICBtX3N0aWNreUJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgICAgIG1fYnJlYWtwb2ludHNNYXBw
aW5nLmNsZWFyKCk7CiAgICAgICAgIG1fYnJlYWtwb2ludHNMb2FkZWQgPSBmYWxzZTsKICNlbmRp
ZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQpAQCAtMTczNSwx
OSArMTczNiwyNyBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y3VycmVudENhbGxGcmFtZXMoKQogICAgIHJldHVybiBpbmplY3RlZFNjcmlw
dC5jYWxsRnJhbWVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVu
YWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQog
ewogICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pOwot
ICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBs
aW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICB1bnNpZ25lZCBhY3R1YWxMaW5lTnVtYmVyID0g
MDsKKyAgICBib29sIHN1Y2Nlc3MgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJl
YWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgbGluZU51bWJlciwgJmFjdHVhbExpbmVOdW1i
ZXIpOworICAgIG1fZnJvbnRlbmQtPmRpZFNldEJyZWFrcG9pbnQoY2FsbElkLCBzdWNjZXNzLCBh
Y3R1YWxMaW5lTnVtYmVyKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKwog
ICAgIFN0cmluZyB1cmwgPSBtX3NvdXJjZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RyaW5nIGJyZWFrcG9pbnRJ
ZCA9IFN0cmluZzo6Zm9ybWF0KCIlczolZCIsIHNvdXJjZUlELnV0ZjgoKS5kYXRhKCksIGFjdHVh
bExpbmVOdW1iZXIpOworICAgIG1fYnJlYWtwb2ludHNNYXBwaW5nLnNldChicmVha3BvaW50SWQs
IGFjdHVhbExpbmVOdW1iZXIpOworCiAgICAgU3RyaW5nIGtleSA9IG1kNUJhc2UxNih1cmwpOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9z
dGlja3lCcmVha3BvaW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtw
b2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQoa2V5LCBT
b3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKLSAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVy
LCBicmVha3BvaW50KTsKKyAgICBpdC0+c2Vjb25kLnNldChhY3R1YWxMaW5lTnVtYmVyLCBicmVh
a3BvaW50KTsKICAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIApAQCAtMTc1OSw5ICsxNzY4LDE2
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBTdHJpbmc6OmZvcm1hdCgi
JXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgpLCBsaW5lTnVtYmVyKTsKKyAgICBpbnQgc3Rp
Y2t5TGluZSA9IG1fYnJlYWtwb2ludHNNYXBwaW5nLnRha2UoYnJlYWtwb2ludElkKTsKKyAgICBp
ZiAoc3RpY2t5TGluZSA8IDEpCisgICAgICAgIHJldHVybjsKKwogICAgIEhhc2hNYXA8U3RyaW5n
LCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5m
aW5kKG1kNUJhc2UxNih1cmwpKTsKLSAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5l
bmQoKSkKLSAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlcik7CisgICAgaWYgKGl0
ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0
LT5zZWNvbmQucmVtb3ZlKHN0aWNreUxpbmUpOwogICAgIHNhdmVCcmVha3BvaW50cygpOwogfQog
CkBAIC0xNzgxLDEwICsxNzk3LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFy
c2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiB1CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJy
ZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJy
ZWFrcG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJh
dG9yIGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0
LT5zZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0KSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RM
aW5lIDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsKLSAgICAgICAgICAgICAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludEl0LT5m
aXJzdCwgYnJlYWtwb2ludEl0LT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmQt
PnJlc3RvcmVkQnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBicmVha3BvaW50SXQtPmZpcnN0LCBi
cmVha3BvaW50SXQtPnNlY29uZC5lbmFibGVkLCBicmVha3BvaW50SXQtPnNlY29uZC5jb25kaXRp
b24pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBicmVha3Bv
aW50SXQtPmZpcnN0OworICAgICAgICAgICAgaWYgKGZpcnN0TGluZSA+IGxpbmVOdW1iZXIpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB1bnNpZ25lZCBhY3R1YWxMaW5l
TnVtYmVyID0gMDsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50SXQtPnNlY29uZCwg
bGluZU51bWJlciwgJmFjdHVhbExpbmVOdW1iZXIpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVz
dG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCB1cmwsIGFjdHVhbExpbmVOdW1iZXIsIGJyZWFrcG9p
bnRJdC0+c2Vjb25kLmVuYWJsZWQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmNvbmRpdGlvbik7Cisg
ICAgICAgICAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gU3RyaW5nOjpmb3JtYXQoIiVzOiVkIiwg
c291cmNlSUQudXRmOCgpLmRhdGEoKSwgYWN0dWFsTGluZU51bWJlcik7CisgICAgICAgICAgICBt
X2JyZWFrcG9pbnRzTWFwcGluZy5zZXQoYnJlYWtwb2ludElkLCBsaW5lTnVtYmVyKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBtX3NvdXJjZUlEVG9VUkwuc2V0KHNvdXJjZUlELCB1cmwpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGIyZDFkNWEuLjZkMjJmOTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI4OSw3ICsyODks
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24p
OworICAgIHZvaWQgc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNv
bmRpdGlvbik7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
IGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CkBAIC0zODQsNiArMzg0
LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9V
Ukw7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9zY3JpcHRJRFRvQ29udGVudDsKICAg
ICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7
CisgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAgYm9v
bCBtX2JyZWFrcG9pbnRzTG9hZGVkOwogCiAgICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBjZGU1YTcwLi5mZWU0NjMw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC0zMjEsNiArMzIx
LDE2IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQoKQogICAg
IGNhbGxTaW1wbGVGdW5jdGlvbigiZGVidWdnZXJXYXNEaXNhYmxlZCIpOwogfQogCit2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpkaWRTZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nl
c3MsIHVuc2lnbmVkIGxpbmUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
ZGlkU2V0QnJlYWtwb2ludCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7
CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CisgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQobGluZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpwYXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50
IHNjcmlwdFdvcmxkVHlwZSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93
ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5oCmluZGV4IDBiMTk5ODMuLmUwMmI2NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuaApAQCAtMTAxLDYgKzEwMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBkZWJ1Z2dlcldhc0VuYWJsZWQoKTsKICAgICAgICAgdm9pZCBkZWJ1Z2dlcldhc0Rpc2Fi
bGVkKCk7CiAKKyAgICAgICAgdm9pZCBkaWRTZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBib29s
IHN1Y2Nlc3MsIHVuc2lnbmVkIGxpbmUpOworCiAgICAgICAgIHZvaWQgcGFyc2VkU2NyaXB0U291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBzY3JpcHRXb3JsZFR5cGUpOwogICAgICAgICB2
b2lkIHJlc3RvcmVkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJp
bmcmIHVybCwgaW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24p
OwogICAgICAgICB2b2lkIGZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDkzNTZiN2EuLjBjZjcxNzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTM2
LDQxICszNiwzNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKLSAgICAg
ICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCh0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQo
dGhpcy5fb25lVGltZUJyZWFrcG9pbnQuc291cmNlSUQsIHRoaXMuX29uZVRpbWVCcmVha3BvaW50
LmxpbmUpOwogICAgICAgICB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CiAg
ICAgICAgIC8vIEZJWE1FKDQwNjY5KTogb25lIHRpbWUgYnJlYWtwb2ludCB3aWxsIGJlIHBlcnNp
c3RlZCBpbiBpbnNwZWN0b3Igc2V0dGluZ3MgaWYgbm90IGhpdC4KLSAgICAgICAgdGhpcy5fc2F2
ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuX3NldEJyZWFr
cG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIHJlbW92ZU9u
ZVRpbWVCcmVha3BvaW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fb25l
VGltZUJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9t
QmFja2VuZCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7CisgICAgICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuc291cmNlSUQs
IHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmxpbmUpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X29uZVRpbWVCcmVha3BvaW50OwogICAgICAgICB9CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9p
bnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
bikKKyAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRo
aXMuX2FkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29u
ZGl0aW9uKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3BvaW50KHNv
dXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiAgICAgICAgIGlm
IChicmVha3BvaW50KQotICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQo
YnJlYWtwb2ludCk7CisgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJy
ZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICByZXN0b3JlZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNv
dXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7Ci0gICAg
ICAgIHRoaXMuX2FkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKTsKKyAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgc291
cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgIH0sCiAKICAgICByZW1vdmVC
cmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKCEoYnJl
YWtwb2ludC5pZCBpbiB0aGlzLl9icmVha3BvaW50cykpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7Ci0gICAgICAgIGRlbGV0ZSBi
cmVha3BvaW50Ll9icmVha3BvaW50TWFuYWdlcjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFr
cG9pbnRzW2JyZWFrcG9pbnQuaWRdOwotICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJv
bUJhY2tlbmQoYnJlYWtwb2ludCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKCJicmVha3BvaW50LXJlbW92ZWQiLCBicmVha3BvaW50KTsKKyAgICAgICAgaWYgKHRoaXMu
X3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkpCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5l
KTsKICAgICB9LAogCiAgICAgYnJlYWtwb2ludHNGb3JTb3VyY2VJRDogZnVuY3Rpb24oc291cmNl
SUQpCkBAIC05OSw3ICs5NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICB9
LAogCi0gICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxp
bmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291
cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKICAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcywgc291
cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKICAgICAgICAgaWYg
KHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQpAQCAtMTExLDE0ICsxMDYsMzggQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAotICAgIF9zYXZlQnJlYWtwb2ludE9uQmFja2VuZDog
ZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0
QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9p
bnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgIH0sCi0KLSAgICBfcmVtb3Zl
QnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9yZW1vdmVC
cmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQu
bGluZSk7CisgICAgICAgIGlmICghKGJyZWFrcG9pbnQuaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVha3BvaW50LnJlbW92ZUFs
bExpc3RlbmVycygpOworICAgICAgICBkZWxldGUgYnJlYWtwb2ludC5fYnJlYWtwb2ludE1hbmFn
ZXI7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3ZlZCIs
IGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgX3NldEJy
ZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGlzT25lVGltZSkKKyAgICB7
CisgICAgICAgIHZhciB0aGF0ID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtw
b2ludChzdWNjZXNzLCBsaW5lKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3VjY2VzcyAm
JiBsaW5lID09IGJyZWFrcG9pbnQubGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBpZiAoaXNPbmVUaW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisg
ICAgICAgICAgICAgICAgICAgIHRoYXQuX29uZVRpbWVCcmVha3BvaW50LmxpbmUgPSBsaW5lOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoYXQuX29u
ZVRpbWVCcmVha3BvaW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
aGF0Ll9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgIGlmIChz
dWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZXRCcmVha3BvaW50KGJyZWFrcG9p
bnQuc291cmNlSUQsIGJyZWFrcG9pbnQuc291cmNlVVJMLCBsaW5lLCBicmVha3BvaW50LmVuYWJs
ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2YXIgY2FsbGJhY2tJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGRpZFNldEJy
ZWFrcG9pbnQpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoY2FsbGJh
Y2tJZCwgYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVu
YWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZygi
X3NldEJyZWFrcG9pbnRPbkJhY2tlbmQgIiArIGJyZWFrcG9pbnQuc291cmNlSUQpOwogICAgIH0K
IH0KIApAQCAtMTQ3LDcgKzE2Niw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9lbmFibGVkID0geDsK
LSAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NhdmVCcmVha3BvaW50T25CYWNrZW5k
KHRoaXMpOworICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc2V0QnJlYWtwb2ludE9u
QmFja2VuZCh0aGlzKTsKICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpCiAgICAgICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlZCIpOwogICAgICAgICBlbHNlCkBA
IC0xODksOSArMjA4LDExIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsK
IAogICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOwogICAgICAgICBpZiAodGhpcy5lbmFibGVk
KQotICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NhdmVCcmVha3BvaW50T25C
YWNrZW5kKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NldEJy
ZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKCJjb25kaXRpb24tY2hhbmdlZCIpOwogICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90
eXBlOworCitXZWJJbnNwZWN0b3IuZGlkU2V0QnJlYWtwb2ludCA9IFdlYkluc3BlY3Rvci5DYWxs
YmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKaW5kZXggMWFlMzJiNS4uNzYxZTg3NiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpz
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5q
cwpAQCAtMTY1LDggKzE2NSw5IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5w
cm90b3R5cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7
CiAgICAgfSwKIAotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBl
bmFibGVkLCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oY2FsbElkLCBz
b3VyY2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRpZFNldEJyZWFrcG9pbnQoY2FsbElkLCB0cnVlLCBsaW5lKTsKICAgICB9LAogCiAg
ICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCmluZGV4IDE4ODNmYjMuLmM1NzY1MTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCkBAIC05Niw3ICs5Niw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgIF9hZGRCcmVh
a3BvaW50OiBmdW5jdGlvbihsaW5lKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQodGhpcy5zY3JpcHQuc291cmNlSUQsIHRoaXMuc2Ny
aXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOworICAgICAgICBXZWJJbnNwZWN0b3IuYnJl
YWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludCh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgdGhpcy5z
Y3JpcHQuc291cmNlVVJMLCBsaW5lLCB0cnVlLCAiIik7CiAgICAgfSwKIAogICAgIF9lZGl0TGlu
ZUNvbXBsZXRlOiBmdW5jdGlvbihuZXdCb2R5KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggOWU5YjJlYy4uZjIyZWFhMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBAIC0zNjcsNyArMzY3LDcgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdmFy
IG5ld0xpbmUgPSBicmVha3BvaW50LmxpbmU7CiAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgYnJlYWtwb2ludC5saW5lID49IGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIG5ld0xpbmUg
Kz0gbGluZXNDb3VudFRvU2hpZnQ7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQudXJsLCBuZXdM
aW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludChzb3Vy
Y2VJRCwgYnJlYWtwb2ludC51cmwsIG5ld0xpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtw
b2ludC5jb25kaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICB2YXIg
Y2FsbGJhY2tJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG15Y2FsbGJhY2suYmluZCh0
aGlzKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKaW5kZXggZTRk
N2ZlZC4uYWFjM2E3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcu
anMKQEAgLTEyNyw3ICsxMjcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUpCiAgICAgewogICAgICAgICB2
YXIgc291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZvckxpbmUobGluZSk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHNvdXJjZUlELCB0aGlzLnJl
c291cmNlLnVybCwgbGluZSwgdHJ1ZSwgIiIpOworICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtw
b2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxp
bmUsIHRydWUsICIiKTsKICAgICB9LAogCiAgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0ZGQxNDFlLi4xOGJmMzJlIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0xNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZp
bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZXR1cm4gbGluZSBudW1iZXIgd2hlcmUgYnJlYWtw
b2ludCB3YXMgYWN0dWFsbHkgc2V0IGJ5IHY4IGZyb20gc2V0QnJlYWtwb2ludCBmdW5jdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisK
KyAgICAgICAgKiBzcmMvanMvRGVidWdnZXJTY3JpcHQuanM6CisgICAgICAgICgpOgorCiAyMDEw
LTA2LTI1ICBZdXpvIEZ1amlzaGltYSAgPHl1em9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvRGVidWdnZXJTY3JpcHQuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2Vy
U2NyaXB0LmpzCmluZGV4IGJhZGRiN2QuLjRhNTgxZTYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9EZWJ1Z2dlclNjcmlwdC5qcwpAQCAtOTMsMjIgKzkzLDE5IEBAIERlYnVnZ2VyU2NyaXB0Ll9m
b3JtYXRTY3JpcHQgPSBmdW5jdGlvbihzY3JpcHQpCiBEZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3Bv
aW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQogewogICAgIGFyZ3MubGluZU51bWJlciA9
IERlYnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdzLmxpbmVOdW1iZXIpOwot
ICAgIHZhciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsgYXJncy5saW5lTnVtYmVyOwotICAg
IHZhciBicmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07Ci0gICAgaWYg
KGJyZWFrSWQpIHsKLSAgICAgICAgaWYgKGFyZ3MuZW5hYmxlZCkKLSAgICAgICAgICAgIERlYnVn
LmVuYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwotICAgICAgICBEZWJ1
Zy5jaGFuZ2VTY3JpcHRCcmVha1BvaW50Q29uZGl0aW9uKGJyZWFrSWQsIGFyZ3MuY29uZGl0aW9u
KTsKLSAgICAgICAgcmV0dXJuIGJyZWFrSWQ7Ci0gICAgfQotCi0gICAgYnJlYWtJZCA9IERlYnVn
LnNldFNjcmlwdEJyZWFrUG9pbnRCeUlkKGFyZ3Muc2NyaXB0SWQsIGFyZ3MubGluZU51bWJlciwg
MCAvKiBjb2x1bW4gKi8sIGFyZ3MuY29uZGl0aW9uKTsKLSAgICBEZWJ1Z2dlclNjcmlwdC5fYnJl
YWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7CisgICAgdmFyIGJyZWFrSWQgPSBEZWJ1Zy5zZXRTY3Jp
cHRCcmVha1BvaW50QnlJZChhcmdzLnNjcmlwdElkLCBhcmdzLmxpbmVOdW1iZXIsIDAgLyogY29s
dW1uICovLCBhcmdzLmNvbmRpdGlvbik7CiAgICAgaWYgKCFhcmdzLmVuYWJsZWQpCiAgICAgICAg
IERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwotICAgIHJldHVybiBicmVh
a0lkOworCisgICAgdmFyIGFjdHVhbExpbmVOdW1iZXIgPSBhcmdzLmxpbmVOdW1iZXI7IC8vIFRP
RE86IHJlcGxhY2Ugd2l0aCByZWFsIHN0dWZmIGFmdGVyIHY4IHJvbGwuCisKKyAgICB2YXIga2V5
ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFjdHVhbExpbmVOdW1iZXI7CisgICAgaWYgKGtleSBp
biBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgLy8gUmVtb3ZlIG9sZCBi
cmVha3BvaW50LgorICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChEZWJ1Z2dlclNjcmlwdC5f
YnJlYWtwb2ludHNba2V5XSwgdHJ1ZSk7CisgICAgfQorICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVh
a3BvaW50c1trZXldID0gYnJlYWtJZDsKKyAgICByZXR1cm4gRGVidWdnZXJTY3JpcHQuX3Y4VG9X
ZWJraXRMaW5lTnVtYmVyKGFjdHVhbExpbmVOdW1iZXIpOwogfQogCiBEZWJ1Z2dlclNjcmlwdC5y
ZW1vdmVCcmVha3BvaW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59903</attachid>
            <date>2010-06-28 09:26:20 -0700</date>
            <delta_ts>2010-06-28 10:08:57 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>28234</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjVlZDJkZC4uM2NlZWJiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wNi0yOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBXaGVuIHVzZXIgc2V0cyBicmVha3BvaW50IGZy
b20gVUksIGphdmFzY3JpcHQgZW5naW5lIG1heSBhY3R1YWxseSBzZXQKKyAgICAgICAgaXQgb24g
YSBkaWZmZXJlbnQgbGluZS4gSWYgc28sIG1vdmUgYnJlYWtwb2ludCB0byB0aGUgY29ycmVjdCBw
b3NpdGlvbgorICAgICAgICBpbiBmcm9udGVuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlz
cGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldEJyZWFrcG9p
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVt
b3ZlT25lVGltZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9z
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludE9uQmFja2VuZC5kaWRTZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQucHJvdG90eXBlLnNldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTI4ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBU
YW11cmEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDFm
ZDlhZTQuLmQxYjUxMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCkBAIC0xMzcsMTUgKzEzNywxNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNMaXN0
ZW5lcnNJbnRlcmVzdGVkSW5QYWdlKFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIG1fcGFnZUxpc3Rl
bmVyc01hcC5jb250YWlucyhwYWdlKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtw
b2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7
CiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAg
aWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQo
c291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAg
ICAgIGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2lu
dHMoKSkuZmlyc3Q7CiAgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7
CisgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0yNTUsNyArMjU3LDcgQEAgSmF2
YVNjcmlwdENhbGxGcmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQog
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZShTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKICAgICBBU1NFUlQobV9wYXVzZWQpOwotICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsgICAgICAgIAorICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IG1fY3VycmVu
dENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmgKaW5kZXggZGNmMjkwZS4uNmE4MjA5YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7
CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0Fj
dGl2YXRlZChib29sIGFjdGl2YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCmluZGV4IDM4ZmNkOGEuLjg4NzBlNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZ2UKICAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhl
IGFnZW50LgogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQg
YnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50LCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCogYWN0dWFsTGluZU51bWJlcikKIHsKICNpZiBFTkFCTEUoVjhf
U0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC0xNDAs
NyArMTQwLDEyIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlCiAgICAgYXJncy0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGJyZWFrcG9pbnQuZW5hYmxl
ZCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRGdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCkt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9pbnQiKSkpOwotICAgIHY4OjpEZWJ1Zzo6
Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZXN1bHQgPSB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludEZ1bmN0aW9uLCBhcmdz
KTsKKyAgICBpZiAoIXJlc3VsdC0+SXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEFTU0VSVChyZXN1bHQtPkludDMyVmFsdWUoKSA+PSAwKTsKKyAgICAqYWN0dWFsTGluZU51
bWJlciA9IHJlc3VsdC0+SW50MzJWYWx1ZSgpOworICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9
CiAKQEAgLTI5OSw3ICszMDQsNyBAQCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IFNj
cmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXco
ImN1cnJlbnRDYWxsRnJhbWUiKSkpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJn
dltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CiAgICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjggPSBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rpb24tPkNh
bGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7Ci0gICAgICAgIG1fY3VycmVudENh
bGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSh2ODo6RGVidWc6OkdldERlYnVn
Q29udGV4dCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGN1cnJlbnRDYWxsRnJhbWVW
OCkpOyAKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6
Y3JlYXRlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY3VycmVudENhbGxGcmFtZVY4KSk7CiAgICAgfQogICAgIHJldHVybiBtX2N1cnJl
bnRDYWxsRnJhbWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKaW5k
ZXggYjQ2ZjY3My4uMjZjYTc4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0
RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CiAgICAgdm9pZCBjbGVhckJy
ZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2
YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDhlOWUzMzAu
LmU4ODY2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0xNzgs
MTAgKzE3OCwxMCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlRGVidWdnZXIo
YWx3YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiB7CiAgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRC
cmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOworICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoY2FsbElkLCBzb3VyY2VJ
RCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggY2U1ZGQ5
OS4uMDM1YWJmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtODAsNyAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAg
ICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwogCi0gICAgdm9pZCBzZXRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgc2V0QnJlYWtwb2lu
dChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgdm9pZCByZW1v
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIp
OwogICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJy
ZWFrcG9pbnRzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4IGVh
YWNhZjAuLmI0YTY4Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCkBA
IC01NSw3ICs1NSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJv
b2xlYW4gYWx3YXlzKTsKIAotICAgICAgICB2b2lkIHNldEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxl
ZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgc2V0QnJlYWtwb2ludChp
biBsb25nIGNhbGxJZCwgaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVu
c2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA1MDIwNjM0Li5jNTc1YjViIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQsNyArMjQsNyBA
QAogICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtMTYzLDYgKzE2MywxMSBAQCBTdHJpbmcgbWQ1QmFzZTE2KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUo
KSk7CiB9CiAKK1N0cmluZyBmb3JtYXRCcmVha3BvaW50SWQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVz
OiVkIiwgc291cmNlSUQudXRmOCgpLmRhdGEoKSwgbGluZU51bWJlcik7Cit9CisKIH0KIAogSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKQEAgLTcxMiw2ICs3MTcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgbV9z
b3VyY2VJRFRvVVJMLmNsZWFyKCk7CiAgICAgICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIo
KTsKICAgICAgICAgbV9zdGlja3lCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5jbGVhcigpOwogICAgICAgICBtX2JyZWFrcG9pbnRzTG9hZGVkID0gZmFs
c2U7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
QEAgLTE3MzUsMTkgKzE3NDEsMjcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5q
ZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNv
bmRpdGlvbikKIHsKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQoZW5hYmxlZCwgY29u
ZGl0aW9uKTsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChz
b3VyY2VJRCwgbGluZU51bWJlciwgYnJlYWtwb2ludCk7CisgICAgdW5zaWduZWQgYWN0dWFsTGlu
ZU51bWJlciA9IDA7CisgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsICZhY3R1
YWxMaW5lTnVtYmVyKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwg
c3VjY2VzcywgYWN0dWFsTGluZU51bWJlcik7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm47CisKICAgICBTdHJpbmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3VyY2VJRCk7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZyBi
cmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExpbmVOdW1i
ZXIpOworICAgIG1fYnJlYWtwb2ludHNNYXBwaW5nLnNldChicmVha3BvaW50SWQsIGFjdHVhbExp
bmVOdW1iZXIpOworCiAgICAgU3RyaW5nIGtleSA9IG1kNUJhc2UxNih1cmwpOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVh
a3BvaW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5k
KCkpCiAgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQoa2V5LCBTb3VyY2VCcmVh
a3BvaW50cygpKS5maXJzdDsKLSAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBicmVha3Bv
aW50KTsKKyAgICBpdC0+c2Vjb25kLnNldChhY3R1YWxMaW5lTnVtYmVyLCBicmVha3BvaW50KTsK
ICAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIApAQCAtMTc1OSw5ICsxNzczLDE2IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNl
SUQsIGxpbmVOdW1iZXIpOworICAgIGludCBzdGlja3lMaW5lID0gbV9icmVha3BvaW50c01hcHBp
bmcudGFrZShicmVha3BvaW50SWQpOworICAgIGlmIChzdGlja3lMaW5lIDwgMSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0
b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwotICAgIGlm
IChpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLnJl
bW92ZShsaW5lTnVtYmVyKTsKKyAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC5yZW1vdmUoc3RpY2t5TGluZSk7
CiAgICAgc2F2ZUJyZWFrcG9pbnRzKCk7CiB9CiAKQEAgLTE3ODEsMTAgKzE4MDIsMTYgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBjb25zdCBTdHJpbmcmIHUKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2lu
dHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJs
KSk7CiAgICAgaWYgKGl0ICE9IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpIHsKICAgICAgICAg
Zm9yIChTb3VyY2VCcmVha3BvaW50czo6aXRlcmF0b3IgYnJlYWtwb2ludEl0ID0gaXQtPnNlY29u
ZC5iZWdpbigpOyBicmVha3BvaW50SXQgIT0gaXQtPnNlY29uZC5lbmQoKTsgKyticmVha3BvaW50
SXQpIHsKLSAgICAgICAgICAgIGlmIChmaXJzdExpbmUgPD0gYnJlYWtwb2ludEl0LT5maXJzdCkg
ewotICAgICAgICAgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3Bv
aW50KHNvdXJjZUlELCBicmVha3BvaW50SXQtPmZpcnN0LCBicmVha3BvaW50SXQtPnNlY29uZCk7
Ci0gICAgICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlE
LCB1cmwsIGJyZWFrcG9pbnRJdC0+Zmlyc3QsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmVuYWJsZWQs
IGJyZWFrcG9pbnRJdC0+c2Vjb25kLmNvbmRpdGlvbik7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbnQgbGluZU51bWJlciA9IGJyZWFrcG9pbnRJdC0+Zmlyc3Q7CisgICAgICAgICAgICBp
ZiAoZmlyc3RMaW5lID4gbGluZU51bWJlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGFjdHVhbExpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291
cmNlSUQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLCBsaW5lTnVtYmVyLCAmYWN0dWFsTGluZU51bWJl
cik7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHVy
bCwgYWN0dWFsTGluZU51bWJlciwgYnJlYWtwb2ludEl0LT5zZWNvbmQuZW5hYmxlZCwgYnJlYWtw
b2ludEl0LT5zZWNvbmQuY29uZGl0aW9uKTsKKyAgICAgICAgICAgIFN0cmluZyBicmVha3BvaW50
SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExpbmVOdW1iZXIpOworICAg
ICAgICAgICAgbV9icmVha3BvaW50c01hcHBpbmcuc2V0KGJyZWFrcG9pbnRJZCwgbGluZU51bWJl
cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9zb3VyY2VJRFRvVVJMLnNldChzb3VyY2VJRCwg
dXJsKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBiMmQxZDVh
Li42ZDIyZjk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0y
ODksNyArMjg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYg
Y29uZGl0aW9uKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24pOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1h
cDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzTWFwOwpAQCAt
Mzg0LDYgKzM4NCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9z
b3VyY2VJRFRvVVJMOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc2NyaXB0SURUb0Nv
bnRlbnQ7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPiBtX3N0aWNreUJy
ZWFrcG9pbnRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IG1fYnJlYWtwb2ludHNNYXBwaW5n
OwogICAgIGJvb2wgbV9icmVha3BvaW50c0xvYWRlZDsKIAogICAgIGJvb2wgbV9wcm9maWxlckVu
YWJsZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5j
cHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggY2RlNWE3
MC4uZmVlNDYzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAt
MzIxLDYgKzMyMSwxNiBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkZWJ1Z2dlcldhc0Rpc2Fi
bGVkKCkKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oImRlYnVnZ2VyV2FzRGlzYWJsZWQiKTsKIH0K
IAordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwg
Ym9vbCBzdWNjZXNzLCB1bnNpZ25lZCBsaW5lKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoImRpZFNldEJyZWFrcG9pbnQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGxpbmUpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJz
dExpbmUsIGludCBzY3JpcHRXb3JsZFR5cGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaAppbmRleCAwYjE5OTgzLi5lMDJiNjYxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmgKQEAgLTEwMSw2ICsxMDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgZGVidWdn
ZXJXYXNEaXNhYmxlZCgpOwogCisgICAgICAgIHZvaWQgZGlkU2V0QnJlYWtwb2ludChsb25nIGNh
bGxJZCwgYm9vbCBzdWNjZXNzLCB1bnNpZ25lZCBsaW5lKTsKKwogICAgICAgICB2b2lkIHBhcnNl
ZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgc2NyaXB0V29ybGRUeXBlKTsK
ICAgICAgICAgdm9pZCByZXN0b3JlZEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBsaW5lLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYg
Y29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJv
ckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCA5MzU2YjdhLi43MDlhOWMy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2Vy
LmpzCkBAIC0zNiw0MSArMzYsMzYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRd
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9p
bnQpCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQodGhpcy5f
b25lVGltZUJyZWFrcG9pbnQpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KHRoaXMuX29uZVRpbWVCcmVha3BvaW50LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1l
QnJlYWtwb2ludC5saW5lKTsKICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQgPSBicmVh
a3BvaW50OwogICAgICAgICAvLyBGSVhNRSg0MDY2OSk6IG9uZSB0aW1lIGJyZWFrcG9pbnQgd2ls
bCBiZSBwZXJzaXN0ZWQgaW4gaW5zcGVjdG9yIHNldHRpbmdzIGlmIG5vdCBoaXQuCi0gICAgICAg
IHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICB0aGlz
Ll9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQsIHRydWUpOwogICAgIH0sCiAKICAg
ICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYg
KHRoaXMuX29uZVRpbWVCcmVha3BvaW50KSB7Ci0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVh
a3BvaW50RnJvbUJhY2tlbmQodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpOworICAgICAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KHRoaXMuX29uZVRpbWVCcmVha3BvaW50
LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5saW5lKTsKICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBh
ZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJj
ZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVu
YWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fc2V0QnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwog
ICAgICAgICBpZiAoYnJlYWtwb2ludCkKLSAgICAgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50
T25CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9u
QmFja2VuZChicmVha3BvaW50KTsKICAgICB9LAogCiAgICAgcmVzdG9yZWRCcmVha3BvaW50OiBm
dW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAg
ICAgewotICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxp
bmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291
cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKICAgICB9LAogCiAg
ICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAg
IGlmICghKGJyZWFrcG9pbnQuaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBicmVha3BvaW50LnJlbW92ZUFsbExpc3RlbmVycygpOwotICAgICAg
ICBkZWxldGUgYnJlYWtwb2ludC5fYnJlYWtwb2ludE1hbmFnZXI7Ci0gICAgICAgIGRlbGV0ZSB0
aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1yZW1vdmVkIiwgYnJlYWtwb2ludCk7CisgICAgICAg
IGlmICh0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpKQorICAgICAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFr
cG9pbnQubGluZSk7CiAgICAgfSwKIAogICAgIGJyZWFrcG9pbnRzRm9yU291cmNlSUQ6IGZ1bmN0
aW9uKHNvdXJjZUlEKQpAQCAtOTksNyArOTQsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9p
bnQ7CiAgICAgfSwKIAotICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291
cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgX3NldEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiAg
ICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKQEAgLTExMSwxNCAr
MTA2LDM2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiBicmVha3BvaW50OwogICAgIH0sCiAKLSAgICBfc2F2ZUJyZWFrcG9pbnRP
bkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5l
LCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICB9LAotCi0g
ICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAg
ICBfcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAg
IEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBi
cmVha3BvaW50LmxpbmUpOworICAgICAgICBpZiAoIShicmVha3BvaW50LmlkIGluIHRoaXMuX2Jy
ZWFrcG9pbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWtwb2lu
dC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTsKKyAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JyZWFr
cG9pbnRNYW5hZ2VyOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2lu
dC5pZF07CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50
LXJlbW92ZWQiLCBicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwKKwor
ICAgIF9zZXRCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50LCBpc09uZVRp
bWUpCisgICAgeworICAgICAgICBmdW5jdGlvbiBkaWRTZXRCcmVha3BvaW50KHN1Y2Nlc3MsIGxp
bmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGxpbmUgPT0gYnJlYWtw
b2ludC5saW5lKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChpc09u
ZVRpbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSA9IGxpbmU7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJl
YWtwb2ludC5zb3VyY2VVUkwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBjYWxsYmFj
a0lkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRo
aXMpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGNhbGxiYWNrSWQs
IGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5lbmFibGVk
LCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgfQogfQogCkBAIC0xNDcsNyArMTY0LDcgQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSB4OwotICAgICAgICB0aGlzLl9icmVha3BvaW50
TWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CisgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRNYW5hZ2VyLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwogICAgICAgICBp
ZiAodGhpcy5fZW5hYmxlZCkKICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKCJlbmFibGVkIik7CiAgICAgICAgIGVsc2UKQEAgLTE4OSw5ICsyMDYsMTEgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2NvbmRpdGlv
biA9IGM7CiAgICAgICAgIGlmICh0aGlzLmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9icmVh
a3BvaW50TWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CisgICAgICAgICAg
ICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc2V0QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsK
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2Vk
Iik7CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5kaWRT
ZXRCcmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1
Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5q
cwppbmRleCAxYWUzMmI1Li43NjFlODc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0xNjUsOCArMTY1LDkgQEAgV2Vi
SW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICB9LAogCi0gICAgc2V0QnJlYWtw
b2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICBz
ZXRCcmVha3BvaW50OiBmdW5jdGlvbihjYWxsSWQsIHNvdXJjZUlELCBsaW5lLCBlbmFibGVkLCBj
b25kaXRpb24pCiAgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZGlkU2V0QnJlYWtwb2ludChj
YWxsSWQsIHRydWUsIGxpbmUpOwogICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5j
dGlvbihzb3VyY2VJRCwgbGluZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZp
ZXcuanMKaW5kZXggMTg4M2ZiMy4uYzU3NjUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdFZpZXcuanMKQEAgLTk2LDcgKzk2LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZp
ZXcucHJvdG90eXBlID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUpCiAg
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2lu
dCh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgdGhpcy5zY3JpcHQuc291cmNlVVJMLCBsaW5lLCB0cnVl
LCAiIik7CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3Bv
aW50KHRoaXMuc2NyaXB0LnNvdXJjZUlELCB0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRy
dWUsICIiKTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0Jv
ZHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVs
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA5
ZTliMmVjLi5mMjJlYWExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRz
UGFuZWwuanMKQEAgLTM2Nyw3ICszNjcsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB2YXIgbmV3TGluZSA9IGJyZWFrcG9pbnQubGlu
ZTsKICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBicmVha3BvaW50LmxpbmUgPj0gbGlu
ZSkKICAgICAgICAgICAgICAgICAgICAgbmV3TGluZSArPSBsaW5lc0NvdW50VG9TaGlmdDsKLSAg
ICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2lu
dChzb3VyY2VJRCwgYnJlYWtwb2ludC51cmwsIG5ld0xpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwg
YnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5icmVh
a3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LnVybCwgbmV3
TGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH07CiAgICAgICAgIHZhciBjYWxsYmFja0lkID0gV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLndyYXAobXljYWxsYmFjay5iaW5kKHRoaXMpKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlVmlldy5qcwppbmRleCBlNGQ3ZmVkLi5hYWMzYTc1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwpAQCAtMTI3LDcgKzEyNyw3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICBfYWRkQnJlYWtwb2ludDog
ZnVuY3Rpb24obGluZSkKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJj
ZUlERm9yTGluZShsaW5lKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2Vy
LmFkZEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAi
Iik7CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50
KHNvdXJjZUlELCB0aGlzLnJlc291cmNlLnVybCwgbGluZSwgdHJ1ZSwgIiIpOwogICAgIH0sCiAK
ICAgICBfcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDRkZDE0MWUuLjE4YmYzMmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEw
LTA2LTE3ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJldHVybiBsaW5lIG51bWJlciB3aGVyZSBicmVha3BvaW50IHdhcyBhY3R1YWxseSBzZXQgYnkg
djggZnJvbSBzZXRCcmVha3BvaW50IGZ1bmN0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3ODEKKworICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dl
clNjcmlwdC5qczoKKyAgICAgICAgKCk6CisKIDIwMTAtMDYtMjUgIFl1em8gRnVqaXNoaW1hICA8
eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWpp
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKaW5kZXggYmFkZGI3ZC4u
NGE1ODFlNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlw
dC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC05
MywyMiArOTMsMTkgQEAgRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdCA9IGZ1bmN0aW9uKHNj
cmlwdCkKIERlYnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVjU3RhdGUs
IGFyZ3MpCiB7CiAgICAgYXJncy5saW5lTnVtYmVyID0gRGVidWdnZXJTY3JpcHQuX3dlYmtpdFRv
VjhMaW5lTnVtYmVyKGFyZ3MubGluZU51bWJlcik7Ci0gICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0
SWQgKyAiOiIgKyBhcmdzLmxpbmVOdW1iZXI7Ci0gICAgdmFyIGJyZWFrSWQgPSBEZWJ1Z2dlclNj
cmlwdC5fYnJlYWtwb2ludHNba2V5XTsKLSAgICBpZiAoYnJlYWtJZCkgewotICAgICAgICBpZiAo
YXJncy5lbmFibGVkKQotICAgICAgICAgICAgRGVidWcuZW5hYmxlU2NyaXB0QnJlYWtQb2ludChi
cmVha0lkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgRGVidWcuZGlzYWJsZVNjcmlwdEJy
ZWFrUG9pbnQoYnJlYWtJZCk7Ci0gICAgICAgIERlYnVnLmNoYW5nZVNjcmlwdEJyZWFrUG9pbnRD
b25kaXRpb24oYnJlYWtJZCwgYXJncy5jb25kaXRpb24pOwotICAgICAgICByZXR1cm4gYnJlYWtJ
ZDsKLSAgICB9Ci0KLSAgICBicmVha0lkID0gRGVidWcuc2V0U2NyaXB0QnJlYWtQb2ludEJ5SWQo
YXJncy5zY3JpcHRJZCwgYXJncy5saW5lTnVtYmVyLCAwIC8qIGNvbHVtbiAqLywgYXJncy5jb25k
aXRpb24pOwotICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldID0gYnJlYWtJZDsK
KyAgICB2YXIgYnJlYWtJZCA9IERlYnVnLnNldFNjcmlwdEJyZWFrUG9pbnRCeUlkKGFyZ3Muc2Ny
aXB0SWQsIGFyZ3MubGluZU51bWJlciwgMCAvKiBjb2x1bW4gKi8sIGFyZ3MuY29uZGl0aW9uKTsK
ICAgICBpZiAoIWFyZ3MuZW5hYmxlZCkKICAgICAgICAgRGVidWcuZGlzYWJsZVNjcmlwdEJyZWFr
UG9pbnQoYnJlYWtJZCk7Ci0gICAgcmV0dXJuIGJyZWFrSWQ7CisKKyAgICB2YXIgYWN0dWFsTGlu
ZU51bWJlciA9IGFyZ3MubGluZU51bWJlcjsgLy8gVE9ETzogcmVwbGFjZSB3aXRoIHJlYWwgc3R1
ZmYgYWZ0ZXIgdjggcm9sbC4KKworICAgIHZhciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsg
YWN0dWFsTGluZU51bWJlcjsKKyAgICBpZiAoa2V5IGluIERlYnVnZ2VyU2NyaXB0Ll9icmVha3Bv
aW50cykgeworICAgICAgICAvLyBSZW1vdmUgb2xkIGJyZWFrcG9pbnQuCisgICAgICAgIERlYnVn
LmZpbmRCcmVha1BvaW50KERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldLCB0cnVlKTsK
KyAgICB9CisgICAgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0gPSBicmVha0lkOwor
ICAgIHJldHVybiBEZWJ1Z2dlclNjcmlwdC5fdjhUb1dlYmtpdExpbmVOdW1iZXIoYWN0dWFsTGlu
ZU51bWJlcik7CiB9CiAKIERlYnVnZ2VyU2NyaXB0LnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlv
bihleGVjU3RhdGUsIGFyZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59905</attachid>
            <date>2010-06-28 10:08:57 -0700</date>
            <delta_ts>2010-06-29 03:05:34 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>pb.diff</filename>
            <type>text/plain</type>
            <size>28386</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjVlZDJkZC4uM2NlZWJiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0wNi0yOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzaG93IGFjdHVhbCBicmVha3Bv
aW50IHBvc2l0aW9uIGluIFVJLgorICAgICAgICBXaGVuIHVzZXIgc2V0cyBicmVha3BvaW50IGZy
b20gVUksIGphdmFzY3JpcHQgZW5naW5lIG1heSBhY3R1YWxseSBzZXQKKyAgICAgICAgaXQgb24g
YSBkaWZmZXJlbnQgbGluZS4gSWYgc28sIG1vdmUgYnJlYWtwb2ludCB0byB0aGUgY29ycmVjdCBw
b3NpdGlvbgorICAgICAgICBpbiBmcm9udGVuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNzgxCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlz
cGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVudENhbGxGcmFtZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpz
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldEJyZWFrcG9p
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVt
b3ZlT25lVGltZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9z
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2V0QnJlYWtwb2ludE9uQmFja2VuZC5kaWRTZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQucHJvdG90eXBlLnNldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTI4ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBU
YW11cmEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDFm
ZDlhZTQuLmQxYjUxMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCkBAIC0xMzcsMTUgKzEzNywxNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNMaXN0
ZW5lcnNJbnRlcmVzdGVkSW5QYWdlKFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIG1fcGFnZUxpc3Rl
bmVyc01hcC5jb250YWlucyhwYWdlKTsKIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpCitib29sIFNjcmlwdERlYnVnU2VydmVyOjpzZXRC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtw
b2ludCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQqIGFjdHVhbExpbmVOdW1iZXIpCiB7
CiAgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CiAgICAg
aWYgKCFzb3VyY2VJRFZhbHVlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBCcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX2JyZWFrcG9pbnRzLmZpbmQo
c291cmNlSURWYWx1ZSk7CiAgICAgaWYgKGl0ID09IG1fYnJlYWtwb2ludHMuZW5kKCkpCiAgICAg
ICAgIGl0ID0gbV9icmVha3BvaW50cy5zZXQoc291cmNlSURWYWx1ZSwgU291cmNlQnJlYWtwb2lu
dHMoKSkuZmlyc3Q7CiAgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7
CisgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0yNTUsNyArMjU3LDcgQEAgSmF2
YVNjcmlwdENhbGxGcmFtZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWUoKQog
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZShTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiBsaXN0ZW5lcikKIHsKICAgICBBU1NFUlQobV9wYXVzZWQpOwotICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IG1fY3VycmVudENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsgICAgICAgIAorICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IG1fY3VycmVu
dENhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICBsaXN0ZW5lci0+ZGlkUGF1c2Uoc3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmgKaW5kZXggZGNmMjkwZS4uNmE4MjA5YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7
CiAgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0Fj
dGl2YXRlZChib29sIGFjdGl2YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCmluZGV4IDM4ZmNkOGEuLjg4NzBlNGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZ2UKICAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhl
IGFnZW50LgogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQg
YnJlYWtwb2ludCkKK2Jvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50LCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCogYWN0dWFsTGluZU51bWJlcikKIHsKICNpZiBFTkFCTEUoVjhf
U0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC0xNDAs
NyArMTQwLDEyIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlCiAgICAgYXJncy0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGJyZWFrcG9pbnQuZW5hYmxl
ZCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRGdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCkt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9pbnQiKSkpOwotICAgIHY4OjpEZWJ1Zzo6
Q2FsbChzZXRCcmVha3BvaW50RnVuY3Rpb24sIGFyZ3MpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZXN1bHQgPSB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludEZ1bmN0aW9uLCBhcmdz
KTsKKyAgICBpZiAoIXJlc3VsdC0+SXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEFTU0VSVChyZXN1bHQtPkludDMyVmFsdWUoKSA+PSAwKTsKKyAgICAqYWN0dWFsTGluZU51
bWJlciA9IHJlc3VsdC0+SW50MzJWYWx1ZSgpOworICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9
CiAKQEAgLTI5OSw3ICszMDQsNyBAQCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IFNj
cmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IGN1cnJlbnRDYWxsRnJhbWVGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXco
ImN1cnJlbnRDYWxsRnJhbWUiKSkpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJn
dltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CiAgICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjggPSBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rpb24tPkNh
bGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7Ci0gICAgICAgIG1fY3VycmVudENh
bGxGcmFtZSA9IEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZSh2ODo6RGVidWc6OkdldERlYnVn
Q29udGV4dCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGN1cnJlbnRDYWxsRnJhbWVW
OCkpOyAKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6
Y3JlYXRlKHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY3VycmVudENhbGxGcmFtZVY4KSk7CiAgICAgfQogICAgIHJldHVybiBtX2N1cnJl
bnRDYWxsRnJhbWU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKaW5k
ZXggYjQ2ZjY3My4uMjZjYTc4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5lcihTY3Jp
cHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0
RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQpOworICAgIGJvb2wgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlE
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkKiBhY3R1YWxMaW5lTnVtYmVyKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CiAgICAgdm9pZCBjbGVhckJy
ZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2
YXRlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDhlOWUzMzAu
LmU4ODY2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0xNzgs
MTAgKzE3OCwxMCBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaXNhYmxlRGVidWdnZXIo
YWx3YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiB7CiAgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRC
cmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOworICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEJyZWFrcG9pbnQoY2FsbElkLCBzb3VyY2VJ
RCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggY2U1ZGQ5
OS4uMDM1YWJmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtODAsNyAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CiAg
ICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwogCi0gICAgdm9pZCBzZXRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOworICAgIHZvaWQgc2V0QnJlYWtwb2lu
dChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbik7CiAgICAgdm9pZCByZW1v
dmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIp
OwogICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJy
ZWFrcG9pbnRzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4IGVh
YWNhZjAuLmI0YTY4Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCkBA
IC01NSw3ICs1NSw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dl
cihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJv
b2xlYW4gYWx3YXlzKTsKIAotICAgICAgICB2b2lkIHNldEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxl
ZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CisgICAgICAgIHZvaWQgc2V0QnJlYWtwb2ludChp
biBsb25nIGNhbGxJZCwgaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIsIGluIGJvb2xlYW4gZW5hYmxlZCwgaW4gRE9NU3RyaW5nIGNvbmRpdGlvbik7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVu
c2lnbmVkIGxvbmcgbGluZU51bWJlcik7CiAgICAgICAgIHZvaWQgYWN0aXZhdGVCcmVha3BvaW50
cygpOwogICAgICAgICB2b2lkIGRlYWN0aXZhdGVCcmVha3BvaW50cygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA1MDIwNjM0Li4yMjU2MDQxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQsNyArMjQsNyBA
QAogICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtMTYzLDYgKzE2MywxMSBAQCBTdHJpbmcgbWQ1QmFzZTE2KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUo
KSk7CiB9CiAKK1N0cmluZyBmb3JtYXRCcmVha3BvaW50SWQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVz
OiVkIiwgc291cmNlSUQudXRmOCgpLmRhdGEoKSwgbGluZU51bWJlcik7Cit9CisKIH0KIAogSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKQEAgLTcxMiw2ICs3MTcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgbV9z
b3VyY2VJRFRvVVJMLmNsZWFyKCk7CiAgICAgICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIo
KTsKICAgICAgICAgbV9zdGlja3lCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2JyZWFr
cG9pbnRzTWFwcGluZy5jbGVhcigpOwogICAgICAgICBtX2JyZWFrcG9pbnRzTG9hZGVkID0gZmFs
c2U7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykK
QEAgLTE3MzUsMTkgKzE3NDEsMjcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWVzKCkKICAgICByZXR1cm4gaW5q
ZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgYm9vbCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNv
bmRpdGlvbikKIHsKICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQoZW5hYmxlZCwgY29u
ZGl0aW9uKTsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChz
b3VyY2VJRCwgbGluZU51bWJlciwgYnJlYWtwb2ludCk7CisgICAgdW5zaWduZWQgYWN0dWFsTGlu
ZU51bWJlciA9IDA7CisgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIsICZhY3R1
YWxMaW5lTnVtYmVyKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwg
c3VjY2VzcywgYWN0dWFsTGluZU51bWJlcik7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm47CisKICAgICBTdHJpbmcgdXJsID0gbV9zb3VyY2VJRFRvVVJMLmdldChzb3VyY2VJRCk7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZyBi
cmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNlSUQsIGFjdHVhbExpbmVOdW1i
ZXIpOworICAgIG1fYnJlYWtwb2ludHNNYXBwaW5nLnNldChicmVha3BvaW50SWQsIGFjdHVhbExp
bmVOdW1iZXIpOworCiAgICAgU3RyaW5nIGtleSA9IG1kNUJhc2UxNih1cmwpOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVh
a3BvaW50cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5k
KCkpCiAgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQoa2V5LCBTb3VyY2VCcmVh
a3BvaW50cygpKS5maXJzdDsKLSAgICBpdC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBicmVha3Bv
aW50KTsKKyAgICBpdC0+c2Vjb25kLnNldChhY3R1YWxMaW5lTnVtYmVyLCBicmVha3BvaW50KTsK
ICAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIApAQCAtMTc1OSw5ICsxNzczLDE4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQoc291cmNl
SUQsIGxpbmVOdW1iZXIpOworICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD46Oml0ZXJhdG9y
IG1hcHBpbmdJdCA9IG1fYnJlYWtwb2ludHNNYXBwaW5nLmZpbmQoYnJlYWtwb2ludElkKTsKKyAg
ICBpZiAobWFwcGluZ0l0ID09IG1fYnJlYWtwb2ludHNNYXBwaW5nLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgdW5zaWduZWQgc3RpY2t5TGluZSA9IG1hcHBpbmdJdC0+c2Vjb25kOworICAg
IG1fYnJlYWtwb2ludHNNYXBwaW5nLnJlbW92ZShtYXBwaW5nSXQpOworCiAgICAgSGFzaE1hcDxT
dHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9p
bnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwotICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFrcG9p
bnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vjb25kLnJlbW92ZShsaW5lTnVtYmVyKTsKKyAgICBp
ZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaXQtPnNlY29uZC5yZW1vdmUoc3RpY2t5TGluZSk7CiAgICAgc2F2ZUJyZWFrcG9pbnRzKCk7
CiB9CiAKQEAgLTE3ODEsMTAgKzE4MDQsMTYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHUKICAg
ICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CiAgICAgaWYgKGl0ICE9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZW5kKCkpIHsKICAgICAgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6
aXRlcmF0b3IgYnJlYWtwb2ludEl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBicmVha3BvaW50SXQg
IT0gaXQtPnNlY29uZC5lbmQoKTsgKyticmVha3BvaW50SXQpIHsKLSAgICAgICAgICAgIGlmIChm
aXJzdExpbmUgPD0gYnJlYWtwb2ludEl0LT5maXJzdCkgewotICAgICAgICAgICAgICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50
SXQtPmZpcnN0LCBicmVha3BvaW50SXQtPnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgbV9mcm9u
dGVuZC0+cmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCB1cmwsIGJyZWFrcG9pbnRJdC0+Zmly
c3QsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmVuYWJsZWQsIGJyZWFrcG9pbnRJdC0+c2Vjb25kLmNv
bmRpdGlvbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgbGluZU51bWJlciA9IGJy
ZWFrcG9pbnRJdC0+Zmlyc3Q7CisgICAgICAgICAgICBpZiAoZmlyc3RMaW5lID4gbGluZU51bWJl
cikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFjdHVh
bExpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnRJdC0+c2Vj
b25kLCBsaW5lTnVtYmVyLCAmYWN0dWFsTGluZU51bWJlcik7CisgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2Zyb250ZW5k
LT5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgYWN0dWFsTGluZU51bWJlciwgYnJl
YWtwb2ludEl0LT5zZWNvbmQuZW5hYmxlZCwgYnJlYWtwb2ludEl0LT5zZWNvbmQuY29uZGl0aW9u
KTsKKyAgICAgICAgICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBmb3JtYXRCcmVha3BvaW50SWQo
c291cmNlSUQsIGFjdHVhbExpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9icmVha3BvaW50c01h
cHBpbmcuc2V0KGJyZWFrcG9pbnRJZCwgbGluZU51bWJlcik7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgbV9zb3VyY2VJRFRvVVJMLnNldChzb3VyY2VJRCwgdXJsKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBiMmQxZDVhLi40Yzk0ZDZkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0yODksNyArMjg5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0
cmluZyYgZG9tYWluKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHZv
aWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBib29sIGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKTsKKyAgICB2b2lkIHNl
dEJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOwogICAg
IHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxT
Y3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzTWFwOwpAQCAtMzg0LDYgKzM4NCw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9zb3VyY2VJRFRvVVJMOwogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IG1fc2NyaXB0SURUb0NvbnRlbnQ7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIFNvdXJjZUJyZWFrcG9pbnRzPiBtX3N0aWNreUJyZWFrcG9pbnRzOworICAgIEhhc2hNYXA8
U3RyaW5nLCB1bnNpZ25lZD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAgYm9vbCBtX2JyZWFr
cG9pbnRzTG9hZGVkOwogCiAgICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBjZGU1YTcwLi5mZWU0NjMwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC0zMjEsNiArMzIxLDE2IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRlYnVnZ2VyV2FzRGlzYWJsZWQoKQogICAgIGNhbGxTaW1w
bGVGdW5jdGlvbigiZGVidWdnZXJXYXNEaXNhYmxlZCIpOwogfQogCit2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MsIHVuc2ln
bmVkIGxpbmUpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0QnJl
YWtwb2ludCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQobGluZSk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpwYXJzZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IHNjcmlwdFdv
cmxkVHlwZSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0
b3IsICJkaXNwYXRjaCIpOyAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4
IDBiMTk5ODMuLmUwMmI2NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApA
QCAtMTAxLDYgKzEwMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkZWJ1
Z2dlcldhc0VuYWJsZWQoKTsKICAgICAgICAgdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAK
KyAgICAgICAgdm9pZCBkaWRTZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3Ms
IHVuc2lnbmVkIGxpbmUpOworCiAgICAgICAgIHZvaWQgcGFyc2VkU2NyaXB0U291cmNlKGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEs
IGludCBmaXJzdExpbmUsIGludCBzY3JpcHRXb3JsZFR5cGUpOwogICAgICAgICB2b2lkIHJlc3Rv
cmVkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHVybCwg
aW50IGxpbmUsIGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pOwogICAgICAg
ICB2b2lkIGZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzCmluZGV4IDkzNTZiN2EuLjcwOWE5YzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTM2LDQxICszNiwz
NiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHRo
aXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7
CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fb25l
VGltZUJyZWFrcG9pbnQuc291cmNlSUQsIHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmxpbmUpOwog
ICAgICAgICB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CiAgICAgICAgIC8v
IEZJWE1FKDQwNjY5KTogb25lIHRpbWUgYnJlYWtwb2ludCB3aWxsIGJlIHBlcnNpc3RlZCBpbiBp
bnNwZWN0b3Igc2V0dGluZ3MgaWYgbm90IGhpdC4KLSAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9p
bnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRPbkJh
Y2tlbmQoYnJlYWtwb2ludCwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIHJlbW92ZU9uZVRpbWVCcmVh
a3BvaW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFr
cG9pbnQpIHsKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCh0
aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
bW92ZUJyZWFrcG9pbnQodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuc291cmNlSUQsIHRoaXMuX29u
ZVRpbWVCcmVha3BvaW50LmxpbmUpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVC
cmVha3BvaW50OwogICAgICAgICB9CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICBz
ZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2FkZEJy
ZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsK
KyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3BvaW50KHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiAgICAgICAgIGlmIChicmVha3Bv
aW50KQotICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2lu
dCk7CisgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQp
OwogICAgIH0sCiAKICAgICByZXN0b3JlZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHRoaXMu
X2FkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKTsKKyAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50
OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKCEoYnJlYWtwb2ludC5p
ZCBpbiB0aGlzLl9icmVha3BvaW50cykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJy
ZWFrcG9pbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7Ci0gICAgICAgIGRlbGV0ZSBicmVha3BvaW50
Ll9icmVha3BvaW50TWFuYWdlcjsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2Jy
ZWFrcG9pbnQuaWRdOwotICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQo
YnJlYWtwb2ludCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVh
a3BvaW50LXJlbW92ZWQiLCBicmVha3BvaW50KTsKKyAgICAgICAgaWYgKHRoaXMuX3JlbW92ZUJy
ZWFrcG9pbnQoYnJlYWtwb2ludCkpCisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92
ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKICAgICB9
LAogCiAgICAgYnJlYWtwb2ludHNGb3JTb3VyY2VJRDogZnVuY3Rpb24oc291cmNlSUQpCkBAIC05
OSw3ICs5NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICB9LAogCi0gICAg
X2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJs
ZWQsIGNvbmRpdGlvbikKKyAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNv
dXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHNv
dXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKICAgICAgICAgaWYgKHRoaXMuX2Jy
ZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQpAQCAtMTExLDE0ICsxMDYsMzYgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGJyZWFr
cG9pbnQ7CiAgICAgfSwKIAotICAgIF9zYXZlQnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24o
YnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2lu
dChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxl
ZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlQnJlYWtwb2lu
dEZyb21CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9yZW1vdmVCcmVha3BvaW50
OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5y
ZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSk7Cisg
ICAgICAgIGlmICghKGJyZWFrcG9pbnQuaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVha3BvaW50LnJlbW92ZUFsbExpc3RlbmVy
cygpOworICAgICAgICBkZWxldGUgYnJlYWtwb2ludC5fYnJlYWtwb2ludE1hbmFnZXI7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKyAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIGJyZWFrcG9p
bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgX3NldEJyZWFrcG9pbnRP
bkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGlzT25lVGltZSkKKyAgICB7CisgICAgICAg
IGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoc3VjY2VzcywgbGluZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgbGluZSA9PSBicmVha3BvaW50LmxpbmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzT25lVGltZSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludC5saW5lID0gbGluZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsK
KyAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
c2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LnNvdXJjZVVSTCwg
bGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChkaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoY2FsbGJhY2tJZCwgYnJlYWtwb2ludC5zb3VyY2VJ
RCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0
aW9uKTsKICAgICB9CiB9CiAKQEAgLTE0Nyw3ICsxNjQsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5f
ZW5hYmxlZCA9IHg7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zYXZlQnJlYWtw
b2ludE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3Nl
dEJyZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CiAgICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQog
ICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKICAg
ICAgICAgZWxzZQpAQCAtMTg5LDkgKzIwNiwxMSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gYzsKICAgICAgICAgaWYg
KHRoaXMuZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zYXZl
QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRN
YW5hZ2VyLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwogICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsKICAgICB9CiB9CiAKIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
T2JqZWN0LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLmRpZFNldEJyZWFrcG9pbnQgPSBXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDFhZTMyYjUuLjc2
MWU4NzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
QmFja2VuZFN0dWIuanMKQEAgLTE2NSw4ICsxNjUsOSBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9y
QmFja2VuZFN0dWIucHJvdG90eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJX
YXNEaXNhYmxlZCgpOwogICAgIH0sCiAKLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3Vy
Y2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKGNhbGxJZCwgc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5kaWRTZXRCcmVha3BvaW50KGNhbGxJZCwgdHJ1ZSwgbGluZSk7
CiAgICAgfSwKIAogICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5l
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwppbmRleCAxODgzZmIz
Li5jNTc2NTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwpA
QCAtOTYsNyArOTYsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CiAK
ICAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKICAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHRoaXMuc2NyaXB0LnNvdXJj
ZUlELCB0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRydWUsICIiKTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQodGhpcy5zY3JpcHQuc291
cmNlSUQsIHRoaXMuc2NyaXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOwogICAgIH0sCiAK
ICAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24obmV3Qm9keSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDllOWIyZWMuLmYyMmVhYTEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMzY3LDcg
KzM2Nyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHZhciBuZXdMaW5lID0gYnJlYWtwb2ludC5saW5lOwogICAgICAgICAgICAgICAg
IGlmIChzdWNjZXNzICYmIGJyZWFrcG9pbnQubGluZSA+PSBsaW5lKQogICAgICAgICAgICAgICAg
ICAgICBuZXdMaW5lICs9IGxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3Bv
aW50LnVybCwgbmV3TGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlv
bik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJy
ZWFrcG9pbnQoc291cmNlSUQsIGJyZWFrcG9pbnQudXJsLCBuZXdMaW5lLCBicmVha3BvaW50LmVu
YWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsK
ICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNh
bGxiYWNrLmJpbmQodGhpcykpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzCmluZGV4IGU0ZDdmZWQuLmFhYzNhNzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VWaWV3LmpzCkBAIC0xMjcsNyArMTI3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZp
ZXcucHJvdG90eXBlID0gewogICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lKQogICAg
IHsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmUpOwot
ICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2ludChzb3Vy
Y2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHRydWUsICIiKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVz
b3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7CiAgICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3Bv
aW50OiBmdW5jdGlvbihicmVha3BvaW50KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNGRkMTQxZS4uMThiZjMy
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMTcgIFBhdmVsIFBvZGl2
aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV0dXJuIGxpbmUgbnVtYmVy
IHdoZXJlIGJyZWFrcG9pbnQgd2FzIGFjdHVhbGx5IHNldCBieSB2OCBmcm9tIHNldEJyZWFrcG9p
bnQgZnVuY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MDc4MQorCisgICAgICAgICogc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzOgorICAgICAg
ICAoKToKKwogMjAxMC0wNi0yNSAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwppbmRleCBiYWRkYjdkLi40YTU4MWU2IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKQEAgLTkzLDIyICs5MywxOSBAQCBEZWJ1
Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0ID0gZnVuY3Rpb24oc2NyaXB0KQogRGVidWdnZXJTY3Jp
cHQuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKICAgICBhcmdz
LmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJncy5s
aW5lTnVtYmVyKTsKLSAgICB2YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3MubGlu
ZU51bWJlcjsKLSAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1tr
ZXldOwotICAgIGlmIChicmVha0lkKSB7Ci0gICAgICAgIGlmIChhcmdzLmVuYWJsZWQpCi0gICAg
ICAgICAgICBEZWJ1Zy5lbmFibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsK
LSAgICAgICAgRGVidWcuY2hhbmdlU2NyaXB0QnJlYWtQb2ludENvbmRpdGlvbihicmVha0lkLCBh
cmdzLmNvbmRpdGlvbik7Ci0gICAgICAgIHJldHVybiBicmVha0lkOwotICAgIH0KLQotICAgIGJy
ZWFrSWQgPSBEZWJ1Zy5zZXRTY3JpcHRCcmVha1BvaW50QnlJZChhcmdzLnNjcmlwdElkLCBhcmdz
LmxpbmVOdW1iZXIsIDAgLyogY29sdW1uICovLCBhcmdzLmNvbmRpdGlvbik7Ci0gICAgRGVidWdn
ZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0gPSBicmVha0lkOworICAgIHZhciBicmVha0lkID0g
RGVidWcuc2V0U2NyaXB0QnJlYWtQb2ludEJ5SWQoYXJncy5zY3JpcHRJZCwgYXJncy5saW5lTnVt
YmVyLCAwIC8qIGNvbHVtbiAqLywgYXJncy5jb25kaXRpb24pOwogICAgIGlmICghYXJncy5lbmFi
bGVkKQogICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKLSAg
ICByZXR1cm4gYnJlYWtJZDsKKworICAgIHZhciBhY3R1YWxMaW5lTnVtYmVyID0gYXJncy5saW5l
TnVtYmVyOyAvLyBUT0RPOiByZXBsYWNlIHdpdGggcmVhbCBzdHVmZiBhZnRlciB2OCByb2xsLgor
CisgICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0SWQgKyAiOiIgKyBhY3R1YWxMaW5lTnVtYmVyOwor
ICAgIGlmIChrZXkgaW4gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgIC8v
IFJlbW92ZSBvbGQgYnJlYWtwb2ludC4KKyAgICAgICAgRGVidWcuZmluZEJyZWFrUG9pbnQoRGVi
dWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV0sIHRydWUpOworICAgIH0KKyAgICBEZWJ1Z2dl
clNjcmlwdC5fYnJlYWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7CisgICAgcmV0dXJuIERlYnVnZ2Vy
U2NyaXB0Ll92OFRvV2Via2l0TGluZU51bWJlcihhY3R1YWxMaW5lTnVtYmVyKTsKIH0KIAogRGVi
dWdnZXJTY3JpcHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykK
</data>
<flag name="review"
          id="47211"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>