<?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>109624</bug_id>
          
          <creation_ts>2013-02-12 15:32:20 -0800</creation_ts>
          <short_desc>Bidi-Isolate inlines break layout with collapsed whitespace</short_desc>
          <delta_ts>2016-02-22 14:56:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108137</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hartman.wiki</cc>
    
    <cc>hyatt</cc>
    
    <cc>kojii</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>playmobil</cc>
    
    <cc>rniwa</cc>
    
    <cc>robert</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831351</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-02-12 15:32:20 -0800</bug_when>
    <thetext>Because we don&apos;t update the midpointState while iterating across inline isolated content in the first-pass of layout, we don&apos;t properly handle collapsable whitespace inside and following the isolate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832280</commentid>
    <comment_count>1</comment_count>
      <attachid>188169</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-02-13 13:33:06 -0800</bug_when>
    <thetext>Created attachment 188169
Potential ref test that shows the problem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832284</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-13 13:34:47 -0800</bug_when>
    <thetext>This is awesome btw.  Thank you for reducing this Levi.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891275</commentid>
    <comment_count>3</comment_count>
    <who name="Robert Hogan">robert</who>
    <bug_when>2013-05-20 11:35:35 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=188169) [details]
&gt; Potential ref test that shows the problem

So do we just need to introduce the same recursion in addFakeRunsIfNecessary() that we have in appendRunsForObject() for stopping and starting at midpoints?

Or are you saying that we don&apos;t even store the beginning and end of ignored spaces in lineMidpointState for isolates? 

This is RenderBlockLineLayout after all, it&apos;s hard to tell. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891340</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-05-20 14:27:45 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=188169) [details] [details]
&gt; &gt; Potential ref test that shows the problem
&gt; 
&gt; So do we just need to introduce the same recursion in addFakeRunsIfNecessary() that we have in appendRunsForObject() for stopping and starting at midpoints?
&gt; 
&gt; Or are you saying that we don&apos;t even store the beginning and end of ignored spaces in lineMidpointState for isolates? 
&gt; 
&gt; This is RenderBlockLineLayout after all, it&apos;s hard to tell. :)

Even if we store the beginning/end of ignored spaces for isolates, we&apos;d get it wrong because we don&apos;t go through the normal path for the contents of the isolates in the first pass so the values would be wrong. We need to store the midpoint state at the start of the isolate, and then iterate across the contents to get the midpoint state at the end correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108320</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 13:33:30 -0700</bug_when>
    <thetext>*** Bug 124146 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108324</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-09 13:37:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/21752834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108369</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 14:20:29 -0700</bug_when>
    <thetext>https://codereview.chromium.org/26315003 is the relevant Blink patch which fixes the issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108425</commentid>
    <comment_count>8</comment_count>
      <attachid>256533</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 15:44:40 -0700</bug_when>
    <thetext>Created attachment 256533
Port of Blink patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108432</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 15:55:07 -0700</bug_when>
    <thetext>The Blink patch&apos;s approach has major problems. I strongly suggest that we do not land it. It solves the problem by keeping a HashMap of MidpointStates, each of which contains a vector of Iterators. However, the vector of iterators is the same for each of the MidpointStates in the HashMap.

(Also: I have other comments, like items are never removed from the HashMap, only added (though the lifetime of the HashMap is just the lifetime of laying out a single line). Also, I dislike that clearing the isolated runs moved into restoreIsolatedMidpointStates().)

It&apos;s probably a better idea to simply rerun through the same MidpointState vector each time constructBidiRunsForSegment() starts on a new isolate. RenderBlockFlow::appendRunsForObject() can just skip over the midpoints which are not relevant to the RenderObject it&apos;s passed. That is, assuming the added work of skipping midpoints doesn&apos;t incur a measurable perf hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108500</commentid>
    <comment_count>10</comment_count>
      <attachid>256554</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 18:38:43 -0700</bug_when>
    <thetext>Created attachment 256554
No tests yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108520</commentid>
    <comment_count>11</comment_count>
      <attachid>256562</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-09 20:32:43 -0700</bug_when>
    <thetext>Created attachment 256562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108630</commentid>
    <comment_count>12</comment_count>
      <attachid>256562</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-10 09:35:21 -0700</bug_when>
    <thetext>Comment on attachment 256562
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.h:-540
&gt; -    static void appendRunsForObject(BidiRunList&lt;BidiRun&gt;&amp;, int start, int end, RenderObject*, InlineBidiResolver&amp;);

Re-ordering these arguments is unnecessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108631</commentid>
    <comment_count>13</comment_count>
      <attachid>256562</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-07-10 09:35:23 -0700</bug_when>
    <thetext>Comment on attachment 256562
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108633</commentid>
    <comment_count>14</comment_count>
      <attachid>256562</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-10 09:36:36 -0700</bug_when>
    <thetext>Comment on attachment 256562
Patch

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

&gt; Source/WebCore/ChangeLog:42
&gt; +        Test: fast/text/bidi-isolate-whitespace-collapse.html

I should make the test more robust.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108723</commentid>
    <comment_count>15</comment_count>
      <attachid>256562</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-10 13:03:58 -0700</bug_when>
    <thetext>Comment on attachment 256562
Patch

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

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1026
&gt; +    for (unsigned i = 0; i &lt; midpoints.numMidpoints(); ++i) {

Hrm. This search doesn&apos;t work if the entire isolate is inside a collapsed region.

The only way a search could work in this case is if we iterate through the entire line. However, it seems silly to do that because we just got finished iterating through the entire line to perform BiDi on it.

Seems like I&apos;ve got to go the blink route and keep some state around from the first iteration. However, I can at least make this a map of integers rather than a map of vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108738</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-07-10 13:40:23 -0700</bug_when>
    <thetext>Committed r186686: &lt;http://trac.webkit.org/changeset/186686&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167206</commentid>
    <comment_count>17</comment_count>
    <who name="Derk-Jan Hartman">hartman.wiki</who>
    <bug_when>2016-02-22 14:56:20 -0800</bug_when>
    <thetext>*** Bug 124146 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>188169</attachid>
            <date>2013-02-13 13:33:06 -0800</date>
            <delta_ts>2013-02-13 13:33:06 -0800</delta_ts>
            <desc>Potential ref test that shows the problem</desc>
            <filename>isolate-ignoring-whitespace-ignores-characters.html</filename>
            <type>text/html</type>
            <size>1246</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8c3R5bGU+CmJvZHkgPiBkaXYgewoJZGlzcGxheTogaW5s
aW5lLWJsb2NrOwoJYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Cgl3aWR0aDogMjAwcHg7Cn0KPC9z
dHlsZT4KPGJvZHk+CjxwPlRoaXMgaXMgYSB0ZXN0IGZvciBsaW5lIGxheW91dCB0byBwcm9wZXJs
eSBoYW5kbGUgY29sbGFwc2luZyB3aGl0ZXNwYWNlIGludGVyc3BlcnNlZCB3aXRoIGlubGluZSBp
c29sYXRlZCBjb250ZW50LgpUaGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgc2hvdWxkIGJlIGlkZW50
aWNhbC4gVGhpcyBzaG91bGQgYmUgY29udmVydGVkIHRvIGEgcmVmZXJlbmNlIHRlc3Qgb25jZSB3
ZWJraXQub3JnL2IvMTA5NjI0CmhhcyBiZWVuIHJlc29sdmVkLjwvcD4KPGRpdiBpZD0idGVzdCI+
CjxwPjEyMwogPHNwYW4gc3R5bGU9InVuaWNvZGUtYmlkaTogLXdlYmtpdC1pc29sYXRlIj40NTY8
L3NwYW4+IDc4OTwvcD4KPHA+MTIzIDxzcGFuIHN0eWxlPSJ1bmljb2RlLWJpZGk6IC13ZWJraXQt
aXNvbGF0ZSI+NDU2PC9zcGFuPiA3ODk8L3A+CjxwPjEyMwogPHNwYW4gc3R5bGU9InVuaWNvZGUt
YmlkaTogLXdlYmtpdC1pc29sYXRlIj40ICAgICAgIDU2Cjwvc3Bhbj4gNzg5PC9wPgo8cD4xMjMK
IDxzcGFuIHN0eWxlPSJ1bmljb2RlLWJpZGk6IC13ZWJraXQtaXNvbGF0ZSI+CiA0NTYKIDwvc3Bh
bj4KIDc4OTwvcD4KPHA+MSAgMiAgMwogPHNwYW4gc3R5bGU9InVuaWNvZGUtYmlkaTogLXdlYmtp
dC1pc29sYXRlIj4KIDQgIDUgIDYKIDwvc3Bhbj4KIDcgICAgOCAgICA5ICAgIDwvcD4KPC9wPgo8
cD4xMjMKIDxzcGFuIHN0eWxlPSJ1bmljb2RlLWJpZGk6IC13ZWJraXQtaXNvbGF0ZSI+PC9zcGFu
PiA3ODk8L3A+CjxwPjEyMwogPHNwYW4gc3R5bGU9InVuaWNvZGUtYmlkaTogLXdlYmtpdC1pc29s
YXRlIj4gIDwvc3Bhbj4gNzg5PC9wPgo8L2Rpdj4KPGRpdiBpZD0iY29udHJvbCI+CjxwPjEyMwog
PHNwYW4+NDU2PC9zcGFuPiA3ODk8L3A+CjxwPjEyMyA8c3Bhbj40NTY8L3NwYW4+IDc4OTwvcD4K
PHA+MTIzCiA8c3Bhbj40ICAgICAgIDU2Cjwvc3Bhbj4gNzg5PC9wPgo8cD4xMjMKIDxzcGFuPgog
NDU2CiA8L3NwYW4+CiA3ODk8L3A+CjxwPjEgIDIgIDMKIDxzcGFuPgogNCAgNSAgNgogPC9zcGFu
PgogNyAgICA4ICAgIDkgICAgPC9wPgo8cD4xMjMKIDxzcGFuPjwvc3Bhbj4gNzg5PC9wPgo8cD4x
MjMKIDxzcGFuPiAgPC9zcGFuPiA3ODk8L3A+CjwvZGl2Pgo8L2JvZHk+PC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256533</attachid>
            <date>2015-07-09 15:44:40 -0700</date>
            <delta_ts>2015-07-09 20:32:37 -0700</delta_ts>
            <desc>Port of Blink patch</desc>
            <filename>bug-109624-20150709154339.patch</filename>
            <type>text/plain</type>
            <size>19845</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1ZDdhOGJhYTcwZTUx
NzhjY2I4NWQ5MzVhZjY2ZjUwODc0MjBkZi4uNGQzY2YxMDUyZDViYmRlNjE1NTUyZTU0ZGYwZjU0
YmY4MDcwYzAyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE1LTA3LTA5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQmlkaS1Jc29s
YXRlIGlubGluZXMgYnJlYWsgbGF5b3V0IHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTYyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBwb3J0
IG9mIEJsaW5rIHBhdGNoCisgICAgICAgIGh0dHBzOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMv
Ymxpbms/dmlldz1yZXYmcmV2aXNpb249MTU5MjAzCisKKyAgICAgICAgQ29sbGFwc2luZyB3aGl0
ZXNwYWNlIGhhcHBlbnMgaW4gYSBzZXJpZXMgb2YgcGhhc2VzLiBUaGUgZmlyc3QgcGhhc2Ugb2Nj
dXJzIHdoZW4KKyAgICAgICAgd2UgcGVyZm9ybSBsaW5lIGJyZWFraW5nLiBIZXJlLCB3ZSBrZWVw
IHRyYWNrIG9mIHNlcXVlbmNlcyBvZiB3aGl0ZXNwYWNlIHdoaWNoCisgICAgICAgIHNob3VsZCBi
ZSBjb2xsYXBzZWQsIGluIHRoZSBmb3JtIG9mIGEgdmVjdG9yIG9mIHBhaXJzIG9mIElubGluZUl0
ZXJhdG9ycy4gV2UgcHV0CisgICAgICAgIHRoaXMga25vd2xlZGdlIGludG8gYSBNaWRwb2ludFN0
YXRlIG9iamVjdC4KKworICAgICAgICBUaGVuLCBvbmNlIHdlIGhhdmUgYSBsaW5lLCB3ZSBydW4g
dGhlIGJpZGkgYWxnb3JpdGhtIG9uIHRoZSBsaW5lIChpbmNsdWRpbmcgdGhlCisgICAgICAgIHdo
aXRlc3BhY2UpLiBBcyBvdXRwdXQsIHRoZSBiaWRpIGFsZ29yaXRobSBjYWxscyB0aGUgQmlkaVJl
c29sdmVyOjphcHBlbmRSdW4oKQorICAgICAgICBjYWxsYmFjayB3aXRoIHR3byBJbmxpbmVJdGVy
YXRvcnMgZWFjaCB0aW1lIGl0IHdhbnRzIHRvIGNyZWF0ZSBhIHJ1bi4gQmVjYXVzZQorICAgICAg
ICBlYWNoIHJlbmRlcmVyIHRoYXQgd2UgY3JlYXRlIGhhcyB0byBiZSBvd25lZCBieSBleGFjdGx5
IG9uZSBET00gbm9kZSwKKyAgICAgICAgQmlkaVJlc29sdmVyOjphcHBlbmRSdW4oKSBpdGVyYXRl
cyBiZXR3ZWVuIGl0cyB0d28gSW5saW5lSXRlcmF0b3IgYXJndW1lbnRzLAorICAgICAgICBjYWxs
aW5nIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCgpIG9uIGVhY2ggaW50ZXJz
dGl0aWFsIERPTSBub2RlLgorCisgICAgICAgIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdoZXJlIHdo
aXRlc3BhY2UgY29sbGFwc2luZyBoYXBwZW5zLiBUaGUgTWlkcG9pbnRTdGF0ZSBvYmplY3QKKyAg
ICAgICAga2VlcHMgYSBjdXJzb3IgaW50byBpdHMgcmVtZW1iZXJlZCB3aGl0ZXNwYWNlIHNlcXVl
bmNlcy4gSGVyZSwgd2Ugc2ltcGx5IG1ha2UgYQorICAgICAgICBiaWRpIHJ1biBmb3IgZWFjaCBy
ZWdpb24gaW4gYmV0d2VlbiBhZGphY2VudCB3aGl0ZXNwYWNlIHBhaXJzIGluIHRoZSBNaWRwb2lu
dFN0YXRlCisgICAgICAgIG9iamVjdC4gVGhlc2UgYmlkaSBydW5zIGV2ZW50dWFsbHkgZ2V0IHR1
cm5lZCBpbnRvIGxlYWYgSW5saW5lQm94ZXMuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhh
dCB0aGUgQmlkaVJlc29sdmVyOjphcHBlbmRSdW4oKSBjYWxsYmFja3MgZG9uJ3Qgb2NjdXIgaW4K
KyAgICAgICAgc3RyaW5nLW9yZGVyLCBidXQgdGhlIE1pZHBvaW50IElubGluZUl0ZXJhdG9yIHBh
aXJzIGFyZSBpbiBzdHJpbmctb3JkZXIuIEluCisgICAgICAgIHBhcnRpY3VsYXIsIHdpdGhpbiBh
IHBhcnRpY3VsYXIgaXNvbGF0ZSwgYXBwZW5kUnVuKCkgZ2V0cyBjYWxsZWQgaW4gc3RyaW5nCisg
ICAgICAgIG9yZGVyLCBidXQgY2FsbGJhY2tzIHRoYXQgb2NjdXIgZm9yIHJhbmdlcyBpbnNpZGUg
dGhlIGlzb2xhdGUgYXJlIGRlZmVycmVkLiBUaGlzCisgICAgICAgIG1lYW5zIHRoYXQgUmVuZGVy
QmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KCkgZ2V0cyB2ZXJ5IGNvbmZ1c2VkIHdoZW4g
aXQgbG9va3MKKyAgICAgICAgZm9yIHJlbGV2YW50IHdoaXRlc3BhY2UgdG8gc2tpcC4KKworICAg
ICAgICBUaGlzIHBhdGNoIHNvbHZlcyB0aGlzIGlzc3VlIGJ5IGdpdmluZyBhIEhhc2hNYXAgdG8g
QmlkaVJlc29sdmVyIHdoaWNoIHJlbWVtYmVycworICAgICAgICB0aGUgTWlkcG9pbnRTdGF0ZSBj
b250ZXh0IGZvciBhIGdpdmVuIHJ1bi4gVGhlbiwgd2hlbiB3ZSBzdGFydCBwcm9jZXNzaW5nIHJ1
bnMKKyAgICAgICAgaW5zaWRlIGFuIGlzb2xhdGUsIHdlIHB1c2ggdGhlIGFwcHJvcHJpYXRlIE1p
ZHBvaW50U3RhdGUgaW50byB0aGUgQmlkaVJlc29sdmVyLgorICAgICAgICBUaGF0IHdheSwgd2Ug
YXJlIGFsd2F5cyBvcGVyYXRpbmcgd2l0aCB0aGUgY29ycmVjdCBNaWRwb2ludFN0YXRlIGNvbnRl
eHQuCisKKyAgICAgICAgT25lIGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBhcmUgbm8gYmlkaSBy
dW4gYm91bmRhcmllcyBpbiB0aGUgbWlkZGxlIG9mIGEgc2VxdWVuY2UKKyAgICAgICAgb2Ygd2hp
dGVzcGFjZS4gQW5vdGhlciBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGxldmVsIG9mIGlzb2xhdGUg
bmVzdGluZyBpbmNyZW1lbnRzCisgICAgICAgIGF0IG1vc3Qgb25jZSBiZXR3ZWVuIHN1YnNlcXVl
bnQgaW52b2NhdGlvbnMgb2YgdGhlIGJpZGkgYWxnb3JpdGhtLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bj46OnNldE1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bik6
CisgICAgICAgIChXZWJDb3JlOjpSdW4+OjptaWRwb2ludFN0YXRlRm9ySXNvbGF0ZWRSdW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6
YWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0TWlkcG9pbnRzQW5kQXBwZW5kUnVu
c0Zvck9iamVjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2VyOjph
ZGRGYWtlUnVuSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQmlkaVJlc29s
dmVyOjphcHBlbmRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmpl
Y3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXN0b3JlSXNvbGF0ZWRNaWRwb2ludFN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1
Y3RCaWRpUnVuc0ZvclNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnVuKTogRGVs
ZXRlZC4KKwogMjAxNS0wNy0wOCAgTWF0dGhldyBEYWl0ZXIgIDxtZGFpdGVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIHN1cmUgTWVkaWFTdHJlYW0gZW5naW5lIGxvYWRlZCBmb3IgaW50ZXJw
cmV0aW5nIE1lZGlhU3RyZWFtcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJl
c29sdmVyLmgKaW5kZXggZTNjZTc0OWU0MGY5ZTdlOGExY2IyZDk4YjAzM2YzYjc2ZmIzNTZhMy4u
ZDdhMDJkZGVmY2VjOTM4NmEwMTAxYTg1MmUyMzU5MmU3NTFkMzU3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiQmlkaUNvbnRleHQuaCIKICNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgogI2luY2x1ZGUg
IldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTI2NCw2ICsyNjUsOSBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8UnVu
Kj4mIGlzb2xhdGVkUnVucygpIHsgcmV0dXJuIG1faXNvbGF0ZWRSdW5zOyB9CiAKKyAgICB2b2lk
IHNldE1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bihSdW4qLCBjb25zdCBNaWRwb2ludFN0YXRl
PEl0ZXJhdG9yPiYpOworICAgIE1pZHBvaW50U3RhdGU8SXRlcmF0b3I+IG1pZHBvaW50U3RhdGVG
b3JJc29sYXRlZFJ1bihSdW4qKTsKKwogcHJvdGVjdGVkOgogICAgIC8vIEZJWE1FOiBJbnN0ZWFk
IG9mIElubGluZUJpZGlSZXNvbHZlcnMgc3ViY2xhc3NpbmcgdGhpcyBtZXRob2QsIHdlIHNob3Vs
ZAogICAgIC8vIHBhc3MgaW4gc29tZSBzb3J0IG9mIFRyYWl0cyBvYmplY3Qgd2hpY2gga25vd3Mg
aG93IHRvIGNyZWF0ZSBydW5zIGZvciBhcHBlbmRpbmcuCkBAIC0zMDAsNiArMzA0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOwogCiAgICAgVmVjdG9yPEJp
ZGlFbWJlZGRpbmcsIDg+IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2U7CisgICAg
SGFzaE1hcDxSdW4qLCBNaWRwb2ludFN0YXRlPEl0ZXJhdG9yPj4gbV9taWRwb2ludFN0YXRlRm9y
SXNvbGF0ZWRSdW47CiB9OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtOTU0LDYgKzk1OSwxOSBAQCB2
b2lkIEJpZGlSZXNvbHZlcjxJdGVyYXRvciwgUnVuPjo6Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNv
bnN0IEl0ZXJhdG9yJiBlbmQsIFZpcwogICAgIGVuZE9mTGluZSA9IEl0ZXJhdG9yKCk7CiB9CiAK
K3RlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuPgordm9pZCBCaWRpUmVzb2x2ZXI8
SXRlcmF0b3IsIFJ1bj46OnNldE1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bihSdW4qIHJ1biwg
Y29uc3QgTWlkcG9pbnRTdGF0ZTxJdGVyYXRvcj4mIG1pZHBvaW50KQoreworICAgIEFTU0VSVCgh
bV9taWRwb2ludFN0YXRlRm9ySXNvbGF0ZWRSdW4uY29udGFpbnMocnVuKSk7CisgICAgbV9taWRw
b2ludFN0YXRlRm9ySXNvbGF0ZWRSdW4uYWRkKHJ1biwgbWlkcG9pbnQpOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuPgorTWlkcG9pbnRTdGF0ZTxJdGVyYXRvcj4gQmlk
aVJlc29sdmVyPEl0ZXJhdG9yLCBSdW4+OjptaWRwb2ludFN0YXRlRm9ySXNvbGF0ZWRSdW4oUnVu
KiBydW4pCit7CisgICAgcmV0dXJuIG1fbWlkcG9pbnRTdGF0ZUZvcklzb2xhdGVkUnVuLnRha2Uo
cnVuKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQmlkaVJlc29s
dmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKaW5kZXggYTll
ZmUwZDA2ZGEyNGNiNzMwMDBjNTg0N2U4OWZjZmZmODhmZTNjMS4uNTNjZDRjZmEyZDQ5YTQ4ZDc0
M2ViNjk2Zjg0ZTUyNTcxY2ZhMzA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUl0ZXJhdG9yLmgKQEAgLTQ3NywxMSArNDc3LDY2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdGVyKQogLy8g
b2YgQmlkaVJlc29sdmVyIHdoaWNoIGtub3dzIG5vdGhpbmcgYWJvdXQgUmVuZGVyT2JqZWN0cy4K
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFJlbmRlck9iamVjdCYgb2JqLCB1bnNpZ25lZCBw
b3MpCiB7Ci0gICAgQmlkaVJ1biogaXNvbGF0ZWRSdW4gPSBuZXcgQmlkaVJ1bihwb3MsIDAsIG9i
aiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7CisgICAgQmlkaVJ1biogaXNv
bGF0ZWRSdW4gPSBuZXcgQmlkaVJ1bihwb3MsIHBvcywgb2JqLCByZXNvbHZlci5jb250ZXh0KCks
IHJlc29sdmVyLmRpcigpKTsKICAgICByZXNvbHZlci5ydW5zKCkuYWRkUnVuKGlzb2xhdGVkUnVu
KTsKICAgICAvLyBGSVhNRTogaXNvbGF0ZWRSdW5zKCkgY291bGQgYmUgYSBoYXNoIG9mIG9iamVj
dC0+cnVuIGFuZCB0aGVuIHdlIGNvdWxkIGNoZWFwbHkKICAgICAvLyBBU1NFUlQgaGVyZSB0aGF0
IHdlIGRpZG4ndCBjcmVhdGUgbXVsdGlwbGUgb2JqZWN0cyBmb3IgdGhlIHNhbWUgaW5saW5lLgog
ICAgIHJlc29sdmVyLmlzb2xhdGVkUnVucygpLmFwcGVuZChpc29sYXRlZFJ1bik7CisgICAgTGlu
ZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0
ZSgpOworICAgIHJlc29sdmVyLnNldE1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bihpc29sYXRl
ZFJ1biwgbGluZU1pZHBvaW50U3RhdGUpOworfQorCitpbmxpbmUgQmlkaVJ1biogY3JlYXRlUnVu
KGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIpCit7CisgICAgcmV0dXJuIG5ldyBCaWRpUnVuKHN0YXJ0LCBlbmQsIG9iaiwg
cmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7Cit9CisKK2VudW0gY2xhc3MgQXBw
ZW5kUnVuQmVoYXZpb3IgeworICAgIEZha2VSdW4sCisgICAgRm9yT2JqZWN0Cit9OworCitzdGF0
aWMgdm9pZCBhZGp1c3RNaWRwb2ludHNBbmRBcHBlbmRSdW5zRm9yT2JqZWN0SWZOZWVkZWQoUmVu
ZGVyT2JqZWN0JiBvYmosIGludCBzdGFydCwgaW50IGVuZCwgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgQXBwZW5kUnVuQmVoYXZpb3IgYmVoYXZpb3IgPSBBcHBlbmRSdW5CZWhhdmlvcjo6
RmFrZVJ1biwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMgPSBudWxscHRyKQoreworICAgIGlm
IChzdGFydCA+IGVuZCB8fCBSZW5kZXJCbG9jazo6c2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zvck9i
amVjdChvYmopKQorICAgICAgICByZXR1cm47CisKKyAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGlu
ZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgYm9vbCBoYXZl
TmV4dE1pZHBvaW50ID0gKGxpbmVNaWRwb2ludFN0YXRlLmN1cnJlbnRNaWRwb2ludCgpIDwgbGlu
ZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzKCkpOworICAgIElubGluZUl0ZXJhdG9yIG5leHRN
aWRwb2ludDsKKyAgICBpZiAoaGF2ZU5leHRNaWRwb2ludCkKKyAgICAgICAgbmV4dE1pZHBvaW50
ID0gbGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzKClbbGluZU1pZHBvaW50U3RhdGUuY3VycmVu
dE1pZHBvaW50KCldOworICAgIGlmIChsaW5lTWlkcG9pbnRTdGF0ZS5iZXR3ZWVuTWlkcG9pbnRz
KCkpIHsKKyAgICAgICAgaWYgKCEoaGF2ZU5leHRNaWRwb2ludCAmJiBuZXh0TWlkcG9pbnQucmVu
ZGVyZXIoKSA9PSAmb2JqKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gVGhpcyBp
cyBhIG5ldyBzdGFydCBwb2ludC4gU3RvcCBpZ25vcmluZyBvYmplY3RzIGFuZAorICAgICAgICAv
LyBhZGp1c3Qgb3VyIHN0YXJ0LgorICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5zZXRCZXR3ZWVu
TWlkcG9pbnRzKGZhbHNlKTsKKyAgICAgICAgc3RhcnQgPSBuZXh0TWlkcG9pbnQub2Zmc2V0KCk7
CisgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLmluY3JlbWVudEN1cnJlbnRNaWRwb2ludCgpOwor
ICAgICAgICBpZiAoc3RhcnQgPCBlbmQpCisgICAgICAgICAgICByZXR1cm4gYWRqdXN0TWlkcG9p
bnRzQW5kQXBwZW5kUnVuc0Zvck9iamVjdElmTmVlZGVkKG9iaiwgc3RhcnQsIGVuZCwgcmVzb2x2
ZXIsIGJlaGF2aW9yLCBydW5zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWhhdmVOZXh0
TWlkcG9pbnQgfHwgKCZvYmogIT0gbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkpKSB7CisgICAgICAg
ICAgICBpZiAoYmVoYXZpb3IgPT0gQXBwZW5kUnVuQmVoYXZpb3I6OkZha2VSdW4pCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcnVucy0+YWRkUnVuKGNyZWF0ZVJ1bihzdGFy
dCwgZW5kLCBvYmosIHJlc29sdmVyKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBBbiBlbmQgbWlkcG9pbnQgaGFzIGJlZW4gZW5jb3VudGVyZWQgd2l0aGlu
IG91ciBvYmplY3QuIFdlIG5lZWQgdG8gYXBwZW5kIGEgcnVuIHdpdGggb3VyIGVuZHBvaW50Lgor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxKSA8
PSBlbmQpIHsKKyAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnNldEJldHdlZW5NaWRwb2lu
dHModHJ1ZSk7CisgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5pbmNyZW1lbnRDdXJyZW50
TWlkcG9pbnQoKTsKKyAgICAgICAgICAgIC8vIFRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgYmVmb3Jl
IHRoZSBvYmplY3Qgd2UncmUgaW5zcGVjdGluZy4gU2tpcCBldmVyeXRoaW5nIGFuZCByZXR1cm4K
KyAgICAgICAgICAgIGlmIChuZXh0TWlkcG9pbnQucmVmZXJzVG9FbmRPZlByZXZpb3VzTm9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQ+KG5leHRNaWRwb2ludC5vZmZzZXQoKSArIDEpID4gc3RhcnQgJiYgYmVoYXZpb3IgPT0gQXBw
ZW5kUnVuQmVoYXZpb3I6OkZvck9iamVjdCkKKyAgICAgICAgICAgICAgICBydW5zLT5hZGRSdW4o
Y3JlYXRlUnVuKHN0YXJ0LCBuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxLCBvYmosIHJlc29sdmVy
KSk7CisgICAgICAgICAgICBhZGp1c3RNaWRwb2ludHNBbmRBcHBlbmRSdW5zRm9yT2JqZWN0SWZO
ZWVkZWQob2JqLCBuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxLCBlbmQsIHJlc29sdmVyLCBiZWhh
dmlvciwgcnVucyk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVoYXZpb3IgPT0gQXBwZW5kUnVuQmVo
YXZpb3I6OkZvck9iamVjdCkKKyAgICAgICAgICAgIHJ1bnMtPmFkZFJ1bihjcmVhdGVSdW4oc3Rh
cnQsIGVuZCwgb2JqLCByZXNvbHZlcikpOworICAgIH0KIH0KIAogY2xhc3MgSXNvbGF0ZVRyYWNr
ZXIgewpAQCAtNTA2LDI2ICs1NjEsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZW1iZWQoVUNoYXJE
aXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2UpIHsgfQogICAgIHZvaWQgY29tbWl0RXhwbGlj
aXRFbWJlZGRpbmcoKSB7IH0KIAotICAgIHZvaWQgYWRkRmFrZVJ1bklmTmVjZXNzYXJ5KFJlbmRl
ck9iamVjdCYgb2JqLCB1bnNpZ25lZCBwb3MsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIp
CisgICAgdm9pZCBhZGRGYWtlUnVuSWZOZWNlc3NhcnkoUmVuZGVyT2JqZWN0JiBvYmosIHVuc2ln
bmVkIHBvcywgdW5zaWduZWQgZW5kLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQogICAg
IHsKICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGFkZCBhIGZha2UgcnVuIGZvciBhIGdpdmVu
IGlzb2xhdGVkIHNwYW4gb25jZSBkdXJpbmcgZWFjaCBjYWxsIHRvIGNyZWF0ZUJpZGlSdW5zRm9y
TGluZS4KICAgICAgICAgLy8gV2UnbGwgYmUgY2FsbGVkIGZvciBldmVyeSBzcGFuIGluc2lkZSB0
aGUgaXNvbGF0ZWQgc3BhbiBzbyB3ZSBqdXN0IGlnbm9yZSBzdWJzZXF1ZW50IGNhbGxzLgogICAg
ICAgICAvLyBXZSBhbHNvIGF2b2lkIGNyZWF0aW5nIGEgZmFrZSBydW4gdW50aWwgd2UgaGl0IGEg
Y2hpbGQgdGhhdCB3YXJyYW50cyBvbmUsIGUuZy4gd2Ugc2tpcCBmbG9hdHMuCi0gICAgICAgIGlm
IChtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0ZSB8fCBSZW5kZXJCbG9jazo6c2hvdWxk
U2tpcENyZWF0aW5nUnVuc0Zvck9iamVjdCgmb2JqKSkKKyAgICAgICAgaWYgKFJlbmRlckJsb2Nr
OjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKCFtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0ZSkgeworICAgICAgICAg
ICAgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3Mp
OworICAgICAgICAgICAgbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUgPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGFkanVzdE1pZHBvaW50c0FuZEFwcGVuZFJ1bnNGb3JPYmplY3RJ
Zk5lZWRlZChvYmosIHBvcywgZW5kLCByZXNvbHZlcik7CiAgICAgICAgIC8vIG9iaiBhbmQgcG9z
IHRvZ2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBwb3NpdGlvbiBpbiB0aGUgaW5saW5lLCBmcm9tIHdo
aWNoIHRoZSBwYXJzaW5nIG9mIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQuCiAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBydW4gYmVjYXVzZSB0aGlzIGlzIGlt
cGxpY2l0OiBpdCBpcyBlaXRoZXIgZW5kT2ZMaW5lIG9yIHRoZSBlbmQgb2YgdGhlCiAgICAgICAg
IC8vIGlzb2xhdGUsIHdoZW4gd2UgY2FsbCBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgaXQgd2lsbCBz
dG9wIGF0IHdoaWNoZXZlciBjb21lcyBmaXJzdC4KLSAgICAgICAgYWRkUGxhY2Vob2xkZXJSdW5G
b3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3MpOwotICAgICAgICAvLyBGSVhNRTog
SW5saW5lIGlzb2xhdGVzIGRvbid0IHdvcmsgcHJvcGVybHkgd2l0aCBjb2xsYXBzaW5nIHdoaXRl
c3BhY2UsIHNlZSB3ZWJraXQub3JnL2IvMTA5NjI0Ci0gICAgICAgIC8vIEZvciBub3csIGlmIHdl
IGVudGVyIGFuIGlzb2xhdGUgYmV0d2VlbiBtaWRwb2ludHMsIHdlIGluY3JlbWVudCBvdXIgY3Vy
cmVudCBtaWRwb2ludCBvciBlbHNlCi0gICAgICAgIC8vIHdlJ2xsIGxlYXZlIHRoZSBpc29sYXRl
IGFuZCBpZ25vcmUgdGhlIGNvbnRlbnQgdGhhdCBmb2xsb3dzLgotICAgICAgICBNaWRwb2ludFN0
YXRlPElubGluZUl0ZXJhdG9yPiYgbWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3Rh
dGUoKTsKLSAgICAgICAgaWYgKG1pZHBvaW50U3RhdGUuYmV0d2Vlbk1pZHBvaW50cygpICYmIG1p
ZHBvaW50U3RhdGUubWlkcG9pbnRzKClbbWlkcG9pbnRTdGF0ZS5jdXJyZW50TWlkcG9pbnQoKV0u
cmVuZGVyZXIoKSA9PSAmb2JqKSB7Ci0gICAgICAgICAgICBtaWRwb2ludFN0YXRlLnNldEJldHdl
ZW5NaWRwb2ludHMoZmFsc2UpOwotICAgICAgICAgICAgbWlkcG9pbnRTdGF0ZS5pbmNyZW1lbnRD
dXJyZW50TWlkcG9pbnQoKTsKLSAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU0NSw5
ICs1OTUsOSBAQCBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpCiAg
ICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gbV9zb3IucmVuZGVyZXIoKTsKICAgICAgICAgd2hp
bGUgKG9iaiAmJiBvYmogIT0gbV9lb3IucmVuZGVyZXIoKSAmJiBvYmogIT0gZW5kT2ZMaW5lLnJl
bmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkK
LSAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9i
aiwgc3RhcnQsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtl
UnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICp0aGlzKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNG
b3JPYmplY3QobV9ydW5zLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgb2JqLCAqdGhpcyk7CisgICAg
ICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KG1fcnVucywg
c3RhcnQsIG9iai0+bGVuZ3RoKCksICpvYmosICp0aGlzKTsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBzdGFydC9vYmogc2hvdWxkIGJlIGFuIElubGluZUl0ZXJhdG9yIGluc3RlYWQgb2YgdHdvIHNl
cGFyYXRlIHZhcmlhYmxlcy4KICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgIG9i
aiA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fc29yLnJvb3QoKSwgb2JqLCAmaXNv
bGF0ZVRyYWNrZXIpOwpAQCAtNTYxLDkgKzYxMSw5IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlS
ZXNvbHZlcjo6YXBwZW5kUnVuKCkKICAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gYWRkIHJ1bnMg
Zm9yIHplcm8tbGVuZ3RoIFJlbmRlck9iamVjdHMsIGp1c3QgZG9uJ3QgbWFrZSB0aGUgcnVuIGxh
cmdlciB0aGFuIGl0IHNob3VsZCBiZQogICAgICAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3Ro
KCkgPyBwb3MgKyAxIDogMDsKICAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xh
dGUoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3Nh
cnkoKm9iaiwgc3RhcnQsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5h
ZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICp0aGlzKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVu
ZFJ1bnNGb3JPYmplY3QobV9ydW5zLCBzdGFydCwgZW5kLCBvYmosICp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QobV9ydW5zLCBzdGFy
dCwgZW5kLCAqb2JqLCAqdGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2Vvci5pbmNyZW1l
bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNjc5NDU3NWIy
ZTIwMjkxNzUyYzU5NzI2MGFlMGE5MzJkMjdiODNiNi4uZTJlZWMyZTBkZTAyZDFjMjBlYWIxZjNk
NGVkZjAzYjFlNzU3MjQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
QEAgLTE5OSw5ICsxOTksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlbmRlckJveCogY3Jl
YXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU2tpcENyZWF0aW5nUnVu
c0Zvck9iamVjdChSZW5kZXJPYmplY3QqIG9iaikKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTa2lw
Q3JlYXRpbmdSdW5zRm9yT2JqZWN0KFJlbmRlck9iamVjdCYgb2JqKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9iai0+
Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOworICAgICAgICByZXR1cm4gb2JqLmlzRmxv
YXRpbmcoKSB8fCAob2JqLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmouc3R5bGUoKS5p
c09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKSAmJiAhb2JqLmNvbnRhaW5lcigpLT5pc1JlbmRl
cklubGluZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBTdHJpbmdWaWV3LCBj
b25zdCBSZW5kZXJTdHlsZSYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKaW5kZXggMDQyODliMTcxMjc5ZDc1ZDFhODJhMWM3NDc2NWY4MTI0NmJkOGVlMi4uNTE2
MDMwMjc1NzY1ODI5OTYwOGZmOTg0MmJlYWE0MWIzNGI1MjdkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApAQCAtNTM3LDcgKzUzNyw3IEBAIHByaXZhdGU6
CiAvLyBsaW5lIGxheW91dCBjb2RlIGlzIHNlcGFyYXRlZCBmcm9tIFJlbmRlckJsb2NrIGFuZCBS
ZW5kZXJCbG9ja0Zsb3cuCiAvLyBTVEFSVCBNRVRIT0RTIERFRklORUQgSU4gUmVuZGVyQmxvY2tM
aW5lTGF5b3V0CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChC
aWRpUnVuTGlzdDxCaWRpUnVuPiYsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0Kiwg
SW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVj
dChCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0
JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAgICAgUm9vdElubGluZUJveCogY3JlYXRlQW5kQXBw
ZW5kUm9vdElubGluZUJveCgpOwogCiAgICAgTGF5b3V0VW5pdCBzdGFydEFsaWduZWRPZmZzZXRG
b3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4dCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmlu
ZGV4IDVlYzA0NzBiYWNjOGFmOGQ1NjRhZTZkZDY3N2YyYzI2MzU1ZjhlNmYuLjAyMGMyMWFkYTE1
NDBkZjc2N2QyNzkwZWRiYTQ5MGU1ZTdkMjY1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MSw1MSArNzEsOSBAQCBz
dGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIElu
bGluZUl0ZXJhdG9yIGl0ZXIpCiAgICAgfQogfQogCi1pbmxpbmUgQmlkaVJ1biogY3JlYXRlUnVu
KGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0KiBvYmosIElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIpCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdChC
aWRpUnVuTGlzdDxCaWRpUnVuPiYgcnVucywgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmpl
Y3QmIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKLSAgICBBU1NFUlQob2Jq
KTsKLSAgICByZXR1cm4gbmV3IEJpZGlSdW4oc3RhcnQsIGVuZCwgKm9iaiwgcmVzb2x2ZXIuY29u
dGV4dCgpLCByZXNvbHZlci5kaXIoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBl
bmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBydW5zLCBpbnQgc3RhcnQsIGlu
dCBlbmQsIFJlbmRlck9iamVjdCogb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQot
ewotICAgIGlmIChzdGFydCA+IGVuZCB8fCBzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0
KG9iaikpCi0gICAgICAgIHJldHVybjsKLQotICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlk
cG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3RhdGUoKTsKLSAgICBib29sIGhhdmVOZXh0
TWlkcG9pbnQgPSAobGluZU1pZHBvaW50U3RhdGUuY3VycmVudE1pZHBvaW50KCkgPCBsaW5lTWlk
cG9pbnRTdGF0ZS5udW1NaWRwb2ludHMoKSk7Ci0gICAgSW5saW5lSXRlcmF0b3IgbmV4dE1pZHBv
aW50OwotICAgIGlmIChoYXZlTmV4dE1pZHBvaW50KQotICAgICAgICBuZXh0TWlkcG9pbnQgPSBs
aW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHMoKVtsaW5lTWlkcG9pbnRTdGF0ZS5jdXJyZW50TWlk
cG9pbnQoKV07Ci0gICAgaWYgKGxpbmVNaWRwb2ludFN0YXRlLmJldHdlZW5NaWRwb2ludHMoKSkg
ewotICAgICAgICBpZiAoIShoYXZlTmV4dE1pZHBvaW50ICYmIG5leHRNaWRwb2ludC5yZW5kZXJl
cigpID09IG9iaikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBu
ZXcgc3RhcnQgcG9pbnQuIFN0b3AgaWdub3Jpbmcgb2JqZWN0cyBhbmQKLSAgICAgICAgLy8gYWRq
dXN0IG91ciBzdGFydC4KLSAgICAgICAgbGluZU1pZHBvaW50U3RhdGUuc2V0QmV0d2Vlbk1pZHBv
aW50cyhmYWxzZSk7Ci0gICAgICAgIHN0YXJ0ID0gbmV4dE1pZHBvaW50Lm9mZnNldCgpOwotICAg
ICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5pbmNyZW1lbnRDdXJyZW50TWlkcG9pbnQoKTsKLSAgICAg
ICAgaWYgKHN0YXJ0IDwgZW5kKQotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFJ1bnNGb3JPYmpl
Y3QocnVucywgc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFoYXZlTmV4dE1pZHBvaW50IHx8IChvYmogIT0gbmV4dE1pZHBvaW50LnJlbmRlcmVy
KCkpKSB7Ci0gICAgICAgICAgICBydW5zLmFkZFJ1bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2Jq
LCByZXNvbHZlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQW4gZW5kIG1pZHBvaW50IGhhcyBiZWVuIGVuY291bnRlcmVkIHdpdGhpbiBvdXIgb2JqZWN0
LiBXZSBuZWVkIHRvIGFwcGVuZCBhIHJ1biB3aXRoIG91ciBlbmRwb2ludC4KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PGludD4obmV4dE1pZHBvaW50Lm9mZnNldCgpICsgMSkgPD0gZW5kKSB7Ci0g
ICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5zZXRCZXR3ZWVuTWlkcG9pbnRzKHRydWUpOwot
ICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUuaW5jcmVtZW50Q3VycmVudE1pZHBvaW50KCk7
Ci0gICAgICAgICAgICAvLyBUaGUgZW5kIG9mIHRoZSBsaW5lIGlzIGJlZm9yZSB0aGUgb2JqZWN0
IHdlJ3JlIGluc3BlY3RpbmcuIFNraXAgZXZlcnl0aGluZyBhbmQgcmV0dXJuCi0gICAgICAgICAg
ICBpZiAobmV4dE1pZHBvaW50LnJlZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0TWlk
cG9pbnQub2Zmc2V0KCkgKyAxKSA+IHN0YXJ0KQotICAgICAgICAgICAgICAgIHJ1bnMuYWRkUnVu
KGNyZWF0ZVJ1bihzdGFydCwgbmV4dE1pZHBvaW50Lm9mZnNldCgpICsgMSwgb2JqLCByZXNvbHZl
cikpOwotICAgICAgICAgICAgYXBwZW5kUnVuc0Zvck9iamVjdChydW5zLCBuZXh0TWlkcG9pbnQu
b2Zmc2V0KCkgKyAxLCBlbmQsIG9iaiwgcmVzb2x2ZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgcnVucy5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpKTsK
LSAgICB9CisgICAgYWRqdXN0TWlkcG9pbnRzQW5kQXBwZW5kUnVuc0Zvck9iamVjdElmTmVlZGVk
KG9iaiwgc3RhcnQsIGVuZCwgcmVzb2x2ZXIsIEFwcGVuZFJ1bkJlaGF2aW9yOjpGb3JPYmplY3Qs
ICZydW5zKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFJvb3RJbmxpbmVCb3g+IFJlbmRlckJsb2Nr
Rmxvdzo6Y3JlYXRlUm9vdElubGluZUJveCgpCkBAIC0xMDIwLDYgKzk3OCwxNSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgc2V0VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNv
bHZlciYgcmVzb2x2ZXIsCiAgICAgfQogfQogCitzdGF0aWMgdm9pZCByZXN0b3JlSXNvbGF0ZWRN
aWRwb2ludFN0YXRlcyhJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBJbmxpbmVCaWRp
UmVzb2x2ZXImIGlzb2xhdGVkUmVzb2x2ZXIpCit7CisgICAgd2hpbGUgKCFpc29sYXRlZFJlc29s
dmVyLmlzb2xhdGVkUnVucygpLmlzRW1wdHkoKSkgeworICAgICAgICBCaWRpUnVuKiBydW4gPSBp
c29sYXRlZFJlc29sdmVyLmlzb2xhdGVkUnVucygpLmxhc3QoKTsKKyAgICAgICAgaXNvbGF0ZWRS
ZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5yZW1vdmVMYXN0KCk7CisgICAgICAgIHRvcFJlc29sdmVy
LnNldE1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bihydW4sIGlzb2xhdGVkUmVzb2x2ZXIubWlk
cG9pbnRTdGF0ZUZvcklzb2xhdGVkUnVuKHJ1bikpOworICAgIH0KK30KKwogLy8gRklYTUU6IEJp
ZGlSZXNvbHZlciBzaG91bGQgaGF2ZSB0aGlzIGxvZ2ljLgogc3RhdGljIGlubGluZSB2b2lkIGNv
bnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVy
LCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBl
bmRPZlJ1bnMsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSkKIHsKQEAgLTEwNDYsNiArMTAxMyw4IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BS
ZXNvbHZlciwKICAgICAgICAgQVNTRVJUKGlzb2xhdGVkSW5saW5lKTsKIAogICAgICAgICBJbmxp
bmVCaWRpUmVzb2x2ZXIgaXNvbGF0ZWRSZXNvbHZlcjsKKyAgICAgICAgTGluZU1pZHBvaW50U3Rh
dGUmIGlzb2xhdGVkTGluZU1pZHBvaW50U3RhdGUgPSBpc29sYXRlZFJlc29sdmVyLm1pZHBvaW50
U3RhdGUoKTsKKyAgICAgICAgaXNvbGF0ZWRMaW5lTWlkcG9pbnRTdGF0ZSA9IHRvcFJlc29sdmVy
Lm1pZHBvaW50U3RhdGVGb3JJc29sYXRlZFJ1bihpc29sYXRlZFJ1bik7CiAgICAgICAgIEVVbmlj
b2RlQmlkaSB1bmljb2RlQmlkaSA9IGlzb2xhdGVkSW5saW5lLT5zdHlsZSgpLnVuaWNvZGVCaWRp
KCk7CiAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgICAgICBpZiAodW5pY29k
ZUJpZGkgPT0gUGxhaW50ZXh0KQpAQCAtMTA3OSw4ICsxMDQ4LDggQEAgc3RhdGljIGlubGluZSB2
b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJl
c29sdmVyLAogICAgICAgICAvLyB0byB0aGUgdG9wIHJlc29sdmVyJ3MgbGlzdCBmb3IgbGF0ZXIg
cHJvY2Vzc2luZy4KICAgICAgICAgaWYgKCFpc29sYXRlZFJlc29sdmVyLmlzb2xhdGVkUnVucygp
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdG9wUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkuYXBw
ZW5kVmVjdG9yKGlzb2xhdGVkUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkpOwotICAgICAgICAgICAg
aXNvbGF0ZWRSZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5jbGVhcigpOwogICAgICAgICAgICAgY3Vy
cmVudFJvb3QgPSBpc29sYXRlZElubGluZTsKKyAgICAgICAgICAgIHJlc3RvcmVJc29sYXRlZE1p
ZHBvaW50U3RhdGVzKHRvcFJlc29sdmVyLCBpc29sYXRlZFJlc29sdmVyKTsKICAgICAgICAgfQog
ICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256554</attachid>
            <date>2015-07-09 18:38:43 -0700</date>
            <delta_ts>2015-07-09 20:32:40 -0700</delta_ts>
            <desc>No tests yet</desc>
            <filename>bug-109624-20150709183742.patch</filename>
            <type>text/plain</type>
            <size>20324</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1ZDdhOGJhYTcwZTUx
NzhjY2I4NWQ5MzVhZjY2ZjUwODc0MjBkZi4uODdiYTJiYjI0NWFmNGYxODE1NmM1NjMzM2RjYjQ0
ZDNhYzhmYjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE1LTA3LTA5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQmlkaS1Jc29s
YXRlIGlubGluZXMgYnJlYWsgbGF5b3V0IHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTYyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hh
bmdlcyB0aGUgbG9naWMgaW4gY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KCkgd2hlbiBpdCBl
bmNvdW50ZXJzIGFuCisgICAgICAgIGlzb2xhdGUuIEl0IGFscmVhZHkgaGFzIGxvZ2ljIHRvIGNy
ZWF0ZSBhIEJpZGlSZXNvbHZlciBmb3IgdGhlIGlzb2xhdGVkIHRleHQ7CisgICAgICAgIGhvd2V2
ZXIsIHRoYXQgbG9naWMgZG9lc24ndCBoYW5kbGUgc2V0dGluZyB1cCB0aGUgTWlkcG9pbnRTdGF0
ZSBhdCBhbGwuCisgICAgICAgIFNwZWNpZmljYWxseSwgd2UgY2FuIHNldCB0aGUgTWlkcG9pbnRT
dGF0ZSdzIGN1cnNvciB0byBwb2ludCB0byB0aGUgZmlyc3QgbWlkcG9pbnQKKyAgICAgICAgd2hv
c2UgYW5jZXN0b3IgaXMgdGhlIGlzb2xhdGVkIHJvb3QuIElmIG5vIHN1Y2ggZWxlbWVudCBleGlz
dHMsIHNpbXBseSBwcmV0ZW5kIHRoYXQKKyAgICAgICAgd2UgaGF2ZSBubyBtaWRwb2ludHMgYXQg
YWxsICh3aGljaCBpcyBjb3JyZWN0KS4KKworICAgICAgICBIZXJlIGlzIHNvbWUgZXhwbGFuYXRv
cnkgdGV4dCByZWdhcmRpbmcgaG93IHdlIGNvbGxhcHNlIHNwYWNlczoKKworICAgICAgICBDb2xs
YXBzaW5nIHdoaXRlc3BhY2UgaGFwcGVucyBpbiBhIHNlcmllcyBvZiBwaGFzZXMuIFRoZSBmaXJz
dCBwaGFzZSBvY2N1cnMgd2hlbgorICAgICAgICB3ZSBwZXJmb3JtIGxpbmUgYnJlYWtpbmcuIEhl
cmUsIHdlIGtlZXAgdHJhY2sgb2Ygc2VxdWVuY2VzIG9mIHdoaXRlc3BhY2Ugd2hpY2gKKyAgICAg
ICAgc2hvdWxkIGJlIGNvbGxhcHNlZCwgaW4gdGhlIGZvcm0gb2YgYSB2ZWN0b3Igb2YgcGFpcnMg
b2YgSW5saW5lSXRlcmF0b3JzLiBXZSBwdXQKKyAgICAgICAgdGhpcyBrbm93bGVkZ2UgaW50byBh
IE1pZHBvaW50U3RhdGUgb2JqZWN0LgorCisgICAgICAgIFRoZW4sIG9uY2Ugd2UgaGF2ZSBhIGxp
bmUsIHdlIHJ1biB0aGUgYmlkaSBhbGdvcml0aG0gb24gdGhlIGxpbmUgKGluY2x1ZGluZyB0aGUK
KyAgICAgICAgd2hpdGVzcGFjZSkuIEFzIG91dHB1dCwgdGhlIGJpZGkgYWxnb3JpdGhtIGNhbGxz
IHRoZSBCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpCisgICAgICAgIGNhbGxiYWNrIHdpdGggdHdv
IElubGluZUl0ZXJhdG9ycyBlYWNoIHRpbWUgaXQgd2FudHMgdG8gY3JlYXRlIGEgcnVuLiBCZWNh
dXNlCisgICAgICAgIGVhY2ggcmVuZGVyZXIgdGhhdCB3ZSBjcmVhdGUgaGFzIHRvIGJlIG93bmVk
IGJ5IGV4YWN0bHkgb25lIERPTSBub2RlLAorICAgICAgICBCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1
bigpIGl0ZXJhdGVzIGJldHdlZW4gaXRzIHR3byBJbmxpbmVJdGVyYXRvciBhcmd1bWVudHMsCisg
ICAgICAgIGNhbGxpbmcgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KCkgb24g
ZWFjaCBpbnRlcnN0aXRpYWwgRE9NIG5vZGUuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZnVuY3Rp
b24gd2hlcmUgd2hpdGVzcGFjZSBjb2xsYXBzaW5nIGhhcHBlbnMuIFRoZSBNaWRwb2ludFN0YXRl
IG9iamVjdAorICAgICAgICBrZWVwcyBhIGN1cnNvciBpbnRvIGl0cyByZW1lbWJlcmVkIHdoaXRl
c3BhY2Ugc2VxdWVuY2VzLiBIZXJlLCB3ZSBzaW1wbHkgbWFrZSBhCisgICAgICAgIGJpZGkgcnVu
IGZvciBlYWNoIHJlZ2lvbiBpbiBiZXR3ZWVuIGFkamFjZW50IHdoaXRlc3BhY2UgcGFpcnMgaW4g
dGhlIE1pZHBvaW50U3RhdGUKKyAgICAgICAgb2JqZWN0LiBUaGVzZSBiaWRpIHJ1bnMgZXZlbnR1
YWxseSBnZXQgdHVybmVkIGludG8gbGVhZiBJbmxpbmVCb3hlcy4KKworICAgICAgICBUaGUgcHJv
YmxlbSBpcyB0aGF0IHRoZSBCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpIGNhbGxiYWNrcyBkb24n
dCBvY2N1ciBpbgorICAgICAgICBzdHJpbmctb3JkZXIsIGJ1dCB0aGUgTWlkcG9pbnQgSW5saW5l
SXRlcmF0b3IgcGFpcnMgYXJlIGluIHN0cmluZy1vcmRlci4gSW4KKyAgICAgICAgcGFydGljdWxh
ciwgd2l0aGluIGEgcGFydGljdWxhciBpc29sYXRlLCBhcHBlbmRSdW4oKSBnZXRzIGNhbGxlZCBp
biBzdHJpbmcKKyAgICAgICAgb3JkZXIsIGJ1dCBjYWxsYmFja3MgdGhhdCBvY2N1ciBmb3IgaW5u
ZXIgaXNvbGF0ZXMgYXJlIGRlZmVycmVkLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgUmVuZGVy
QmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KCkgZ2V0cyBjb25mdXNlZCB3aGVuIGl0IGxv
b2tzIGZvciByZWxldmFudAorICAgICAgICB3aGl0ZXNwYWNlIHRvIHNraXAuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlSZXNv
bHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6TWlkcG9pbnRTdGF0ZTo6bnVtTWlkcG9pbnRzKTog
UmV0dXJuaW5nIGEgY29uc3QgdW5zaWduZWQmIGlzIHNpbGx5LgorICAgICAgICAoV2ViQ29yZTo6
TWlkcG9pbnRTdGF0ZTo6Y3VycmVudE1pZHBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNaWRwb2ludFN0YXRlOjpzZXRDdXJyZW50TWlkcG9pbnQpOiBUaGUgaXNvbGF0ZWQgTWlkcG9p
bnRTdGF0ZSBvYmplY3QKKyAgICAgICAgbmVlZHMgdG8gYmUgYWJsZSB0byBzZXQgaXRzIGN1cnJl
bnQgbWlkcG9pbnQgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IG9uZSBpbnNpZGUKKyAgICAgICAgdGhl
IGlzb2xhdGUuCisgICAgICAgIChXZWJDb3JlOjpNaWRwb2ludFN0YXRlOjpkZWNyZW1lbnROdW1N
aWRwb2ludHMpOiBSZW5hbWVkIGZyb20gImRlY3JlYXNlIgorICAgICAgICAoV2ViQ29yZTo6TWlk
cG9pbnRTdGF0ZTo6YmV0d2Vlbk1pZHBvaW50cyk6IFRoaXMgZnVuY3Rpb24gaXMgdHJ1ZSBpZmYK
KyAgICAgICAgY3VycmVudE1pZHBvaW50KCkgJSAyLiBJbnN0ZWFkIG9mIGtlZXBpbmcgYSBtZW1i
ZXIgdmFyaWFibGUsIHdlIGNhbiBqdXN0IGNvbXB1dGUKKyAgICAgICAgdGhhdC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1pZHBvaW50U3RhdGU6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1pZHBvaW50U3RhdGU6OmRlY3JlYXNlTnVtTWlkcG9pbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1pZHBvaW50U3RhdGU6OnNldEJldHdlZW5NaWRwb2ludHMpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IENhbGwKKyAgICAgICAg
UmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KCkgdG8ga2VlcCBvdXIgTWlkcG9p
bnRTdGF0ZSBvYmplY3QgaW4gc3luYworICAgICAgICB3aGVuIHdlIHBvcCBvdXQgb2YgdGhlIGlz
b2xhdGVkIG9iamVjdC4gSG93ZXZlciwgd2UgcGFzcyBpbiBhIG51bGwgcnVuIGxpc3QsCisgICAg
ICAgIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhcHBlbmQganVzdCB5ZXQgKHRoYXQgaGFwcGVu
cyB3aGVuIHdlIHByb2Nlc3MgdGhlCisgICAgICAgIGlzb2xhdGUpLgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW4pOiBVcGRhdGUgZm9yIG5ldyBzaWduYXR1
cmUgb2YKKyAgICAgICAgYXBwZW5kUnVuc0Zvck9iamVjdCgpLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFNr
aXBDcmVhdGluZ1J1bnNGb3JPYmplY3QpOiBUYWtlIGEgcmVmZXJlbmNlIGluc3RlYWQKKyAgICAg
ICAgb2YgYSBwb2ludGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJ1bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KTogQWxsb3cgc29tZW9uZSBwYXNzaW5nIHVzIGEg
bnVsbAorICAgICAgICBCaWRpUnVuTGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIGtlZXAgdGhl
IHJlc29sdmVyJ3MgbWlkcG9pbnRTdGF0ZSgpIHVwIHRvIGRhdGUsCisgICAgICAgIGJ1dCB3b24n
dCBhY3R1YWxseSBlbWl0IGFueSBydW5zLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5UmVzb2x2
ZXJUb1Jlc3VtZUluSXNvbGF0ZSk6IFJlbmFtZWQgZnJvbSBzZXRVcC4KKyAgICAgICAgKFdlYkNv
cmU6Omlzb2xhdGVkUmVzb2x2ZXJzTWlkcG9pbnRTdGF0ZSk6IENhbGN1bGF0ZSB0aGUgbWlkcG9p
bnQgc3RhdGUgZm9yIHRoZQorICAgICAgICBpc29sYXRlZCByZXNvbHZlci4KKyAgICAgICAgKFdl
YkNvcmU6OnNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZSk6IENhbGwgaXNvbGF0ZWRSZXNv
bHZlcnNNaWRwb2ludFN0YXRlKCkuCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RCaWRpUnVu
c0ZvclNlZ21lbnQpOiBQYXNzIGluIHRoZSB0b3BSZXNvbHZlciwgd2hpY2ggaXMKKyAgICAgICAg
bmVjZXNzYXJ5IGZvciBpc29sYXRlZFJlc29sdmVyc01pZHBvaW50U3RhdGUoKS4KKyAgICAgICAg
KiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNo
ZWNrTWlkcG9pbnRzKToKKwogMjAxNS0wNy0wOCAgTWF0dGhldyBEYWl0ZXIgIDxtZGFpdGVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYWtlIHN1cmUgTWVkaWFTdHJlYW0gZW5naW5lIGxvYWRlZCBm
b3IgaW50ZXJwcmV0aW5nIE1lZGlhU3RyZWFtcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaVJlc29sdmVyLmgKaW5kZXggZTNjZTc0OWU0MGY5ZTdlOGExY2IyZDk4YjAzM2YzYjc2
ZmIzNTZhMy4uMTdiMDY2YTIyYmRmNjcxZmVhZDFmMmM3OTk1ZTcwM2Y0YmVmYTM1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC00NCw3ICs0NCw2
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fbnVtTWlkcG9pbnRzID0gMDsKICAgICAgICAg
bV9jdXJyZW50TWlkcG9pbnQgPSAwOwotICAgICAgICBtX2JldHdlZW5NaWRwb2ludHMgPSBmYWxz
ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzdGFydElnbm9yaW5nU3BhY2VzKGNvbnN0IEl0ZXJh
dG9yJiBtaWRwb2ludCkKQEAgLTY5LDEyICs2OCwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
VmVjdG9yPEl0ZXJhdG9yPiYgbWlkcG9pbnRzKCkgeyByZXR1cm4gbV9taWRwb2ludHM7IH0KLSAg
ICBjb25zdCB1bnNpZ25lZCYgbnVtTWlkcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1NaWRw
b2ludHM7IH0KLSAgICBjb25zdCB1bnNpZ25lZCYgY3VycmVudE1pZHBvaW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50TWlkcG9pbnQ7IH0KKyAgICB1bnNpZ25lZCBudW1NaWRwb2ludHMoKSBj
b25zdCB7IHJldHVybiBtX251bU1pZHBvaW50czsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRNaWRw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE1pZHBvaW50OyB9CisgICAgdm9pZCBzZXRD
dXJyZW50TWlkcG9pbnQodW5zaWduZWQgY3VycmVudE1pZHBvaW50KSB7IG1fY3VycmVudE1pZHBv
aW50ID0gY3VycmVudE1pZHBvaW50OyB9CiAgICAgdm9pZCBpbmNyZW1lbnRDdXJyZW50TWlkcG9p
bnQoKSB7ICsrbV9jdXJyZW50TWlkcG9pbnQ7IH0KLSAgICB2b2lkIGRlY3JlYXNlTnVtTWlkcG9p
bnRzKCkgeyAtLW1fbnVtTWlkcG9pbnRzOyB9Ci0gICAgY29uc3QgYm9vbCYgYmV0d2Vlbk1pZHBv
aW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmV0d2Vlbk1pZHBvaW50czsgfQotICAgIHZvaWQgc2V0
QmV0d2Vlbk1pZHBvaW50cyhib29sIGJldHdlZW5NaWRwb2ludCkgeyBtX2JldHdlZW5NaWRwb2lu
dHMgPSBiZXR3ZWVuTWlkcG9pbnQ7IH0KKyAgICB2b2lkIGRlY3JlbWVudE51bU1pZHBvaW50cygp
IHsgLS1tX251bU1pZHBvaW50czsgfQorICAgIGJvb2wgYmV0d2Vlbk1pZHBvaW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudE1pZHBvaW50ICUgMjsgfQogcHJpdmF0ZToKICAgICAvLyBUaGUg
Z29hbCBpcyB0byByZXVzZSB0aGUgbGluZSBzdGF0ZSBhY3Jvc3MgbXVsdGlwbGUKICAgICAvLyBs
aW5lcyBzbyB3ZSBqdXN0IGtlZXAgYW4gYXJyYXkgYXJvdW5kIGZvciBtaWRwb2ludHMgYW5kIG5l
dmVyIGNsZWFyIGl0IGFjcm9zcyBtdWx0aXBsZQpAQCAtODIsNyArODEsNiBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxJdGVyYXRvcj4gbV9taWRwb2ludHM7CiAgICAgdW5zaWduZWQgbV9udW1NaWRw
b2ludHM7CiAgICAgdW5zaWduZWQgbV9jdXJyZW50TWlkcG9pbnQ7Ci0gICAgYm9vbCBtX2JldHdl
ZW5NaWRwb2ludHM7CiAKICAgICB2b2lkIGFkZE1pZHBvaW50KGNvbnN0IEl0ZXJhdG9yJiBtaWRw
b2ludCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCmlu
ZGV4IGE5ZWZlMGQwNmRhMjRjYjczMDAwYzU4NDdlODlmY2ZmZjg4ZmUzYzEuLjIzY2Y5M2E5N2Zj
NmI2ZGFlODZmODkxYzNkMDMzMjE4MWUwODVmY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVJdGVyYXRvci5oCkBAIC01MDYsMjYgKzUwNiwyMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSkgeyB9CiAgICAgdm9p
ZCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpIHsgfQogCi0gICAgdm9pZCBhZGRGYWtlUnVuSWZO
ZWNlc3NhcnkoUmVuZGVyT2JqZWN0JiBvYmosIHVuc2lnbmVkIHBvcywgSW5saW5lQmlkaVJlc29s
dmVyJiByZXNvbHZlcikKKyAgICB2b2lkIGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmpl
Y3QmIG9iaiwgdW5zaWduZWQgcG9zLCB1bnNpZ25lZCBlbmQsIElubGluZUJpZGlSZXNvbHZlciYg
cmVzb2x2ZXIpCiAgICAgewogICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gYWRkIGEgZmFrZSBy
dW4gZm9yIGEgZ2l2ZW4gaXNvbGF0ZWQgc3BhbiBvbmNlIGR1cmluZyBlYWNoIGNhbGwgdG8gY3Jl
YXRlQmlkaVJ1bnNGb3JMaW5lLgogICAgICAgICAvLyBXZSdsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5
IHNwYW4gaW5zaWRlIHRoZSBpc29sYXRlZCBzcGFuIHNvIHdlIGp1c3QgaWdub3JlIHN1YnNlcXVl
bnQgY2FsbHMuCiAgICAgICAgIC8vIFdlIGFsc28gYXZvaWQgY3JlYXRpbmcgYSBmYWtlIHJ1biB1
bnRpbCB3ZSBoaXQgYSBjaGlsZCB0aGF0IHdhcnJhbnRzIG9uZSwgZS5nLiB3ZSBza2lwIGZsb2F0
cy4KLSAgICAgICAgaWYgKG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlIHx8IFJlbmRl
ckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KCZvYmopKQorICAgICAgICBp
ZiAoUmVuZGVyQmxvY2s6OnNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xh
dGUgPSB0cnVlOwotICAgICAgICAvLyBvYmogYW5kIHBvcyB0b2dldGhlciBkZW5vdGUgYSBzaW5n
bGUgcG9zaXRpb24gaW4gdGhlIGlubGluZSwgZnJvbSB3aGljaCB0aGUgcGFyc2luZyBvZiB0aGUg
aXNvbGF0ZSB3aWxsIHN0YXJ0LgotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhl
IGVuZCBvZiB0aGUgcnVuIGJlY2F1c2UgdGhpcyBpcyBpbXBsaWNpdDogaXQgaXMgZWl0aGVyIGVu
ZE9mTGluZSBvciB0aGUgZW5kIG9mIHRoZQotICAgICAgICAvLyBpc29sYXRlLCB3aGVuIHdlIGNh
bGwgY3JlYXRlQmlkaVJ1bnNGb3JMaW5lIGl0IHdpbGwgc3RvcCBhdCB3aGljaGV2ZXIgY29tZXMg
Zmlyc3QuCi0gICAgICAgIGFkZFBsYWNlaG9sZGVyUnVuRm9ySXNvbGF0ZWRJbmxpbmUocmVzb2x2
ZXIsIG9iaiwgcG9zKTsKLSAgICAgICAgLy8gRklYTUU6IElubGluZSBpc29sYXRlcyBkb24ndCB3
b3JrIHByb3Blcmx5IHdpdGggY29sbGFwc2luZyB3aGl0ZXNwYWNlLCBzZWUgd2Via2l0Lm9yZy9i
LzEwOTYyNAotICAgICAgICAvLyBGb3Igbm93LCBpZiB3ZSBlbnRlciBhbiBpc29sYXRlIGJldHdl
ZW4gbWlkcG9pbnRzLCB3ZSBpbmNyZW1lbnQgb3VyIGN1cnJlbnQgbWlkcG9pbnQgb3IgZWxzZQot
ICAgICAgICAvLyB3ZSdsbCBsZWF2ZSB0aGUgaXNvbGF0ZSBhbmQgaWdub3JlIHRoZSBjb250ZW50
IHRoYXQgZm9sbG93cy4KLSAgICAgICAgTWlkcG9pbnRTdGF0ZTxJbmxpbmVJdGVyYXRvcj4mIG1p
ZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7Ci0gICAgICAgIGlmIChtaWRw
b2ludFN0YXRlLmJldHdlZW5NaWRwb2ludHMoKSAmJiBtaWRwb2ludFN0YXRlLm1pZHBvaW50cygp
W21pZHBvaW50U3RhdGUuY3VycmVudE1pZHBvaW50KCldLnJlbmRlcmVyKCkgPT0gJm9iaikgewot
ICAgICAgICAgICAgbWlkcG9pbnRTdGF0ZS5zZXRCZXR3ZWVuTWlkcG9pbnRzKGZhbHNlKTsKLSAg
ICAgICAgICAgIG1pZHBvaW50U3RhdGUuaW5jcmVtZW50Q3VycmVudE1pZHBvaW50KCk7CisgICAg
ICAgIGlmICghbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUpIHsKKyAgICAgICAgICAg
IC8vIG9iaiBhbmQgcG9zIHRvZ2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBwb3NpdGlvbiBpbiB0aGUg
aW5saW5lLCBmcm9tIHdoaWNoIHRoZSBwYXJzaW5nIG9mIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQu
CisgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcnVu
IGJlY2F1c2UgdGhpcyBpcyBpbXBsaWNpdDogaXQgaXMgZWl0aGVyIGVuZE9mTGluZSBvciB0aGUg
ZW5kIG9mIHRoZQorICAgICAgICAgICAgLy8gaXNvbGF0ZSwgd2hlbiB3ZSBjYWxsIGNyZWF0ZUJp
ZGlSdW5zRm9yTGluZSBpdCB3aWxsIHN0b3AgYXQgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgorICAg
ICAgICAgICAgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2Jq
LCBwb3MpOwogICAgICAgICB9CisgICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29s
YXRlID0gdHJ1ZTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0
KG9iaiwgcG9zLCBlbmQsIHJlc29sdmVyLCBudWxscHRyKTsKICAgICB9CiAKIHByaXZhdGU6CkBA
IC01NDUsOSArNTQwLDkgQEAgaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRS
dW4oKQogICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IG1fc29yLnJlbmRlcmVyKCk7CiAgICAg
ICAgIHdoaWxlIChvYmogJiYgb2JqICE9IG1fZW9yLnJlbmRlcmVyKCkgJiYgb2JqICE9IGVuZE9m
TGluZS5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoaXNvbGF0ZVRyYWNrZXIuaW5Jc29s
YXRlKCkpCi0gICAgICAgICAgICAgICAgaXNvbGF0ZVRyYWNrZXIuYWRkRmFrZVJ1bklmTmVjZXNz
YXJ5KCpvYmosIHN0YXJ0LCAqdGhpcyk7CisgICAgICAgICAgICAgICAgaXNvbGF0ZVRyYWNrZXIu
YWRkRmFrZVJ1bklmTmVjZXNzYXJ5KCpvYmosIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAqdGhpcyk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphcHBl
bmRSdW5zRm9yT2JqZWN0KG1fcnVucywgc3RhcnQsIG9iai0+bGVuZ3RoKCksIG9iaiwgKnRoaXMp
OworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCgq
b2JqLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgKnRoaXMsICZtX3J1bnMpOwogICAgICAgICAgICAg
Ly8gRklYTUU6IHN0YXJ0L29iaiBzaG91bGQgYmUgYW4gSW5saW5lSXRlcmF0b3IgaW5zdGVhZCBv
ZiB0d28gc2VwYXJhdGUgdmFyaWFibGVzLgogICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAg
ICAgICAgb2JqID0gYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcygqbV9zb3Iucm9vdCgpLCBv
YmosICZpc29sYXRlVHJhY2tlcik7CkBAIC01NjEsOSArNTU2LDkgQEAgaW5saW5lIHZvaWQgSW5s
aW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW4oKQogICAgICAgICAgICAgLy8gSXQncyBPSyB0byBh
ZGQgcnVucyBmb3IgemVyby1sZW5ndGggUmVuZGVyT2JqZWN0cywganVzdCBkb24ndCBtYWtlIHRo
ZSBydW4gbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlCiAgICAgICAgICAgICBpbnQgZW5kID0gb2Jq
LT5sZW5ndGgoKSA/IHBvcyArIDEgOiAwOwogICAgICAgICAgICAgaWYgKGlzb2xhdGVUcmFja2Vy
LmluSXNvbGF0ZSgpKQotICAgICAgICAgICAgICAgIGlzb2xhdGVUcmFja2VyLmFkZEZha2VSdW5J
Zk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgKnRoaXMpOworICAgICAgICAgICAgICAgIGlzb2xhdGVU
cmFja2VyLmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwg
KnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxv
dzo6YXBwZW5kUnVuc0Zvck9iamVjdChtX3J1bnMsIHN0YXJ0LCBlbmQsIG9iaiwgKnRoaXMpOwor
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCgqb2Jq
LCBzdGFydCwgZW5kLCAqdGhpcywgJm1fcnVucyk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2Vv
ci5pbmNyZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXgg
Njc5NDU3NWIyZTIwMjkxNzUyYzU5NzI2MGFlMGE5MzJkMjdiODNiNi4uZTJlZWMyZTBkZTAyZDFj
MjBlYWIxZjNkNGVkZjAzYjFlNzU3MjQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKQEAgLTE5OSw5ICsxOTksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlbmRl
ckJveCogY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXJlbnQpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU2tpcENy
ZWF0aW5nUnVuc0Zvck9iamVjdChSZW5kZXJPYmplY3QqIG9iaikKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KFJlbmRlck9iamVjdCYgb2JqKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9iai0+aXNGbG9hdGluZygpIHx8IChvYmotPmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpICYmICFvYmotPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkg
JiYgIW9iai0+Y29udGFpbmVyKCktPmlzUmVuZGVySW5saW5lKCkpOworICAgICAgICByZXR1cm4g
b2JqLmlzRmxvYXRpbmcoKSB8fCAob2JqLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmou
c3R5bGUoKS5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKSAmJiAhb2JqLmNvbnRhaW5lcigp
LT5pc1JlbmRlcklubGluZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmLCBTdHJp
bmdWaWV3LCBjb25zdCBSZW5kZXJTdHlsZSYsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmgKaW5kZXggMDQyODliMTcxMjc5ZDc1ZDFhODJhMWM3NDc2NWY4MTI0NmJk
OGVlMi4uZjgzMDY0MTgxMjg0YjFhMjlmY2JmNDZjOThiNDM2ZWI0Zjk4OWQ5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApAQCAtNTM3LDcgKzUzNyw3IEBA
IHByaXZhdGU6CiAvLyBsaW5lIGxheW91dCBjb2RlIGlzIHNlcGFyYXRlZCBmcm9tIFJlbmRlckJs
b2NrIGFuZCBSZW5kZXJCbG9ja0Zsb3cuCiAvLyBTVEFSVCBNRVRIT0RTIERFRklORUQgSU4gUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zv
ck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVy
T2JqZWN0KiwgSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kUnVu
c0Zvck9iamVjdChSZW5kZXJPYmplY3QmLCBpbnQgc3RhcnQsIGludCBlbmQsIElubGluZUJpZGlS
ZXNvbHZlciYsIEJpZGlSdW5MaXN0PEJpZGlSdW4+Kik7CiAgICAgUm9vdElubGluZUJveCogY3Jl
YXRlQW5kQXBwZW5kUm9vdElubGluZUJveCgpOwogCiAgICAgTGF5b3V0VW5pdCBzdGFydEFsaWdu
ZWRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgc2hvdWxkSW5kZW50VGV4
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCmluZGV4IDVlYzA0NzBiYWNjOGFmOGQ1NjRhZTZkZDY3N2YyYzI2MzU1ZjhlNmYuLmY1
NDk5NGExMTlmN2I3ZDFmMWQ0MjAyNWFiZWQ1OWM2MTU1ZjZhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC03MSwxMyAr
NzEsMTIgQEAgc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoVGV4dERpcmVjdGlv
biYgZGlyLCBJbmxpbmVJdGVyYXRvciBpdGVyKQogICAgIH0KIH0KIAotaW5saW5lIEJpZGlSdW4q
IGNyZWF0ZVJ1bihpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCogb2JqLCBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyKQoraW5saW5lIEJpZGlSdW4qIGNyZWF0ZVJ1bihpbnQgc3Rh
cnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyKQogewotICAgIEFTU0VSVChvYmopOwotICAgIHJldHVybiBuZXcgQmlkaVJ1bihzdGFydCwg
ZW5kLCAqb2JqLCByZXNvbHZlci5jb250ZXh0KCksIHJlc29sdmVyLmRpcigpKTsKKyAgICByZXR1
cm4gbmV3IEJpZGlSdW4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCksIHJlc29s
dmVyLmRpcigpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmpl
Y3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIHJ1bnMsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVy
T2JqZWN0KiBvYmosIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCit2b2lkIFJlbmRlckJs
b2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdChSZW5kZXJPYmplY3QmIG9iaiwgaW50IHN0YXJ0
LCBpbnQgZW5kLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBCaWRpUnVuTGlzdDxCaWRp
UnVuPiogcnVucykKIHsKICAgICBpZiAoc3RhcnQgPiBlbmQgfHwgc2hvdWxkU2tpcENyZWF0aW5n
UnVuc0Zvck9iamVjdChvYmopKQogICAgICAgICByZXR1cm47CkBAIC04OCwzMyArODcsMzQgQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4mIHJ1bnMsIGludCBzdGFydCwKICAgICBpZiAoaGF2ZU5leHRNaWRwb2ludCkKICAgICAg
ICAgbmV4dE1pZHBvaW50ID0gbGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzKClbbGluZU1pZHBv
aW50U3RhdGUuY3VycmVudE1pZHBvaW50KCldOwogICAgIGlmIChsaW5lTWlkcG9pbnRTdGF0ZS5i
ZXR3ZWVuTWlkcG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKCEoaGF2ZU5leHRNaWRwb2ludCAmJiBu
ZXh0TWlkcG9pbnQucmVuZGVyZXIoKSA9PSBvYmopKQorICAgICAgICBpZiAoIWhhdmVOZXh0TWlk
cG9pbnQgfHwgKCZvYmogIT0gbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHN0YXJ0IHBvaW50LiBTdG9wIGlnbm9y
aW5nIG9iamVjdHMgYW5kCiAgICAgICAgIC8vIGFkanVzdCBvdXIgc3RhcnQuCi0gICAgICAgIGxp
bmVNaWRwb2ludFN0YXRlLnNldEJldHdlZW5NaWRwb2ludHMoZmFsc2UpOwogICAgICAgICBzdGFy
dCA9IG5leHRNaWRwb2ludC5vZmZzZXQoKTsKICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUuaW5j
cmVtZW50Q3VycmVudE1pZHBvaW50KCk7Ci0gICAgICAgIGlmIChzdGFydCA8IGVuZCkKLSAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRSdW5zRm9yT2JqZWN0KHJ1bnMsIHN0YXJ0LCBlbmQsIG9iaiwg
cmVzb2x2ZXIpOworICAgICAgICBpZiAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgICAgIGFwcGVu
ZFJ1bnNGb3JPYmplY3Qob2JqLCBzdGFydCwgZW5kLCByZXNvbHZlciwgcnVucyk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWhhdmVO
ZXh0TWlkcG9pbnQgfHwgKG9iaiAhPSBuZXh0TWlkcG9pbnQucmVuZGVyZXIoKSkpIHsKLSAgICAg
ICAgICAgIHJ1bnMuYWRkUnVuKGNyZWF0ZVJ1bihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyKSk7
CisgICAgICAgIGlmICghaGF2ZU5leHRNaWRwb2ludCB8fCAoJm9iaiAhPSBuZXh0TWlkcG9pbnQu
cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgIGlmIChydW5zKQorICAgICAgICAgICAgICAgIHJ1
bnMtPmFkZFJ1bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQW4gZW5kIG1pZHBvaW50IGhh
cyBiZWVuIGVuY291bnRlcmVkIHdpdGhpbiBvdXIgb2JqZWN0LiBXZSBuZWVkIHRvIGFwcGVuZCBh
IHJ1biB3aXRoIG91ciBlbmRwb2ludC4KICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obmV4
dE1pZHBvaW50Lm9mZnNldCgpICsgMSkgPD0gZW5kKSB7Ci0gICAgICAgICAgICBsaW5lTWlkcG9p
bnRTdGF0ZS5zZXRCZXR3ZWVuTWlkcG9pbnRzKHRydWUpOwogICAgICAgICAgICAgbGluZU1pZHBv
aW50U3RhdGUuaW5jcmVtZW50Q3VycmVudE1pZHBvaW50KCk7CiAgICAgICAgICAgICAvLyBUaGUg
ZW5kIG9mIHRoZSBsaW5lIGlzIGJlZm9yZSB0aGUgb2JqZWN0IHdlJ3JlIGluc3BlY3RpbmcuIFNr
aXAgZXZlcnl0aGluZyBhbmQgcmV0dXJuCiAgICAgICAgICAgICBpZiAobmV4dE1pZHBvaW50LnJl
ZmVyc1RvRW5kT2ZQcmV2aW91c05vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxKSA+
IHN0YXJ0KQotICAgICAgICAgICAgICAgIHJ1bnMuYWRkUnVuKGNyZWF0ZVJ1bihzdGFydCwgbmV4
dE1pZHBvaW50Lm9mZnNldCgpICsgMSwgb2JqLCByZXNvbHZlcikpOwotICAgICAgICAgICAgYXBw
ZW5kUnVuc0Zvck9iamVjdChydW5zLCBuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxLCBlbmQsIG9i
aiwgcmVzb2x2ZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgcnVucy5hZGRSdW4oY3Jl
YXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpKTsKKyAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KG5leHRNaWRwb2ludC5vZmZzZXQoKSArIDEpID4gc3RhcnQgJiYgcnVucykK
KyAgICAgICAgICAgICAgICBydW5zLT5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBuZXh0TWlkcG9p
bnQub2Zmc2V0KCkgKyAxLCBvYmosIHJlc29sdmVyKSk7CisgICAgICAgICAgICBhcHBlbmRSdW5z
Rm9yT2JqZWN0KG9iaiwgbmV4dE1pZHBvaW50Lm9mZnNldCgpICsgMSwgZW5kLCByZXNvbHZlciwg
cnVucyk7CisgICAgICAgIH0gZWxzZSBpZiAocnVucykKKyAgICAgICAgICAgIHJ1bnMtPmFkZFJ1
bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlcikpOwogICAgIH0KIH0KIApAQCAt
MTAxMSwxNSArMTAxMSw0MCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kRmxvYXRpbmdP
YmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iagogICAgIGxhc3RSb290
Qm94KCktPmFwcGVuZEZsb2F0KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyLCBSZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9iamVjdCogc3Rh
cnRPYmplY3QpCitzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNv
bGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBSZW5kZXJPYmplY3QqIHJvb3QsIFJl
bmRlck9iamVjdCogc3RhcnRPYmplY3QpCiB7CiAgICAgaWYgKHJvb3QgIT0gc3RhcnRPYmplY3Qp
IHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBzdGFydE9iamVjdC0+cGFyZW50KCk7
Ci0gICAgICAgIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShyZXNvbHZlciwgcm9vdCwg
cGFyZW50KTsKKyAgICAgICAgbm90aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShyZXNvbHZl
ciwgcm9vdCwgcGFyZW50KTsKICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KCZy
ZXNvbHZlciwgc3RhcnRPYmplY3QpOwogICAgIH0KIH0KIAorc3RhdGljIGlubGluZSBPcHRpb25h
bDxMaW5lTWlkcG9pbnRTdGF0ZT4gaXNvbGF0ZWRSZXNvbHZlcnNNaWRwb2ludFN0YXRlKElubGlu
ZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsIFJlbmRlck9iamVjdCogcm9vdCkKK3sKKyAgICBM
aW5lTWlkcG9pbnRTdGF0ZSBtaWRwb2ludHMgPSB0b3BSZXNvbHZlci5taWRwb2ludFN0YXRlKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pZHBvaW50cy5udW1NaWRwb2ludHMoKTsg
KytpKSB7CisgICAgICAgIElubGluZUl0ZXJhdG9yIGl0ZXIgPSBtaWRwb2ludHMubWlkcG9pbnRz
KClbaV07CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0ZXIucmVuZGVy
ZXIoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gdG9wUmVzb2x2ZXIucG9zaXRpb24oKS5yb290
KCk7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAocmVu
ZGVyZXIgPT0gcm9vdCkgeworICAgICAgICAgICAgICAgIG1pZHBvaW50cy5zZXRDdXJyZW50TWlk
cG9pbnQoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZHBvaW50czsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gT3B0aW9uYWw8TGluZU1pZHBvaW50U3Rh
dGU+KE51bGxvcHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VXBSZXNvbHZlclRvUmVz
dW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIElubGluZUJpZGlSZXNv
bHZlciYgdG9wUmVzb2x2ZXIsIFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBzdGFy
dE9iamVjdCkKK3sKKyAgICAvLyBTZXQgdXAgbV9taWRwb2ludFN0YXRlCisgICAgaWYgKE9wdGlv
bmFsPExpbmVNaWRwb2ludFN0YXRlPiBtaWRwb2ludHMgPSBpc29sYXRlZFJlc29sdmVyc01pZHBv
aW50U3RhdGUodG9wUmVzb2x2ZXIsIHJvb3QpKQorICAgICAgICByZXNvbHZlci5taWRwb2ludFN0
YXRlKCkgPSBXVEY6Om1vdmUobWlkcG9pbnRzLnZhbHVlKCkpOworCisgICAgLy8gU2V0IHVwIG1f
bmVzdGVkSXNvbGF0ZUNvdW50CisgICAgbm90aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShy
ZXNvbHZlciwgcm9vdCwgc3RhcnRPYmplY3QpOworfQorCiAvLyBGSVhNRTogQmlkaVJlc29sdmVy
IHNob3VsZCBoYXZlIHRoaXMgbG9naWMuCiBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0Qmlk
aVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsIEJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZE9mUnVucywg
VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KQogewpAQCAtMTA1Niw3ICsxMDgxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0
cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAog
ICAgICAgICB9CiAgICAgICAgIGlzb2xhdGVkUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMo
ZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVuaWNvZGVCaWRpKSkpOwogCi0gICAgICAgIHNldFVwUmVz
b2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShpc29sYXRlZFJlc29sdmVyLCBpc29sYXRlZElubGluZSwg
JnN0YXJ0T2JqZWN0KTsKKyAgICAgICAgc2V0VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKGlz
b2xhdGVkUmVzb2x2ZXIsIHRvcFJlc29sdmVyLCBpc29sYXRlZElubGluZSwgJnN0YXJ0T2JqZWN0
KTsKIAogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgZmlyc3QgcnVuIHdpdGhpbiB0aGUgaXNvbGF0ZSB0aGF0IHdhcyBpZGVudGlmaWVkCiAg
ICAgICAgIC8vIGR1cmluZyB0aGUgZWFybGllciBjYWxsIHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGlu
ZS4gVGhpcyBjYW4gYmUgYnV0IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKaW5kZXggZTU1MTMzY2UzYzM1
ZjgzYTE1MDQ1N2NjN2Q2M2E0YmVkOGI3NDkyMS4uZDViZGUyZThkZWJlOTliMGI5NDRlM2I1ZWU4
NGRkMmEzODJhZDljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJl
YWtpbmdDb250ZXh0LmgKQEAgLTExNDcsNyArMTE0Nyw3IEBAIGlubGluZSBUcmFpbGluZ09iamVj
dHM6OkNvbGxhcHNlRmlyc3RTcGFjZU9yTm90IGNoZWNrTWlkcG9pbnRzKExpbmVNaWRwb2ludFN0
YXRlCiAgICAgICAgICAgICBjdXJycG9pbnQuaW5jcmVtZW50KCk7CiAgICAgICAgIGlmIChjdXJy
cG9pbnQgPT0gbEJyZWFrKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGxpbmUgYnJlYWsg
YmVmb3JlIHRoZSBzdGFydCBwb2ludC4gU2hhdmUgb2ZmIHRoZSBzdGFydCBwb2ludC4KLSAgICAg
ICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLmRlY3JlYXNlTnVtTWlkcG9pbnRzKCk7CisgICAgICAg
ICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5kZWNyZW1lbnROdW1NaWRwb2ludHMoKTsKICAgICAgICAg
ICAgIGlmIChlbmRwb2ludC5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
ICYmIGVuZHBvaW50LnJlbmRlcmVyKCktPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgZW5k
cG9pbnQuZmFzdERlY3JlbWVudCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBUcmFpbGluZ09i
amVjdHM6OkRvTm90Q29sbGFwc2VGaXJzdFNwYWNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256562</attachid>
            <date>2015-07-09 20:32:43 -0700</date>
            <delta_ts>2015-07-10 09:35:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109624-20150709203141.patch</filename>
            <type>text/plain</type>
            <size>24210</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1ZDdhOGJhYTcwZTUx
NzhjY2I4NWQ5MzVhZjY2ZjUwODc0MjBkZi4uODRjMTQ5OGQyNjRjODI3YWZlYWMyYzc3YjNlNGE0
NjE2ODQ2YTZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE1LTA3LTA5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQmlkaS1Jc29s
YXRlIGlubGluZXMgYnJlYWsgbGF5b3V0IHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTYyNAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjE3NTI4MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbiBjb25z
dHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoKSB3aGVuIGl0IGVuY291bnRlcnMgYW4KKyAgICAgICAg
aXNvbGF0ZS4gSXQgYWxyZWFkeSBoYXMgbG9naWMgdG8gY3JlYXRlIGEgQmlkaVJlc29sdmVyIGZv
ciB0aGUgaXNvbGF0ZWQgdGV4dDsKKyAgICAgICAgaG93ZXZlciwgdGhhdCBsb2dpYyBkb2Vzbid0
IGhhbmRsZSBzZXR0aW5nIHVwIHRoZSBNaWRwb2ludFN0YXRlIGF0IGFsbC4KKyAgICAgICAgU3Bl
Y2lmaWNhbGx5LCB3ZSBjYW4gc2V0IHRoZSBNaWRwb2ludFN0YXRlJ3MgY3Vyc29yIHRvIHBvaW50
IHRvIHRoZSBmaXJzdCBtaWRwb2ludAorICAgICAgICB3aG9zZSBhbmNlc3RvciBpcyB0aGUgaXNv
bGF0ZWQgcm9vdC4gSWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cywgc2ltcGx5IHByZXRlbmQgdGhh
dAorICAgICAgICB3ZSBoYXZlIG5vIG1pZHBvaW50cyBhdCBhbGwgKHdoaWNoIGlzIGNvcnJlY3Qp
LgorCisgICAgICAgIEhlcmUgaXMgc29tZSBleHBsYW5hdG9yeSB0ZXh0IHJlZ2FyZGluZyBob3cg
d2UgY29sbGFwc2Ugc3BhY2VzOgorCisgICAgICAgIENvbGxhcHNpbmcgd2hpdGVzcGFjZSBoYXBw
ZW5zIGluIGEgc2VyaWVzIG9mIHBoYXNlcy4gVGhlIGZpcnN0IHBoYXNlIG9jY3VycyB3aGVuCisg
ICAgICAgIHdlIHBlcmZvcm0gbGluZSBicmVha2luZy4gSGVyZSwgd2Uga2VlcCB0cmFjayBvZiBz
ZXF1ZW5jZXMgb2Ygd2hpdGVzcGFjZSB3aGljaAorICAgICAgICBzaG91bGQgYmUgY29sbGFwc2Vk
LCBpbiB0aGUgZm9ybSBvZiBhIHZlY3RvciBvZiBwYWlycyBvZiBJbmxpbmVJdGVyYXRvcnMuIFdl
IHB1dAorICAgICAgICB0aGlzIGtub3dsZWRnZSBpbnRvIGEgTWlkcG9pbnRTdGF0ZSBvYmplY3Qu
CisKKyAgICAgICAgVGhlbiwgb25jZSB3ZSBoYXZlIGEgbGluZSwgd2UgcnVuIHRoZSBiaWRpIGFs
Z29yaXRobSBvbiB0aGUgbGluZSAoaW5jbHVkaW5nIHRoZQorICAgICAgICB3aGl0ZXNwYWNlKS4g
QXMgb3V0cHV0LCB0aGUgYmlkaSBhbGdvcml0aG0gY2FsbHMgdGhlIEJpZGlSZXNvbHZlcjo6YXBw
ZW5kUnVuKCkKKyAgICAgICAgY2FsbGJhY2sgd2l0aCB0d28gSW5saW5lSXRlcmF0b3JzIGVhY2gg
dGltZSBpdCB3YW50cyB0byBjcmVhdGUgYSBydW4uIEJlY2F1c2UKKyAgICAgICAgZWFjaCByZW5k
ZXJlciB0aGF0IHdlIGNyZWF0ZSBoYXMgdG8gYmUgb3duZWQgYnkgZXhhY3RseSBvbmUgRE9NIG5v
ZGUsCisgICAgICAgIEJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuKCkgaXRlcmF0ZXMgYmV0d2VlbiBp
dHMgdHdvIElubGluZUl0ZXJhdG9yIGFyZ3VtZW50cywKKyAgICAgICAgY2FsbGluZyBSZW5kZXJC
bG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QoKSBvbiBlYWNoIGludGVyc3RpdGlhbCBET00g
bm9kZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmdW5jdGlvbiB3aGVyZSB3aGl0ZXNwYWNlIGNv
bGxhcHNpbmcgaGFwcGVucy4gVGhlIE1pZHBvaW50U3RhdGUgb2JqZWN0CisgICAgICAgIGtlZXBz
IGEgY3Vyc29yIGludG8gaXRzIHJlbWVtYmVyZWQgd2hpdGVzcGFjZSBzZXF1ZW5jZXMuIEhlcmUs
IHdlIHNpbXBseSBtYWtlIGEKKyAgICAgICAgYmlkaSBydW4gZm9yIGVhY2ggcmVnaW9uIGluIGJl
dHdlZW4gYWRqYWNlbnQgd2hpdGVzcGFjZSBwYWlycyBpbiB0aGUgTWlkcG9pbnRTdGF0ZQorICAg
ICAgICBvYmplY3QuIFRoZXNlIGJpZGkgcnVucyBldmVudHVhbGx5IGdldCB0dXJuZWQgaW50byBs
ZWFmIElubGluZUJveGVzLgorCisgICAgICAgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIEJpZGlS
ZXNvbHZlcjo6YXBwZW5kUnVuKCkgY2FsbGJhY2tzIGRvbid0IG9jY3VyIGluCisgICAgICAgIHN0
cmluZy1vcmRlciwgYnV0IHRoZSBNaWRwb2ludCBJbmxpbmVJdGVyYXRvciBwYWlycyBhcmUgaW4g
c3RyaW5nLW9yZGVyLiBJbgorICAgICAgICBwYXJ0aWN1bGFyLCB3aXRoaW4gYSBwYXJ0aWN1bGFy
IGlzb2xhdGUsIGFwcGVuZFJ1bigpIGdldHMgY2FsbGVkIGluIHN0cmluZworICAgICAgICBvcmRl
ciwgYnV0IGNhbGxiYWNrcyB0aGF0IG9jY3VyIGZvciBpbm5lciBpc29sYXRlcyBhcmUgZGVmZXJy
ZWQuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNG
b3JPYmplY3QoKSBnZXRzIGNvbmZ1c2VkIHdoZW4gaXQgbG9va3MgZm9yIHJlbGV2YW50CisgICAg
ICAgIHdoaXRlc3BhY2UgdG8gc2tpcC4KKworICAgICAgICBUZXN0OiBmYXN0L3RleHQvYmlkaS1p
c29sYXRlLXdoaXRlc3BhY2UtY29sbGFwc2UuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9CaWRpUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1pZHBvaW50U3RhdGU6Om51bU1p
ZHBvaW50cyk6IFJldHVybmluZyBhIGNvbnN0IHVuc2lnbmVkJiBpcyBzaWxseS4KKyAgICAgICAg
KFdlYkNvcmU6Ok1pZHBvaW50U3RhdGU6OmN1cnJlbnRNaWRwb2ludCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWlkcG9pbnRTdGF0ZTo6c2V0Q3VycmVudE1pZHBvaW50KTogVGhlIGlzb2xh
dGVkIE1pZHBvaW50U3RhdGUgb2JqZWN0CisgICAgICAgIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0
IGl0cyBjdXJyZW50IG1pZHBvaW50IHRvIHBvaW50IHRvIHRoZSBmaXJzdCBvbmUgaW5zaWRlCisg
ICAgICAgIHRoZSBpc29sYXRlLgorICAgICAgICAoV2ViQ29yZTo6TWlkcG9pbnRTdGF0ZTo6ZGVj
cmVtZW50TnVtTWlkcG9pbnRzKTogUmVuYW1lZCBmcm9tICJkZWNyZWFzZSIKKyAgICAgICAgKFdl
YkNvcmU6Ok1pZHBvaW50U3RhdGU6OmJldHdlZW5NaWRwb2ludHMpOiBUaGlzIGZ1bmN0aW9uIGlz
IHRydWUgaWZmCisgICAgICAgIGN1cnJlbnRNaWRwb2ludCgpICUgMi4gSW5zdGVhZCBvZiBrZWVw
aW5nIGEgbWVtYmVyIHZhcmlhYmxlLCB3ZSBjYW4ganVzdCBjb21wdXRlCisgICAgICAgIHRoYXQu
CisgICAgICAgIChXZWJDb3JlOjpNaWRwb2ludFN0YXRlOjpyZXNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNaWRwb2ludFN0YXRlOjpkZWNyZWFzZU51bU1pZHBvaW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNaWRwb2ludFN0YXRlOjpzZXRCZXR3ZWVuTWlkcG9pbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2VyOjphZGRGYWtlUnVuSWZOZWNlc3NhcnkpOiBDYWxs
CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCgpIHRvIGtlZXAg
b3VyIE1pZHBvaW50U3RhdGUgb2JqZWN0IGluIHN5bmMKKyAgICAgICAgd2hlbiB3ZSBwb3Agb3V0
IG9mIHRoZSBpc29sYXRlZCBvYmplY3QuIEhvd2V2ZXIsIHdlIHBhc3MgaW4gYSBudWxsIHJ1biBs
aXN0LAorICAgICAgICBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYXBwZW5kIGp1c3QgeWV0ICh0
aGF0IGhhcHBlbnMgd2hlbiB3ZSBwcm9jZXNzIHRoZQorICAgICAgICBpc29sYXRlKS4KKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuKTogVXBkYXRlIGZvciBu
ZXcgc2lnbmF0dXJlIG9mCisgICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3QoKS4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KTogVGFrZSBhIHJlZmVyZW5jZSBpbnN0
ZWFkCisgICAgICAgIG9mIGEgcG9pbnRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSdW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdCk6IEFsbG93IHNvbWVvbmUgcGFz
c2luZyB1cyBhIG51bGwKKyAgICAgICAgQmlkaVJ1bkxpc3QuIEluIHRoaXMgY2FzZSwgd2Ugd2ls
bCBrZWVwIHRoZSByZXNvbHZlcidzIG1pZHBvaW50U3RhdGUoKSB1cCB0byBkYXRlLAorICAgICAg
ICBidXQgd29uJ3QgYWN0dWFsbHkgZW1pdCBhbnkgcnVucy4KKyAgICAgICAgKFdlYkNvcmU6Om5v
dGlmeVJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUpOiBSZW5hbWVkIGZyb20gc2V0VXAuCisgICAg
ICAgIChXZWJDb3JlOjppc29sYXRlZFJlc29sdmVyc01pZHBvaW50U3RhdGUpOiBDYWxjdWxhdGUg
dGhlIG1pZHBvaW50IHN0YXRlIGZvciB0aGUKKyAgICAgICAgaXNvbGF0ZWQgcmVzb2x2ZXIuCisg
ICAgICAgIChXZWJDb3JlOjpzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUpOiBDYWxsIGlz
b2xhdGVkUmVzb2x2ZXJzTWlkcG9pbnRTdGF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Ry
dWN0QmlkaVJ1bnNGb3JTZWdtZW50KTogUGFzcyBpbiB0aGUgdG9wUmVzb2x2ZXIsIHdoaWNoIGlz
CisgICAgICAgIG5lY2Vzc2FyeSBmb3IgaXNvbGF0ZWRSZXNvbHZlcnNNaWRwb2ludFN0YXRlKCku
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpjaGVja01pZHBvaW50cyk6CisKIDIwMTUtMDctMDggIE1hdHRoZXcgRGFpdGVyICA8
bWRhaXRlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIE1lZGlhU3RyZWFtIGVuZ2lu
ZSBsb2FkZWQgZm9yIGludGVycHJldGluZyBNZWRpYVN0cmVhbXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCmluZGV4IGUzY2U3NDllNDBmOWU3ZThhMWNiMmQ5
OGIwMzNmM2I3NmZiMzU2YTMuLjE3YjA2NmEyMmJkZjY3MWZlYWQxZjJjNzk5NWU3MDNmNGJlZmEz
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaApAQCAt
NDQsNyArNDQsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX251bU1pZHBvaW50cyA9IDA7
CiAgICAgICAgIG1fY3VycmVudE1pZHBvaW50ID0gMDsKLSAgICAgICAgbV9iZXR3ZWVuTWlkcG9p
bnRzID0gZmFsc2U7CiAgICAgfQogICAgIAogICAgIHZvaWQgc3RhcnRJZ25vcmluZ1NwYWNlcyhj
b25zdCBJdGVyYXRvciYgbWlkcG9pbnQpCkBAIC02OSwxMiArNjgsMTIgQEAgcHVibGljOgogICAg
IH0KIAogICAgIFZlY3RvcjxJdGVyYXRvcj4mIG1pZHBvaW50cygpIHsgcmV0dXJuIG1fbWlkcG9p
bnRzOyB9Ci0gICAgY29uc3QgdW5zaWduZWQmIG51bU1pZHBvaW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtTWlkcG9pbnRzOyB9Ci0gICAgY29uc3QgdW5zaWduZWQmIGN1cnJlbnRNaWRwb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE1pZHBvaW50OyB9CisgICAgdW5zaWduZWQgbnVtTWlk
cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1NaWRwb2ludHM7IH0KKyAgICB1bnNpZ25lZCBj
dXJyZW50TWlkcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRNaWRwb2ludDsgfQorICAg
IHZvaWQgc2V0Q3VycmVudE1pZHBvaW50KHVuc2lnbmVkIGN1cnJlbnRNaWRwb2ludCkgeyBtX2N1
cnJlbnRNaWRwb2ludCA9IGN1cnJlbnRNaWRwb2ludDsgfQogICAgIHZvaWQgaW5jcmVtZW50Q3Vy
cmVudE1pZHBvaW50KCkgeyArK21fY3VycmVudE1pZHBvaW50OyB9Ci0gICAgdm9pZCBkZWNyZWFz
ZU51bU1pZHBvaW50cygpIHsgLS1tX251bU1pZHBvaW50czsgfQotICAgIGNvbnN0IGJvb2wmIGJl
dHdlZW5NaWRwb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2JldHdlZW5NaWRwb2ludHM7IH0KLSAg
ICB2b2lkIHNldEJldHdlZW5NaWRwb2ludHMoYm9vbCBiZXR3ZWVuTWlkcG9pbnQpIHsgbV9iZXR3
ZWVuTWlkcG9pbnRzID0gYmV0d2Vlbk1pZHBvaW50OyB9CisgICAgdm9pZCBkZWNyZW1lbnROdW1N
aWRwb2ludHMoKSB7IC0tbV9udW1NaWRwb2ludHM7IH0KKyAgICBib29sIGJldHdlZW5NaWRwb2lu
dHMoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRNaWRwb2ludCAlIDI7IH0KIHByaXZhdGU6CiAg
ICAgLy8gVGhlIGdvYWwgaXMgdG8gcmV1c2UgdGhlIGxpbmUgc3RhdGUgYWNyb3NzIG11bHRpcGxl
CiAgICAgLy8gbGluZXMgc28gd2UganVzdCBrZWVwIGFuIGFycmF5IGFyb3VuZCBmb3IgbWlkcG9p
bnRzIGFuZCBuZXZlciBjbGVhciBpdCBhY3Jvc3MgbXVsdGlwbGUKQEAgLTgyLDcgKzgxLDYgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8SXRlcmF0b3I+IG1fbWlkcG9pbnRzOwogICAgIHVuc2lnbmVk
IG1fbnVtTWlkcG9pbnRzOwogICAgIHVuc2lnbmVkIG1fY3VycmVudE1pZHBvaW50OwotICAgIGJv
b2wgbV9iZXR3ZWVuTWlkcG9pbnRzOwogCiAgICAgdm9pZCBhZGRNaWRwb2ludChjb25zdCBJdGVy
YXRvciYgbWlkcG9pbnQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRl
cmF0b3IuaAppbmRleCBhOWVmZTBkMDZkYTI0Y2I3MzAwMGM1ODQ3ZTg5ZmNmZmY4OGZlM2MxLi4y
M2NmOTNhOTdmYzZiNmRhZTg2Zjg5MWMzZDAzMzIxODFlMDg1ZmNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaApAQCAtNTA2LDI2ICs1MDYsMjEgQEAgcHVibGlj
OgogICAgIHZvaWQgZW1iZWQoVUNoYXJEaXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2UpIHsg
fQogICAgIHZvaWQgY29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKSB7IH0KIAotICAgIHZvaWQgYWRk
RmFrZVJ1bklmTmVjZXNzYXJ5KFJlbmRlck9iamVjdCYgb2JqLCB1bnNpZ25lZCBwb3MsIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCisgICAgdm9pZCBhZGRGYWtlUnVuSWZOZWNlc3Nhcnko
UmVuZGVyT2JqZWN0JiBvYmosIHVuc2lnbmVkIHBvcywgdW5zaWduZWQgZW5kLCBJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyKQogICAgIHsKICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGFk
ZCBhIGZha2UgcnVuIGZvciBhIGdpdmVuIGlzb2xhdGVkIHNwYW4gb25jZSBkdXJpbmcgZWFjaCBj
YWxsIHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4KICAgICAgICAgLy8gV2UnbGwgYmUgY2FsbGVk
IGZvciBldmVyeSBzcGFuIGluc2lkZSB0aGUgaXNvbGF0ZWQgc3BhbiBzbyB3ZSBqdXN0IGlnbm9y
ZSBzdWJzZXF1ZW50IGNhbGxzLgogICAgICAgICAvLyBXZSBhbHNvIGF2b2lkIGNyZWF0aW5nIGEg
ZmFrZSBydW4gdW50aWwgd2UgaGl0IGEgY2hpbGQgdGhhdCB3YXJyYW50cyBvbmUsIGUuZy4gd2Ug
c2tpcCBmbG9hdHMuCi0gICAgICAgIGlmIChtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0
ZSB8fCBSZW5kZXJCbG9jazo6c2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zvck9iamVjdCgmb2JqKSkK
KyAgICAgICAgaWYgKFJlbmRlckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0
KG9iaikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZv
clJvb3RJc29sYXRlID0gdHJ1ZTsKLSAgICAgICAgLy8gb2JqIGFuZCBwb3MgdG9nZXRoZXIgZGVu
b3RlIGEgc2luZ2xlIHBvc2l0aW9uIGluIHRoZSBpbmxpbmUsIGZyb20gd2hpY2ggdGhlIHBhcnNp
bmcgb2YgdGhlIGlzb2xhdGUgd2lsbCBzdGFydC4KLSAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0
byBtYXJrIHRoZSBlbmQgb2YgdGhlIHJ1biBiZWNhdXNlIHRoaXMgaXMgaW1wbGljaXQ6IGl0IGlz
IGVpdGhlciBlbmRPZkxpbmUgb3IgdGhlIGVuZCBvZiB0aGUKLSAgICAgICAgLy8gaXNvbGF0ZSwg
d2hlbiB3ZSBjYWxsIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpdCB3aWxsIHN0b3AgYXQgd2hpY2hl
dmVyIGNvbWVzIGZpcnN0LgotICAgICAgICBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5s
aW5lKHJlc29sdmVyLCBvYmosIHBvcyk7Ci0gICAgICAgIC8vIEZJWE1FOiBJbmxpbmUgaXNvbGF0
ZXMgZG9uJ3Qgd29yayBwcm9wZXJseSB3aXRoIGNvbGxhcHNpbmcgd2hpdGVzcGFjZSwgc2VlIHdl
YmtpdC5vcmcvYi8xMDk2MjQKLSAgICAgICAgLy8gRm9yIG5vdywgaWYgd2UgZW50ZXIgYW4gaXNv
bGF0ZSBiZXR3ZWVuIG1pZHBvaW50cywgd2UgaW5jcmVtZW50IG91ciBjdXJyZW50IG1pZHBvaW50
IG9yIGVsc2UKLSAgICAgICAgLy8gd2UnbGwgbGVhdmUgdGhlIGlzb2xhdGUgYW5kIGlnbm9yZSB0
aGUgY29udGVudCB0aGF0IGZvbGxvd3MuCi0gICAgICAgIE1pZHBvaW50U3RhdGU8SW5saW5lSXRl
cmF0b3I+JiBtaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOwotICAgICAg
ICBpZiAobWlkcG9pbnRTdGF0ZS5iZXR3ZWVuTWlkcG9pbnRzKCkgJiYgbWlkcG9pbnRTdGF0ZS5t
aWRwb2ludHMoKVttaWRwb2ludFN0YXRlLmN1cnJlbnRNaWRwb2ludCgpXS5yZW5kZXJlcigpID09
ICZvYmopIHsKLSAgICAgICAgICAgIG1pZHBvaW50U3RhdGUuc2V0QmV0d2Vlbk1pZHBvaW50cyhm
YWxzZSk7Ci0gICAgICAgICAgICBtaWRwb2ludFN0YXRlLmluY3JlbWVudEN1cnJlbnRNaWRwb2lu
dCgpOworICAgICAgICBpZiAoIW1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlKSB7Cisg
ICAgICAgICAgICAvLyBvYmogYW5kIHBvcyB0b2dldGhlciBkZW5vdGUgYSBzaW5nbGUgcG9zaXRp
b24gaW4gdGhlIGlubGluZSwgZnJvbSB3aGljaCB0aGUgcGFyc2luZyBvZiB0aGUgaXNvbGF0ZSB3
aWxsIHN0YXJ0LgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtYXJrIHRoZSBlbmQg
b2YgdGhlIHJ1biBiZWNhdXNlIHRoaXMgaXMgaW1wbGljaXQ6IGl0IGlzIGVpdGhlciBlbmRPZkxp
bmUgb3IgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIC8vIGlzb2xhdGUsIHdoZW4gd2UgY2Fs
bCBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgaXQgd2lsbCBzdG9wIGF0IHdoaWNoZXZlciBjb21lcyBm
aXJzdC4KKyAgICAgICAgICAgIGFkZFBsYWNlaG9sZGVyUnVuRm9ySXNvbGF0ZWRJbmxpbmUocmVz
b2x2ZXIsIG9iaiwgcG9zKTsKICAgICAgICAgfQorICAgICAgICBtX2hhdmVBZGRlZEZha2VSdW5G
b3JSb290SXNvbGF0ZSA9IHRydWU7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVu
c0Zvck9iamVjdChvYmosIHBvcywgZW5kLCByZXNvbHZlciwgbnVsbHB0cik7CiAgICAgfQogCiBw
cml2YXRlOgpAQCAtNTQ1LDkgKzU0MCw5IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZl
cjo6YXBwZW5kUnVuKCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBtX3Nvci5yZW5kZXJl
cigpOwogICAgICAgICB3aGlsZSAob2JqICYmIG9iaiAhPSBtX2Vvci5yZW5kZXJlcigpICYmIG9i
aiAhPSBlbmRPZkxpbmUucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzb2xhdGVUcmFj
a2VyLmluSXNvbGF0ZSgpKQotICAgICAgICAgICAgICAgIGlzb2xhdGVUcmFja2VyLmFkZEZha2VS
dW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgKnRoaXMpOworICAgICAgICAgICAgICAgIGlzb2xh
dGVUcmFja2VyLmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgb2JqLT5sZW5ndGgo
KSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
Rmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdChtX3J1bnMsIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCBv
YmosICp0aGlzKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNG
b3JPYmplY3QoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICp0aGlzLCAmbV9ydW5zKTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBzdGFydC9vYmogc2hvdWxkIGJlIGFuIElubGluZUl0ZXJhdG9y
IGluc3RlYWQgb2YgdHdvIHNlcGFyYXRlIHZhcmlhYmxlcy4KICAgICAgICAgICAgIHN0YXJ0ID0g
MDsKICAgICAgICAgICAgIG9iaiA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fc29y
LnJvb3QoKSwgb2JqLCAmaXNvbGF0ZVRyYWNrZXIpOwpAQCAtNTYxLDkgKzU1Niw5IEBAIGlubGlu
ZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuKCkKICAgICAgICAgICAgIC8vIEl0
J3MgT0sgdG8gYWRkIHJ1bnMgZm9yIHplcm8tbGVuZ3RoIFJlbmRlck9iamVjdHMsIGp1c3QgZG9u
J3QgbWFrZSB0aGUgcnVuIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZQogICAgICAgICAgICAgaW50
IGVuZCA9IG9iai0+bGVuZ3RoKCkgPyBwb3MgKyAxIDogMDsKICAgICAgICAgICAgIGlmIChpc29s
YXRlVHJhY2tlci5pbklzb2xhdGUoKSkKLSAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5h
ZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsICp0aGlzKTsKKyAgICAgICAgICAgICAg
ICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+
bGVuZ3RoKCksICp0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QobV9ydW5zLCBzdGFydCwgZW5kLCBvYmos
ICp0aGlzKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JP
YmplY3QoKm9iaiwgc3RhcnQsIGVuZCwgKnRoaXMsICZtX3J1bnMpOwogICAgICAgICB9CiAKICAg
ICAgICAgbV9lb3IuaW5jcmVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCmluZGV4IDY3OTQ1NzViMmUyMDI5MTc1MmM1OTcyNjBhZTBhOTMyZDI3YjgzYjYuLmUyZWVj
MmUwZGUwMmQxYzIwZWFiMWYzZDRlZGYwM2IxZTc1NzI0MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCkBAIC0xOTksOSArMTk5LDkgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBSZW5kZXJCb3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJl
bmRlck9iamVjdCogcGFyZW50KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0YXRpYyBib29sIHNo
b3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3QoUmVuZGVyT2JqZWN0KiBvYmopCisgICAgc3Rh
dGljIGJvb2wgc2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zvck9iamVjdChSZW5kZXJPYmplY3QmIG9i
aikKICAgICB7Ci0gICAgICAgIHJldHVybiBvYmotPmlzRmxvYXRpbmcoKSB8fCAob2JqLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhb2JqLT5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5s
aW5lVHlwZSgpICYmICFvYmotPmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG9iai5pc0Zsb2F0aW5nKCkgfHwgKG9iai5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiAhb2JqLnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCkgJiYgIW9iai5j
b250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFRleHRS
dW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgU3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUmLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IDA0Mjg5YjE3MTI3OWQ3NWQxYTgyYTFjNzQ3
NjVmODEyNDZiZDhlZTIuLmY4MzA2NDE4MTI4NGIxYTI5ZmNiZjQ2Yzk4YjQzNmViNGY5ODlkOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTUzNyw3
ICs1MzcsNyBAQCBwcml2YXRlOgogLy8gbGluZSBsYXlvdXQgY29kZSBpcyBzZXBhcmF0ZWQgZnJv
bSBSZW5kZXJCbG9jayBhbmQgUmVuZGVyQmxvY2tGbG93LgogLy8gU1RBUlQgTUVUSE9EUyBERUZJ
TkVEIElOIFJlbmRlckJsb2NrTGluZUxheW91dAogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBpbnQgc3RhcnQsIGludCBl
bmQsIFJlbmRlck9iamVjdCosIElubGluZUJpZGlSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lk
IGFwcGVuZFJ1bnNGb3JPYmplY3QoUmVuZGVyT2JqZWN0JiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBJ
bmxpbmVCaWRpUmVzb2x2ZXImLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiopOwogICAgIFJvb3RJbmxp
bmVCb3gqIGNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKIAogICAgIExheW91dFVuaXQg
c3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIHNob3Vs
ZEluZGVudFRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAppbmRleCA1ZWMwNDcwYmFjYzhhZjhkNTY0YWU2ZGQ2NzdmMmMyNjM1
NWY4ZTZmLi5mNTQ5OTRhMTE5ZjdiN2QxZjFkNDIwMjVhYmVkNTljNjE1NWY2YWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApA
QCAtNzEsMTMgKzcxLDEyIEBAIHN0YXRpYyB2b2lkIGRldGVybWluZURpcmVjdGlvbmFsaXR5KFRl
eHREaXJlY3Rpb24mIGRpciwgSW5saW5lSXRlcmF0b3IgaXRlcikKICAgICB9CiB9CiAKLWlubGlu
ZSBCaWRpUnVuKiBjcmVhdGVSdW4oaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QqIG9i
aiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKK2lubGluZSBCaWRpUnVuKiBjcmVhdGVS
dW4oaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QmIG9iaiwgSW5saW5lQmlkaVJlc29s
dmVyJiByZXNvbHZlcikKIHsKLSAgICBBU1NFUlQob2JqKTsKLSAgICByZXR1cm4gbmV3IEJpZGlS
dW4oc3RhcnQsIGVuZCwgKm9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7
CisgICAgcmV0dXJuIG5ldyBCaWRpUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIuY29udGV4
dCgpLCByZXNvbHZlci5kaXIoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRS
dW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBydW5zLCBpbnQgc3RhcnQsIGludCBl
bmQsIFJlbmRlck9iamVjdCogb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQordm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QoUmVuZGVyT2JqZWN0JiBvYmos
IGludCBzdGFydCwgaW50IGVuZCwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMpCiB7CiAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IHNob3VsZFNr
aXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODgsMzMg
Kzg3LDM0IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlS
dW5MaXN0PEJpZGlSdW4+JiBydW5zLCBpbnQgc3RhcnQsCiAgICAgaWYgKGhhdmVOZXh0TWlkcG9p
bnQpCiAgICAgICAgIG5leHRNaWRwb2ludCA9IGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50cygp
W2xpbmVNaWRwb2ludFN0YXRlLmN1cnJlbnRNaWRwb2ludCgpXTsKICAgICBpZiAobGluZU1pZHBv
aW50U3RhdGUuYmV0d2Vlbk1pZHBvaW50cygpKSB7Ci0gICAgICAgIGlmICghKGhhdmVOZXh0TWlk
cG9pbnQgJiYgbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkgPT0gb2JqKSkKKyAgICAgICAgaWYgKCFo
YXZlTmV4dE1pZHBvaW50IHx8ICgmb2JqICE9IG5leHRNaWRwb2ludC5yZW5kZXJlcigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBzdGFydCBwb2ludC4g
U3RvcCBpZ25vcmluZyBvYmplY3RzIGFuZAogICAgICAgICAvLyBhZGp1c3Qgb3VyIHN0YXJ0Lgot
ICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5zZXRCZXR3ZWVuTWlkcG9pbnRzKGZhbHNlKTsKICAg
ICAgICAgc3RhcnQgPSBuZXh0TWlkcG9pbnQub2Zmc2V0KCk7CiAgICAgICAgIGxpbmVNaWRwb2lu
dFN0YXRlLmluY3JlbWVudEN1cnJlbnRNaWRwb2ludCgpOwotICAgICAgICBpZiAoc3RhcnQgPCBl
bmQpCi0gICAgICAgICAgICByZXR1cm4gYXBwZW5kUnVuc0Zvck9iamVjdChydW5zLCBzdGFydCwg
ZW5kLCBvYmosIHJlc29sdmVyKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKSB7CisgICAgICAg
ICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KG9iaiwgc3RhcnQsIGVuZCwgcmVzb2x2ZXIsIHJ1bnMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFoYXZlTmV4dE1pZHBvaW50IHx8IChvYmogIT0gbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkp
KSB7Ci0gICAgICAgICAgICBydW5zLmFkZFJ1bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2JqLCBy
ZXNvbHZlcikpOworICAgICAgICBpZiAoIWhhdmVOZXh0TWlkcG9pbnQgfHwgKCZvYmogIT0gbmV4
dE1pZHBvaW50LnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICBpZiAocnVucykKKyAgICAgICAg
ICAgICAgICBydW5zLT5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFuIGVuZCBt
aWRwb2ludCBoYXMgYmVlbiBlbmNvdW50ZXJlZCB3aXRoaW4gb3VyIG9iamVjdC4gV2UgbmVlZCB0
byBhcHBlbmQgYSBydW4gd2l0aCBvdXIgZW5kcG9pbnQuCiAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxpbnQ+KG5leHRNaWRwb2ludC5vZmZzZXQoKSArIDEpIDw9IGVuZCkgewotICAgICAgICAgICAg
bGluZU1pZHBvaW50U3RhdGUuc2V0QmV0d2Vlbk1pZHBvaW50cyh0cnVlKTsKICAgICAgICAgICAg
IGxpbmVNaWRwb2ludFN0YXRlLmluY3JlbWVudEN1cnJlbnRNaWRwb2ludCgpOwogICAgICAgICAg
ICAgLy8gVGhlIGVuZCBvZiB0aGUgbGluZSBpcyBiZWZvcmUgdGhlIG9iamVjdCB3ZSdyZSBpbnNw
ZWN0aW5nLiBTa2lwIGV2ZXJ5dGhpbmcgYW5kIHJldHVybgogICAgICAgICAgICAgaWYgKG5leHRN
aWRwb2ludC5yZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obmV4dE1pZHBvaW50Lm9mZnNl
dCgpICsgMSkgPiBzdGFydCkKLSAgICAgICAgICAgICAgICBydW5zLmFkZFJ1bihjcmVhdGVSdW4o
c3RhcnQsIG5leHRNaWRwb2ludC5vZmZzZXQoKSArIDEsIG9iaiwgcmVzb2x2ZXIpKTsKLSAgICAg
ICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3QocnVucywgbmV4dE1pZHBvaW50Lm9mZnNldCgpICsg
MSwgZW5kLCBvYmosIHJlc29sdmVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgIHJ1bnMu
YWRkUnVuKGNyZWF0ZVJ1bihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyKSk7CisgICAgICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0TWlkcG9pbnQub2Zmc2V0KCkgKyAxKSA+IHN0YXJ0
ICYmIHJ1bnMpCisgICAgICAgICAgICAgICAgcnVucy0+YWRkUnVuKGNyZWF0ZVJ1bihzdGFydCwg
bmV4dE1pZHBvaW50Lm9mZnNldCgpICsgMSwgb2JqLCByZXNvbHZlcikpOworICAgICAgICAgICAg
YXBwZW5kUnVuc0Zvck9iamVjdChvYmosIG5leHRNaWRwb2ludC5vZmZzZXQoKSArIDEsIGVuZCwg
cmVzb2x2ZXIsIHJ1bnMpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bnMpCisgICAgICAgICAgICBy
dW5zLT5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpKTsKICAgICB9
CiB9CiAKQEAgLTEwMTEsMTUgKzEwMTEsNDAgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVu
ZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmoKICAg
ICBsYXN0Um9vdEJveCgpLT5hcHBlbmRGbG9hdChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUo
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgUmVuZGVyT2JqZWN0KiByb290LCBSZW5kZXJP
YmplY3QqIHN0YXJ0T2JqZWN0KQorc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVJlc29sdmVyVG9S
ZXN1bWVJbklzb2xhdGUoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgUmVuZGVyT2JqZWN0
KiByb290LCBSZW5kZXJPYmplY3QqIHN0YXJ0T2JqZWN0KQogewogICAgIGlmIChyb290ICE9IHN0
YXJ0T2JqZWN0KSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gc3RhcnRPYmplY3Qt
PnBhcmVudCgpOwotICAgICAgICBzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUocmVzb2x2
ZXIsIHJvb3QsIHBhcmVudCk7CisgICAgICAgIG5vdGlmeVJlc29sdmVyVG9SZXN1bWVJbklzb2xh
dGUocmVzb2x2ZXIsIHJvb3QsIHBhcmVudCk7CiAgICAgICAgIG5vdGlmeU9ic2VydmVyRW50ZXJl
ZE9iamVjdCgmcmVzb2x2ZXIsIHN0YXJ0T2JqZWN0KTsKICAgICB9CiB9CiAKK3N0YXRpYyBpbmxp
bmUgT3B0aW9uYWw8TGluZU1pZHBvaW50U3RhdGU+IGlzb2xhdGVkUmVzb2x2ZXJzTWlkcG9pbnRT
dGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBSZW5kZXJPYmplY3QqIHJvb3Qp
Cit7CisgICAgTGluZU1pZHBvaW50U3RhdGUgbWlkcG9pbnRzID0gdG9wUmVzb2x2ZXIubWlkcG9p
bnRTdGF0ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaWRwb2ludHMubnVtTWlk
cG9pbnRzKCk7ICsraSkgeworICAgICAgICBJbmxpbmVJdGVyYXRvciBpdGVyID0gbWlkcG9pbnRz
Lm1pZHBvaW50cygpW2ldOworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBp
dGVyLnJlbmRlcmVyKCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IHRvcFJlc29sdmVyLnBvc2l0
aW9uKCkucm9vdCgpOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKSkgeworICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyID09IHJvb3QpIHsKKyAgICAgICAgICAgICAgICBtaWRwb2ludHMuc2V0
Q3VycmVudE1pZHBvaW50KGkpOworICAgICAgICAgICAgICAgIHJldHVybiBtaWRwb2ludHM7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE9wdGlvbmFsPExpbmVN
aWRwb2ludFN0YXRlPihOdWxsb3B0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldFVwUmVz
b2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBSZW5kZXJPYmplY3QqIHJvb3QsIFJlbmRlck9i
amVjdCogc3RhcnRPYmplY3QpCit7CisgICAgLy8gU2V0IHVwIG1fbWlkcG9pbnRTdGF0ZQorICAg
IGlmIChPcHRpb25hbDxMaW5lTWlkcG9pbnRTdGF0ZT4gbWlkcG9pbnRzID0gaXNvbGF0ZWRSZXNv
bHZlcnNNaWRwb2ludFN0YXRlKHRvcFJlc29sdmVyLCByb290KSkKKyAgICAgICAgcmVzb2x2ZXIu
bWlkcG9pbnRTdGF0ZSgpID0gV1RGOjptb3ZlKG1pZHBvaW50cy52YWx1ZSgpKTsKKworICAgIC8v
IFNldCB1cCBtX25lc3RlZElzb2xhdGVDb3VudAorICAgIG5vdGlmeVJlc29sdmVyVG9SZXN1bWVJ
bklzb2xhdGUocmVzb2x2ZXIsIHJvb3QsIHN0YXJ0T2JqZWN0KTsKK30KKwogLy8gRklYTUU6IEJp
ZGlSZXNvbHZlciBzaG91bGQgaGF2ZSB0aGlzIGxvZ2ljLgogc3RhdGljIGlubGluZSB2b2lkIGNv
bnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVy
LCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBl
bmRPZlJ1bnMsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSkKIHsKQEAgLTEwNTYsNyArMTA4MSw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BS
ZXNvbHZlciwKICAgICAgICAgfQogICAgICAgICBpc29sYXRlZFJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZSh1bmljb2RlQmlkaSkpKTsKIAotICAgICAg
ICBzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUoaXNvbGF0ZWRSZXNvbHZlciwgaXNvbGF0
ZWRJbmxpbmUsICZzdGFydE9iamVjdCk7CisgICAgICAgIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUlu
SXNvbGF0ZShpc29sYXRlZFJlc29sdmVyLCB0b3BSZXNvbHZlciwgaXNvbGF0ZWRJbmxpbmUsICZz
dGFydE9iamVjdCk7CiAKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGlzIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHJ1biB3aXRoaW4gdGhlIGlzb2xhdGUgdGhhdCB3YXMgaWRl
bnRpZmllZAogICAgICAgICAvLyBkdXJpbmcgdGhlIGVhcmxpZXIgY2FsbCB0byBjcmVhdGVCaWRp
UnVuc0ZvckxpbmUuIFRoaXMgY2FuIGJlIGJ1dCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCmluZGV4IGU1
NTEzM2NlM2MzNWY4M2ExNTA0NTdjYzdkNjNhNGJlZDhiNzQ5MjEuLmQ1YmRlMmU4ZGViZTk5YjBi
OTQ0ZTNiNWVlODRkZDJhMzgyYWQ5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dC5oCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCBpbmxpbmUgVHJh
aWxpbmdPYmplY3RzOjpDb2xsYXBzZUZpcnN0U3BhY2VPck5vdCBjaGVja01pZHBvaW50cyhMaW5l
TWlkcG9pbnRTdGF0ZQogICAgICAgICAgICAgY3VycnBvaW50LmluY3JlbWVudCgpOwogICAgICAg
ICBpZiAoY3VycnBvaW50ID09IGxCcmVhaykgewogICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBs
aW5lIGJyZWFrIGJlZm9yZSB0aGUgc3RhcnQgcG9pbnQuIFNoYXZlIG9mZiB0aGUgc3RhcnQgcG9p
bnQuCi0gICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5kZWNyZWFzZU51bU1pZHBvaW50cygp
OworICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUuZGVjcmVtZW50TnVtTWlkcG9pbnRzKCk7
CiAgICAgICAgICAgICBpZiAoZW5kcG9pbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdo
aXRlU3BhY2UoKSAmJiBlbmRwb2ludC5yZW5kZXJlcigpLT5pc1RleHQoKSkgewogICAgICAgICAg
ICAgICAgIGVuZHBvaW50LmZhc3REZWNyZW1lbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
VHJhaWxpbmdPYmplY3RzOjpEb05vdENvbGxhcHNlRmlyc3RTcGFjZTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5Yjg2ZWFj
ZWU0YWRkMjY3NzQ1NmQxMjVhYmFiZDU1MjQ3OTg1NjJmLi5iOWE5MjZkNDAxNjIzM2UyOGEyNmQ3
MmI1ODNkNjhjMWNiNjBjOTc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDctMDkgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBCaWRpLUlz
b2xhdGUgaW5saW5lcyBicmVhayBsYXlvdXQgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjI0CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8yMTc1MjgzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaW5saW5lL2NyYXNoLXdoZW4tY2hpbGQtcmVu
ZGVyZXItaXMtcmVtb3ZlZC1hbmQtbGluZS1zdGF5cy1jbGVhbi1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC90ZXh0L2JpZGktaXNvbGF0ZS13aGl0ZXNwYWNlLWNvbGxhcHNlLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9iaWRpLWlzb2xhdGUtd2hpdGVzcGFj
ZS1jb2xsYXBzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvaW50ZXJuYXRpb25h
bC9lbWJlZC1iaWRpLXN0eWxlLWluLWlzb2xhdGUtY3Jhc2gtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvdGV4dC9yZW1vdmUtdGV4dC1ub2RlLWxpbmVib3gtbm90LWRpcnR5LWNyYXNoLWV4
cGVjdGVkLnR4dDoKKwogMjAxNS0wNy0wOCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBGdXNlIHVuZGlzdGluZ3Vp
c2hhYmxlIGFjdGlvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9pbmxpbmUvY3Jhc2gtd2hlbi1jaGlsZC1yZW5kZXJlci1pcy1yZW1vdmVkLWFuZC1s
aW5lLXN0YXlzLWNsZWFuLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaW5saW5lL2Ny
YXNoLXdoZW4tY2hpbGQtcmVuZGVyZXItaXMtcmVtb3ZlZC1hbmQtbGluZS1zdGF5cy1jbGVhbi1l
eHBlY3RlZC50eHQKaW5kZXggZDY5MmY5NjNhMzdlM2ZlZDIwNzUzMTMxMjkwMjI5YTllYzRiMzdj
Ni4uOWE2MTA0YTc5Y2FiMjc0NzJhMzgxZTc5MmJiYzkzZGVhYTIzOGQ3NSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9pbmxpbmUvY3Jhc2gtd2hlbi1jaGlsZC1yZW5kZXJlci1pcy1yZW1v
dmVkLWFuZC1saW5lLXN0YXlzLWNsZWFuLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2lubGluZS9jcmFzaC13aGVuLWNoaWxkLXJlbmRlcmVyLWlzLXJlbW92ZWQtYW5kLWxpbmUt
c3RheXMtY2xlYW4tZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotUGFzcyBpZiBubyBjcmFz
aCBvciBhc3NlcnQgaW4gRGVidWcuICAgYmFyCitQYXNzIGlmIG5vIGNyYXNoIG9yIGFzc2VydCBp
biBEZWJ1Zy4gIGJhciAgCiAKIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQv
YmlkaS1pc29sYXRlLXdoaXRlc3BhY2UtY29sbGFwc2UtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC9iaWRpLWlzb2xhdGUtd2hpdGVzcGFjZS1jb2xsYXBzZS1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmMyZjI4Yzk0NmFjMjNiMDhlZmZkNzQyMjdiNmIyZjBmZmMzNDI0MjkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvYmlkaS1pc29sYXRlLXdo
aXRlc3BhY2UtY29sbGFwc2UtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj5UaGlzIHRlc3Qg
bWFrZXMgc3VyZSB0aGF0IHdoaXRlc3BhY2UgaW5zaWRlIGJpZGkgaXNvbGF0ZXMgZ2V0cyBjb2xs
YXBzZWQuCis8c3BhbiBkaXI9ImF1dG8iPmEgYjwvc3Bhbj4pCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvYmlkaS1pc29sYXRlLXdoaXRlc3BhY2Ut
Y29sbGFwc2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9iaWRpLWlzb2xhdGUtd2hpdGVz
cGFjZS1jb2xsYXBzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlZDZkNjdlOWRlNzQzYzA2ZDQ1YWJkY2I3
NmZhOTczYzhmOWNlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQv
YmlkaS1pc29sYXRlLXdoaXRlc3BhY2UtY29sbGFwc2UuaHRtbApAQCAtMCwwICsxLDkgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj5UaGlz
IHRlc3QgbWFrZXMgc3VyZSB0aGF0IHdoaXRlc3BhY2UgaW5zaWRlIGJpZGkgaXNvbGF0ZXMgZ2V0
cyBjb2xsYXBzZWQuCis8c3BhbiBkaXI9ImF1dG8iPmEgICBiPC9zcGFuPikKKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2Vt
YmVkLWJpZGktc3R5bGUtaW4taXNvbGF0ZS1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQvaW50ZXJuYXRpb25hbC9lbWJlZC1iaWRpLXN0eWxlLWluLWlzb2xhdGUtY3Jh
c2gtZXhwZWN0ZWQudHh0CmluZGV4IDY1MjZmYTAyMDhlNWI2OTk1NTEyZTQzYjhiZTkzNzQxOWVi
YmIzZTUuLjg0NzQxMzdkYjVjY2UwYzMyNGU2N2ExZjNlNzA1ZjEyYTVjYWFkODUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2VtYmVkLWJpZGktc3R5bGUt
aW4taXNvbGF0ZS1jcmFzaC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvZW1iZWQtYmlkaS1zdHlsZS1pbi1pc29sYXRlLWNyYXNoLWV4cGVjdGVk
LnR4dApAQCAtMSArMSBAQAotUEFTUywgaWYgbm8gZXhjZXB0aW9uIG9yIGNyYXNoIGluIGRlYnVn
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorUEFTUywgaWYgbm8gZXhjZXB0aW9uIG9y
IGNyYXNoIGluIGRlYnVnICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9yZW1v
dmUtdGV4dC1ub2RlLWxpbmVib3gtbm90LWRpcnR5LWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9yZW1vdmUtdGV4dC1ub2RlLWxpbmVib3gtbm90LWRpcnR5LWNyYXNo
LWV4cGVjdGVkLnR4dAppbmRleCBkY2IxMDgxZDc4OTQ5N2YzOWI3NzJhMjU3OGY1YThkMGFjYzNj
ODA2Li4zYWI1MWQ3ZGE5ZTdkZjJiY2E1Nzc3MmJhMDkyZWFjZmMzMWY1NzQ2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvcmVtb3ZlLXRleHQtbm9kZS1saW5lYm94LW5vdC1kaXJ0
eS1jcmFzaC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L3JlbW92ZS10
ZXh0LW5vZGUtbGluZWJveC1ub3QtZGlydHktY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEs
MyBAQAotVGhpcyB0ZXN0IHBhc3NlcyBpZiBpdCBkb2VzIG5vdCBjcmFzaC4gIGJhcgorVGhpcyB0
ZXN0IHBhc3NlcyBpZiBpdCBkb2VzIG5vdCBjcmFzaC4gYmFyIAogCiAK
</data>
<flag name="review"
          id="281664"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>