<?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>210246</bug_id>
          
          <creation_ts>2020-04-08 21:20:01 -0700</creation_ts>
          <short_desc>Use Node::length to replace Node::maxCharacterOffset and lastOffsetInNode; switch more offsets from int to unsigned</short_desc>
          <delta_ts>2020-05-19 12:10:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit 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>
          
          <blocked>212093</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1639467</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-08 21:20:01 -0700</bug_when>
    <thetext>Use Node::length to replace Node::maxCharacterOffset and lastOffsetInNode; switch more offsets from int to unsigned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639468</commentid>
    <comment_count>1</comment_count>
      <attachid>395908</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-08 21:32:52 -0700</bug_when>
    <thetext>Created attachment 395908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639470</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-08 21:34:10 -0700</bug_when>
    <thetext>While working on reducing the use of live ranges, discovered this improvement, so getting it reviewed and landed separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639473</commentid>
    <comment_count>3</comment_count>
      <attachid>395910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-08 21:45:09 -0700</bug_when>
    <thetext>Created attachment 395910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639557</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-09 03:43:11 -0700</bug_when>
    <thetext>Looks like there is a behavior change here. Tests show failures but also new PASSes in WPT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639568</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 04:37:42 -0700</bug_when>
    <thetext>Looks like behavior change is in the text input selection part of this; I think it’s a change we will want, but I will separate that out into a much smaller patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639751</commentid>
    <comment_count>6</comment_count>
      <attachid>395982</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 11:35:30 -0700</bug_when>
    <thetext>Created attachment 395982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639752</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 11:35:50 -0700</bug_when>
    <thetext>This newer patch should leave out the behavior change, which we can consider and do later/separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639774</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 12:21:04 -0700</bug_when>
    <thetext>Oops, looks like the behavior change is still there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639775</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 12:21:18 -0700</bug_when>
    <thetext>Some behavior change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639862</commentid>
    <comment_count>10</comment_count>
      <attachid>396008</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 14:08:43 -0700</bug_when>
    <thetext>Created attachment 396008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639965</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-09 16:55:12 -0700</bug_when>
    <thetext>This last tiny layout change difference is a mystery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640429</commentid>
    <comment_count>12</comment_count>
      <attachid>396136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 17:14:46 -0700</bug_when>
    <thetext>Created attachment 396136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640430</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 17:15:51 -0700</bug_when>
    <thetext>Mystery solved. Finally had a chance to debug and it was a refactoring error; fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640468</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 19:38:44 -0700</bug_when>
    <thetext>This patch is now both a simple refactoring, and all tests are passing, so should be a quick review for someone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640546</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 08:35:11 -0700</bug_when>
    <thetext>Committed r259930: &lt;https://trac.webkit.org/changeset/259930&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640547</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-11 08:36:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/61638646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654080</commentid>
    <comment_count>17</comment_count>
      <attachid>396136</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-05-19 11:15:54 -0700</bug_when>
    <thetext>Comment on attachment 396136
Patch

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

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:600
&gt; +        if (static_cast&lt;unsigned&gt;(targetStartOffset) &gt;= node.length() || targetEndOffset &lt;= 0) {

This is a change in behavior that causes a regression: marker at the start of the text will **now be removed** if trailing whitespace was subsequently inserted and that whitespace is collapsed. When collapse happens, marker.startOffset() == 0, **delta** == -1. So, targetStartOffset == -1 and this blows up when casted to unsigned (i.e. it ALWAYS is &gt;= node.length()).

Just for me: This iOS code was added to fix &lt;rdar://problem/11478253&gt;.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:615
&gt;                  list-&gt;remove(i);

Just for me: ^^^ line above (not part of this patch) is incorrect: performs **unsigned** comparison, but delta is signed so &quot;+ delta&quot; + implicit conversion to unsigned can blow up and make comparison meaningless. Also expression should reference targetEndOffset instead of re-computing &lt;-- may have made the bug more obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654085</commentid>
    <comment_count>18</comment_count>
      <attachid>396136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-19 11:18:26 -0700</bug_when>
    <thetext>Comment on attachment 396136
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:600
&gt;&gt; +        if (static_cast&lt;unsigned&gt;(targetStartOffset) &gt;= node.length() || targetEndOffset &lt;= 0) {
&gt; 
&gt; This is a change in behavior that causes a regression: marker at the start of the text will **now be removed** if trailing whitespace was subsequently inserted and that whitespace is collapsed. When collapse happens, marker.startOffset() == 0, **delta** == -1. So, targetStartOffset == -1 and this blows up when casted to unsigned (i.e. it ALWAYS is &gt;= node.length()).
&gt; 
&gt; Just for me: This iOS code was added to fix &lt;rdar://problem/11478253&gt;.

Are you fixing it, or would you like me to?

Do you have an idea how to add a test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654089</commentid>
    <comment_count>19</comment_count>
      <attachid>396136</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-05-19 11:25:19 -0700</bug_when>
    <thetext>Comment on attachment 396136
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:600
&gt;&gt;&gt; +        if (static_cast&lt;unsigned&gt;(targetStartOffset) &gt;= node.length() || targetEndOffset &lt;= 0) {
&gt;&gt; 
&gt;&gt; This is a change in behavior that causes a regression: marker at the start of the text will **now be removed** if trailing whitespace was subsequently inserted and that whitespace is collapsed. When collapse happens, marker.startOffset() == 0, **delta** == -1. So, targetStartOffset == -1 and this blows up when casted to unsigned (i.e. it ALWAYS is &gt;= node.length()).
&gt;&gt; 
&gt;&gt; Just for me: This iOS code was added to fix &lt;rdar://problem/11478253&gt;.
&gt; 
&gt; Are you fixing it, or would you like me to?
&gt; 
&gt; Do you have an idea how to add a test?

You can fix it, but I will supply you with a bug + a test in a few minutes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654117</commentid>
    <comment_count>20</comment_count>
      <attachid>396136</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-05-19 12:00:20 -0700</bug_when>
    <thetext>Comment on attachment 396136
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:600
&gt;&gt;&gt;&gt; +        if (static_cast&lt;unsigned&gt;(targetStartOffset) &gt;= node.length() || targetEndOffset &lt;= 0) {
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a change in behavior that causes a regression: marker at the start of the text will **now be removed** if trailing whitespace was subsequently inserted and that whitespace is collapsed. When collapse happens, marker.startOffset() == 0, **delta** == -1. So, targetStartOffset == -1 and this blows up when casted to unsigned (i.e. it ALWAYS is &gt;= node.length()).
&gt;&gt;&gt; 
&gt;&gt;&gt; Just for me: This iOS code was added to fix &lt;rdar://problem/11478253&gt;.
&gt;&gt; 
&gt;&gt; Are you fixing it, or would you like me to?
&gt;&gt; 
&gt;&gt; Do you have an idea how to add a test?
&gt; 
&gt; You can fix it, but I will supply you with a bug + a test in a few minutes...

Bug + test at posted at bug #212093.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1654122</commentid>
    <comment_count>21</comment_count>
      <attachid>396136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-19 12:10:52 -0700</bug_when>
    <thetext>Comment on attachment 396136
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:615
&gt;&gt;                  list-&gt;remove(i);
&gt; 
&gt; Just for me: ^^^ line above (not part of this patch) is incorrect: performs **unsigned** comparison, but delta is signed so &quot;+ delta&quot; + implicit conversion to unsigned can blow up and make comparison meaningless. Also expression should reference targetEndOffset instead of re-computing &lt;-- may have made the bug more obvious.

That’s incorrect.

If targetEndOffset is &lt;= 0 we won’t get here; checked for above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395908</attachid>
            <date>2020-04-08 21:32:52 -0700</date>
            <delta_ts>2020-04-08 21:45:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210246-20200408213251.patch</filename>
            <type>text/plain</type>
            <size>39210</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5Nzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTExZGRjN2RlZjM0MTAy
ZTU4NWI3MmZlZjY1ZmUyZjI4MmEzMzA1NC4uOWYzYmQzZDk1OTc5YzRkNmNiNTI4ZDNhZDNkMmM3
YmExZTE1MGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNC0wOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE5vZGU6Omxlbmd0aCB0
byByZXBsYWNlIE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCBhbmQgbGFzdE9mZnNldEluTm9kZTsg
c3dpdGNoIG1vcmUgb2Zmc2V0cyBmcm9tIGludCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjQ2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBUaGUgcmVjZW50bHktYWRkZWQgTm9k
ZTo6bGVuZ3RoLCB3aGljaCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbiB0ZXJtaW5vbG9n
eQorICAgICAgICAgIGZvciBub2RlIG9mZnNldHMgYXMgdXNlZCBpbiByYW5nZXMsIGlzIHRoZSBz
YW1lIGFzIHRoZSBleGlzdGluZyBtYXhDaGFyYWN0ZXJPZmZzZXQKKyAgICAgICAgICBhbmQgbGFz
dE9mZnNldEluTm9kZSBmdW5jdGlvbnMuIERlbGV0ZWQgYWxsIHVzZXMgb2YgdGhvc2UgYW5kIHJl
cGxhY2VkIHRoZW0KKyAgICAgICAgICB3aXRoIGNhbGxzIHRvIE5vZGU6Omxlbmd0aC4gT25lIG9m
IHRoZSBiZW5lZml0cyBvZiB0aGlzIGlzIHRoYXQgTm9kZTo6bGVuZ3RoIGlzCisgICAgICAgICAg
aW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseSBhbmQgaXMgbm90IGEgdmlydHVhbCBmdW5jdGlv
bi4gQW5vdGhlciBpcyBjb25zaXN0ZW50bHkKKyAgICAgICAgICBtYXRjaGluZyB0aGUgRE9NIHNw
ZWNpZmljYXRpb24gdGVybWlub2xvZ3kuCisgICAgICAgIC0gTWFueSBvZmZzZXRzLCBpbmNsdWRp
bmcgdGhlIG9uZXMgaW4gbGl2ZSByYW5nZXMsIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMg
c2lnbmVkCisgICAgICAgICAgaW4gV2ViS2l0LCBidXQgYXJlIHNwZWNpZmllZCBhcyB1bnNpZ25l
ZCBpbiB0aGUgRE9NIGFuZCBIVE1MIHNwZWNpZmljYXRpb25zLiBUaGlzCisgICAgICAgICAgaGFz
IHZlcnkgbGl0dGxlIG9ic2VydmFibGUgZWZmZWN0IGZyb20gSmF2YVNjcmlwdCB0aGF0IGNhbiBh
ZmZlY3Qgd2Vic2l0ZSBjb21wYXRpYmlsaXR5LAorICAgICAgICAgIGJ1dCBpdCdzIHN0aWxsIGhl
bHBmdWwgdG8gYmUgY29uc2lzdGVudCBib3RoIHdpdGggdGhlIHNwZWNpZmljYXRpb24gYW5kIGlu
dGVybmFsbHkuCisgICAgICAgICAgQWNjb3JkaW5nbHksIGNoYW5nZWQgc29tZSBvZiB0aGVzZSB0
byB1bnNpZ25lZDsgbW9yZSB0byBjb21lIGxhdGVyLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBy
ZXZpb3VzQm91bmRhcnkpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFj
dGVyT2Zmc2V0LgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5oOiBEZWxldGVkIG1heENoYXJhY3Rlck9m
ZnNldCBvdmVycmlkZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1h
cmtlcnMpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFjdGVyT2Zmc2V0
LgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bWF4
Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBE
ZWxldGVkIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9k
ZSBjb25zdCk6IFVzZSBsZW5ndGggaW5zdGVhZAorICAgICAgICBvZiBsYXN0T2Zmc2V0SW5Ob2Rl
LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpsYXN0T2Zm
c2V0SW5Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omxhc3RQb3NpdGlvbkluTm9k
ZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBsYXN0T2Zmc2V0SW5Ob2RlLgorICAgICAgICAoV2Vi
Q29yZTo6bWluT2Zmc2V0Rm9yTm9kZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBtYXhDaGFyYWN0
ZXJPZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpvZmZzZXRJc0JlZm9yZUxhc3ROb2RlT2Zmc2V0
KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKTogVXNlIGxlbmd0
aCBpbnN0ZWFkIG9mCisgICAgICAgIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
TmV3TGluZUF0UG9zaXRpb24pOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YgbWF4Q2hhcmFjdGVyT2Zm
c2V0LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZv
clBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgRGl0dG8uCisK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IFVzZSBsZW5ndGggaW5z
dGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGFzdE9mZnNldEZvckVkaXRpbmcpOiBV
c2UgbGVuZ3RoIGluc3RlYWQgb2YgbW1heENoYXJhY3Rlck9mZnNldAorICAgICAgICBhbmQgY291
bnRDaGlsZE5vZGVzLiBBbHNvIGltcHJvdmVkIHRoZSBjb21tZW50IGhlcmUuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5
bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydCk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAg
ICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKTogVXNlIGxlbmd0aCBpbnN0ZWFkCisgICAgICAgIG9mIGxhc3RPZmZz
ZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgVVNlIGxlbmd0aCBpbnN0ZWFkIG9mIGxhc3RP
ZmZzZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIG1h
eENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydEZvckJp
bmRpbmdzIGNvbnN0KToKKyAgICAgICAgVXNlIHVuc2lnbmVkIGluc3RlYWQgb2YgaW50LiBBbHNv
IGFkZGVkIGNvbW1lbnRzIGFib3V0IGRpZmZlcmVuY2VzIGJldHdlZW4KKyAgICAgICAgd2hhdCB0
aGlzIGRvZXMgYW5kIHdoYXQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBjYWxscyBmb3IuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydEZvckJpbmRp
bmdzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rp
b25FbmRGb3JCaW5kaW5ncyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kRm9yQmluZGluZ3MpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkRpcmVjdGlvbkZvckJpbmRpbmdz
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRT
ZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOiBVc2UgdW5zaWduZWQgaW5zdGVhZCBv
ZiBpbnQuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDogVXNlIHVuc2lnbmVk
IGxvbmcgaW5zdGVhZCBvZiBsb25nLAorICAgICAgICBtYXRjaGluZyB3aGF0IHRoZSBIVE1MIHNw
ZWNpZmljYXRpb24gY2FsbHMgZm9yLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0U2VsZWN0aW9uU3RhcnQpOiBVc2UgdW5zaWduZWQKKyAgICAgICAgaW5zdGVhZCBv
ZiBpbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0
U2VsZWN0aW9uRW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25TdGFydCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29udGFpbmVyQW5kT2Zm
c2V0Rm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3Rpb24gY29uc3QpOiBVc2UgbGVuZ3RoCisgICAgICAgIGluc3RlYWQg
b2YgbGFzdE9mZnNldEluTm9kZS4KKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Lmg6IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludC4KKworICAgICAgICAqIGh0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICBVc2UgdW5zaWdu
ZWQgaW5zdGVhZCBvZiBpbnQuCisKIDIwMjAtMDQtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBxdWVyeVNlbGVjdG9yKCIjXHUwMDAwIikgc2hvdWxkIG1hdGNo
IGFuIGVsZW1lbnQgd2l0aCBJRCBVK0ZGRkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGIwMTFkOTM2MTljOGNlNzEyNTQzMjEwMTIyODMy
MWMxYTZiODUwYWUuLjY0OTUyYjM1MzU5ZmVmNzA1ZGQ3MGE0NjA2MWIyMzE1ZTUyMmJlZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAt
MjY2NCw3ICsyNjY0LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3Vz
Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoJm5vZGUg
IT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWRO
b2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVu
ZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5n
KSwgZmFsc2UpOwogCi0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
fHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkp
IHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgbm9kZS5pc1RleHROb2RlKCkgJiYgbmV4dCA8
PSBub2RlLmxlbmd0aCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+
aXNCUigpICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlu
cyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlmIChub2RlLmlzVGV4
dE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5n
ZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZz
ZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IGRmZjJiYThmZDYyOTBh
NjVkZmZhZGE3NzliYTAxOTI2Mzk4ZjRjZjAuLjEzMTM5YTJhNjJkMTBhODRlNWU0OTkwYWVhZGM1
ZDk1ZWU0YjZhOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTIzOSw5
ICsyMzksNCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVudChjb25z
dCBTdHJpbmcmIG9sZERhdGEpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0
ZXJEYXRhTW9kaWZpZWQoZG9jdW1lbnQoKSwgKnRoaXMpOwogfQogCi1pbnQgQ2hhcmFjdGVyRGF0
YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihsZW5ndGgoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5oCmluZGV4IGUyMzFkNTM1NzdjYjUwODVhZDM4ZWJlNmUwMzJmNDFlNzkx
NWEzZDUuLmZlNjYwMDMwYTQ2MGI0MjU1M2VkZTIwNmUzNTZlMjQxN2U2NzRkMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuaApAQCAtNjMsNyArNjMsNiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBub2RlVmFsdWUoKSBjb25zdCBmaW5hbDsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgYm9vbCB2aXJ0dWFsSXNDaGFyYWN0
ZXJEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGludCBtYXhDaGFyYWN0
ZXJPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldERhdGFBbmRVcGRhdGUoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9sZExlbmd0
aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIG5vdGlmeVBhcmVudEFmdGVyQ2hhbmdl
KENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlU291cmNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCA0YzUyODYxNzg0YTY1NzJj
ZmE1YTI0ZWZhMDQxYzdlNWRmYTljYTYxLi44MmVhYjhjY2U2MGY1MGQ1NzY5NGVhMTg2NzA1Mjdj
OWM1YzY5MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcApAQCAtNTk3LDcgKzU5Nyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAg
ICAgICAgIC8vIEZJWE1FOiBObyBvYnZpb3VzIHJlYXNvbiB0aGlzIHNob3VsZCBiZSBpT1Mtc3Bl
Y2lmaWMuIFJlbW92ZSB0aGUgI2lmIGF0IHNvbWUgcG9pbnQuCiAgICAgICAgIGludCB0YXJnZXRT
dGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0
YXJnZXRFbmRPZmZzZXQgPSBtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgaWYg
KHRhcmdldFN0YXJ0T2Zmc2V0ID49IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0
RW5kT2Zmc2V0IDw9IDApIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YXJn
ZXRTdGFydE9mZnNldCkgPj0gbm9kZS5sZW5ndGgoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkg
ewogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAg
ICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQodGFyZ2V0RW5k
T2Zmc2V0IDwgbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5v
ZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkpOworICAgICAgICAgICAgbWFya2VyLnNldEVuZE9mZnNl
dChzdGQ6Om1pbjx1bnNpZ25lZD4odGFyZ2V0RW5kT2Zmc2V0LCBub2RlLmxlbmd0aCgpKSk7CiAg
ICAgICAgICAgICBkaWRTaGlmdE1hcmtlciA9IHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCmluZGV4IDhjMWJhN2U2ZmY4NjdmOTUxMzg0ZmFlYTcyNGNkYmI3NTU2NDk0M2Qu
LjI3M2E1Mzk4ODgyYmJiMWFhYjRjMWYxY2VjOGJjODJjZmI4ZDE1NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKQEAgLTExMDIsMTIgKzExMDIsNiBAQCBjb25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogICAgIHJldHVybiBjb21w
b3NlZFBhcmVudC0+Y29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKIH0KIAot
aW50IE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2Ug
ZnVuY3Rpb25zIGJlIGluIHRoZSBlZGl0aW5nIGNvZGU/ICBDb2RlIHRoYXQgYXNrcyBxdWVzdGlv
bnMgYWJvdXQgSFRNTCBpbiB0aGUgY29yZSBET00gY2xhc3MKIC8vIGlzIG9idmlvdXNseSBtaXNw
bGFjZWQuCiBib29sIE5vZGU6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmlu
ZGV4IDkzYTcxYTE1NjJjYTUwOTFiYjAwMGJmZDIzNGY2YjA1NzJhYmY3ZDEuLjE4MjJhZjczNjQ3
Mzk3NjliMzcxZTE5YzM1MTU4OTMyZGY3OTRmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMzc3LDEwICsz
NzcsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBO
b2RlKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTShjb25zdCBO
b2RlKikgY29uc3Q7CiAKLSAgICAvLyBOdW1iZXIgb2YgRE9NIDE2LWJpdCB1bml0cyBjb250YWlu
ZWQgaW4gbm9kZS4gTm90ZSB0aGF0IHJlbmRlcmVkIHRleHQgbGVuZ3RoIGNhbiBiZSBkaWZmZXJl
bnQgLSBlLmcuIGJlY2F1c2Ugb2YKLSAgICAvLyBjc3MtdHJhbnNmb3JtOmNhcGl0YWxpemUgYnJl
YWtpbmcgdXAgcHJlY29tcG9zZWQgY2hhcmFjdGVycyBhbmQgbGlnYXR1cmVzLgotICAgIHZpcnR1
YWwgaW50IG1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0OwotCiAgICAgLy8gV2hldGhlciBvciBu
b3QgYSBzZWxlY3Rpb24gY2FuIGJlIHN0YXJ0ZWQgaW4gdGhpcyBvYmplY3QKICAgICB2aXJ0dWFs
IGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAK
aW5kZXggNzdkYWFkZTk0NDM2NmU3ZmU0M2FhM2UwYzc4ZmJhNWQ0NzMzMjA3MS4uYmNmNjkwNDU3
NWViZGUyNDRkOTE0NTFkOTcxMzg2NDhiNzEyMThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CkBAIC0yMDcsNyArMjA3LDcgQEAgaW50IFBvc2l0aW9uOjpjb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkgY29uc3QKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKLSAgICAgICAg
cmV0dXJuIGxhc3RPZmZzZXRJbk5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fYW5jaG9yTm9kZS0+bGVuZ3RoKCk7CiAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3I6CiAgICAgICAgIHJldHVybiBtaW5PZmZzZXRGb3JOb2RlKG1fYW5jaG9yTm9kZS5nZXQo
KSwgbV9vZmZzZXQpOwogICAgIGNhc2UgUG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmgKaW5kZXggYzI4ZTcwNmIxMDU2ZjZlYTVlOTA0OWQwMGE0NjJjZDNhNWExMjc5OS4u
MmMyZDZhMjI2MTZmNGIyMmJhZDkyNjc5MTE2ZGNlYTU3OTY0YjBlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDaGFy
YWN0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIkVkaXRp
bmdCb3VuZGFyeS5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgpAQCAtMjM3LDggKzIzOCw2
IEBAIFBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoTm9kZSopOwogUG9zaXRpb24g
cG9zaXRpb25CZWZvcmVOb2RlKE5vZGUqIGFuY2hvck5vZGUpOwogUG9zaXRpb24gcG9zaXRpb25B
ZnRlck5vZGUoTm9kZSogYW5jaG9yTm9kZSk7CiAKLWludCBsYXN0T2Zmc2V0SW5Ob2RlKE5vZGUq
KTsKLQogLy8gZmlyc3RQb3NpdGlvbkluTm9kZSBhbmQgbGFzdFBvc2l0aW9uSW5Ob2RlIHJldHVy
biBwYXJlbnQtYW5jaG9yZWQgcG9zaXRpb25zLCBsYXN0UG9zaXRpb25Jbk5vZGUgY29uc3RydWN0
aW9uIGlzIE8obikgZHVlIHRvIGNvdW50Q2hpbGROb2RlcygpCiBQb3NpdGlvbiBmaXJzdFBvc2l0
aW9uSW5Ob2RlKE5vZGUqIGFuY2hvck5vZGUpOwogUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Ob2Rl
KE5vZGUqIGFuY2hvck5vZGUpOwpAQCAtMzA2LDExICszMDUsNiBAQCBpbmxpbmUgUG9zaXRpb24g
cG9zaXRpb25BZnRlck5vZGUoTm9kZSogYW5jaG9yTm9kZSkKICAgICByZXR1cm4gUG9zaXRpb24o
YW5jaG9yTm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7CiB9CiAKLWlubGlu
ZSBpbnQgbGFzdE9mZnNldEluTm9kZShOb2RlKiBub2RlKQotewotICAgIHJldHVybiBub2RlLT5p
c0NoYXJhY3RlckRhdGFOb2RlKCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUt
PmNvdW50Q2hpbGROb2RlcygpOwotfQotCiAvLyBmaXJzdFBvc2l0aW9uSW5Ob2RlIGFuZCBsYXN0
UG9zaXRpb25Jbk5vZGUgcmV0dXJuIHBhcmVudC1hbmNob3JlZCBwb3NpdGlvbnMsIGxhc3RQb3Np
dGlvbkluTm9kZSBjb25zdHJ1Y3Rpb24gaXMgTyhuKSBkdWUgdG8gY291bnRDaGlsZE5vZGVzKCkK
IGlubGluZSBQb3NpdGlvbiBmaXJzdFBvc2l0aW9uSW5Ob2RlKE5vZGUqIGFuY2hvck5vZGUpCiB7
CkBAIC0zMjIsMzIgKzMxNiwyOSBAQCBpbmxpbmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9k
ZShOb2RlKiBhbmNob3JOb2RlKQogaW5saW5lIFBvc2l0aW9uIGxhc3RQb3NpdGlvbkluTm9kZShO
b2RlKiBhbmNob3JOb2RlKQogewogICAgIGlmIChhbmNob3JOb2RlLT5pc1RleHROb2RlKCkpCi0g
ICAgICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCBsYXN0T2Zmc2V0SW5Ob2RlKGFuY2hv
ck5vZGUpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIGFuY2hvck5vZGUtPmxlbmd0aCgpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9k
ZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuKTsKIH0KIAogaW5saW5lIGludCBt
aW5PZmZzZXRGb3JOb2RlKE5vZGUqIGFuY2hvck5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAg
ICBpZiAoYW5jaG9yTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4g
c3RkOjptaW48dW5zaWduZWQ+KG9mZnNldCwgYW5jaG9yTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0
KCkpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqYW5jaG9yTm9kZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om1pbihvZmZzZXQsIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCphbmNob3JOb2Rl
KS5sZW5ndGgoKSk7CiAKICAgICB1bnNpZ25lZCBuZXdPZmZzZXQgPSAwOwogICAgIGZvciAoTm9k
ZSogbm9kZSA9IGFuY2hvck5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZSAmJiBuZXdPZmZzZXQgPCBv
ZmZzZXQ7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQogICAgICAgICBuZXdPZmZzZXQrKzsK
LSAgICAKICAgICByZXR1cm4gbmV3T2Zmc2V0OwogfQogCiBpbmxpbmUgYm9vbCBvZmZzZXRJc0Jl
Zm9yZUxhc3ROb2RlT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgTm9kZSogYW5jaG9yTm9kZSkKIHsK
LSAgICBpZiAoYW5jaG9yTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1
cm4gb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFuY2hvck5vZGUtPm1heENoYXJhY3Rl
ck9mZnNldCgpKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5vZGUpKQorICAg
ICAgICByZXR1cm4gb2Zmc2V0IDwgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5vZGUp
Lmxlbmd0aCgpOwogCiAgICAgdW5zaWduZWQgY3VycmVudE9mZnNldCA9IDA7CiAgICAgZm9yIChO
b2RlKiBub2RlID0gYW5jaG9yTm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlICYmIGN1cnJlbnRPZmZz
ZXQgPCBvZmZzZXQ7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQogICAgICAgICBjdXJyZW50
T2Zmc2V0Kys7Ci0gICAgCi0gICAgCiAgICAgcmV0dXJuIG9mZnNldCA8IGN1cnJlbnRPZmZzZXQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCBkOGNlZTc3
ZTVjNzg0YmMwZTg2NGNiZTY1YTRhMTkwZjVhZjdjMjM3Li4xOWZhODQ0MmM0ODI3NTM5NGExMDA3
YmQxNGY2YzY3ODdmOGM1ZGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VC
b3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2lu
dC5oCkBAIC0xNDcsOCArMTQ3LDggQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50Ojpz
ZXRUb1N0YXJ0T2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKIGlubGluZSB2b2lkIFJhbmdl
Qm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUoUmVmPE5vZGU+JiYgY29udGFpbmVyKQogewog
ICAgIG1fY29udGFpbmVyTm9kZSA9IFdURk1vdmUoY29udGFpbmVyKTsKLSAgICBpZiAobV9jb250
YWluZXJOb2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpIHsKLSAgICAgICAgbV9vZmZzZXRJbkNv
bnRhaW5lciA9IG1fY29udGFpbmVyTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgaWYg
KGlzPENoYXJhY3RlckRhdGE+KCptX2NvbnRhaW5lck5vZGUpKSB7CisgICAgICAgIG1fb2Zmc2V0
SW5Db250YWluZXIgPSBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2RlKS5s
ZW5ndGgoKTsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbnVsbHB0cjsKICAgICB9
IGVsc2UgewogICAgICAgICBtX2NoaWxkQmVmb3JlQm91bmRhcnkgPSBtX2NvbnRhaW5lck5vZGUt
Pmxhc3RDaGlsZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJs
b2NrRWxlbWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQuY3BwCmluZGV4IDZkNWNlYzU1MjEyMDE3MThmNDhiYmYwMjI4ZjM4MzNm
MTY0NmFiNmEuLjJjMDI3ODYwYWYyYWQxMzM2MWM0OWY0ZmQ1YjBlMmI0ZDM1OWMxYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5j
cHAKQEAgLTE3NSw4ICsxNzUsOCBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9y
bWF0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlNlbAogc3RhdGljIGJv
b2wgaXNOZXdMaW5lQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAg
Tm9kZSogdGV4dE5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgaW50IG9mZnNl
dCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIGlmICghaXM8VGV4dD4o
dGV4dE5vZGUpIHx8IG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IHRleHROb2RlLT5tYXhDaGFyYWN0
ZXJPZmZzZXQoKSkKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKTsKKyAgICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPj0gZG93
bmNhc3Q8VGV4dD4oKnRleHROb2RlKS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBkb3duY2FzdDxUZXh0PigqdGV4dE5vZGUpLmRhdGEoKVtvZmZzZXRdID09ICdc
bic7CiB9CkBAIC0yMzIsOCArMjMyLDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6
OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QKICAgICBp
ZiAoYXV0byogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkg
ewogICAgICAgICBib29sIGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJl
bmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5k
LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUo
KTsKICAgICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgd2UncmUgYXQg
YW4gZW1wdHkgcGFyYWdyYXBoCi0gICAgICAgIGlmIChlbmRTdHlsZS0+cHJlc2VydmVOZXdsaW5l
KCkgJiYgc3RhcnQgPT0gZW5kICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5j
b250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7Ci0gICAgICAgICAgICBpbnQg
ZW5kT2Zmc2V0ID0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgICAgICB1bnNpZ25l
ZCBlbmRPZmZzZXQgPSBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgICAgIGlmIChl
bmRTdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgc3RhcnQgPT0gZW5kICYmIGVuZE9mZnNldCA8
IGVuZC5jb250YWluZXJOb2RlKCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzTmV3
TGluZUF0UG9zaXRpb24oZW5kLnByZXZpb3VzKCkpICYmIGlzTmV3TGluZUF0UG9zaXRpb24oZW5k
KSkKICAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQuY29udGFpbmVyVGV4dCgpLCBl
bmRPZmZzZXQgKyAxKTsKICAgICAgICAgICAgIGlmIChpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFw
aE9uU2FtZU5vZGUgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IG1fZW5kT2ZMYXN0
UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQpAQCAtMjQxLDkgKzI0MSw5IEBAIHZv
aWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKGNvbnN0CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBlbmQgaXMg
aW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZSBhbmQgdGhlIHRleHQgbm9kZSBpcyBlZGl0YWJs
ZSwgc3BsaXQuCi0gICAgICAgIGlmIChlbmRTdHlsZS0+dXNlck1vZGlmeSgpICE9IFVzZXJNb2Rp
Znk6OlJlYWRPbmx5ICYmICFlbmRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVu
ZC5jb250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CisgICAgICAgIGlmIChl
bmRTdHlsZS0+dXNlck1vZGlmeSgpICE9IFVzZXJNb2RpZnk6OlJlYWRPbmx5ICYmICFlbmRTdHls
ZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kT2Zmc2V0ICYmIGVuZE9mZnNldCA8IGVuZC5j
b250YWluZXJOb2RlKCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8VGV4dD4gZW5k
Q29udGFpbmVyID0gZW5kLmNvbnRhaW5lclRleHQoKTsKLSAgICAgICAgICAgIHNwbGl0VGV4dE5v
ZGUoKmVuZENvbnRhaW5lciwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAg
ICAgIHNwbGl0VGV4dE5vZGUoKmVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTsKICAgICAgICAgICAg
IGlmIChpczxUZXh0PihlbmRDb250YWluZXIpICYmICFlbmRDb250YWluZXItPnByZXZpb3VzU2li
bGluZygpKSB7CiAgICAgICAgICAgICAgICAgc3RhcnQgPSB7IH07CiAgICAgICAgICAgICAgICAg
ZW5kID0geyB9OwpAQCAtMjUyLDEwICsyNTIsMTAgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QK
ICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkKICAgICAgICAgICAgICAg
ICBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmRDb250YWluZXItPnByZXZp
b3VzU2libGluZygpKTsKICAgICAgICAgICAgIGlmIChpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFw
aE9uU2FtZU5vZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9lbmRPZkxhc3RQYXJhZ3JhcGgu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQor
ICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9lbmRPZkxhc3RQYXJh
Z3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpID09IGVuZE9mZnNldCkKICAgICAgICAgICAg
ICAgICAgICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KGVuZENvbnRhaW5lci0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3NpdGlvbihlbmRD
b250YWluZXIuZ2V0KCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpIC0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3NpdGlvbihlbmRDb250YWluZXIuZ2V0KCksIG1fZW5k
T2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gZW5kT2Zmc2V0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmRDb250
YWluZXItPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCAwODRlYTcyYzhhZDI1MTI5NmI0Mzky
YjZhOWJjNjdmNWViMGQ4YTcxLi40ZjQ5OTY5OWFkZTFjYTIyNGVjNDc0M2E5OTRiMDk1NGUwMjFl
NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApA
QCAtMTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5l
U3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHMKICAgICAvLyBNb3Zl
IGl0IHRvIHRoZSBuZXh0IGRlZXAgcXVpdmFsZW50IHBvc2l0aW9uIHRvIGF2b2lkIHJlbW92aW5n
IHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4KICAgICAvLyBlLmcuIGlmIHB1c2hEb3duU3RhcnQg
d2FzIGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhlbGxvPGRpdj53b3JsZDwvZGl2Pjwv
Yj4sIHdlIHdhbnQgUG9zaXRpb24oIndvcmxkIiwgMCkgaW5zdGVhZC4KICAgICBhdXRvKiBwdXNo
RG93blN0YXJ0Q29udGFpbmVyID0gcHVzaERvd25TdGFydC5jb250YWluZXJOb2RlKCk7Ci0gICAg
aWYgKGlzPFRleHQ+KHB1c2hEb3duU3RhcnRDb250YWluZXIpICYmIHB1c2hEb3duU3RhcnQuY29t
cHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IHB1c2hEb3duU3RhcnRDb250YWluZXItPm1h
eENoYXJhY3Rlck9mZnNldCgpKQorICAgIGlmIChpczxUZXh0PihwdXNoRG93blN0YXJ0Q29udGFp
bmVyKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHVzaERvd25TdGFydC5jb21wdXRlT2Zmc2V0
SW5Db250YWluZXJOb2RlKCkpID09IGRvd25jYXN0PFRleHQ+KCpwdXNoRG93blN0YXJ0Q29udGFp
bmVyKS5sZW5ndGgoKSkKICAgICAgICAgcHVzaERvd25TdGFydCA9IG5leHRWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKHB1c2hEb3duU3RhcnQpOwogICAgIC8vIElmIHB1c2hEb3duRW5kIGlzIGF0
IHRoZSBzdGFydCBvZiBhIHRleHQgbm9kZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNl
bGVjdGVkLgogICAgIC8vIE1vdmUgaXQgdG8gdGhlIHByZXZpb3VzIGRlZXAgZXF1aXZhbGVudCBw
b3NpdGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBiMmYyODZjMGI2ZWMxZjQ2Njk3MDhjNjIxOGRh
NGJmMmNhMzVjNDcxLi5mYzJlZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTM3NywxOCArMzc3LDExIEBAIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pCiAvLyBvbiBhIFBvc2l0aW9uIGJlZm9yZSB1c2luZyBpdCB0byBjcmVhdGUgYSBET00gUmFu
Z2UsIG9yIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KIGludCBsYXN0T2Zmc2V0Rm9yRWRp
dGluZyhjb25zdCBOb2RlJiBub2RlKQogewotICAgIGlmIChub2RlLmlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgaWYg
KG5vZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgpIHx8IG5vZGUuaGFzQ2hpbGROb2RlcygpKQorICAg
ICAgICByZXR1cm4gbm9kZS5sZW5ndGgoKTsKIAotICAgIGlmIChub2RlLmhhc0NoaWxkTm9kZXMo
KSkKLSAgICAgICAgcmV0dXJuIG5vZGUuY291bnRDaGlsZE5vZGVzKCk7Ci0KLSAgICAvLyBOT1RF
OiBUaGlzIHNob3VsZCBwcmVlbXB0IHRoZSBjb3VudENoaWxkTm9kZXMoKSBmb3IsIGUuZy4sIHNl
bGVjdCBub2Rlcy4KLSAgICAvLyBGSVhNRTogV2hhdCBkb2VzIHRoZSBjb21tZW50IGFib3ZlIG1l
YW4/Ci0gICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0KLSAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhNRTogTWlnaHQgYmUgbW9yZSBoZWxwZnVs
IHRvIHJldHVybiAxIGZvciBhbnkgbm9kZSB3aGVyZSBlZGl0aW5nSWdub3Jlc0NvbnRlbnQgaXMg
dHJ1ZSwgZXZlbiBvbmUgdGhhdCBoYXBwZW5zIHRvIGhhdmUgY2hpbGQgbm9kZXMsIGxpa2UgYSBz
ZWxlY3QgZWxlbWVudCB3aXRoIG9wdGlvbiBub2RlIGNoaWxkcmVuLgorICAgIHJldHVybiBlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgPyAxIDogMDsKIH0KIAogYm9vbCBpc0FtYmlndW91c0Jv
dW5kYXJ5Q2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAppbmRleCA3ZmYxYzMyNTUxYTZhMjg1NzA5MzYyMDc1MmU3MzRkM2E5NmJl
OGVmLi4wZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJkNThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNDk3LDggKzE0OTcsOCBAQCBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIC8vIGUuZy4gaWYgcG9zIHdhcyBhdCBQb3NpdGlvbigi
aGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0
aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQuIAogICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgcmFu
Z2UgYmVjYXVzZSBjYXJldCBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzwvYj53
b3JsZCBzaG91bGQgZ2l2ZSB5b3UgZm9udC13ZWlnaHQ6IGJvbGQuIAogICAgIE5vZGUqIHBvc2l0
aW9uTm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsgCi0gICAgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgcG9zaXRpb25Ob2RlICYmIHBvc2l0aW9uTm9kZS0+aXNUZXh0Tm9kZSgpICYm
IHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwb3NpdGlvbk5vZGUt
Pm1heENoYXJhY3Rlck9mZnNldCgpKSAKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShwb3NpdGlvbik7IAorICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgp
ICYmIGlzPFRleHQ+KHBvc2l0aW9uTm9kZSkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0
aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPT0gZG93bmNhc3Q8VGV4dD4oKnBv
c2l0aW9uTm9kZSkubGVuZ3RoKCkpCisgICAgICAgIHBvc2l0aW9uID0gbmV4dFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUocG9zaXRpb24pOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHBvc2l0
aW9uLmVsZW1lbnQoKTsKICAgICBpZiAoIWVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDNlZmY2ZjU3YjEwNTE1ZDg5MjU1ZGJkNjc5
YzBmMTJmYTcyNGFiOWMuLmRhOWY5NzE0Y2MwNDBlMWM2MzJjZTIwZDJjOThlMWQxNjQ4Y2ZiNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0y
NTUsNyArMjU1LDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBh
cmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQKICAgICAgICAgICAgIGlmIChy
YW5nZVN0YXJ0SXNJbkxpc3QgJiYgbmV3TGlzdCkKICAgICAgICAgICAgICAgICBjdXJyZW50U2Vs
ZWN0aW9uLT5zZXRTdGFydCgqbmV3TGlzdCwgMCk7CiAgICAgICAgICAgICBpZiAocmFuZ2VFbmRJ
c0luTGlzdCAmJiBuZXdMaXN0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNl
dEVuZCgqbmV3TGlzdCwgbGFzdE9mZnNldEluTm9kZShuZXdMaXN0LmdldCgpKSk7CisgICAgICAg
ICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0RW5kKCpuZXdMaXN0LCBuZXdMaXN0LT5sZW5n
dGgoKSk7CiAKICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24o
Zmlyc3RQb3NpdGlvbkluTm9kZShuZXdMaXN0LmdldCgpKSkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMTcyZTI2NDRjMjIxNDQ5YzVjNzc0ZjE5ZTYwNWJl
MjU5ODVhMTY1ZC4uMDY4YmM5OGMyYjNmYmRjMTg1MzQwODUyZjJhOTU1Yjg4MmZkNjU3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTEzNCw3ICsxMTM0LDcg
QEAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6U2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcihjb25zdCBTaW1wbGVSYW4KICAgICBpZiAoIWVuZE5vZGUtPmlzQ2hhcmFjdGVy
RGF0YU5vZGUoKSkgewogICAgICAgICBpZiAoZW5kT2Zmc2V0ID4gMCAmJiBlbmRPZmZzZXQgPD0g
ZW5kTm9kZS0+Y291bnRDaGlsZE5vZGVzKCkpIHsKICAgICAgICAgICAgIGVuZE5vZGUgPSBlbmRO
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChlbmRPZmZzZXQgLSAxKTsKLSAgICAgICAgICAgIGVuZE9m
ZnNldCA9IGxhc3RPZmZzZXRJbk5vZGUoZW5kTm9kZSk7CisgICAgICAgICAgICBlbmRPZmZzZXQg
PSBlbmROb2RlLT5sZW5ndGgoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDMyNTNiNmZiMGJhYjBlYTA0NzRkY2IzZWM3MWM5
NDIwYjVhOTcwNDQuLmRiZmMyMDMyNmIwZjgxZDY5YmM3MjQ5NzYyNDYxZjVkNTVjMDhiMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTYzNyw3ICs2MzcsNyBA
QCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGl0LmF0RW5kKCkgPyBzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpIDogcG9zLCBET1dOU1RS
RUFNKTsKIAogICAgIGF1dG8mIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgOiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKLSAgICBpZiAo
KCFzdWZmaXhMZW5ndGggJiYgbm9kZS5pc1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50Pihu
ZXh0KSA8PSBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYm
IG5vZGUucmVuZGVyZXIoKS0+aXNCUigpICYmICFuZXh0KSkgeworICAgIGlmICgoIXN1ZmZpeExl
bmd0aCAmJiBpczxUZXh0Pihub2RlKSAmJiBuZXh0IDw9IGRvd25jYXN0PFRleHQ+KG5vZGUpLmxl
bmd0aCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+aXNCUigpICYm
ICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVzYWJs
ZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZub2RlLCBuZXh0KSwgRE9XTlNUUkVBTSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNTAyZjcw
MjUyNWRjNzEyZjU5ZjgxZmU3NTBlNTgxZjlmYTgwMTM3YS4uZDIxOTQ1NDY5OTg1NDg4YjIwNGZm
OTVjZTdjZmYwNTM5NTQ2ZTE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCkBAIC0xOTk2LDE2ICsxOTk2LDE4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2hv
dWxkVHJ1bmNhdGVUZXh0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICByZXR1
cm4gZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpICE9IHRoaXMgJiYgc3R5bGUudGV4dE92ZXJm
bG93KCkgPT0gVGV4dE92ZXJmbG93OjpFbGxpcHNpczsKIH0KIAotRXhjZXB0aW9uT3I8aW50PiBI
VE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydEZvckJpbmRpbmdzKCkgY29uc3QKK0V4Y2Vw
dGlvbk9yPHVuc2lnbmVkPiBIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydEZvckJpbmRp
bmdzKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0aW9uIHNheXMgdGhp
cyByZXR1cm5zIG51bGwsIHJhdGhlciB0aGEgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgogICAgIGlm
ICghY2FuSGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVy
cm9yIH07CiAKICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQoKTsKIH0KIAotRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5ncyhpbnQg
c3RhcnQpCitFeGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25T
dGFydEZvckJpbmRpbmdzKHVuc2lnbmVkIHN0YXJ0KQogeworICAgIC8vIEZJWE1FOiBIVE1MIHNw
ZWNpZmljYXRpb24gc2F5cyB0aGlzIHRocm93cyBhbiBJbnZhbGlkYXRlU3RhdGVFcnJvciBleGNl
cHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKIApAQCAtMjAxMywxNiArMjAxNSwxOCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydEZvckJpbmRpbmdzKGlu
dCBzdGFydCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25PcjxpbnQ+IEhUTUxJbnB1
dEVsZW1lbnQ6OnNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKCkgY29uc3QKK0V4Y2VwdGlvbk9yPHVu
c2lnbmVkPiBIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25FbmRGb3JCaW5kaW5ncygpIGNvbnN0
CiB7CisgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgcmV0dXJucyBu
dWxsLCByYXRoZXIgdGhhbiB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZl
U2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAog
ICAgIHJldHVybiBzZWxlY3Rpb25FbmQoKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kRm9yQmluZGluZ3MoaW50IGVuZCkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKHVu
c2lnbmVkIGVuZCkKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0aW9uIHNheXMgdGhp
cyB0aHJvd3MgYW4gSW52YWxpZGF0ZVN0YXRlRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmICghY2Fu
SGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07
CiAKQEAgLTIwMzIsNiArMjAzNiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKGludCBlbmQpCiAKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoKSBj
b25zdAogeworICAgIC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHJldHVy
bnMgbnVsbCwgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgogICAgIGlmICghY2Fu
SGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07
CiAKQEAgLTIwNDAsNiArMjA0NSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSFRNTElucHV0RWxl
bWVudDo6c2VsZWN0aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoKSBjb25zdAogCiBFeGNlcHRpb25P
cjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5n
cyhjb25zdCBTdHJpbmcmIGRpcmVjdGlvbikKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBzcGVjaWZp
Y2F0aW9uIHNheXMgdGhpcyB0aHJvd3MgYW4gSW52YWxpZGF0ZVN0YXRlRXJyb3IgZXhjZXB0aW9u
LgogICAgIGlmICghY2FuSGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yIH07CiAKQEAgLTIwNDcsOCArMjA1Myw5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkRpcmVjdGlvbkZvckJpbmRpbmdzKGNvbnN0
IFN0cmluCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0
RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyhpbnQgc3RhcnQsIGludCBlbmQs
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKQorRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxl
bWVudDo6c2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyh1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbikKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBz
cGVjaWZpY2F0aW9uIHNheXMgdGhpcyB0aHJvd3MgYW4gSW52YWxpZGF0ZVN0YXRlRXJyb3IgZXhj
ZXB0aW9uLgogICAgIGlmICghY2FuSGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVHlwZUVycm9yIH07CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCmluZGV4IDcxNTdhNzZmZTMxYWM1NWRjNjUyZTI5ZWQ2ODZmYmZkYWJhNzAwYjEuLmNm
YTg5YjcxYTVlODY4ODQ0MDBkNWVkNjlhNTkyMmNmMTgzM2M1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0zMzgsMTYgKzMzOCwxNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHNob3VsZFRydW5jYXRlVGV4dChjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogCi0g
ICAgRXhjZXB0aW9uT3I8aW50PiBzZWxlY3Rpb25TdGFydEZvckJpbmRpbmdzKCkgY29uc3Q7Ci0g
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5ncyhpbnQpOwor
ICAgIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydEZvckJpbmRpbmdzKCkgY29u
c3Q7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5ncyh1
bnNpZ25lZCk7CiAKLSAgICBFeGNlcHRpb25PcjxpbnQ+IHNlbGVjdGlvbkVuZEZvckJpbmRpbmdz
KCkgY29uc3Q7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U2VsZWN0aW9uRW5kRm9yQmluZGlu
Z3MoaW50KTsKKyAgICBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kRm9yQmluZGlu
Z3MoKSBjb25zdDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTZWxlY3Rpb25FbmRGb3JCaW5k
aW5ncyh1bnNpZ25lZCk7CiAKICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHNlbGVjdGlvbkRpcmVj
dGlvbkZvckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U2VsZWN0
aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJik7CiAKLSAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRpbmdzKGludCBzdGFydCwgaW50IGVuZCwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24pOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFNlbGVj
dGlvblJhbmdlRm9yQmluZGluZ3ModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3Qg
U3RyaW5nJiBkaXJlY3Rpb24pOwogCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTElucHV0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbApp
bmRleCBmNTdlYTg4MmY2OTgxOWU2YmE4Mjk1OGM0NjlkZjY4NDE2YmI5YzE1Li5hZTI1ZGFjMmFm
Y2NlMWZkMmVjOTE3YzQ3YmFlY2M1YWE2NTg5YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5pZGwKQEAgLTc3LDE0ICs3NywxMiBAQAogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBOb2RlTGlzdCBsYWJlbHM7CiAKICAgICB2b2lkIHNlbGVjdCgpOwotICAgIFtJbXBsZW1l
bnRlZEFzPXNlbGVjdGlvblN0YXJ0Rm9yQmluZGluZ3NdIGF0dHJpYnV0ZSBsb25nIHNlbGVjdGlv
blN0YXJ0OwotICAgIFtJbXBsZW1lbnRlZEFzPXNlbGVjdGlvbkVuZEZvckJpbmRpbmdzXSBhdHRy
aWJ1dGUgbG9uZyBzZWxlY3Rpb25FbmQ7CisgICAgW0ltcGxlbWVudGVkQXM9c2VsZWN0aW9uU3Rh
cnRGb3JCaW5kaW5nc10gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2VsZWN0aW9uU3RhcnQ7Cisg
ICAgW0ltcGxlbWVudGVkQXM9c2VsZWN0aW9uRW5kRm9yQmluZGluZ3NdIGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIHNlbGVjdGlvbkVuZDsKICAgICBbSW1wbGVtZW50ZWRBcz1zZWxlY3Rpb25EaXJl
Y3Rpb25Gb3JCaW5kaW5nc10gYXR0cmlidXRlIERPTVN0cmluZyBzZWxlY3Rpb25EaXJlY3Rpb247
Ci0KICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0UmFuZ2VUZXh0KERPTVN0cmluZyBy
ZXBsYWNlbWVudCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldFJhbmdlVGV4dChE
T01TdHJpbmcgcmVwbGFjZW1lbnQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcg
ZW5kLCBvcHRpb25hbCBET01TdHJpbmcgc2VsZWN0aW9uTW9kZSk7Ci0KLSAgICBbSW1wbGVtZW50
ZWRBcz1zZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRpbmdzLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9p
ZCBzZXRTZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCwgb3B0aW9uYWwgRE9NU3Ry
aW5nIGRpcmVjdGlvbik7CisgICAgW0ltcGxlbWVudGVkQXM9c2V0U2VsZWN0aW9uUmFuZ2VGb3JC
aW5kaW5ncywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UodW5zaWdu
ZWQgbG9uZyBzdGFydCwgbG9uZyBlbmQsIG9wdGlvbmFsIERPTVN0cmluZyBkaXJlY3Rpb24pOwog
CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmlu
ZyBhbGlnbjsKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZsZWN0XSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHVzZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMjhiNDJkYjAzNTE0Njc1NjNkZDc2OTRhM2E3Mjll
YWUxMjA0MjIzMS4uYzI3MTBmZWU3MGM1M2Q3ZDA4MTRiMjdmMWQ5MGZmZDQ1ZjdkNzI3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAKQEAgLTE4MCwxMiArMTgwLDEyIEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldENhblNob3dQbGFjZWhvbGRlcihib29sIGNhblNob3dQbGFjZWhvbGRlcikKICAgICB1cGRh
dGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQordm9pZCBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQodW5zaWduZWQgc3RhcnQpCiB7CiAgICAg
c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIHN0ZDo6bWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSks
IHNlbGVjdGlvbkRpcmVjdGlvbigpKTsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQpCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRTZWxlY3Rpb25FbmQodW5zaWduZWQgZW5kKQogewogICAgIHNldFNlbGVjdGlv
blJhbmdlKHN0ZDo6bWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSksIGVuZCwgc2VsZWN0aW9uRGly
ZWN0aW9uKCkpOwogfQpAQCAtMjc4LDcgKzI3OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNl
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVj
dGlvblN0cmluZywgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCkKK3ZvaWQg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQogewogICAgIFRleHRGaWVsZFNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbjsKICAgICBpZiAo
ZGlyZWN0aW9uU3RyaW5nID09ICJmb3J3YXJkIikKQEAgLTI4OSwxMyArMjg5LDEyIEBAIHZvaWQg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwg
aW50IGVuZCwgY29uc3QgU3RyCiAgICAgcmV0dXJuIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBl
bmQsIGRpcmVjdGlvbiwgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwsIGludGVudCk7
CiB9CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdl
KGludCBzdGFydCwgaW50IGVuZCwgVGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgaW50ZW50KQordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgVGV4dEZpZWxkU2VsZWN0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBj
b25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQogewogICAgIGlmICghaXNUZXh0
RmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZW5kID0gc3RkOjptYXgoZW5kLCAwKTsK
LSAgICBzdGFydCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCAwKSwgZW5kKTsKKyAgICBzdGFy
dCA9IHN0ZDo6bWluKHN0YXJ0LCBlbmQpOwogCiAgICAgYXV0byBpbm5lclRleHQgPSBpbm5lclRl
eHRFbGVtZW50KCk7CiAgICAgYm9vbCBoYXNGb2N1cyA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1l
bnQoKSA9PSB0aGlzOwpAQCAtMzU2LDcgKzM1NSw3IEBAIFZpc2libGVQb3NpdGlvbiBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4KSBj
CiAgICAgcmV0dXJuIHBvc2l0aW9uOwogfQogCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK3Vuc2lnbmVkIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1RleHRGaWVsZCgp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTM3Niw3ICszNzUsNyBAQCBpbnQgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmNvbXB1dGVTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgcmV0dXJu
IGluZGV4Rm9yUG9zaXRpb24oZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkp
OwogfQogCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgpIGNv
bnN0Cit1bnNpZ25lZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uRW5kKCkg
Y29uc3QKIHsKICAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
NDM1LDcgKzQzNCw3IEBAIFRleHRGaWVsZFNlbGVjdGlvbkRpcmVjdGlvbiBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvbkRpcmVjdGlvCiAgICAgcmV0dXJuIHNlbGVj
dGlvbi5pc0RpcmVjdGlvbmFsKCkgPyAoc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBTZWxlY3Rp
b25IYXNGb3J3YXJkRGlyZWN0aW9uIDogU2VsZWN0aW9uSGFzQmFja3dhcmREaXJlY3Rpb24pIDog
U2VsZWN0aW9uSGFzTm9EaXJlY3Rpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRDb250
YWluZXJBbmRPZmZzZXRGb3JSYW5nZShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBOb2RlKiYgY29u
dGFpbmVyTm9kZSwgaW50JiBvZmZzZXRJbkNvbnRhaW5lcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShOb2RlKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQs
IE5vZGUqJiBjb250YWluZXJOb2RlLCB1bnNpZ25lZCYgb2Zmc2V0SW5Db250YWluZXIpCiB7CiAg
ICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBjb250YWluZXJOb2RlID0gbm9k
ZTsKQEAgLTQ1MSw4ICs0NTAsOCBAQCBSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0
RmllbGQoKSB8fCAhaGFzQ2FjaGVkU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaW50IHN0YXJ0ID0gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgZW5k
ID0gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQgc3RhcnQgPSBtX2NhY2hlZFNl
bGVjdGlvblN0YXJ0OworICAgIHVuc2lnbmVkIGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9uRW5kOwog
CiAgICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7CiAgICAgYXV0byBpbm5lclRleHQgPSBpbm5lclRl
eHRFbGVtZW50KCk7CkBAIC00NjIsMTMgKzQ2MSwxMyBAQCBSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogICAgIGlmICghaW5uZXJUZXh0
LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IGlubmVyVGV4dCwgMCwgaW5uZXJUZXh0LCAwKTsKIAotICAgIGludCBvZmZzZXQgPSAwOworICAg
IHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgTm9kZSogc3RhcnROb2RlID0gbnVsbHB0cjsKICAg
ICBOb2RlKiBlbmROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0g
aW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KCpub2RlLCBpbm5lclRleHQuZ2V0KCkpKSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RD
aGlsZCgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNU
YWdOYW1lKGJyVGFnKSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkg
PyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUuZ2V0KCkpIDogMTsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gaXM8VGV4dD4oKm5vZGUpID8gZG93bmNhc3Q8VGV4dD4oKm5vZGUpLmxlbmd0aCgpIDog
MTsKIAogICAgICAgICBpZiAob2Zmc2V0IDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IG9mZnNldCArIGxl
bmd0aCkKICAgICAgICAgICAgIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKG5vZGUuZ2V0
KCksIHN0YXJ0IC0gb2Zmc2V0LCBzdGFydE5vZGUsIHN0YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCA0MDc4OTRmNWVjY2U2
YTEyMjhlNzliZGI4ZjNjOTU3ODlhYzI5ZmJlLi4xZmYzNzFmZDcwNTk2OTRiNGIxYzk2ZjQzNWFh
ODQ3YWI4ZTk0MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5oCkBAIC02NywxNyArNjcsMTkgQEAgcHVibGljOgogCiAgICAgaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChp
bnQgaW5kZXgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGludCBzZWxlY3Rpb25TdGFydCgp
IGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgc2VsZWN0aW9uRW5kKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgQXRvbVN0cmluZyYgc2VsZWN0aW9uRGlyZWN0aW9uKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGludCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTZWxlY3Rpb25TdGFydCh1bnNpZ25lZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTZWxlY3Rpb25FbmQodW5zaWduZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U2VsZWN0aW9uRGlyZWN0aW9uKGNvbnN0IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2VsZWN0KFNlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05v
dFJldmVhbCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmID0gQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQoKSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRSYW5nZVRleHQoY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3Rpb25Nb2RlKTsKLSAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwg
aW50IGVuZCwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50JiA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCkpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBUZXh0RmllbGRTZWxl
Y3Rpb25EaXJlY3Rpb24gPSBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbiwgU2VsZWN0aW9uUmV2ZWFs
TW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsLCBjb25zdCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCYgPSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpKTsKKyAgICB2b2lkIHNl
dFNlbGVjdGlvblJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgPSBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvblJh
bmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFRleHRGaWVsZFNlbGVjdGlvbkRpcmVj
dGlvbiA9IFNlbGVjdGlvbkhhc05vRGlyZWN0aW9uLCBTZWxlY3Rpb25SZXZlYWxNb2RlID0gU2Vs
ZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50JiA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCkpOworCiAgICAgUmVmUHRyPFJhbmdlPiBz
ZWxlY3Rpb24oKSBjb25zdDsKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCA3NDNjMzJhYWZl
NjQxMzI4YTI1ODQxYzhkYmVmMWVjYTI4YTc0ZWNiLi5iNmZhN2Q0Y2QxOTljNTc4N2Y5MDkwMWQ1
NTJiOTE0MTRlM2VmNDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCkBAIC01NzUsOSArNTc1LDkgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIHVu
c2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IDA7CiAgICAgaWYgKGVsZW1lbnQoKS0+Zm9jdXNlZCgp
KSB7CiAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woZWxlbWVudCgpLT5k
b2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpID09IGVs
ZW1lbnQoKSk7Ci0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydCA9IGVsZW1lbnQoKS0+c2VsZWN0
aW9uU3RhcnQoKTsKKyAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSBlbGVtZW50KCkt
PnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25TdGFydCA8PSBlbGVt
ZW50KCktPnNlbGVjdGlvbkVuZCgpKTsKLSAgICAgICAgaW50IHNlbGVjdGlvbkNvZGVVbml0Q291
bnQgPSBlbGVtZW50KCktPnNlbGVjdGlvbkVuZCgpIC0gc2VsZWN0aW9uU3RhcnQ7CisgICAgICAg
IHVuc2lnbmVkIHNlbGVjdGlvbkNvZGVVbml0Q291bnQgPSBlbGVtZW50KCktPnNlbGVjdGlvbkVu
ZCgpIC0gc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlv
bkNvZGVVbml0Q291bnQgPyBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcoaW5uZXJUZXh0
KS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNvZGVVbml0Q291bnQpKSA6IDA7
CiAgICAgfQogICAgIEFTU0VSVChvbGRMZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395910</attachid>
            <date>2020-04-08 21:45:09 -0700</date>
            <delta_ts>2020-04-09 11:35:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210246-20200408214508.patch</filename>
            <type>text/plain</type>
            <size>40088</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5Nzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTExZGRjN2RlZjM0MTAy
ZTU4NWI3MmZlZjY1ZmUyZjI4MmEzMzA1NC4uOWYzYmQzZDk1OTc5YzRkNmNiNTI4ZDNhZDNkMmM3
YmExZTE1MGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNC0wOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE5vZGU6Omxlbmd0aCB0
byByZXBsYWNlIE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCBhbmQgbGFzdE9mZnNldEluTm9kZTsg
c3dpdGNoIG1vcmUgb2Zmc2V0cyBmcm9tIGludCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjQ2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBUaGUgcmVjZW50bHktYWRkZWQgTm9k
ZTo6bGVuZ3RoLCB3aGljaCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbiB0ZXJtaW5vbG9n
eQorICAgICAgICAgIGZvciBub2RlIG9mZnNldHMgYXMgdXNlZCBpbiByYW5nZXMsIGlzIHRoZSBz
YW1lIGFzIHRoZSBleGlzdGluZyBtYXhDaGFyYWN0ZXJPZmZzZXQKKyAgICAgICAgICBhbmQgbGFz
dE9mZnNldEluTm9kZSBmdW5jdGlvbnMuIERlbGV0ZWQgYWxsIHVzZXMgb2YgdGhvc2UgYW5kIHJl
cGxhY2VkIHRoZW0KKyAgICAgICAgICB3aXRoIGNhbGxzIHRvIE5vZGU6Omxlbmd0aC4gT25lIG9m
IHRoZSBiZW5lZml0cyBvZiB0aGlzIGlzIHRoYXQgTm9kZTo6bGVuZ3RoIGlzCisgICAgICAgICAg
aW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseSBhbmQgaXMgbm90IGEgdmlydHVhbCBmdW5jdGlv
bi4gQW5vdGhlciBpcyBjb25zaXN0ZW50bHkKKyAgICAgICAgICBtYXRjaGluZyB0aGUgRE9NIHNw
ZWNpZmljYXRpb24gdGVybWlub2xvZ3kuCisgICAgICAgIC0gTWFueSBvZmZzZXRzLCBpbmNsdWRp
bmcgdGhlIG9uZXMgaW4gbGl2ZSByYW5nZXMsIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMg
c2lnbmVkCisgICAgICAgICAgaW4gV2ViS2l0LCBidXQgYXJlIHNwZWNpZmllZCBhcyB1bnNpZ25l
ZCBpbiB0aGUgRE9NIGFuZCBIVE1MIHNwZWNpZmljYXRpb25zLiBUaGlzCisgICAgICAgICAgaGFz
IHZlcnkgbGl0dGxlIG9ic2VydmFibGUgZWZmZWN0IGZyb20gSmF2YVNjcmlwdCB0aGF0IGNhbiBh
ZmZlY3Qgd2Vic2l0ZSBjb21wYXRpYmlsaXR5LAorICAgICAgICAgIGJ1dCBpdCdzIHN0aWxsIGhl
bHBmdWwgdG8gYmUgY29uc2lzdGVudCBib3RoIHdpdGggdGhlIHNwZWNpZmljYXRpb24gYW5kIGlu
dGVybmFsbHkuCisgICAgICAgICAgQWNjb3JkaW5nbHksIGNoYW5nZWQgc29tZSBvZiB0aGVzZSB0
byB1bnNpZ25lZDsgbW9yZSB0byBjb21lIGxhdGVyLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBy
ZXZpb3VzQm91bmRhcnkpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFj
dGVyT2Zmc2V0LgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5oOiBEZWxldGVkIG1heENoYXJhY3Rlck9m
ZnNldCBvdmVycmlkZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1h
cmtlcnMpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFjdGVyT2Zmc2V0
LgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bWF4
Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBE
ZWxldGVkIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9k
ZSBjb25zdCk6IFVzZSBsZW5ndGggaW5zdGVhZAorICAgICAgICBvZiBsYXN0T2Zmc2V0SW5Ob2Rl
LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpsYXN0T2Zm
c2V0SW5Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omxhc3RQb3NpdGlvbkluTm9k
ZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBsYXN0T2Zmc2V0SW5Ob2RlLgorICAgICAgICAoV2Vi
Q29yZTo6bWluT2Zmc2V0Rm9yTm9kZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBtYXhDaGFyYWN0
ZXJPZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpvZmZzZXRJc0JlZm9yZUxhc3ROb2RlT2Zmc2V0
KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKTogVXNlIGxlbmd0
aCBpbnN0ZWFkIG9mCisgICAgICAgIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
TmV3TGluZUF0UG9zaXRpb24pOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YgbWF4Q2hhcmFjdGVyT2Zm
c2V0LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZv
clBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgRGl0dG8uCisK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IFVzZSBsZW5ndGggaW5z
dGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGFzdE9mZnNldEZvckVkaXRpbmcpOiBV
c2UgbGVuZ3RoIGluc3RlYWQgb2YgbW1heENoYXJhY3Rlck9mZnNldAorICAgICAgICBhbmQgY291
bnRDaGlsZE5vZGVzLiBBbHNvIGltcHJvdmVkIHRoZSBjb21tZW50IGhlcmUuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5
bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydCk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAg
ICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKTogVXNlIGxlbmd0aCBpbnN0ZWFkCisgICAgICAgIG9mIGxhc3RPZmZz
ZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgVVNlIGxlbmd0aCBpbnN0ZWFkIG9mIGxhc3RP
ZmZzZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIG1h
eENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25TdGFydEZvckJp
bmRpbmdzIGNvbnN0KToKKyAgICAgICAgVXNlIHVuc2lnbmVkIGluc3RlYWQgb2YgaW50LiBBbHNv
IGFkZGVkIGNvbW1lbnRzIGFib3V0IGRpZmZlcmVuY2VzIGJldHdlZW4KKyAgICAgICAgd2hhdCB0
aGlzIGRvZXMgYW5kIHdoYXQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBjYWxscyBmb3IuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydEZvckJpbmRp
bmdzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rp
b25FbmRGb3JCaW5kaW5ncyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kRm9yQmluZGluZ3MpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbkRpcmVjdGlvbkZvckJpbmRpbmdz
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRT
ZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOiBVc2UgdW5zaWduZWQgaW5zdGVhZCBv
ZiBpbnQuCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDogVXNlIHVuc2lnbmVk
IGxvbmcgaW5zdGVhZCBvZiBsb25nLAorICAgICAgICBtYXRjaGluZyB3aGF0IHRoZSBIVE1MIHNw
ZWNpZmljYXRpb24gY2FsbHMgZm9yLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0U2VsZWN0aW9uU3RhcnQpOiBVc2UgdW5zaWduZWQKKyAgICAgICAgaW5zdGVhZCBv
ZiBpbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0
U2VsZWN0aW9uRW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25TdGFydCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29udGFpbmVyQW5kT2Zm
c2V0Rm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3Rpb24gY29uc3QpOiBVc2UgbGVuZ3RoCisgICAgICAgIGluc3RlYWQg
b2YgbGFzdE9mZnNldEluTm9kZS4KKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Lmg6IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludC4KKworICAgICAgICAqIGh0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICBVc2UgdW5zaWdu
ZWQgaW5zdGVhZCBvZiBpbnQuCisKIDIwMjAtMDQtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBxdWVyeVNlbGVjdG9yKCIjXHUwMDAwIikgc2hvdWxkIG1hdGNo
IGFuIGVsZW1lbnQgd2l0aCBJRCBVK0ZGRkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGIwMTFkOTM2MTljOGNlNzEyNTQzMjEwMTIyODMy
MWMxYTZiODUwYWUuLjY0OTUyYjM1MzU5ZmVmNzA1ZGQ3MGE0NjA2MWIyMzE1ZTUyMmJlZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAt
MjY2NCw3ICsyNjY0LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3Vz
Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoJm5vZGUg
IT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWRO
b2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVu
ZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5n
KSwgZmFsc2UpOwogCi0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
fHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkp
IHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgbm9kZS5pc1RleHROb2RlKCkgJiYgbmV4dCA8
PSBub2RlLmxlbmd0aCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+
aXNCUigpICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlu
cyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlmIChub2RlLmlzVGV4
dE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5n
ZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZz
ZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IDgwZmQ5ZWIyMjczN2M3ZGIzZDM5NjNhMDJmMDI3
MDkxN2VkYTdiMzcuLmEzMTU4ZmU5YmEyZTE3NmU2YzQxMWIzMmQxNGQyNDJlN2I5M2Y0MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIHNlbGVjdGlvbkJlbG9u
Z3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0
aW9uJgogICAgIC8vIG5vZGUgaXMgYWN0dWFsbHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0
IHBhcnRpYWxseS4KICAgICBhdXRvJiBub2RlID0gKmNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBh
dXRvKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUubGFzdERlc2NlbmRhbnQoKTsKLSAgICB1bnNpZ25l
ZCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCk7CisgICAgdW5z
aWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKICAgICBhdXRvIGlu
dGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CiAgICAgcmV0dXJu
ICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCiAgICAgICAgICYmIGludGVyc2VjdHNS
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cAppbmRleCBkZmYyYmE4ZmQ2MjkwYTY1ZGZmYWRhNzc5YmEwMTkyNjM5OGY0Y2YwLi4xMzEzOWEy
YTYyZDEwYTg0ZTVlNDk5MGFlYWRjNWQ5NWVlNGI2YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCkBAIC0yMzksOSArMjM5LDQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNw
YXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGREYXRhKQogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGRvY3VtZW50KCksICp0aGlzKTsK
IH0KIAotaW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAppbmRleCBlMjMxZDUzNTc3Y2I1
MDg1YWQzOGViZTZlMDMyZjQxZTc5MTVhM2Q1Li5mZTY2MDAzMGE0NjBiNDI1NTNlZGUyMDZlMzU2
ZTI0MTdlNjc0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTYzLDcgKzYz
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAg
IGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KLSAgICBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBz
ZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWRE
YXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBu
b3RpZnlQYXJlbnRBZnRlckNoYW5nZShDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJjZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAK
aW5kZXggNGM1Mjg2MTc4NGE2NTcyY2ZhNWEyNGVmYTA0MWM3ZTVkZmE5Y2E2MS4uODJlYWI4Y2Nl
NjBmNTBkNTc2OTRlYTE4NjcwNTI3YzljNWM2OTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgICAgICAvLyBGSVhNRTogTm8gb2J2aW91cyByZWFzb24g
dGhpcyBzaG91bGQgYmUgaU9TLXNwZWNpZmljLiBSZW1vdmUgdGhlICNpZiBhdCBzb21lIHBvaW50
LgogICAgICAgICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSAr
IGRlbHRhOwogICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgp
ICsgZGVsdGE7Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJh
Y3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odGFyZ2V0U3RhcnRPZmZzZXQpID49IG5vZGUubGVuZ3RoKCkgfHwg
dGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrZXIu
c2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkg
PyB0YXJnZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICAgICAg
ICAgIG1hcmtlci5zZXRFbmRPZmZzZXQoc3RkOjptaW48dW5zaWduZWQ+KHRhcmdldEVuZE9mZnNl
dCwgbm9kZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwog
ICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4YzFiYTdlNmZmODY3Zjk1MTM4
NGZhZWE3MjRjZGJiNzU1NjQ5NDNkLi4yNzNhNTM5ODg4MmJiYjFhYWI0YzFmMWNlYzhiYzgyY2Zi
OGQxNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTAyLDEyICsxMTAyLDYgQEAgY29uc3QgUmVu
ZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNp
ZmllcikKICAgICByZXR1cm4gY29tcG9zZWRQYXJlbnQtPmNvbXB1dGVkU3R5bGUocHNldWRvRWxl
bWVudFNwZWNpZmllcik7CiB9CiAKLWludCBOb2RlOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBG
SVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAg
Q29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNz
CiAvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogYm9vbCBOb2RlOjpjYW5TdGFydFNlbGVjdGlv
bigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA5M2E3MWExNTYyY2E1MDkxYmIwMDBiZmQyMzRmNmIw
NTcyYWJmN2QxLi4xODIyYWY3MzY0NzM5NzY5YjM3MWUxOWMzNTE1ODkzMmRmNzk0ZmU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKQEAgLTM3NywxMCArMzc3LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNJbmNs
dWRpbmdTaGFkb3dET00oY29uc3QgTm9kZSopIGNvbnN0OwogCi0gICAgLy8gTnVtYmVyIG9mIERP
TSAxNi1iaXQgdW5pdHMgY29udGFpbmVkIGluIG5vZGUuIE5vdGUgdGhhdCByZW5kZXJlZCB0ZXh0
IGxlbmd0aCBjYW4gYmUgZGlmZmVyZW50IC0gZS5nLiBiZWNhdXNlIG9mCi0gICAgLy8gY3NzLXRy
YW5zZm9ybTpjYXBpdGFsaXplIGJyZWFraW5nIHVwIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMgYW5k
IGxpZ2F0dXJlcy4KLSAgICB2aXJ0dWFsIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsK
LQogICAgIC8vIFdoZXRoZXIgb3Igbm90IGEgc2VsZWN0aW9uIGNhbiBiZSBzdGFydGVkIGluIHRo
aXMgb2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDc3ZGFhZGU5NDQzNjZlN2ZlNDNhYTNlMGM3OGZi
YTVkNDczMzIwNzEuLmJjZjY5MDQ1NzVlYmRlMjQ0ZDkxNDUxZDk3MTM4NjQ4YjcxMjE4ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIGludCBQb3NpdGlvbjo6
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlvbklz
QmVmb3JlQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgUG9zaXRpb25Jc0Fm
dGVyQ2hpbGRyZW46Ci0gICAgICAgIHJldHVybiBsYXN0T2Zmc2V0SW5Ob2RlKG1fYW5jaG9yTm9k
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmxlbmd0aCgpOwogICAgIGNh
c2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgogICAgICAgICByZXR1cm4gbWluT2Zmc2V0Rm9y
Tm9kZShtX2FuY2hvck5vZGUuZ2V0KCksIG1fb2Zmc2V0KTsKICAgICBjYXNlIFBvc2l0aW9uSXNC
ZWZvcmVBbmNob3I6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCmluZGV4IGMyOGU3MDZiMTA1NmY2ZWE1ZTkw
NDlkMDBhNDYyY2QzYTVhMTI3OTkuLjJjMmQ2YTIyNjE2ZjRiMjJiYWQ5MjY3OTExNmRjZWE1Nzk2
NGIwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5v
ZGUuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5p
dHkuaCIKQEAgLTIzNyw4ICsyMzgsNiBAQCBQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJO
b2RlKE5vZGUqKTsKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShOb2RlKiBhbmNob3JOb2Rl
KTsKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUpOwogCi1pbnQg
bGFzdE9mZnNldEluTm9kZShOb2RlKik7Ci0KIC8vIGZpcnN0UG9zaXRpb25Jbk5vZGUgYW5kIGxh
c3RQb3NpdGlvbkluTm9kZSByZXR1cm4gcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucywgbGFzdFBv
c2l0aW9uSW5Ob2RlIGNvbnN0cnVjdGlvbiBpcyBPKG4pIGR1ZSB0byBjb3VudENoaWxkTm9kZXMo
KQogUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBvc2l0
aW9uIGxhc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKQEAgLTMwNiwxMSArMzA1
LDYgQEAgaW5saW5lIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUp
CiAgICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IpOwogfQogCi1pbmxpbmUgaW50IGxhc3RPZmZzZXRJbk5vZGUoTm9kZSogbm9kZSkK
LXsKLSAgICByZXR1cm4gbm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpID8gbm9kZS0+bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKLX0KLQogLy8gZmlyc3RQ
b3NpdGlvbkluTm9kZSBhbmQgbGFzdFBvc2l0aW9uSW5Ob2RlIHJldHVybiBwYXJlbnQtYW5jaG9y
ZWQgcG9zaXRpb25zLCBsYXN0UG9zaXRpb25Jbk5vZGUgY29uc3RydWN0aW9uIGlzIE8obikgZHVl
IHRvIGNvdW50Q2hpbGROb2RlcygpCiBpbmxpbmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9k
ZShOb2RlKiBhbmNob3JOb2RlKQogewpAQCAtMzIyLDMyICszMTYsMjkgQEAgaW5saW5lIFBvc2l0
aW9uIGZpcnN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIGlubGluZSBQb3NpdGlv
biBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIHsKICAgICBpZiAoYW5jaG9y
Tm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwg
bGFzdE9mZnNldEluTm9kZShhbmNob3JOb2RlKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcik7CisgICAgICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCBhbmNob3JOb2Rl
LT5sZW5ndGgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgcmV0
dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bik7CiB9CiAKIGlubGluZSBpbnQgbWluT2Zmc2V0Rm9yTm9kZShOb2RlKiBhbmNob3JOb2RlLCB1
bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihvZmZzZXQsIGFuY2hvck5v
ZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFu
Y2hvck5vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjptaW4ob2Zmc2V0LCBkb3duY2FzdDxDaGFy
YWN0ZXJEYXRhPigqYW5jaG9yTm9kZSkubGVuZ3RoKCkpOwogCiAgICAgdW5zaWduZWQgbmV3T2Zm
c2V0ID0gMDsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlLT5maXJzdENoaWxkKCk7
IG5vZGUgJiYgbmV3T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgbmV3T2Zmc2V0Kys7Ci0gICAgCiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0KIAog
aW5saW5lIGJvb2wgb2Zmc2V0SXNCZWZvcmVMYXN0Tm9kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQs
IE5vZGUqIGFuY2hvck5vZGUpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG9mZnNldCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihh
bmNob3JOb2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgaWYgKGlzPENoYXJhY3RlckRh
dGE+KCphbmNob3JOb2RlKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8IGRvd25jYXN0PENoYXJh
Y3RlckRhdGE+KCphbmNob3JOb2RlKS5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRP
ZmZzZXQgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9IGFuY2hvck5vZGUtPmZpcnN0Q2hpbGQo
KTsgbm9kZSAmJiBjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgY3VycmVudE9mZnNldCsrOwotICAgIAotICAgIAogICAgIHJldHVybiBv
ZmZzZXQgPCBjdXJyZW50T2Zmc2V0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFy
eVBvaW50LmgKaW5kZXggZDhjZWU3N2U1Yzc4NGJjMGU4NjRjYmU2NWE0YTE5MGY1YWY3YzIzNy4u
MTlmYTg0NDJjNDgyNzUzOTRhMTAwN2JkMTRmNmM2Nzg3ZjhjNWRkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtMTQ3LDggKzE0Nyw4IEBAIGlubGluZSB2b2lk
IFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWlu
ZXIpCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKFJlZjxO
b2RlPiYmIGNvbnRhaW5lcikKIHsKICAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRh
aW5lcik7Ci0gICAgaWYgKG1fY29udGFpbmVyTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKSB7
Ci0gICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NvbnRhaW5lck5vZGUtPm1heENoYXJh
Y3Rlck9mZnNldCgpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2Rl
KSkgeworICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4oKm1fY29udGFpbmVyTm9kZSkubGVuZ3RoKCk7CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5k
YXJ5ID0gbV9jb250YWluZXJOb2RlLT5sYXN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAppbmRleCA2ZDVjZWM1NTIx
MjAxNzE4ZjQ4YmJmMDIyOGYzODMzZjE2NDZhYjZhLi4yYzAyNzg2MGFmMmFkMTMzNjFjNDlmNGZk
NWIwZTJiNGQzNTljMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBAIC0xNzUsOCArMTc1LDggQEAgdm9pZCBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHN0YXJ0T2ZTZWwKIHN0YXRpYyBib29sIGlzTmV3TGluZUF0UG9zaXRpb24oY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIE5vZGUqIHRleHROb2RlID0gcG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpOwotICAgIGludCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KTsKLSAgICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+
PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
cG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKCFpczxUZXh0Pih0ZXh0
Tm9kZSkgfHwgb2Zmc2V0ID49IGRvd25jYXN0PFRleHQ+KCp0ZXh0Tm9kZSkubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4oKnRleHROb2Rl
KS5kYXRhKClbb2Zmc2V0XSA9PSAnXG4nOwogfQpAQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rl
c0lmTmVlZGVkKGNvbnN0CiAgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVu
Y2xvc2luZ1RleHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBh
cmFncmFwaE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRP
Zkxhc3RQYXJhZ3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFy
YWdyYXBoLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVu
ZCBvZiBsaW5lIGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAotICAgICAgICBpZiAoZW5k
U3R5bGUtPnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KSkgewotICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOworICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0
ID09IGVuZCAmJiBlbmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewog
ICAgICAgICAgICAgaWYgKCFpc05ld0xpbmVBdFBvc2l0aW9uKGVuZC5wcmV2aW91cygpKSAmJiBp
c05ld0xpbmVBdFBvc2l0aW9uKGVuZCkpCiAgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24o
ZW5kLmNvbnRhaW5lclRleHQoKSwgZW5kT2Zmc2V0ICsgMSk7CiAgICAgICAgICAgICBpZiAoaXNF
bmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSA+PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkK
QEAgLTI0MSw5ICsyNDEsOSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VG
b3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdAogICAgICAgICB9CiAK
ICAgICAgICAgLy8gSWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUgYW5kIHRo
ZSB0ZXh0IG5vZGUgaXMgZWRpdGFibGUsIHNwbGl0LgotICAgICAgICBpZiAoZW5kU3R5bGUtPnVz
ZXJNb2RpZnkoKSAhPSBVc2VyTW9kaWZ5OjpSZWFkT25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNl
V2hpdGVTcGFjZSgpICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAmJiBlbmQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZz
ZXQoKSkgeworICAgICAgICBpZiAoZW5kU3R5bGUtPnVzZXJNb2RpZnkoKSAhPSBVc2VyTW9kaWZ5
OjpSZWFkT25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIGVuZE9mZnNl
dCAmJiBlbmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFRleHQ+IGVuZENvbnRhaW5lciA9IGVuZC5jb250YWluZXJUZXh0KCk7Ci0g
ICAgICAgICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVu
ZE9mZnNldCk7CiAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oZW5kQ29udGFpbmVyKSAmJiAhZW5k
Q29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIHN0YXJ0ID0g
eyB9OwogICAgICAgICAgICAgICAgIGVuZCA9IHsgfTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZv
aWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKGNvbnN0CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2Ft
ZU5vZGUpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXNF
bmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBl
bmRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmRDb250YWluZXItPnByZXZpb3VzU2libGluZygpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFy
YWdyYXBoID0gUG9zaXRpb24oZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFw
aC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24oZW5k
Q29udGFpbmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSAtIGVuZE9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbmQgPSBsYXN0
UG9zaXRpb25Jbk5vZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXgg
MDg0ZWE3MmM4YWQyNTEyOTZiNDM5MmI2YTliYzY3ZjVlYjBkOGE3MS4uNGY0OTk2OTlhZGUxY2Ey
MjRlYzQ3NDNhOTk0YjA5NTRlMDIxZTRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBv
c2l0aW9uJiBzCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1aXZhbGVudCBwb3Np
dGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuCiAgICAgLy8g
ZS5nLiBpZiBwdXNoRG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5o
ZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGlu
c3RlYWQuCiAgICAgYXV0byogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1c2hEb3duU3RhcnQu
Y29udGFpbmVyTm9kZSgpOwotICAgIGlmIChpczxUZXh0PihwdXNoRG93blN0YXJ0Q29udGFpbmVy
KSAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNo
RG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKKyAgICBpZiAoaXM8VGV4
dD4ocHVzaERvd25TdGFydENvbnRhaW5lcikgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHB1c2hE
b3duU3RhcnQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBkb3duY2FzdDxUZXh0
PigqcHVzaERvd25TdGFydENvbnRhaW5lcikubGVuZ3RoKCkpCiAgICAgICAgIHB1c2hEb3duU3Rh
cnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93blN0YXJ0KTsKICAgICAv
LyBJZiBwdXNoRG93bkVuZCBpcyBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhp
cyBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZC4KICAgICAvLyBNb3ZlIGl0IHRvIHRoZSBwcmV2
aW91cyBkZWVwIGVxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxl
IGZyb20gdGhpcyBub2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggYjJmMjg2
YzBiNmVjMWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MS4uZmMyZWZhOTUxZmY1MGE2ZmFkMzY5
NDgzNTk5NmI4NTljZTU3OWZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0z
NzcsMTggKzM3NywxMSBAQCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogLy8gb24gYSBQb3NpdGlvbiBiZWZvcmUgdXNpbmcg
aXQgdG8gY3JlYXRlIGEgRE9NIFJhbmdlLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24u
CiBpbnQgbGFzdE9mZnNldEZvckVkaXRpbmcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
bm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBub2RlLm1heENoYXJh
Y3Rlck9mZnNldCgpOworICAgIGlmIChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSB8fCBub2Rl
Lmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgcmV0dXJuIG5vZGUubGVuZ3RoKCk7CiAKLSAgICBp
ZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBub2RlLmNvdW50Q2hpbGRO
b2RlcygpOwotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgcHJlZW1wdCB0aGUgY291bnRDaGls
ZE5vZGVzKCkgZm9yLCBlLmcuLCBzZWxlY3Qgbm9kZXMuCi0gICAgLy8gRklYTUU6IFdoYXQgZG9l
cyB0aGUgY29tbWVudCBhYm92ZSBtZWFuPwotICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
bm9kZSkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6
IE1pZ2h0IGJlIG1vcmUgaGVscGZ1bCB0byByZXR1cm4gMSBmb3IgYW55IG5vZGUgd2hlcmUgZWRp
dGluZ0lnbm9yZXNDb250ZW50IGlzIHRydWUsIGV2ZW4gb25lIHRoYXQgaGFwcGVucyB0byBoYXZl
IGNoaWxkIG5vZGVzLCBsaWtlIGEgc2VsZWN0IGVsZW1lbnQgd2l0aCBvcHRpb24gbm9kZSBjaGls
ZHJlbi4KKyAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gMSA6IDA7CiB9
CiAKIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggN2ZmMWMzMjU1MWE2YTI4
NTcwOTM2MjA3NTJlNzM0ZDNhOTZiZThlZi4uMGVhODk5MDc3OWMyMzNlODE0NDg3YzcxMGViMzBl
ZTU5MjBiZDU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAt
MTQ5Nyw4ICsxNDk3LDggQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpzdHls
ZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAvLyBlLmcuIGlm
IHBvcyB3YXMgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9k
aXY+PC9iPiwgd2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLiAKICAgICAvLyBX
ZSBvbmx5IGRvIHRoaXMgZm9yIHJhbmdlIGJlY2F1c2UgY2FyZXQgYXQgUG9zaXRpb24oImhlbGxv
IiwgNSkgaW4gPGI+aGVsbG88L2I+d29ybGQgc2hvdWxkIGdpdmUgeW91IGZvbnQtd2VpZ2h0OiBi
b2xkLiAKICAgICBOb2RlKiBwb3NpdGlvbk5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
IAotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHBvc2l0aW9uTm9kZSAmJiBwb3NpdGlv
bk5vZGUtPmlzVGV4dE5vZGUoKSAmJiBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPT0gcG9zaXRpb25Ob2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgCi0gICAgICAgIHBv
c2l0aW9uID0gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocG9zaXRpb24pOyAKKyAgICBp
ZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBpczxUZXh0Pihwb3NpdGlvbk5vZGUpICYmIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
ID09IGRvd25jYXN0PFRleHQ+KCpwb3NpdGlvbk5vZGUpLmxlbmd0aCgpKQorICAgICAgICBwb3Np
dGlvbiA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvc2l0aW9uKTsKIAogICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBwb3NpdGlvbi5lbGVtZW50KCk7CiAgICAgaWYgKCFlbGVtZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAzZWZm
NmY1N2IxMDUxNWQ4OTI1NWRiZDY3OWMwZjEyZmE3MjRhYjljLi5kYTlmOTcxNGNjMDQwZTFjNjMy
Y2UyMGQyYzk4ZTFkMTY0OGNmYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmNwcApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1h
bmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0
IEhUCiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCiAgICAg
ICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDApOwogICAg
ICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAg
ICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIGxhc3RPZmZzZXRJbk5vZGUobmV3
TGlzdC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgq
bmV3TGlzdCwgbmV3TGlzdC0+bGVuZ3RoKCkpOwogCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlzdC5nZXQoKSkp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDE3MmUyNjQ0
YzIyMTQ0OWM1Yzc3NGYxOWU2MDViZTI1OTg1YTE2NWQuLjA2OGJjOThjMmIzZmJkYzE4NTM0MDg1
MmYyYTk1NWI4ODJmZDY1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKQEAgLTExMzQsNyArMTEzNCw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuCiAgICAgaWYg
KCFlbmROb2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpIHsKICAgICAgICAgaWYgKGVuZE9mZnNl
dCA+IDAgJiYgZW5kT2Zmc2V0IDw9IGVuZE5vZGUtPmNvdW50Q2hpbGROb2RlcygpKSB7CiAgICAg
ICAgICAgICBlbmROb2RlID0gZW5kTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQoZW5kT2Zmc2V0IC0g
MSk7Ci0gICAgICAgICAgICBlbmRPZmZzZXQgPSBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpOwor
ICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kTm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAzMjUzYjZm
YjBiYWIwZWEwNDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0Li5kYmZjMjAzMjZiMGY4MWQ2OWJjNzI0
OTc2MjQ2MWY1ZDU1YzA4YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSA6IHBvcywgRE9XTlNUUkVBTSk7CiAKICAgICBhdXRvJiBub2RlID0gaXQuYXRFbmQo
KSA/IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQucmFuZ2UoKS5zdGFydC5jb250
YWluZXIuZ2V0KCk7Ci0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
fHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkp
IHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgaXM8VGV4dD4obm9kZSkgJiYgbmV4dCA8PSBk
b3duY2FzdDxUZXh0Pihub2RlKS5sZW5ndGgoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2Rl
LnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgdmFy
aWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwg
bmV4dCksIERPV05TVFJFQU0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCmluZGV4IDUwMmY3MDI1MjVkYzcxMmY1OWY4MWZlNzUwZTU4MWY5ZmE4MDEzN2Eu
LjJjMDY3ZTIyZDc0ODkwMWJkNzRkYjUwNjA1NzA3OGMxMjI0MDJjZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTk5NiwxNiArMTk5NiwxOCBAQCBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFRydW5jYXRlVGV4dChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSAhPSB0
aGlzICYmIHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvdzo6RWxsaXBzaXM7CiB9
CiAKLUV4Y2VwdGlvbk9yPGludD4gSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uU3RhcnRGb3JC
aW5kaW5ncygpIGNvbnN0CitFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSFRNTElucHV0RWxlbWVudDo6
c2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5ncygpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhUTUwg
c3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgcmV0dXJucyBudWxsLCByYXRoZXIgdGhhbiB0aHJvd2lu
ZyBhbiBleGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIHJldHVybiBzZWxlY3Rpb25TdGFy
dCgpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rp
b25TdGFydEZvckJpbmRpbmdzKGludCBzdGFydCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1
dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0Rm9yQmluZGluZ3ModW5zaWduZWQgc3RhcnQpCiB7
CisgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgdGhyb3dzIGFuIElu
dmFsaWRhdGVTdGF0ZUVycm9yIGV4Y2VwdGlvbi4KICAgICBpZiAoIWNhbkhhdmVTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCkBAIC0yMDEzLDE2
ICsyMDE1LDE4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVj
dGlvblN0YXJ0Rm9yQmluZGluZ3MoaW50IHN0YXJ0KQogICAgIHJldHVybiB7IH07CiB9CiAKLUV4
Y2VwdGlvbk9yPGludD4gSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRW5kRm9yQmluZGluZ3Mo
KSBjb25zdAorRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZEZvckJpbmRpbmdzKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0
aW9uIHNheXMgdGhpcyByZXR1cm5zIG51bGwsIHJhdGhlciB0aGFuIHRocm93aW5nIGFuIGV4Y2Vw
dGlvbi4KICAgICBpZiAoIWNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFR5cGVFcnJvciB9OwogCiAgICAgcmV0dXJuIHNlbGVjdGlvbkVuZCgpOwogfQogCi1F
eGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmRGb3JCaW5k
aW5ncyhpbnQgZW5kKQorRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0U2Vs
ZWN0aW9uRW5kRm9yQmluZGluZ3ModW5zaWduZWQgZW5kKQogeworICAgIC8vIEZJWE1FOiBIVE1M
IHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHRocm93cyBhbiBJbnZhbGlkYXRlU3RhdGVFcnJvciBl
eGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIApAQCAtMjAzMiw2ICsyMDM2LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kRm9yQmluZGluZ3MoaW50
IGVuZCkKIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25E
aXJlY3Rpb25Gb3JCaW5kaW5ncygpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lm
aWNhdGlvbiBzYXlzIHRoaXMgcmV0dXJucyBudWxsLCByYXRoZXIgdGhhbiB0aHJvd2luZyBhbiBl
eGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIApAQCAtMjA0MCw2ICsyMDQ1LDcgQEAgRXhjZXB0aW9u
T3I8U3RyaW5nPiBIVE1MSW5wdXRFbGVtZW50OjpzZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5n
cygpIGNvbnN0CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVj
dGlvbkRpcmVjdGlvbkZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKQogeworICAg
IC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHRocm93cyBhbiBJbnZhbGlk
YXRlU3RhdGVFcnJvciBleGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIApAQCAtMjA0Nyw4ICsyMDUz
LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uRGly
ZWN0aW9uRm9yQmluZGluZ3MoY29uc3QgU3RyaW4KICAgICByZXR1cm4geyB9OwogfQogCi1FeGNl
cHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRp
bmdzKGludCBzdGFydCwgaW50IGVuZCwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24pCitFeGNlcHRp
b25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRpbmdz
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKQog
eworICAgIC8vIEZJWE1FOiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHRocm93cyBhbiBJ
bnZhbGlkYXRlU3RhdGVFcnJvciBleGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9u
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggNzE1N2E3NmZlMzFhYzU1ZGM2NTJl
MjllZDY4NmZiZmRhYmE3MDBiMS4uY2ZhODliNzFhNWU4Njg4NDQwMGQ1ZWQ2OWE1OTIyY2YxODMz
YzVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTMzOCwxNiAr
MzM4LDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkVHJ1bmNhdGVUZXh0KGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3Q7CiAKLSAgICBFeGNlcHRpb25PcjxpbnQ+IHNlbGVjdGlvblN0YXJ0
Rm9yQmluZGluZ3MoKSBjb25zdDsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTZWxlY3Rpb25T
dGFydEZvckJpbmRpbmdzKGludCk7CisgICAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IHNlbGVjdGlv
blN0YXJ0Rm9yQmluZGluZ3MoKSBjb25zdDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTZWxl
Y3Rpb25TdGFydEZvckJpbmRpbmdzKHVuc2lnbmVkKTsKIAotICAgIEV4Y2VwdGlvbk9yPGludD4g
c2VsZWN0aW9uRW5kRm9yQmluZGluZ3MoKSBjb25zdDsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRTZWxlY3Rpb25FbmRGb3JCaW5kaW5ncyhpbnQpOworICAgIEV4Y2VwdGlvbk9yPHVuc2lnbmVk
PiBzZWxlY3Rpb25FbmRGb3JCaW5kaW5ncygpIGNvbnN0OworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHNldFNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKHVuc2lnbmVkKTsKIAogICAgIEV4Y2VwdGlvbk9y
PFN0cmluZz4gc2VsZWN0aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoKSBjb25zdDsKICAgICBFeGNl
cHRpb25Pcjx2b2lkPiBzZXRTZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5ncyhjb25zdCBTdHJp
bmcmKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFNlbGVjdGlvblJhbmdlRm9yQmluZGlu
Z3MoaW50IHN0YXJ0LCBpbnQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbik7CisgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbik7CiAKIHByb3RlY3RlZDoK
ICAgICBIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhU
TUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaWRsCmluZGV4IGY1N2VhODgyZjY5ODE5ZTZiYTgyOTU4YzQ2OWRm
Njg0MTZiYjljMTUuLmFlMjVkYWMyYWZjY2UxZmQyZWM5MTdjNDdiYWVjYzVhYTY1ODljNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbApAQCAtNzcsMTQgKzc3LDEy
IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGVMaXN0IGxhYmVsczsKIAogICAgIHZvaWQg
c2VsZWN0KCk7Ci0gICAgW0ltcGxlbWVudGVkQXM9c2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5nc10g
YXR0cmlidXRlIGxvbmcgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgW0ltcGxlbWVudGVkQXM9c2VsZWN0
aW9uRW5kRm9yQmluZGluZ3NdIGF0dHJpYnV0ZSBsb25nIHNlbGVjdGlvbkVuZDsKKyAgICBbSW1w
bGVtZW50ZWRBcz1zZWxlY3Rpb25TdGFydEZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBzZWxlY3Rpb25TdGFydDsKKyAgICBbSW1wbGVtZW50ZWRBcz1zZWxlY3Rpb25FbmRGb3JC
aW5kaW5nc10gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2VsZWN0aW9uRW5kOwogICAgIFtJbXBs
ZW1lbnRlZEFzPXNlbGVjdGlvbkRpcmVjdGlvbkZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHNlbGVjdGlvbkRpcmVjdGlvbjsKLQogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBz
ZXRSYW5nZVRleHQoRE9NU3RyaW5nIHJlcGxhY2VtZW50KTsKICAgICBbTWF5VGhyb3dFeGNlcHRp
b25dIHZvaWQgc2V0UmFuZ2VUZXh0KERPTVN0cmluZyByZXBsYWNlbWVudCwgdW5zaWduZWQgbG9u
ZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIG9wdGlvbmFsIERPTVN0cmluZyBzZWxlY3Rpb25N
b2RlKTsKLQotICAgIFtJbXBsZW1lbnRlZEFzPXNldFNlbGVjdGlvblJhbmdlRm9yQmluZGluZ3Ms
IE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGxvbmcgc3RhcnQsIGxv
bmcgZW5kLCBvcHRpb25hbCBET01TdHJpbmcgZGlyZWN0aW9uKTsKKyAgICBbSW1wbGVtZW50ZWRB
cz1zZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRpbmdzLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBz
ZXRTZWxlY3Rpb25SYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBsb25nIGVuZCwgb3B0aW9uYWwg
RE9NU3RyaW5nIGRpcmVjdGlvbik7CiAKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBSZWZs
ZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFsaWduOwogICAgIFtDRVJlYWN0aW9ucz1Ob3ROZWVk
ZWQsIFJlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdXNlTWFwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAyOGI0MmRi
MDM1MTQ2NzU2M2RkNzY5NGEzYTcyOWVhZTEyMDQyMjMxLi5jMjcxMGZlZTcwYzUzZDdkMDgxNGIy
N2YxZDkwZmZkNDVmN2Q3Mjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMTgwLDEyICsxODAsMTIgQEAgdm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0Q2FuU2hvd1BsYWNlaG9sZGVyKGJvb2wgY2FuU2hv
d1BsYWNlaG9sZGVyKQogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwogfQogCi12
b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3Rh
cnQpCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydCh1
bnNpZ25lZCBzdGFydCkKIHsKICAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RkOjptYXgo
c3RhcnQsIHNlbGVjdGlvbkVuZCgpKSwgc2VsZWN0aW9uRGlyZWN0aW9uKCkpOwogfQogCi12b2lk
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKK3Zv
aWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZCh1bnNpZ25lZCBl
bmQpCiB7CiAgICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RkOjptaW4oZW5kLCBzZWxlY3Rpb25TdGFy
dCgpKSwgZW5kLCBzZWxlY3Rpb25EaXJlY3Rpb24oKSk7CiB9CkBAIC0yNzgsNyArMjc4LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFJhbmdlVGV4
dChjb25zdCBTdHJpbmcmIHJlcGxhY2UKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBl
bmQsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5n
ZUludGVudCYgaW50ZW50KQordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb25TdHJpbmcsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCiB7
CiAgICAgVGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFNlbGVjdGlvbkhh
c05vRGlyZWN0aW9uOwogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gImZvcndhcmQiKQpAQCAt
Mjg5LDEzICsyODksMTIgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBjb25zdCBTdHIKICAgICByZXR1cm4gc2V0
U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyZWN0aW9uLCBTZWxlY3Rpb25SZXZlYWxNb2Rl
OjpEb05vdFJldmVhbCwgaW50ZW50KTsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBUZXh0RmllbGRTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUs
IGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCit2b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgZW5kLCBUZXh0RmllbGRTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBTZWxlY3Rpb25S
ZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRl
bnQpCiB7CiAgICAgaWYgKCFpc1RleHRGaWVsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBl
bmQgPSBzdGQ6Om1heChlbmQsIDApOwotICAgIHN0YXJ0ID0gc3RkOjptaW4oc3RkOjptYXgoc3Rh
cnQsIDApLCBlbmQpOworICAgIHN0YXJ0ID0gc3RkOjptaW4oc3RhcnQsIGVuZCk7CiAKICAgICBh
dXRvIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKICAgICBib29sIGhhc0ZvY3VzID0g
ZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpID09IHRoaXM7CkBAIC0zNTYsNyArMzU1LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp2aXNpYmxlUG9zaXRp
b25Gb3JJbmRleChpbnQgaW5kZXgpIGMKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKLWludCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAordW5zaWdu
ZWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsK
ICAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzc2LDcgKzM3
NSw3IEBAIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0
YXJ0KCkgY29uc3QKICAgICByZXR1cm4gaW5kZXhGb3JQb3NpdGlvbihmcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9CiAKLWludCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKK3Vuc2lnbmVkIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdAogewogICAgIGlmICghaXNUZXh0RmllbGQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC00MzUsNyArNDM0LDcgQEAgVGV4dEZpZWxkU2VsZWN0aW9u
RGlyZWN0aW9uIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRGly
ZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSA/IChzZWxlY3Rpb24u
aXNCYXNlRmlyc3QoKSA/IFNlbGVjdGlvbkhhc0ZvcndhcmREaXJlY3Rpb24gOiBTZWxlY3Rpb25I
YXNCYWNrd2FyZERpcmVjdGlvbikgOiBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbjsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKE5vZGUqIG5vZGUs
IGludCBvZmZzZXQsIE5vZGUqJiBjb250YWluZXJOb2RlLCBpbnQmIG9mZnNldEluQ29udGFpbmVy
KQorc3RhdGljIGlubGluZSB2b2lkIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgTm9kZSomIGNvbnRhaW5lck5vZGUsIHVuc2lnbmVkJiBv
ZmZzZXRJbkNvbnRhaW5lcikKIHsKICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAg
ICAgIGNvbnRhaW5lck5vZGUgPSBub2RlOwpAQCAtNDUxLDggKzQ1MCw4IEBAIFJlZlB0cjxSYW5n
ZT4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0CiAgICAgaWYg
KCFyZW5kZXJlcigpIHx8ICFpc1RleHRGaWVsZCgpIHx8ICFoYXNDYWNoZWRTZWxlY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpbnQgc3RhcnQgPSBtX2NhY2hlZFNlbGVj
dGlvblN0YXJ0OwotICAgIGludCBlbmQgPSBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyAgICB1bnNp
Z25lZCBzdGFydCA9IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7CisgICAgdW5zaWduZWQgZW5kID0g
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7CiAKICAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKICAgICBh
dXRvIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKQEAgLTQ2MiwxMyArNDYxLDEzIEBA
IFJlZlB0cjxSYW5nZT4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNv
bnN0CiAgICAgaWYgKCFpbm5lclRleHQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgaW5uZXJUZXh0LCAwLCBpbm5lclRleHQsIDApOwogCi0g
ICAgaW50IG9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKICAgICBOb2RlKiBz
dGFydE5vZGUgPSBudWxscHRyOwogICAgIE5vZGUqIGVuZE5vZGUgPSBudWxscHRyOwogICAgIGZv
ciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsIGlubmVyVGV4dC5nZXQoKSkpIHsKICAgICAg
ICAgQVNTRVJUKCFub2RlLT5maXJzdENoaWxkKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aXNU
ZXh0Tm9kZSgpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKTsKLSAgICAgICAgaW50IGxlbmd0
aCA9IG5vZGUtPmlzVGV4dE5vZGUoKSA/IGxhc3RPZmZzZXRJbk5vZGUobm9kZS5nZXQoKSkgOiAx
OworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBpczxUZXh0Pigqbm9kZSkgPyBkb3duY2FzdDxU
ZXh0Pigqbm9kZSkubGVuZ3RoKCkgOiAxOwogCiAgICAgICAgIGlmIChvZmZzZXQgPD0gc3RhcnQg
JiYgc3RhcnQgPD0gb2Zmc2V0ICsgbGVuZ3RoKQogICAgICAgICAgICAgc2V0Q29udGFpbmVyQW5k
T2Zmc2V0Rm9yUmFuZ2Uobm9kZS5nZXQoKSwgc3RhcnQgLSBvZmZzZXQsIHN0YXJ0Tm9kZSwgc3Rh
cnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5oCmluZGV4IDQwNzg5NGY1ZWNjZTZhMTIyOGU3OWJkYjhmM2M5NTc4OWFjMjlmYmUuLjFmZjM3
MWZkNzA1OTY5NGI0YjFjOTZmNDM1YWE4NDdhYjhlOTQyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTY3LDE3ICs2NywxOSBA
QCBwdWJsaWM6CiAKICAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgaW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHNl
bGVjdGlvbkVuZCgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgc2VsZWN0
aW9uU3RhcnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBzZWxlY3Rpb25F
bmQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9tU3RyaW5nJiBzZWxlY3Rp
b25EaXJlY3Rpb24oKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlv
blN0YXJ0KGludCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KHVuc2lnbmVkKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbkVuZCh1bnNpZ25lZCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25EaXJlY3Rpb24oY29uc3QgU3RyaW5nJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3QoU2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNl
bGVjdGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUlu
dGVudCYgPSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFJhbmdlVGV4dChjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dFJhbmdlVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kLCBjb25zdCBTdHJpbmcmIHNlbGVjdGlvbk1vZGUpOwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
Y29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQo
KSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQs
IGludCBlbmQsIFRleHRGaWVsZFNlbGVjdGlvbkRpcmVjdGlvbiA9IFNlbGVjdGlvbkhhc05vRGly
ZWN0aW9uLCBTZWxlY3Rpb25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RS
ZXZlYWwsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiA9IEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50KCkpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIGNvbnN0IEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50JiA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCkpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwg
VGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uID0gU2VsZWN0aW9uSGFzTm9EaXJlY3Rpb24sIFNl
bGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpEb05vdFJldmVhbCwgY29u
c3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSk7
CisKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0OwogICAgIFN0cmluZyBzZWxl
Y3RlZFRleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCmluZGV4IDc0M2MzMmFhZmU2NDEzMjhhMjU4NDFjOGRiZWYxZWNhMjhhNzRlY2IuLmI2
ZmE3ZDRjZDE5OWM1Nzg3ZjkwOTAxZDU1MmI5MTQxNGUzZWY0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTU3NSw5ICs1NzUsOSBAQCB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQmCiAgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gMDsKICAgICBp
ZiAoZWxlbWVudCgpLT5mb2N1c2VkKCkpIHsKICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChlbGVtZW50KCktPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSkgPT0gZWxlbWVudCgpKTsKLSAgICAgICAgaW50IHNlbGVjdGlvblN0
YXJ0ID0gZWxlbWVudCgpLT5zZWxlY3Rpb25TdGFydCgpOworICAgICAgICB1bnNpZ25lZCBzZWxl
Y3Rpb25TdGFydCA9IGVsZW1lbnQoKS0+c2VsZWN0aW9uU3RhcnQoKTsKICAgICAgICAgQVNTRVJU
KHNlbGVjdGlvblN0YXJ0IDw9IGVsZW1lbnQoKS0+c2VsZWN0aW9uRW5kKCkpOwotICAgICAgICBp
bnQgc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA9IGVsZW1lbnQoKS0+c2VsZWN0aW9uRW5kKCkgLSBz
ZWxlY3Rpb25TdGFydDsKKyAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA9
IGVsZW1lbnQoKS0+c2VsZWN0aW9uRW5kKCkgLSBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgc2Vs
ZWN0aW9uTGVuZ3RoID0gc2VsZWN0aW9uQ29kZVVuaXRDb3VudCA/IG51bUdyYXBoZW1lQ2x1c3Rl
cnMoU3RyaW5nVmlldyhpbm5lclRleHQpLnN1YnN0cmluZyhzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uQ29kZVVuaXRDb3VudCkpIDogMDsKICAgICB9CiAgICAgQVNTRVJUKG9sZExlbmd0aCA+PSBz
ZWxlY3Rpb25MZW5ndGgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395982</attachid>
            <date>2020-04-09 11:35:30 -0700</date>
            <delta_ts>2020-04-09 14:08:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210246-20200409113530.patch</filename>
            <type>text/plain</type>
            <size>36739</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5ODEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJkMzJlMjdkNjFjYTEx
OWNkMmM0MDc3MjFkMzdjNWVkNzBkYjUwMi4uYWE4NzUzODAxMjMwYzdhYzRjMWI3ZDQ3Y2ViNTAx
YTE2YTkzODE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAyMC0wNC0wOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE5vZGU6Omxlbmd0aCB0
byByZXBsYWNlIE5vZGU6Om1heENoYXJhY3Rlck9mZnNldCBhbmQgbGFzdE9mZnNldEluTm9kZTsg
c3dpdGNoIG1vcmUgb2Zmc2V0cyBmcm9tIGludCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMjQ2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBUaGUgcmVjZW50bHktYWRkZWQgTm9k
ZTo6bGVuZ3RoLCB3aGljaCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbiB0ZXJtaW5vbG9n
eQorICAgICAgICAgIGZvciBub2RlIG9mZnNldHMgYXMgdXNlZCBpbiByYW5nZXMsIGlzIHRoZSBz
YW1lIGFzIHRoZSBleGlzdGluZyBtYXhDaGFyYWN0ZXJPZmZzZXQKKyAgICAgICAgICBhbmQgbGFz
dE9mZnNldEluTm9kZSBmdW5jdGlvbnMuIERlbGV0ZWQgYWxsIHVzZXMgb2YgdGhvc2UgYW5kIHJl
cGxhY2VkIHRoZW0KKyAgICAgICAgICB3aXRoIGNhbGxzIHRvIE5vZGU6Omxlbmd0aC4gT25lIG9m
IHRoZSBiZW5lZml0cyBvZiB0aGlzIGlzIHRoYXQgTm9kZTo6bGVuZ3RoIGlzCisgICAgICAgICAg
aW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseSBhbmQgaXMgbm90IGEgdmlydHVhbCBmdW5jdGlv
bi4gQW5vdGhlciBpcyBjb25zaXN0ZW50bHkKKyAgICAgICAgICBtYXRjaGluZyB0aGUgRE9NIHNw
ZWNpZmljYXRpb24gdGVybWlub2xvZ3kuCisgICAgICAgIC0gTWFueSBvZmZzZXRzLCBpbmNsdWRp
bmcgdGhlIG9uZXMgaW4gbGl2ZSByYW5nZXMsIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMg
c2lnbmVkCisgICAgICAgICAgaW4gV2ViS2l0LCBidXQgYXJlIHNwZWNpZmllZCBhcyB1bnNpZ25l
ZCBpbiB0aGUgRE9NIGFuZCBIVE1MIHNwZWNpZmljYXRpb25zLiBUaGlzCisgICAgICAgICAgaGFz
IHZlcnkgbGl0dGxlIG9ic2VydmFibGUgZWZmZWN0IGZyb20gSmF2YVNjcmlwdCB0aGF0IGNhbiBh
ZmZlY3Qgd2Vic2l0ZSBjb21wYXRpYmlsaXR5LAorICAgICAgICAgIGJ1dCBpdCdzIHN0aWxsIGhl
bHBmdWwgdG8gYmUgY29uc2lzdGVudCBib3RoIHdpdGggdGhlIHNwZWNpZmljYXRpb24gYW5kIGlu
dGVybmFsbHkuCisgICAgICAgICAgQWNjb3JkaW5nbHksIGNoYW5nZWQgc29tZSBvZiB0aGVzZSB0
byB1bnNpZ25lZDsgbW9yZSB0byBjb21lIGxhdGVyLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBy
ZXZpb3VzQm91bmRhcnkpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFj
dGVyT2Zmc2V0LgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6bWF4Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5oOiBEZWxldGVkIG1heENoYXJhY3Rlck9m
ZnNldCBvdmVycmlkZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1h
cmtlcnMpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFjdGVyT2Zmc2V0
LgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bWF4
Q2hhcmFjdGVyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBE
ZWxldGVkIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9k
ZSBjb25zdCk6IFVzZSBsZW5ndGggaW5zdGVhZAorICAgICAgICBvZiBsYXN0T2Zmc2V0SW5Ob2Rl
LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpsYXN0T2Zm
c2V0SW5Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omxhc3RQb3NpdGlvbkluTm9k
ZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBsYXN0T2Zmc2V0SW5Ob2RlLgorICAgICAgICAoV2Vi
Q29yZTo6bWluT2Zmc2V0Rm9yTm9kZSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBtYXhDaGFyYWN0
ZXJPZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpvZmZzZXRJc0JlZm9yZUxhc3ROb2RlT2Zmc2V0
KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKTogVXNlIGxlbmd0
aCBpbnN0ZWFkIG9mCisgICAgICAgIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
TmV3TGluZUF0UG9zaXRpb24pOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YgbWF4Q2hhcmFjdGVyT2Zm
c2V0LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZv
clBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgRGl0dG8uCisK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IFVzZSBsZW5ndGggaW5z
dGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGFzdE9mZnNldEZvckVkaXRpbmcpOiBV
c2UgbGVuZ3RoIGluc3RlYWQgb2YgbW1heENoYXJhY3Rlck9mZnNldAorICAgICAgICBhbmQgY291
bnRDaGlsZE5vZGVzLiBBbHNvIGltcHJvdmVkIHRoZSBjb21tZW50IGhlcmUuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5
bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydCk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAg
ICBtYXhDaGFyYWN0ZXJPZmZzZXQuCisKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKTogVXNlIGxlbmd0aCBpbnN0ZWFkCisgICAgICAgIG9mIGxhc3RPZmZz
ZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgVVNlIGxlbmd0aCBpbnN0ZWFkIG9mIGxhc3RP
ZmZzZXRJbk5vZGUuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIG1h
eENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6
IEFkZGVkIGNvbW1lbnRzIGFib3V0IGRpZmZlcmVuY2VzIGJldHdlZW4gd2hhdAorICAgICAgICB2
YXJpb3VzIGZ1bmN0aW9ucyBkbyBhbmQgd2hhdCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGNhbGxz
IGZvci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0
YXJ0Rm9yQmluZGluZ3MpOgorICAgICAgICBDb252ZXJ0IG5lZ2F0aXZlIG51bWJlcnMgdG8gMCB0
byBtYXRjaCBoaXN0b3JpYyBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRpbmdzKTogRGl0
dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25T
dGFydCk6IFVzZSB1bnNpZ25lZAorICAgICAgICBpbnN0ZWFkIG9mIGludC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxl
Y3Rpb25SYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uRW5kIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
biBjb25zdCk6IFVzZSBsZW5ndGgKKyAgICAgICAgaW5zdGVhZCBvZiBsYXN0T2Zmc2V0SW5Ob2Rl
LgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaDogVXNlIHVuc2ln
bmVkIGluc3RlYWQgb2YgaW50LgorCisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludC4K
KwogMjAyMC0wNC0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbQXN5bmMgb3ZlcmZsb3cgc2Nyb2xsXSBIb3Jpem9udGFsIHNjcm9sbHMgY2FuIHRy
aWdnZXIgdW53YW50ZWQgYmFjayBzd2lwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGIwMTFkOTM2MTljOGNlNzEyNTQzMjEwMTIyODMy
MWMxYTZiODUwYWUuLjY0OTUyYjM1MzU5ZmVmNzA1ZGQ3MGE0NjA2MWIyMzE1ZTUyMmJlZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAt
MjY2NCw3ICsyNjY0LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3Vz
Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoJm5vZGUg
IT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWRO
b2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVu
ZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5n
KSwgZmFsc2UpOwogCi0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
fHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkp
IHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgbm9kZS5pc1RleHROb2RlKCkgJiYgbmV4dCA8
PSBub2RlLmxlbmd0aCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+
aXNCUigpICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlu
cyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlmIChub2RlLmlzVGV4
dE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5n
ZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZz
ZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IDgwZmQ5ZWIyMjczN2M3ZGIzZDM5NjNhMDJmMDI3
MDkxN2VkYTdiMzcuLmEzMTU4ZmU5YmEyZTE3NmU2YzQxMWIzMmQxNGQyNDJlN2I5M2Y0MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIHNlbGVjdGlvbkJlbG9u
Z3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0
aW9uJgogICAgIC8vIG5vZGUgaXMgYWN0dWFsbHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0
IHBhcnRpYWxseS4KICAgICBhdXRvJiBub2RlID0gKmNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBh
dXRvKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUubGFzdERlc2NlbmRhbnQoKTsKLSAgICB1bnNpZ25l
ZCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCk7CisgICAgdW5z
aWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKICAgICBhdXRvIGlu
dGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CiAgICAgcmV0dXJu
ICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCiAgICAgICAgICYmIGludGVyc2VjdHNS
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cAppbmRleCBkZmYyYmE4ZmQ2MjkwYTY1ZGZmYWRhNzc5YmEwMTkyNjM5OGY0Y2YwLi4xMzEzOWEy
YTYyZDEwYTg0ZTVlNDk5MGFlYWRjNWQ5NWVlNGI2YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCkBAIC0yMzksOSArMjM5LDQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNw
YXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGREYXRhKQogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGRvY3VtZW50KCksICp0aGlzKTsK
IH0KIAotaW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAppbmRleCBlMjMxZDUzNTc3Y2I1
MDg1YWQzOGViZTZlMDMyZjQxZTc5MTVhM2Q1Li5mZTY2MDAzMGE0NjBiNDI1NTNlZGUyMDZlMzU2
ZTI0MTdlNjc0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTYzLDcgKzYz
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAg
IGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KLSAgICBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBz
ZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWRE
YXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBu
b3RpZnlQYXJlbnRBZnRlckNoYW5nZShDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJjZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAK
aW5kZXggNGM1Mjg2MTc4NGE2NTcyY2ZhNWEyNGVmYTA0MWM3ZTVkZmE5Y2E2MS4uODJlYWI4Y2Nl
NjBmNTBkNTc2OTRlYTE4NjcwNTI3YzljNWM2OTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgICAgICAvLyBGSVhNRTogTm8gb2J2aW91cyByZWFzb24g
dGhpcyBzaG91bGQgYmUgaU9TLXNwZWNpZmljLiBSZW1vdmUgdGhlICNpZiBhdCBzb21lIHBvaW50
LgogICAgICAgICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSAr
IGRlbHRhOwogICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgp
ICsgZGVsdGE7Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJh
Y3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odGFyZ2V0U3RhcnRPZmZzZXQpID49IG5vZGUubGVuZ3RoKCkgfHwg
dGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrZXIu
c2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkg
PyB0YXJnZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICAgICAg
ICAgIG1hcmtlci5zZXRFbmRPZmZzZXQoc3RkOjptaW48dW5zaWduZWQ+KHRhcmdldEVuZE9mZnNl
dCwgbm9kZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwog
ICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4YzFiYTdlNmZmODY3Zjk1MTM4
NGZhZWE3MjRjZGJiNzU1NjQ5NDNkLi4yNzNhNTM5ODg4MmJiYjFhYWI0YzFmMWNlYzhiYzgyY2Zi
OGQxNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTAyLDEyICsxMTAyLDYgQEAgY29uc3QgUmVu
ZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNp
ZmllcikKICAgICByZXR1cm4gY29tcG9zZWRQYXJlbnQtPmNvbXB1dGVkU3R5bGUocHNldWRvRWxl
bWVudFNwZWNpZmllcik7CiB9CiAKLWludCBOb2RlOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBG
SVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAg
Q29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNz
CiAvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogYm9vbCBOb2RlOjpjYW5TdGFydFNlbGVjdGlv
bigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA5M2E3MWExNTYyY2E1MDkxYmIwMDBiZmQyMzRmNmIw
NTcyYWJmN2QxLi4xODIyYWY3MzY0NzM5NzY5YjM3MWUxOWMzNTE1ODkzMmRmNzk0ZmU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKQEAgLTM3NywxMCArMzc3LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNJbmNs
dWRpbmdTaGFkb3dET00oY29uc3QgTm9kZSopIGNvbnN0OwogCi0gICAgLy8gTnVtYmVyIG9mIERP
TSAxNi1iaXQgdW5pdHMgY29udGFpbmVkIGluIG5vZGUuIE5vdGUgdGhhdCByZW5kZXJlZCB0ZXh0
IGxlbmd0aCBjYW4gYmUgZGlmZmVyZW50IC0gZS5nLiBiZWNhdXNlIG9mCi0gICAgLy8gY3NzLXRy
YW5zZm9ybTpjYXBpdGFsaXplIGJyZWFraW5nIHVwIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMgYW5k
IGxpZ2F0dXJlcy4KLSAgICB2aXJ0dWFsIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsK
LQogICAgIC8vIFdoZXRoZXIgb3Igbm90IGEgc2VsZWN0aW9uIGNhbiBiZSBzdGFydGVkIGluIHRo
aXMgb2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDc3ZGFhZGU5NDQzNjZlN2ZlNDNhYTNlMGM3OGZi
YTVkNDczMzIwNzEuLmJjZjY5MDQ1NzVlYmRlMjQ0ZDkxNDUxZDk3MTM4NjQ4YjcxMjE4ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIGludCBQb3NpdGlvbjo6
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlvbklz
QmVmb3JlQ2hpbGRyZW46CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgUG9zaXRpb25Jc0Fm
dGVyQ2hpbGRyZW46Ci0gICAgICAgIHJldHVybiBsYXN0T2Zmc2V0SW5Ob2RlKG1fYW5jaG9yTm9k
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmxlbmd0aCgpOwogICAgIGNh
c2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yOgogICAgICAgICByZXR1cm4gbWluT2Zmc2V0Rm9y
Tm9kZShtX2FuY2hvck5vZGUuZ2V0KCksIG1fb2Zmc2V0KTsKICAgICBjYXNlIFBvc2l0aW9uSXNC
ZWZvcmVBbmNob3I6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCmluZGV4IGMyOGU3MDZiMTA1NmY2ZWE1ZTkw
NDlkMDBhNDYyY2QzYTVhMTI3OTkuLjJjMmQ2YTIyNjE2ZjRiMjJiYWQ5MjY3OTExNmRjZWE1Nzk2
NGIwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5v
ZGUuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5p
dHkuaCIKQEAgLTIzNyw4ICsyMzgsNiBAQCBQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJO
b2RlKE5vZGUqKTsKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShOb2RlKiBhbmNob3JOb2Rl
KTsKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUpOwogCi1pbnQg
bGFzdE9mZnNldEluTm9kZShOb2RlKik7Ci0KIC8vIGZpcnN0UG9zaXRpb25Jbk5vZGUgYW5kIGxh
c3RQb3NpdGlvbkluTm9kZSByZXR1cm4gcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucywgbGFzdFBv
c2l0aW9uSW5Ob2RlIGNvbnN0cnVjdGlvbiBpcyBPKG4pIGR1ZSB0byBjb3VudENoaWxkTm9kZXMo
KQogUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBvc2l0
aW9uIGxhc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKQEAgLTMwNiwxMSArMzA1
LDYgQEAgaW5saW5lIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUp
CiAgICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IpOwogfQogCi1pbmxpbmUgaW50IGxhc3RPZmZzZXRJbk5vZGUoTm9kZSogbm9kZSkK
LXsKLSAgICByZXR1cm4gbm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpID8gbm9kZS0+bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKLX0KLQogLy8gZmlyc3RQ
b3NpdGlvbkluTm9kZSBhbmQgbGFzdFBvc2l0aW9uSW5Ob2RlIHJldHVybiBwYXJlbnQtYW5jaG9y
ZWQgcG9zaXRpb25zLCBsYXN0UG9zaXRpb25Jbk5vZGUgY29uc3RydWN0aW9uIGlzIE8obikgZHVl
IHRvIGNvdW50Q2hpbGROb2RlcygpCiBpbmxpbmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9k
ZShOb2RlKiBhbmNob3JOb2RlKQogewpAQCAtMzIyLDMyICszMTYsMjkgQEAgaW5saW5lIFBvc2l0
aW9uIGZpcnN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIGlubGluZSBQb3NpdGlv
biBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIHsKICAgICBpZiAoYW5jaG9y
Tm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwg
bGFzdE9mZnNldEluTm9kZShhbmNob3JOb2RlKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcik7CisgICAgICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCBhbmNob3JOb2Rl
LT5sZW5ndGgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgcmV0
dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bik7CiB9CiAKIGlubGluZSBpbnQgbWluT2Zmc2V0Rm9yTm9kZShOb2RlKiBhbmNob3JOb2RlLCB1
bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihvZmZzZXQsIGFuY2hvck5v
ZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFu
Y2hvck5vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjptaW4ob2Zmc2V0LCBkb3duY2FzdDxDaGFy
YWN0ZXJEYXRhPigqYW5jaG9yTm9kZSkubGVuZ3RoKCkpOwogCiAgICAgdW5zaWduZWQgbmV3T2Zm
c2V0ID0gMDsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlLT5maXJzdENoaWxkKCk7
IG5vZGUgJiYgbmV3T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgbmV3T2Zmc2V0Kys7Ci0gICAgCiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0KIAog
aW5saW5lIGJvb2wgb2Zmc2V0SXNCZWZvcmVMYXN0Tm9kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQs
IE5vZGUqIGFuY2hvck5vZGUpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG9mZnNldCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihh
bmNob3JOb2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgaWYgKGlzPENoYXJhY3RlckRh
dGE+KCphbmNob3JOb2RlKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8IGRvd25jYXN0PENoYXJh
Y3RlckRhdGE+KCphbmNob3JOb2RlKS5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRP
ZmZzZXQgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9IGFuY2hvck5vZGUtPmZpcnN0Q2hpbGQo
KTsgbm9kZSAmJiBjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgY3VycmVudE9mZnNldCsrOwotICAgIAotICAgIAogICAgIHJldHVybiBv
ZmZzZXQgPCBjdXJyZW50T2Zmc2V0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFy
eVBvaW50LmgKaW5kZXggZDhjZWU3N2U1Yzc4NGJjMGU4NjRjYmU2NWE0YTE5MGY1YWY3YzIzNy4u
MTlmYTg0NDJjNDgyNzUzOTRhMTAwN2JkMTRmNmM2Nzg3ZjhjNWRkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtMTQ3LDggKzE0Nyw4IEBAIGlubGluZSB2b2lk
IFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWlu
ZXIpCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKFJlZjxO
b2RlPiYmIGNvbnRhaW5lcikKIHsKICAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRh
aW5lcik7Ci0gICAgaWYgKG1fY29udGFpbmVyTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKSB7
Ci0gICAgICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NvbnRhaW5lck5vZGUtPm1heENoYXJh
Y3Rlck9mZnNldCgpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2Rl
KSkgeworICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4oKm1fY29udGFpbmVyTm9kZSkubGVuZ3RoKCk7CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3Vu
ZGFyeSA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5k
YXJ5ID0gbV9jb250YWluZXJOb2RlLT5sYXN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAppbmRleCA2ZDVjZWM1NTIx
MjAxNzE4ZjQ4YmJmMDIyOGYzODMzZjE2NDZhYjZhLi4yYzAyNzg2MGFmMmFkMTMzNjFjNDlmNGZk
NWIwZTJiNGQzNTljMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBAIC0xNzUsOCArMTc1LDggQEAgdm9pZCBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHN0YXJ0T2ZTZWwKIHN0YXRpYyBib29sIGlzTmV3TGluZUF0UG9zaXRpb24oY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIE5vZGUqIHRleHROb2RlID0gcG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpOwotICAgIGludCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KTsKLSAgICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+
PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
cG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKCFpczxUZXh0Pih0ZXh0
Tm9kZSkgfHwgb2Zmc2V0ID49IGRvd25jYXN0PFRleHQ+KCp0ZXh0Tm9kZSkubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4oKnRleHROb2Rl
KS5kYXRhKClbb2Zmc2V0XSA9PSAnXG4nOwogfQpAQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rl
c0lmTmVlZGVkKGNvbnN0CiAgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVu
Y2xvc2luZ1RleHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBh
cmFncmFwaE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRP
Zkxhc3RQYXJhZ3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFy
YWdyYXBoLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVu
ZCBvZiBsaW5lIGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAotICAgICAgICBpZiAoZW5k
U3R5bGUtPnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KSkgewotICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOworICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0
ID09IGVuZCAmJiBlbmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewog
ICAgICAgICAgICAgaWYgKCFpc05ld0xpbmVBdFBvc2l0aW9uKGVuZC5wcmV2aW91cygpKSAmJiBp
c05ld0xpbmVBdFBvc2l0aW9uKGVuZCkpCiAgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24o
ZW5kLmNvbnRhaW5lclRleHQoKSwgZW5kT2Zmc2V0ICsgMSk7CiAgICAgICAgICAgICBpZiAoaXNF
bmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSA+PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkK
QEAgLTI0MSw5ICsyNDEsOSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VG
b3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdAogICAgICAgICB9CiAK
ICAgICAgICAgLy8gSWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUgYW5kIHRo
ZSB0ZXh0IG5vZGUgaXMgZWRpdGFibGUsIHNwbGl0LgotICAgICAgICBpZiAoZW5kU3R5bGUtPnVz
ZXJNb2RpZnkoKSAhPSBVc2VyTW9kaWZ5OjpSZWFkT25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNl
V2hpdGVTcGFjZSgpICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAmJiBlbmQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZz
ZXQoKSkgeworICAgICAgICBpZiAoZW5kU3R5bGUtPnVzZXJNb2RpZnkoKSAhPSBVc2VyTW9kaWZ5
OjpSZWFkT25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIGVuZE9mZnNl
dCAmJiBlbmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFRleHQ+IGVuZENvbnRhaW5lciA9IGVuZC5jb250YWluZXJUZXh0KCk7Ci0g
ICAgICAgICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVuZC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVu
ZE9mZnNldCk7CiAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oZW5kQ29udGFpbmVyKSAmJiAhZW5k
Q29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIHN0YXJ0ID0g
eyB9OwogICAgICAgICAgICAgICAgIGVuZCA9IHsgfTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZv
aWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKGNvbnN0CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2Ft
ZU5vZGUpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXNF
bmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBl
bmRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmRDb250YWluZXItPnByZXZpb3VzU2libGluZygpKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFy
YWdyYXBoID0gUG9zaXRpb24oZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFw
aC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24oZW5k
Q29udGFpbmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSAtIGVuZE9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbmQgPSBsYXN0
UG9zaXRpb25Jbk5vZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXgg
MDg0ZWE3MmM4YWQyNTEyOTZiNDM5MmI2YTliYzY3ZjVlYjBkOGE3MS4uNGY0OTk2OTlhZGUxY2Ey
MjRlYzQ3NDNhOTk0YjA5NTRlMDIxZTRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBv
c2l0aW9uJiBzCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1aXZhbGVudCBwb3Np
dGlvbiB0byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuCiAgICAgLy8g
ZS5nLiBpZiBwdXNoRG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5o
ZWxsbzxkaXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGlu
c3RlYWQuCiAgICAgYXV0byogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1c2hEb3duU3RhcnQu
Y29udGFpbmVyTm9kZSgpOwotICAgIGlmIChpczxUZXh0PihwdXNoRG93blN0YXJ0Q29udGFpbmVy
KSAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNo
RG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKKyAgICBpZiAoaXM8VGV4
dD4ocHVzaERvd25TdGFydENvbnRhaW5lcikgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHB1c2hE
b3duU3RhcnQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBkb3duY2FzdDxUZXh0
PigqcHVzaERvd25TdGFydENvbnRhaW5lcikubGVuZ3RoKCkpCiAgICAgICAgIHB1c2hEb3duU3Rh
cnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93blN0YXJ0KTsKICAgICAv
LyBJZiBwdXNoRG93bkVuZCBpcyBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhp
cyBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZC4KICAgICAvLyBNb3ZlIGl0IHRvIHRoZSBwcmV2
aW91cyBkZWVwIGVxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxl
IGZyb20gdGhpcyBub2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggYjJmMjg2
YzBiNmVjMWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MS4uZmMyZWZhOTUxZmY1MGE2ZmFkMzY5
NDgzNTk5NmI4NTljZTU3OWZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0z
NzcsMTggKzM3NywxMSBAQCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2so
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogLy8gb24gYSBQb3NpdGlvbiBiZWZvcmUgdXNpbmcg
aXQgdG8gY3JlYXRlIGEgRE9NIFJhbmdlLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24u
CiBpbnQgbGFzdE9mZnNldEZvckVkaXRpbmcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
bm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBub2RlLm1heENoYXJh
Y3Rlck9mZnNldCgpOworICAgIGlmIChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSB8fCBub2Rl
Lmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgcmV0dXJuIG5vZGUubGVuZ3RoKCk7CiAKLSAgICBp
ZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBub2RlLmNvdW50Q2hpbGRO
b2RlcygpOwotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgcHJlZW1wdCB0aGUgY291bnRDaGls
ZE5vZGVzKCkgZm9yLCBlLmcuLCBzZWxlY3Qgbm9kZXMuCi0gICAgLy8gRklYTUU6IFdoYXQgZG9l
cyB0aGUgY29tbWVudCBhYm92ZSBtZWFuPwotICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
bm9kZSkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6
IE1pZ2h0IGJlIG1vcmUgaGVscGZ1bCB0byByZXR1cm4gMSBmb3IgYW55IG5vZGUgd2hlcmUgZWRp
dGluZ0lnbm9yZXNDb250ZW50IGlzIHRydWUsIGV2ZW4gb25lIHRoYXQgaGFwcGVucyB0byBoYXZl
IGNoaWxkIG5vZGVzLCBsaWtlIGEgc2VsZWN0IGVsZW1lbnQgd2l0aCBvcHRpb24gbm9kZSBjaGls
ZHJlbi4KKyAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gMSA6IDA7CiB9
CiAKIGJvb2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggN2ZmMWMzMjU1MWE2YTI4
NTcwOTM2MjA3NTJlNzM0ZDNhOTZiZThlZi4uMGVhODk5MDc3OWMyMzNlODE0NDg3YzcxMGViMzBl
ZTU5MjBiZDU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAt
MTQ5Nyw4ICsxNDk3LDggQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpzdHls
ZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAvLyBlLmcuIGlm
IHBvcyB3YXMgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9k
aXY+PC9iPiwgd2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLiAKICAgICAvLyBX
ZSBvbmx5IGRvIHRoaXMgZm9yIHJhbmdlIGJlY2F1c2UgY2FyZXQgYXQgUG9zaXRpb24oImhlbGxv
IiwgNSkgaW4gPGI+aGVsbG88L2I+d29ybGQgc2hvdWxkIGdpdmUgeW91IGZvbnQtd2VpZ2h0OiBi
b2xkLiAKICAgICBOb2RlKiBwb3NpdGlvbk5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
IAotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHBvc2l0aW9uTm9kZSAmJiBwb3NpdGlv
bk5vZGUtPmlzVGV4dE5vZGUoKSAmJiBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPT0gcG9zaXRpb25Ob2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgCi0gICAgICAgIHBv
c2l0aW9uID0gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocG9zaXRpb24pOyAKKyAgICBp
ZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiBpczxUZXh0Pihwb3NpdGlvbk5vZGUpICYmIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
ID09IGRvd25jYXN0PFRleHQ+KCpwb3NpdGlvbk5vZGUpLmxlbmd0aCgpKQorICAgICAgICBwb3Np
dGlvbiA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvc2l0aW9uKTsKIAogICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBwb3NpdGlvbi5lbGVtZW50KCk7CiAgICAgaWYgKCFlbGVtZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAzZWZm
NmY1N2IxMDUxNWQ4OTI1NWRiZDY3OWMwZjEyZmE3MjRhYjljLi5kYTlmOTcxNGNjMDQwZTFjNjMy
Y2UyMGQyYzk4ZTFkMTY0OGNmYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmNwcApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1h
bmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0
IEhUCiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCiAgICAg
ICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDApOwogICAg
ICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAg
ICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIGxhc3RPZmZzZXRJbk5vZGUobmV3
TGlzdC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgq
bmV3TGlzdCwgbmV3TGlzdC0+bGVuZ3RoKCkpOwogCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlzdC5nZXQoKSkp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDE3MmUyNjQ0
YzIyMTQ0OWM1Yzc3NGYxOWU2MDViZTI1OTg1YTE2NWQuLjA2OGJjOThjMmIzZmJkYzE4NTM0MDg1
MmYyYTk1NWI4ODJmZDY1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKQEAgLTExMzQsNyArMTEzNCw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuCiAgICAgaWYg
KCFlbmROb2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpIHsKICAgICAgICAgaWYgKGVuZE9mZnNl
dCA+IDAgJiYgZW5kT2Zmc2V0IDw9IGVuZE5vZGUtPmNvdW50Q2hpbGROb2RlcygpKSB7CiAgICAg
ICAgICAgICBlbmROb2RlID0gZW5kTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQoZW5kT2Zmc2V0IC0g
MSk7Ci0gICAgICAgICAgICBlbmRPZmZzZXQgPSBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpOwor
ICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kTm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAzMjUzYjZm
YjBiYWIwZWEwNDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0Li5kYmZjMjAzMjZiMGY4MWQ2OWJjNzI0
OTc2MjQ2MWY1ZDU1YzA4YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSA6IHBvcywgRE9XTlNUUkVBTSk7CiAKICAgICBhdXRvJiBub2RlID0gaXQuYXRFbmQo
KSA/IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQucmFuZ2UoKS5zdGFydC5jb250
YWluZXIuZ2V0KCk7Ci0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
fHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkp
IHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgaXM8VGV4dD4obm9kZSkgJiYgbmV4dCA8PSBk
b3duY2FzdDxUZXh0Pihub2RlKS5sZW5ndGgoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2Rl
LnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgdmFy
aWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwg
bmV4dCksIERPV05TVFJFQU0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCmluZGV4IDUwMmY3MDI1MjVkYzcxMmY1OWY4MWZlNzUwZTU4MWY5ZmE4MDEzN2Eu
LmQ0Y2YxZjNiYmMwN2ZlY2I2MmMxOTMzZmQ0OWNmMmExMjM5ODQ0MzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTk5OCw0MCArMTk5OCw0NyBAQCBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFRydW5jYXRlVGV4dChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiAKIEV4Y2VwdGlvbk9yPGludD4gSFRNTElucHV0RWxlbWVudDo6c2VsZWN0
aW9uU3RhcnRGb3JCaW5kaW5ncygpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lm
aWNhdGlvbiBzYXlzIHRoaXMgcmV0dXJucyBudWxsLCByYXRoZXIgdGhhbiB0aHJvd2luZyBhbiBl
eGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIHJldHVybiBzZWxlY3Rpb25TdGFydCgpOwog
fQogCisvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyB0YWtlcyBhbiB1bnNp
Z25lZCB2YWx1ZSwgbm90IGEgc2lnbmVkIHZhbHVlLgogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElu
cHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnRGb3JCaW5kaW5ncyhpbnQgc3RhcnQpCiB7Cisg
ICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgdGhyb3dzIGFuIEludmFs
aWRhdGVTdGF0ZUVycm9yIGV4Y2VwdGlvbi4KICAgICBpZiAoIWNhbkhhdmVTZWxlY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCi0gICAgc2V0U2VsZWN0
aW9uU3RhcnQoc3RhcnQpOworICAgIHNldFNlbGVjdGlvblN0YXJ0KHN0ZDo6bWF4KDAsIHN0YXJ0
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogRXhjZXB0aW9uT3I8aW50PiBIVE1MSW5wdXRFbGVt
ZW50OjpzZWxlY3Rpb25FbmRGb3JCaW5kaW5ncygpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEhU
TUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgcmV0dXJucyBudWxsLCByYXRoZXIgdGhhbiB0aHJv
d2luZyBhbiBleGNlcHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAogICAgIHJldHVybiBzZWxlY3Rpb25F
bmQoKTsKIH0KIAorLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgdGFrZXMg
YW4gdW5zaWduZWQgdmFsdWUsIG5vdCBhIHNpZ25lZCB2YWx1ZS4KIEV4Y2VwdGlvbk9yPHZvaWQ+
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZEZvckJpbmRpbmdzKGludCBlbmQpCiB7
CisgICAgLy8gRklYTUU6IEhUTUwgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgdGhyb3dzIGFuIElu
dmFsaWRhdGVTdGF0ZUVycm9yIGV4Y2VwdGlvbi4KICAgICBpZiAoIWNhbkhhdmVTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCi0gICAgc2V0U2Vs
ZWN0aW9uRW5kKGVuZCk7CisgICAgc2V0U2VsZWN0aW9uRW5kKHN0ZDo6bWF4KDAsIGVuZCkpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gSFRNTElucHV0RWxlbWVu
dDo6c2VsZWN0aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoKSBjb25zdAogeworICAgIC8vIEZJWE1F
OiBIVE1MIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIHJldHVybnMgbnVsbCwgcmF0aGVyIHRoYW4g
dGhyb3dpbmcgYW4gZXhjZXB0aW9uLgogICAgIGlmICghY2FuSGF2ZVNlbGVjdGlvbigpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAgLTIwNDAsNiArMjA0Nyw3
IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSFRNTElucHV0RWxlbWVudDo6c2VsZWN0aW9uRGlyZWN0
aW9uRm9yQmluZGluZ3MoKSBjb25zdAogCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRTZWxlY3Rpb25EaXJlY3Rpb25Gb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIGRpcmVj
dGlvbikKIHsKKyAgICAvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyB0aHJv
d3MgYW4gSW52YWxpZGF0ZVN0YXRlRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmICghY2FuSGF2ZVNl
bGVjdGlvbigpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAg
LTIwNDcsMTIgKzIwNTUsMTQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uRGlyZWN0aW9uRm9yQmluZGluZ3MoY29uc3QgU3RyaW4KICAgICByZXR1cm4g
eyB9OwogfQogCisvLyBGSVhNRTogSFRNTCBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyB0YWtlcyB1
bnNpZ25lZCB2YWx1ZXMsIG5vdCBzaWduZWQgdmFsdWVzLgogRXhjZXB0aW9uT3I8dm9pZD4gSFRN
TElucHV0RWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2VGb3JCaW5kaW5ncyhpbnQgc3RhcnQsIGlu
dCBlbmQsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKQogeworICAgIC8vIEZJWE1FOiBIVE1MIHNw
ZWNpZmljYXRpb24gc2F5cyB0aGlzIHRocm93cyBhbiBJbnZhbGlkYXRlU3RhdGVFcnJvciBleGNl
cHRpb24uCiAgICAgaWYgKCFjYW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKICAgICAKLSAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwg
ZW5kLCBkaXJlY3Rpb24pOworICAgIHNldFNlbGVjdGlvblJhbmdlKHN0ZDo6bWF4KDAsIHN0YXJ0
KSwgc3RkOjptYXgoMCwgZW5kKSwgZGlyZWN0aW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CmluZGV4IDI4YjQyZGIwMzUxNDY3NTYzZGQ3Njk0YTNhNzI5ZWFlMTIwNDIyMzEuLmMyNzEwZmVl
NzBjNTNkN2QwODE0YjI3ZjFkOTBmZmQ0NWY3ZDcyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0xODAsMTIgKzE4MCwx
MiBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDYW5TaG93UGxhY2Vob2xk
ZXIoYm9vbCBjYW5TaG93UGxhY2Vob2xkZXIpCiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmls
aXR5KCk7CiB9CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlv
blN0YXJ0KGludCBzdGFydCkKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNl
bGVjdGlvblN0YXJ0KHVuc2lnbmVkIHN0YXJ0KQogewogICAgIHNldFNlbGVjdGlvblJhbmdlKHN0
YXJ0LCBzdGQ6Om1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpLCBzZWxlY3Rpb25EaXJlY3Rpb24o
KSk7CiB9CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVu
ZChpbnQgZW5kKQordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9u
RW5kKHVuc2lnbmVkIGVuZCkKIHsKICAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGQ6Om1pbihlbmQs
IHNlbGVjdGlvblN0YXJ0KCkpLCBlbmQsIHNlbGVjdGlvbkRpcmVjdGlvbigpKTsKIH0KQEAgLTI3
OCw3ICsyNzgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2V0UmFuZ2VUZXh0KGNvbnN0IFN0cmluZyYgcmVwbGFjZQogICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKGlu
dCBzdGFydCwgaW50IGVuZCwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQmIGludGVudCkKIHsKICAgICBUZXh0RmllbGRTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
ID0gU2VsZWN0aW9uSGFzTm9EaXJlY3Rpb247CiAgICAgaWYgKGRpcmVjdGlvblN0cmluZyA9PSAi
Zm9yd2FyZCIpCkBAIC0yODksMTMgKzI4OSwxMiBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGNvbnN0IFN0cgog
ICAgIHJldHVybiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXJlY3Rpb24sIFNlbGVj
dGlvblJldmVhbE1vZGU6OkRvTm90UmV2ZWFsLCBpbnRlbnQpOwogfQogCi12b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQs
IFRleHRGaWVsZFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFNlbGVjdGlvblJldmVhbE1v
ZGUgcmV2ZWFsTW9kZSwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCkKK3Zv
aWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFRleHRGaWVsZFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQmIGludGVudCkKIHsKICAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGVuZCA9IHN0ZDo6bWF4KGVuZCwgMCk7Ci0gICAgc3RhcnQgPSBzdGQ6Om1p
bihzdGQ6Om1heChzdGFydCwgMCksIGVuZCk7CisgICAgc3RhcnQgPSBzdGQ6Om1pbihzdGFydCwg
ZW5kKTsKIAogICAgIGF1dG8gaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwogICAgIGJv
b2wgaGFzRm9jdXMgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkgPT0gdGhpczsKQEAgLTM1
Niw3ICszNTUsNyBAQCBWaXNpYmxlUG9zaXRpb24gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgYwogICAgIHJldHVybiBwb3NpdGlv
bjsKIH0KIAotaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgp
IGNvbnN0Cit1bnNpZ25lZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3Rh
cnQoKSBjb25zdAogewogICAgIGlmICghaXNUZXh0RmllbGQoKSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0zNzYsNyArMzc1LDcgQEAgaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21w
dXRlU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAgIHJldHVybiBpbmRleEZvclBvc2l0aW9uKGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAotaW50IEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdAordW5zaWduZWQgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFp
c1RleHRGaWVsZCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQzNSw3ICs0MzQsNyBAQCBUZXh0
RmllbGRTZWxlY3Rpb25EaXJlY3Rpb24gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmNvbXB1
dGVTZWxlY3Rpb25EaXJlY3RpbwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgp
ID8gKHNlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gU2VsZWN0aW9uSGFzRm9yd2FyZERpcmVjdGlv
biA6IFNlbGVjdGlvbkhhc0JhY2t3YXJkRGlyZWN0aW9uKSA6IFNlbGVjdGlvbkhhc05vRGlyZWN0
aW9uOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0Rm9yUmFu
Z2UoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgTm9kZSomIGNvbnRhaW5lck5vZGUsIGludCYgb2Zm
c2V0SW5Db250YWluZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0Q29udGFpbmVyQW5kT2Zmc2V0
Rm9yUmFuZ2UoTm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlKiYgY29udGFpbmVyTm9k
ZSwgdW5zaWduZWQmIG9mZnNldEluQ29udGFpbmVyKQogewogICAgIGlmIChub2RlLT5pc1RleHRO
b2RlKCkpIHsKICAgICAgICAgY29udGFpbmVyTm9kZSA9IG5vZGU7CkBAIC00NTEsOCArNDUwLDgg
QEAgUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkg
Y29uc3QKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZpZWxkKCkgfHwgIWhhc0NhY2hl
ZFNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGludCBzdGFydCA9
IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7Ci0gICAgaW50IGVuZCA9IG1fY2FjaGVkU2VsZWN0aW9u
RW5kOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKKyAgICB1
bnNpZ25lZCBlbmQgPSBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKIAogICAgIEFTU0VSVChzdGFydCA8
PSBlbmQpOwogICAgIGF1dG8gaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwpAQCAtNDYy
LDEzICs0NjEsMTMgQEAgUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0aW9uKCkgY29uc3QKICAgICBpZiAoIWlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpKQogICAg
ICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lclRleHQsIDAsIGlubmVy
VGV4dCwgMCk7CiAKLSAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAw
OwogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG51bGxwdHI7CiAgICAgTm9kZSogZW5kTm9kZSA9IG51
bGxwdHI7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgaW5uZXJUZXh0Lmdl
dCgpKSkgewogICAgICAgICBBU1NFUlQoIW5vZGUtPmZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIEFT
U0VSVChub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+aGFzVGFnTmFtZShiclRhZykpOwotICAg
ICAgICBpbnQgbGVuZ3RoID0gbm9kZS0+aXNUZXh0Tm9kZSgpID8gbGFzdE9mZnNldEluTm9kZShu
b2RlLmdldCgpKSA6IDE7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlzPFRleHQ+KCpub2Rl
KSA/IGRvd25jYXN0PFRleHQ+KCpub2RlKS5sZW5ndGgoKSA6IDE7CiAKICAgICAgICAgaWYgKG9m
ZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZzZXQgKyBsZW5ndGgpCiAgICAgICAgICAgICBz
ZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShub2RlLmdldCgpLCBzdGFydCAtIG9mZnNldCwg
c3RhcnROb2RlLCBzdGFydCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmgKaW5kZXggNDA3ODk0ZjVlY2NlNmExMjI4ZTc5YmRiOGYzYzk1Nzg5
YWMyOWZiZS4uMWZmMzcxZmQ3MDU5Njk0YjRiMWM5NmY0MzVhYTg0N2FiOGU5NDJmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAt
NjcsMTcgKzY3LDE5IEBAIHB1YmxpYzoKIAogICAgIGludCBpbmRleEZvclZpc2libGVQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgc2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgc2VsZWN0aW9uRW5kKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2ln
bmVkIHNlbGVjdGlvbkVuZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21T
dHJpbmcmIHNlbGVjdGlvbkRpcmVjdGlvbigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNl
bGVjdGlvbkVuZChpbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0aW9uU3Rh
cnQodW5zaWduZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0aW9uRW5kKHVu
c2lnbmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbkRpcmVjdGlvbihj
b25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdChTZWxlY3Rpb25S
ZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6RG9Ob3RSZXZlYWwsIGNvbnN0IEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50JiA9IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50KCkpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgRXhjZXB0aW9uT3I8dm9pZD4gc2V0UmFuZ2VUZXh0KGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0UmFuZ2VUZXh0KGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IFN0cmluZyYgc2VsZWN0aW9uTW9kZSk7Ci0g
ICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgPSBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCgpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvblJh
bmdlKGludCBzdGFydCwgaW50IGVuZCwgVGV4dEZpZWxkU2VsZWN0aW9uRGlyZWN0aW9uID0gU2Vs
ZWN0aW9uSGFzTm9EaXJlY3Rpb24sIFNlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZl
YWxNb2RlOjpEb05vdFJldmVhbCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmID0gQVhU
ZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZSh1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgY29uc3Qg
QVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZSh1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCBUZXh0RmllbGRTZWxlY3Rpb25EaXJlY3Rpb24gPSBTZWxlY3Rpb25IYXNO
b0RpcmVjdGlvbiwgU2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OkRv
Tm90UmV2ZWFsLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgPSBBWFRleHRTdGF0ZUNo
YW5nZUludGVudCgpKTsKKwogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uKCkgY29uc3Q7CiAg
ICAgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggNzQzYzMyYWFmZTY0MTMyOGEyNTg0MWM4ZGJlZjFl
Y2EyOGE3NGVjYi4uYjZmYTdkNGNkMTk5YzU3ODdmOTA5MDFkNTUyYjkxNDE0ZTNlZjQ1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNTc1LDkgKzU3
NSw5IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5n
dGggPSAwOwogICAgIGlmIChlbGVtZW50KCktPmZvY3VzZWQoKSkgewogICAgICAgICBBU1NFUlQo
ZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSA9PSBlbGVtZW50KCkpOwotICAgICAgICBp
bnQgc2VsZWN0aW9uU3RhcnQgPSBlbGVtZW50KCktPnNlbGVjdGlvblN0YXJ0KCk7CisgICAgICAg
IHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gZWxlbWVudCgpLT5zZWxlY3Rpb25TdGFydCgpOwog
ICAgICAgICBBU1NFUlQoc2VsZWN0aW9uU3RhcnQgPD0gZWxlbWVudCgpLT5zZWxlY3Rpb25FbmQo
KSk7Ci0gICAgICAgIGludCBzZWxlY3Rpb25Db2RlVW5pdENvdW50ID0gZWxlbWVudCgpLT5zZWxl
Y3Rpb25FbmQoKSAtIHNlbGVjdGlvblN0YXJ0OworICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25D
b2RlVW5pdENvdW50ID0gZWxlbWVudCgpLT5zZWxlY3Rpb25FbmQoKSAtIHNlbGVjdGlvblN0YXJ0
OwogICAgICAgICBzZWxlY3Rpb25MZW5ndGggPSBzZWxlY3Rpb25Db2RlVW5pdENvdW50ID8gbnVt
R3JhcGhlbWVDbHVzdGVycyhTdHJpbmdWaWV3KGlubmVyVGV4dCkuc3Vic3RyaW5nKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25Db2RlVW5pdENvdW50KSkgOiAwOwogICAgIH0KICAgICBBU1NFUlQo
b2xkTGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396008</attachid>
            <date>2020-04-09 14:08:43 -0700</date>
            <delta_ts>2020-04-10 17:14:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210246-20200409140843.patch</filename>
            <type>text/plain</type>
            <size>25287</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5ODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhYjVmNDRhOTFmM2M3
NDk4NThiNmZlOWYwYWNjNGQ2MTU5NTg4ZC4uMzAxMjEyZTg4MWU4ZmFmODg2YzFlOTU3YjlkY2Vm
OGVjOWIxMzYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTm9kZTo6bGVuZ3RoIHRv
IHJlcGxhY2UgTm9kZTo6bWF4Q2hhcmFjdGVyT2Zmc2V0IGFuZCBsYXN0T2Zmc2V0SW5Ob2RlOyBz
d2l0Y2ggbW9yZSBvZmZzZXRzIGZyb20gaW50IHRvIHVuc2lnbmVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAyNDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFRoZSByZWNlbnRseS1hZGRlZCBOb2Rl
OjpsZW5ndGgsIHdoaWNoIG1hdGNoZXMgdGhlIERPTSBzcGVjaWZpY2F0aW9uIHRlcm1pbm9sb2d5
CisgICAgICAgICAgZm9yIG5vZGUgb2Zmc2V0cyBhcyB1c2VkIGluIHJhbmdlcywgaXMgdGhlIHNh
bWUgYXMgdGhlIGV4aXN0aW5nIG1heENoYXJhY3Rlck9mZnNldAorICAgICAgICAgIGFuZCBsYXN0
T2Zmc2V0SW5Ob2RlIGZ1bmN0aW9ucy4gRGVsZXRlZCBhbGwgdXNlcyBvZiB0aG9zZSBhbmQgcmVw
bGFjZWQgdGhlbQorICAgICAgICAgIHdpdGggY2FsbHMgdG8gTm9kZTo6bGVuZ3RoLiBPbmUgb2Yg
dGhlIGJlbmVmaXRzIG9mIHRoaXMgaXMgdGhhdCBOb2RlOjpsZW5ndGggaXMKKyAgICAgICAgICBp
bXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5IGFuZCBpcyBub3QgYSB2aXJ0dWFsIGZ1bmN0aW9u
LiBBbm90aGVyIGlzIGNvbnNpc3RlbnRseQorICAgICAgICAgIG1hdGNoaW5nIHRoZSBET00gc3Bl
Y2lmaWNhdGlvbiB0ZXJtaW5vbG9neS4KKyAgICAgICAgLSBNYW55IG9mZnNldHMsIGluY2x1ZGlu
ZyB0aGUgb25lcyBpbiBsaXZlIHJhbmdlcywgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBz
aWduZWQKKyAgICAgICAgICBpbiBXZWJLaXQsIGJ1dCBhcmUgc3BlY2lmaWVkIGFzIHVuc2lnbmVk
IGluIHRoZSBET00gYW5kIEhUTUwgc3BlY2lmaWNhdGlvbnMuIFRoaXMKKyAgICAgICAgICBoYXMg
dmVyeSBsaXR0bGUgb2JzZXJ2YWJsZSBlZmZlY3QgZnJvbSBKYXZhU2NyaXB0IHRoYXQgY2FuIGFm
ZmVjdCB3ZWJzaXRlIGNvbXBhdGliaWxpdHksCisgICAgICAgICAgYnV0IGl0J3Mgc3RpbGwgaGVs
cGZ1bCB0byBiZSBjb25zaXN0ZW50IGJvdGggd2l0aCB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgaW50
ZXJuYWxseS4KKyAgICAgICAgICBBY2NvcmRpbmdseSwgY2hhbmdlZCBzb21lIG9mIHRoZXNlIHRv
IHVuc2lnbmVkOyBtb3JlIHRvIGNvbWUgbGF0ZXIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cHJl
dmlvdXNCb3VuZGFyeSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0
ZXJPZmZzZXQuCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjptYXhDaGFyYWN0ZXJPZmZzZXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6IERlbGV0ZWQgbWF4Q2hhcmFjdGVyT2Zm
c2V0IG92ZXJyaWRlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFy
a2Vycyk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0ZXJPZmZzZXQu
CisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptYXhD
aGFyYWN0ZXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IERl
bGV0ZWQgbWF4Q2hhcmFjdGVyT2Zmc2V0LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2Rl
IGNvbnN0KTogVXNlIGxlbmd0aCBpbnN0ZWFkCisgICAgICAgIG9mIGxhc3RPZmZzZXRJbk5vZGUu
CisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RPZmZz
ZXRJbk5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGFzdFBvc2l0aW9uSW5Ob2Rl
KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIGxhc3RPZmZzZXRJbk5vZGUuCisgICAgICAgIChXZWJD
b3JlOjptaW5PZmZzZXRGb3JOb2RlKTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIG1heENoYXJhY3Rl
ck9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6Om9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQp
OiBEaXR0by4KKworICAgICAgICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUpOiBVc2UgbGVuZ3Ro
IGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFjdGVyT2Zmc2V0LgorCisgICAgICAgICogZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNO
ZXdMaW5lQXRQb3NpdGlvbik6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBtYXhDaGFyYWN0ZXJPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9y
UGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgorICAgICAgICBEaXR0by4KKwor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogVXNlIGxlbmd0aCBpbnN0
ZWFkIG9mCisgICAgICAgIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVkaXRpbmcv
RWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYXN0T2Zmc2V0Rm9yRWRpdGluZyk6IFVz
ZSBsZW5ndGggaW5zdGVhZCBvZiBtbWF4Q2hhcmFjdGVyT2Zmc2V0CisgICAgICAgIGFuZCBjb3Vu
dENoaWxkTm9kZXMuIEFsc28gaW1wcm92ZWQgdGhlIGNvbW1lbnQgaGVyZS4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mCisgICAgICAg
IG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOiBVc2UgbGVuZ3RoIGluc3RlYWQKKyAgICAgICAgb2YgbGFzdE9mZnNl
dEluTm9kZS4KKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICBVU2UgbGVuZ3RoIGluc3RlYWQgb2YgbGFzdE9m
ZnNldEluTm9kZS4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YgbWF4
Q2hhcmFjdGVyT2Zmc2V0LgorCiAyMDIwLTA0LTA5ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFw
cGxlLmNvbT4KIAogICAgICAgICBTZXQgRU5USVRMRU1FTlRTX1JFUVVJUkVEPU5PIGZvciBzb21l
IFhjb2RlIGJ1aWxkIHRhcmdldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCmluZGV4IGIwMTFkOTM2MTljOGNlNzEyNTQzMjEwMTIyODMyMWMxYTZi
ODUwYWUuLjY0OTUyYjM1MzU5ZmVmNzA1ZGQ3MGE0NjA2MWIyMzE1ZTUyMmJlZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMjY2NCw3
ICsyNjY0LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRh
cnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoJm5vZGUgIT0gY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVl
ZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFs
c2UpOwogCi0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgpICYmIHN0
YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwgKG5v
ZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKKyAg
ICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgbm9kZS5pc1RleHROb2RlKCkgJiYgbmV4dCA8PSBub2Rl
Lmxlbmd0aCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+aXNCUigp
ICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVz
YWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUo
KSkKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5v
ZGVDb250ZW50cygmbm9kZSksIG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuY3BwCmluZGV4IDgwZmQ5ZWIyMjczN2M3ZGIzZDM5NjNhMDJmMDI3MDkxN2Vk
YTdiMzcuLmEzMTU4ZmU5YmEyZTE3NmU2YzQxMWIzMmQxNGQyNDJlN2I5M2Y0MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGls
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09i
amVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJgog
ICAgIC8vIG5vZGUgaXMgYWN0dWFsbHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0IHBhcnRp
YWxseS4KICAgICBhdXRvJiBub2RlID0gKmNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBhdXRvKiBs
YXN0RGVzY2VuZGFudCA9IG5vZGUubGFzdERlc2NlbmRhbnQoKTsKLSAgICB1bnNpZ25lZCBsYXN0
T2Zmc2V0ID0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2VuZGFudCk7CisgICAgdW5zaWduZWQg
bGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKICAgICBhdXRvIGludGVyc2Vj
dHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CiAgICAgcmV0dXJuICFpbnRl
cnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCiAgICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAppbmRl
eCBkZmYyYmE4ZmQ2MjkwYTY1ZGZmYWRhNzc5YmEwMTkyNjM5OGY0Y2YwLi4xMzEzOWEyYTYyZDEw
YTg0ZTVlNDk5MGFlYWRjNWQ5NWVlNGI2YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuY3BwCkBAIC0yMzksOSArMjM5LDQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1v
ZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGREYXRhKQogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGRvY3VtZW50KCksICp0aGlzKTsKIH0KIAot
aW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAppbmRleCBlMjMxZDUzNTc3Y2I1MDg1YWQz
OGViZTZlMDMyZjQxZTc5MTVhM2Q1Li5mZTY2MDAzMGE0NjBiNDI1NTNlZGUyMDZlMzU2ZTI0MTdl
Njc0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTYzLDcgKzYzLDYgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbm9kZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIGJvb2wg
dmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXREYXRh
QW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1
bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBub3RpZnlQ
YXJlbnRBZnRlckNoYW5nZShDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJjZSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXgg
NGM1Mjg2MTc4NGE2NTcyY2ZhNWEyNGVmYTA0MWM3ZTVkZmE5Y2E2MS4uODJlYWI4Y2NlNjBmNTBk
NTc2OTRlYTE4NjcwNTI3YzljNWM2OTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbgogICAgICAgICAvLyBGSVhNRTogTm8gb2J2aW91cyByZWFzb24gdGhpcyBz
aG91bGQgYmUgaU9TLXNwZWNpZmljLiBSZW1vdmUgdGhlICNpZiBhdCBzb21lIHBvaW50LgogICAg
ICAgICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRh
OwogICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgpICsgZGVs
dGE7Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJhY3Rlck9m
ZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odGFyZ2V0U3RhcnRPZmZzZXQpID49IG5vZGUubGVuZ3RoKCkgfHwgdGFyZ2V0
RW5kT2Zmc2V0IDw9IDApIHsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgaW4KICAgICAgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrZXIuc2V0RW5k
T2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJn
ZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICAgICAgICAgIG1h
cmtlci5zZXRFbmRPZmZzZXQoc3RkOjptaW48dW5zaWduZWQ+KHRhcmdldEVuZE9mZnNldCwgbm9k
ZS5sZW5ndGgoKSkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4YzFiYTdlNmZmODY3Zjk1MTM4NGZhZWE3
MjRjZGJiNzU1NjQ5NDNkLi4yNzNhNTM5ODg4MmJiYjFhYWI0YzFmMWNlYzhiYzgyY2ZiOGQxNTVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTAyLDEyICsxMTAyLDYgQEAgY29uc3QgUmVuZGVyU3R5
bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikK
ICAgICByZXR1cm4gY29tcG9zZWRQYXJlbnQtPmNvbXB1dGVkU3R5bGUocHNldWRvRWxlbWVudFNw
ZWNpZmllcik7CiB9CiAKLWludCBOb2RlOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdAotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBGSVhNRTog
U2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAgQ29kZSB0
aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNzCiAvLyBp
cyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogYm9vbCBOb2RlOjpjYW5TdGFydFNlbGVjdGlvbigpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAppbmRleCA5M2E3MWExNTYyY2E1MDkxYmIwMDBiZmQyMzRmNmIwNTcyYWJm
N2QxLi4xODIyYWY3MzY0NzM5NzY5YjM3MWUxOWMzNTE1ODkzMmRmNzk0ZmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKQEAgLTM3NywxMCArMzc3LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Y29udGFpbnMoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNJbmNsdWRpbmdT
aGFkb3dET00oY29uc3QgTm9kZSopIGNvbnN0OwogCi0gICAgLy8gTnVtYmVyIG9mIERPTSAxNi1i
aXQgdW5pdHMgY29udGFpbmVkIGluIG5vZGUuIE5vdGUgdGhhdCByZW5kZXJlZCB0ZXh0IGxlbmd0
aCBjYW4gYmUgZGlmZmVyZW50IC0gZS5nLiBiZWNhdXNlIG9mCi0gICAgLy8gY3NzLXRyYW5zZm9y
bTpjYXBpdGFsaXplIGJyZWFraW5nIHVwIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMgYW5kIGxpZ2F0
dXJlcy4KLSAgICB2aXJ0dWFsIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsKLQogICAg
IC8vIFdoZXRoZXIgb3Igbm90IGEgc2VsZWN0aW9uIGNhbiBiZSBzdGFydGVkIGluIHRoaXMgb2Jq
ZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUG9zaXRpb24uY3BwCmluZGV4IDc3ZGFhZGU5NDQzNjZlN2ZlNDNhYTNlMGM3OGZiYTVkNDcz
MzIwNzEuLmJjZjY5MDQ1NzVlYmRlMjQ0ZDkxNDUxZDk3MTM4NjQ4YjcxMjE4ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIGludCBQb3NpdGlvbjo6Y29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3Jl
Q2hpbGRyZW46CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hp
bGRyZW46Ci0gICAgICAgIHJldHVybiBsYXN0T2Zmc2V0SW5Ob2RlKG1fYW5jaG9yTm9kZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmxlbmd0aCgpOwogICAgIGNhc2UgUG9z
aXRpb25Jc09mZnNldEluQW5jaG9yOgogICAgICAgICByZXR1cm4gbWluT2Zmc2V0Rm9yTm9kZSht
X2FuY2hvck5vZGUuZ2V0KCksIG1fb2Zmc2V0KTsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVB
bmNob3I6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCmluZGV4IGMyOGU3MDZiMTA1NmY2ZWE1ZTkwNDlkMDBh
NDYyY2QzYTVhMTI3OTkuLjJjMmQ2YTIyNjE2ZjRiMjJiYWQ5MjY3OTExNmRjZWE1Nzk2NGIwZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIK
ICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIK
QEAgLTIzNyw4ICsyMzgsNiBAQCBQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKE5v
ZGUqKTsKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBv
c2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUpOwogCi1pbnQgbGFzdE9m
ZnNldEluTm9kZShOb2RlKik7Ci0KIC8vIGZpcnN0UG9zaXRpb25Jbk5vZGUgYW5kIGxhc3RQb3Np
dGlvbkluTm9kZSByZXR1cm4gcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9ucywgbGFzdFBvc2l0aW9u
SW5Ob2RlIGNvbnN0cnVjdGlvbiBpcyBPKG4pIGR1ZSB0byBjb3VudENoaWxkTm9kZXMoKQogUG9z
aXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBvc2l0aW9uIGxh
c3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKQEAgLTMwNiwxMSArMzA1LDYgQEAg
aW5saW5lIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUpCiAgICAg
cmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNo
b3IpOwogfQogCi1pbmxpbmUgaW50IGxhc3RPZmZzZXRJbk5vZGUoTm9kZSogbm9kZSkKLXsKLSAg
ICByZXR1cm4gbm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpID8gbm9kZS0+bWF4Q2hhcmFjdGVy
T2Zmc2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKLX0KLQogLy8gZmlyc3RQb3NpdGlv
bkluTm9kZSBhbmQgbGFzdFBvc2l0aW9uSW5Ob2RlIHJldHVybiBwYXJlbnQtYW5jaG9yZWQgcG9z
aXRpb25zLCBsYXN0UG9zaXRpb25Jbk5vZGUgY29uc3RydWN0aW9uIGlzIE8obikgZHVlIHRvIGNv
dW50Q2hpbGROb2RlcygpCiBpbmxpbmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2Rl
KiBhbmNob3JOb2RlKQogewpAQCAtMzIyLDMyICszMTYsMjkgQEAgaW5saW5lIFBvc2l0aW9uIGZp
cnN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIGlubGluZSBQb3NpdGlvbiBsYXN0
UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKIHsKICAgICBpZiAoYW5jaG9yTm9kZS0+
aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwgbGFzdE9m
ZnNldEluTm9kZShhbmNob3JOb2RlKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CisgICAgICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCBhbmNob3JOb2RlLT5sZW5n
dGgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgcmV0dXJuIFBv
c2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbik7CiB9
CiAKIGlubGluZSBpbnQgbWluT2Zmc2V0Rm9yTm9kZShOb2RlKiBhbmNob3JOb2RlLCB1bnNpZ25l
ZCBvZmZzZXQpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihvZmZzZXQsIGFuY2hvck5vZGUtPm1h
eENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5v
ZGUpKQorICAgICAgICByZXR1cm4gc3RkOjptaW4ob2Zmc2V0LCBkb3duY2FzdDxDaGFyYWN0ZXJE
YXRhPigqYW5jaG9yTm9kZSkubGVuZ3RoKCkpOwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0g
MDsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlLT5maXJzdENoaWxkKCk7IG5vZGUg
JiYgbmV3T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgbmV3T2Zmc2V0Kys7Ci0gICAgCiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0KIAogaW5saW5l
IGJvb2wgb2Zmc2V0SXNCZWZvcmVMYXN0Tm9kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUq
IGFuY2hvck5vZGUpCiB7Ci0gICAgaWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUo
KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhbmNob3JO
b2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KCph
bmNob3JOb2RlKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8IGRvd25jYXN0PENoYXJhY3RlckRh
dGE+KCphbmNob3JOb2RlKS5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQg
PSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9IGFuY2hvck5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9k
ZSAmJiBjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgY3VycmVudE9mZnNldCsrOwotICAgIAotICAgIAogICAgIHJldHVybiBvZmZzZXQg
PCBjdXJyZW50T2Zmc2V0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2VCb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50
LmgKaW5kZXggZDhjZWU3N2U1Yzc4NGJjMGU4NjRjYmU2NWE0YTE5MGY1YWY3YzIzNy4uMTlmYTg0
NDJjNDgyNzUzOTRhMTAwN2JkMTRmNmM2Nzg3ZjhjNWRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZUJvdW5kYXJ5UG9pbnQuaApAQCAtMTQ3LDggKzE0Nyw4IEBAIGlubGluZSB2b2lkIFJhbmdl
Qm91bmRhcnlQb2ludDo6c2V0VG9TdGFydE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIpCiBp
bmxpbmUgdm9pZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKFJlZjxOb2RlPiYm
IGNvbnRhaW5lcikKIHsKICAgICBtX2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7
Ci0gICAgaWYgKG1fY29udGFpbmVyTm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKSB7Ci0gICAg
ICAgIG1fb2Zmc2V0SW5Db250YWluZXIgPSBtX2NvbnRhaW5lck5vZGUtPm1heENoYXJhY3Rlck9m
ZnNldCgpOworICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2RlKSkgewor
ICAgICAgICBtX29mZnNldEluQ29udGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKm1f
Y29udGFpbmVyTm9kZSkubGVuZ3RoKCk7CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9
IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0g
bV9jb250YWluZXJOb2RlLT5sYXN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAppbmRleCA2ZDVjZWM1NTIxMjAxNzE4
ZjQ4YmJmMDIyOGYzODMzZjE2NDZhYjZhLi4yYzAyNzg2MGFmMmFkMTMzNjFjNDlmNGZkNWIwZTJi
NGQzNTljMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQuY3BwCkBAIC0xNzUsOCArMTc1LDggQEAgdm9pZCBBcHBseUJsb2NrRWxl
bWVudENvbW1hbmQ6OmZvcm1hdFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0
T2ZTZWwKIHN0YXRpYyBib29sIGlzTmV3TGluZUF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewogICAgIE5vZGUqIHRleHROb2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgp
OwotICAgIGludCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAg
ICBpZiAoIWlzPFRleHQ+KHRleHROb2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSB0ZXh0
Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRp
b24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKCFpczxUZXh0Pih0ZXh0Tm9kZSkg
fHwgb2Zmc2V0ID49IGRvd25jYXN0PFRleHQ+KCp0ZXh0Tm9kZSkubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dD4oKnRleHROb2RlKS5kYXRh
KClbb2Zmc2V0XSA9PSAnXG4nOwogfQpAQCAtMjMyLDggKzIzMiw4IEBAIHZvaWQgQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVl
ZGVkKGNvbnN0CiAgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2lu
Z1RleHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFw
aE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQ
YXJhZ3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBo
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBs
aW5lIGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAotICAgICAgICBpZiAoZW5kU3R5bGUt
PnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewot
ICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
KyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
OworICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVu
ZCAmJiBlbmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgaWYgKCFpc05ld0xpbmVBdFBvc2l0aW9uKGVuZC5wcmV2aW91cygpKSAmJiBpc05ld0xp
bmVBdFBvc2l0aW9uKGVuZCkpCiAgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5kLmNv
bnRhaW5lclRleHQoKSwgZW5kT2Zmc2V0ICsgMSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRBbmRF
bmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA+PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKQEAgLTI0
MSw5ICsyNDEsOSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJh
Z3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gSWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUgYW5kIHRoZSB0ZXh0
IG5vZGUgaXMgZWRpdGFibGUsIHNwbGl0LgotICAgICAgICBpZiAoZW5kU3R5bGUtPnVzZXJNb2Rp
ZnkoKSAhPSBVc2VyTW9kaWZ5OjpSZWFkT25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNlV2hpdGVT
cGFjZSgpICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAmJiBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkg
eworICAgICAgICBpZiAoZW5kU3R5bGUtPnVzZXJNb2RpZnkoKSAhPSBVc2VyTW9kaWZ5OjpSZWFk
T25seSAmJiAhZW5kU3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIGVuZE9mZnNldCAmJiBl
bmRPZmZzZXQgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5sZW5ndGgoKSkgewogICAgICAgICAgICAg
UmVmUHRyPFRleHQ+IGVuZENvbnRhaW5lciA9IGVuZC5jb250YWluZXJUZXh0KCk7Ci0gICAgICAg
ICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKCplbmRDb250YWluZXIsIGVuZE9mZnNl
dCk7CiAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oZW5kQ29udGFpbmVyKSAmJiAhZW5kQ29udGFp
bmVyLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIHN0YXJ0ID0geyB9Owog
ICAgICAgICAgICAgICAgIGVuZCA9IHsgfTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZvaWQgQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rl
c0lmTmVlZGVkKGNvbnN0CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUp
CiAgICAgICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZW5k
Q29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRBbmRF
bmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZW5k
T2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IGVuZC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBlbmRPZmZz
ZXQpCiAgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kZShlbmRDb250YWluZXItPnByZXZpb3VzU2libGluZygpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBo
ID0gUG9zaXRpb24oZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24oZW5kQ29udGFp
bmVyLmdldCgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAt
IGVuZE9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRp
b25Jbk5vZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggMDg0ZWE3
MmM4YWQyNTEyOTZiNDM5MmI2YTliYzY3ZjVlYjBkOGE3MS4uNGY0OTk2OTlhZGUxY2EyMjRlYzQ3
NDNhOTk0YjA5NTRlMDIxZTRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9u
JiBzCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1aXZhbGVudCBwb3NpdGlvbiB0
byBhdm9pZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuCiAgICAgLy8gZS5nLiBp
ZiBwdXNoRG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxk
aXY+d29ybGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQu
CiAgICAgYXV0byogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1c2hEb3duU3RhcnQuY29udGFp
bmVyTm9kZSgpOwotICAgIGlmIChpczxUZXh0PihwdXNoRG93blN0YXJ0Q29udGFpbmVyKSAmJiBw
dXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBwdXNoRG93blN0
YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKKyAgICBpZiAoaXM8VGV4dD4ocHVz
aERvd25TdGFydENvbnRhaW5lcikgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHB1c2hEb3duU3Rh
cnQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBkb3duY2FzdDxUZXh0PigqcHVz
aERvd25TdGFydENvbnRhaW5lcikubGVuZ3RoKCkpCiAgICAgICAgIHB1c2hEb3duU3RhcnQgPSBu
ZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93blN0YXJ0KTsKICAgICAvLyBJZiBw
dXNoRG93bkVuZCBpcyBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhpcyBub2Rl
IGlzIG5vdCBmdWxseSBzZWxlY3RlZC4KICAgICAvLyBNb3ZlIGl0IHRvIHRoZSBwcmV2aW91cyBk
ZWVwIGVxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhlIHN0eWxlIGZyb20g
dGhpcyBub2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggYjJmMjg2YzBiNmVj
MWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MS4uZmMyZWZhOTUxZmY1MGE2ZmFkMzY5NDgzNTk5
NmI4NTljZTU3OWZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0zNzcsMTgg
KzM3NywxMSBAQCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQogLy8gb24gYSBQb3NpdGlvbiBiZWZvcmUgdXNpbmcgaXQgdG8g
Y3JlYXRlIGEgRE9NIFJhbmdlLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCiBpbnQg
bGFzdE9mZnNldEZvckVkaXRpbmcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAobm9kZS5p
c0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBub2RlLm1heENoYXJhY3Rlck9m
ZnNldCgpOworICAgIGlmIChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSB8fCBub2RlLmhhc0No
aWxkTm9kZXMoKSkKKyAgICAgICAgcmV0dXJuIG5vZGUubGVuZ3RoKCk7CiAKLSAgICBpZiAobm9k
ZS5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBub2RlLmNvdW50Q2hpbGROb2Rlcygp
OwotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgcHJlZW1wdCB0aGUgY291bnRDaGlsZE5vZGVz
KCkgZm9yLCBlLmcuLCBzZWxlY3Qgbm9kZXMuCi0gICAgLy8gRklYTUU6IFdoYXQgZG9lcyB0aGUg
Y29tbWVudCBhYm92ZSBtZWFuPwotICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkp
Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6IE1pZ2h0
IGJlIG1vcmUgaGVscGZ1bCB0byByZXR1cm4gMSBmb3IgYW55IG5vZGUgd2hlcmUgZWRpdGluZ0ln
bm9yZXNDb250ZW50IGlzIHRydWUsIGV2ZW4gb25lIHRoYXQgaGFwcGVucyB0byBoYXZlIGNoaWxk
IG5vZGVzLCBsaWtlIGEgc2VsZWN0IGVsZW1lbnQgd2l0aCBvcHRpb24gbm9kZSBjaGlsZHJlbi4K
KyAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gMSA6IDA7CiB9CiAKIGJv
b2wgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggN2ZmMWMzMjU1MWE2YTI4NTcwOTM2
MjA3NTJlNzM0ZDNhOTZiZThlZi4uMGVhODk5MDc3OWMyMzNlODE0NDg3YzcxMGViMzBlZTU5MjBi
ZDU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTQ5Nyw4
ICsxNDk3LDggQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAvLyBlLmcuIGlmIHBvcyB3
YXMgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9kaXY+PC9i
Piwgd2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLiAKICAgICAvLyBXZSBvbmx5
IGRvIHRoaXMgZm9yIHJhbmdlIGJlY2F1c2UgY2FyZXQgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkg
aW4gPGI+aGVsbG88L2I+d29ybGQgc2hvdWxkIGdpdmUgeW91IGZvbnQtd2VpZ2h0OiBib2xkLiAK
ICAgICBOb2RlKiBwb3NpdGlvbk5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7IAotICAg
IGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmIHBvc2l0aW9uTm9kZSAmJiBwb3NpdGlvbk5vZGUt
PmlzVGV4dE5vZGUoKSAmJiBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
PT0gcG9zaXRpb25Ob2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgCi0gICAgICAgIHBvc2l0aW9u
ID0gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocG9zaXRpb24pOyAKKyAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSAmJiBpczxUZXh0Pihwb3NpdGlvbk5vZGUpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpID09IGRv
d25jYXN0PFRleHQ+KCpwb3NpdGlvbk5vZGUpLmxlbmd0aCgpKQorICAgICAgICBwb3NpdGlvbiA9
IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvc2l0aW9uKTsKIAogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBwb3NpdGlvbi5lbGVtZW50KCk7CiAgICAgaWYgKCFlbGVtZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAzZWZmNmY1N2Ix
MDUxNWQ4OTI1NWRiZDY3OWMwZjEyZmE3MjRhYjljLi5kYTlmOTcxNGNjMDQwZTFjNjMyY2UyMGQy
Yzk4ZTFkMTY0OGNmYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RD
b21tYW5kLmNwcApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRv
QXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAg
ICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCiAgICAgICAgICAg
ICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDApOwogICAgICAgICAg
ICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJy
ZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIGxhc3RPZmZzZXRJbk5vZGUobmV3TGlzdC5n
ZXQoKSkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgqbmV3TGlz
dCwgbmV3TGlzdC0+bGVuZ3RoKCkpOwogCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
VmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlzdC5nZXQoKSkpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDE3MmUyNjQ0YzIyMTQ0
OWM1Yzc3NGYxOWU2MDViZTI1OTg1YTE2NWQuLjA2OGJjOThjMmIzZmJkYzE4NTM0MDg1MmYyYTk1
NWI4ODJmZDY1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAg
LTExMzQsNyArMTEzNCw3IEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBs
aWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuCiAgICAgaWYgKCFlbmRO
b2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpIHsKICAgICAgICAgaWYgKGVuZE9mZnNldCA+IDAg
JiYgZW5kT2Zmc2V0IDw9IGVuZE5vZGUtPmNvdW50Q2hpbGROb2RlcygpKSB7CiAgICAgICAgICAg
ICBlbmROb2RlID0gZW5kTm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQoZW5kT2Zmc2V0IC0gMSk7Ci0g
ICAgICAgICAgICBlbmRPZmZzZXQgPSBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpOworICAgICAg
ICAgICAgZW5kT2Zmc2V0ID0gZW5kTm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAzMjUzYjZmYjBiYWIw
ZWEwNDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0Li5kYmZjMjAzMjZiMGY4MWQ2OWJjNzI0OTc2MjQ2
MWY1ZDU1YzA4YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBA
IC02MzcsNyArNjM3LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2gKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSA6IHBvcywgRE9XTlNUUkVBTSk7CiAKICAgICBhdXRvJiBub2RlID0gaXQuYXRFbmQoKSA/IHNl
YXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQucmFuZ2UoKS5zdGFydC5jb250YWluZXIu
Z2V0KCk7Ci0gICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgpICYmIHN0
YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwgKG5v
ZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKKyAg
ICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgaXM8VGV4dD4obm9kZSkgJiYgbmV4dCA8PSBkb3duY2Fz
dDxUZXh0Pihub2RlKS5sZW5ndGgoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRl
cmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUg
Y29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgbmV4dCks
IERPV05TVFJFQU0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMjhiNDJkYjAzNTE0Njc1NjNkZDc2OTRhM2E3
MjllYWUxMjA0MjIzMS4uMTFmNzZlOTNhMDBjMWM1NGQxYWIwNjM4YTkxMDZhMGY4OGFlOTE3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTQ2OCw3ICs0NjgsNyBAQCBSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdAogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUsIGlubmVyVGV4dC5nZXQoKSkpIHsKICAgICAgICAgQVNTRVJUKCFub2RlLT5maXJz
dENoaWxkKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoYnJUYWcpKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IG5vZGUtPmlzVGV4dE5vZGUo
KSA/IGxhc3RPZmZzZXRJbk5vZGUobm9kZS5nZXQoKSkgOiAxOworICAgICAgICBpbnQgbGVuZ3Ro
ID0gaXM8VGV4dD4oKm5vZGUpID8gZG93bmNhc3Q8VGV4dD4oKm5vZGUpLmxlbmd0aCgpIDogMTsK
IAogICAgICAgICBpZiAob2Zmc2V0IDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IG9mZnNldCArIGxlbmd0
aCkKICAgICAgICAgICAgIHNldENvbnRhaW5lckFuZE9mZnNldEZvclJhbmdlKG5vZGUuZ2V0KCks
IHN0YXJ0IC0gb2Zmc2V0LCBzdGFydE5vZGUsIHN0YXJ0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396136</attachid>
            <date>2020-04-10 17:14:46 -0700</date>
            <delta_ts>2020-04-11 01:52:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210246-20200410171445.patch</filename>
            <type>text/plain</type>
            <size>25336</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDYzOGU1YWU2NDRiZDdj
MmQ5Nzk5YzExOWY0NmUzODZlN2U4YmFjNC4uZDRjMDE5M2UyNGY0M2I4ZTRmYTdhNGUxMjkxODdh
MWNkM2E1MDJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTA0LTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTm9kZTo6bGVuZ3RoIHRv
IHJlcGxhY2UgTm9kZTo6bWF4Q2hhcmFjdGVyT2Zmc2V0IGFuZCBsYXN0T2Zmc2V0SW5Ob2RlOyBz
d2l0Y2ggbW9yZSBvZmZzZXRzIGZyb20gaW50IHRvIHVuc2lnbmVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAyNDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIFRoZSByZWNlbnRseS1hZGRlZCBOb2Rl
OjpsZW5ndGgsIHdoaWNoIG1hdGNoZXMgdGhlIERPTSBzcGVjaWZpY2F0aW9uIHRlcm1pbm9sb2d5
CisgICAgICAgICAgZm9yIG5vZGUgb2Zmc2V0cyBhcyB1c2VkIGluIHJhbmdlcywgaXMgdGhlIHNh
bWUgYXMgdGhlIGV4aXN0aW5nIG1heENoYXJhY3Rlck9mZnNldAorICAgICAgICAgIGFuZCBsYXN0
T2Zmc2V0SW5Ob2RlIGZ1bmN0aW9ucy4gRGVsZXRlZCBhbGwgdXNlcyBvZiB0aG9zZSBhbmQgcmVw
bGFjZWQgdGhlbQorICAgICAgICAgIHdpdGggY2FsbHMgdG8gTm9kZTo6bGVuZ3RoLiBPbmUgb2Yg
dGhlIGJlbmVmaXRzIG9mIHRoaXMgaXMgdGhhdCBOb2RlOjpsZW5ndGggaXMKKyAgICAgICAgICBp
bXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5IGFuZCBpcyBub3QgYSB2aXJ0dWFsIGZ1bmN0aW9u
LiBBbm90aGVyIGlzIGNvbnNpc3RlbnRseQorICAgICAgICAgIG1hdGNoaW5nIHRoZSBET00gc3Bl
Y2lmaWNhdGlvbiB0ZXJtaW5vbG9neS4KKyAgICAgICAgLSBNYW55IG9mZnNldHMsIGluY2x1ZGlu
ZyB0aGUgb25lcyBpbiBsaXZlIHJhbmdlcywgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBz
aWduZWQKKyAgICAgICAgICBpbiBXZWJLaXQsIGJ1dCBhcmUgc3BlY2lmaWVkIGFzIHVuc2lnbmVk
IGluIHRoZSBET00gYW5kIEhUTUwgc3BlY2lmaWNhdGlvbnMuIFRoaXMKKyAgICAgICAgICBoYXMg
dmVyeSBsaXR0bGUgb2JzZXJ2YWJsZSBlZmZlY3QgZnJvbSBKYXZhU2NyaXB0IHRoYXQgY2FuIGFm
ZmVjdCB3ZWJzaXRlIGNvbXBhdGliaWxpdHksCisgICAgICAgICAgYnV0IGl0J3Mgc3RpbGwgaGVs
cGZ1bCB0byBiZSBjb25zaXN0ZW50IGJvdGggd2l0aCB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgaW50
ZXJuYWxseS4KKyAgICAgICAgICBBY2NvcmRpbmdseSwgY2hhbmdlZCBzb21lIG9mIHRoZXNlIHRv
IHVuc2lnbmVkOyBtb3JlIHRvIGNvbWUgbGF0ZXIuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cHJl
dmlvdXNCb3VuZGFyeSk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0
ZXJPZmZzZXQuCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjptYXhDaGFyYWN0ZXJPZmZzZXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6IERlbGV0ZWQgbWF4Q2hhcmFjdGVyT2Zm
c2V0IG92ZXJyaWRlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFy
a2Vycyk6IFVzZSBsZW5ndGggaW5zdGVhZCBvZgorICAgICAgICBtYXhDaGFyYWN0ZXJPZmZzZXQu
CisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptYXhD
aGFyYWN0ZXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IERl
bGV0ZWQgbWF4Q2hhcmFjdGVyT2Zmc2V0LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpjb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2Rl
IGNvbnN0KTogVXNlIGxlbmd0aCBpbnN0ZWFkCisgICAgICAgIG9mIGxhc3RPZmZzZXRJbk5vZGUu
CisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RPZmZz
ZXRJbk5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGFzdFBvc2l0aW9uSW5Ob2Rl
KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIGxhc3RPZmZzZXRJbk5vZGUuCisgICAgICAgIChXZWJD
b3JlOjptaW5PZmZzZXRGb3JOb2RlKTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mIG1heENoYXJhY3Rl
ck9mZnNldC4KKyAgICAgICAgKFdlYkNvcmU6Om9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQp
OiBEaXR0by4KKworICAgICAgICAqIGRvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9FbmRPZk5vZGUpOiBVc2UgbGVuZ3Ro
IGluc3RlYWQgb2YKKyAgICAgICAgbWF4Q2hhcmFjdGVyT2Zmc2V0LgorCisgICAgICAgICogZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNO
ZXdMaW5lQXRQb3NpdGlvbik6IFVzZSBsZW5ndGggaW5zdGVhZCBvZiBtYXhDaGFyYWN0ZXJPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9y
UGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgorICAgICAgICBEaXR0by4KKwor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogVXNlIGxlbmd0aCBpbnN0
ZWFkIG9mCisgICAgICAgIG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVkaXRpbmcv
RWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsYXN0T2Zmc2V0Rm9yRWRpdGluZyk6IFVz
ZSBsZW5ndGggaW5zdGVhZCBvZiBtbWF4Q2hhcmFjdGVyT2Zmc2V0CisgICAgICAgIGFuZCBjb3Vu
dENoaWxkTm9kZXMuIEFsc28gaW1wcm92ZWQgdGhlIGNvbW1lbnQgaGVyZS4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KTogVXNlIGxlbmd0aCBpbnN0ZWFkIG9mCisgICAgICAg
IG1heENoYXJhY3Rlck9mZnNldC4KKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgpOiBVc2UgbGVuZ3RoIGluc3RlYWQKKyAgICAgICAgb2YgbGFzdE9mZnNl
dEluTm9kZS4KKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OlNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IpOgorICAgICAgICBVU2UgbGVuZ3RoIGluc3RlYWQgb2YgbGFzdE9m
ZnNldEluTm9kZS4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBVc2UgbGVuZ3RoIGluc3RlYWQgb2YgbWF4
Q2hhcmFjdGVyT2Zmc2V0LgorCiAyMDIwLTA0LTEwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogKHIyNTk4NTApWyBNYWMgd2sxIERlYnVnIF0g
bWVkaWEvdHJhY2svdHJhY2stdXNlci1zdHlsZXNoZWV0Lmh0bWwgaXMgZmxha3kgZmFpbGluZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4
IGIwMTFkOTM2MTljOGNlNzEyNTQzMjEwMTIyODMyMWMxYTZiODUwYWUuLjY0OTUyYjM1MzU5ZmVm
NzA1ZGQ3MGE0NjA2MWIyMzE1ZTUyMmJlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMjY2NCw3ICsyNjY0LDcgQEAgQ2hhcmFjdGVy
T2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoJm5vZGUgIT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYg
QWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxp
bmcpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJh
bmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFsc2UpOwogCi0gICAgaWYgKCghc3Vm
Zml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgpICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkg
PD0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2Rl
LnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKKyAgICBpZiAoKCFzdWZmaXhMZW5ndGgg
JiYgbm9kZS5pc1RleHROb2RlKCkgJiYgbmV4dCA8PSBub2RlLmxlbmd0aCgpKSB8fCAobm9kZS5y
ZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+aXNCUigpICYmICFuZXh0KSkgewogICAgICAg
ICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4
dCBub2RlCiAgICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5l
eHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4
IDgwZmQ5ZWIyMjczN2M3ZGIzZDM5NjNhMDJmMDI3MDkxN2VkYTdiMzcuLmEzMTU4ZmU5YmEyZTE3
NmU2YzQxMWIzMmQxNGQyNDJlN2I5M2Y0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTE2OCw3
ICsxNjgsNyBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIC8vIG5vZGUgaXMgYWN0dWFs
bHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0IHBhcnRpYWxseS4KICAgICBhdXRvJiBub2Rl
ID0gKmNvcmVPYmplY3QtPm5vZGUoKTsKICAgICBhdXRvKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUu
bGFzdERlc2NlbmRhbnQoKTsKLSAgICB1bnNpZ25lZCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldElu
Tm9kZShsYXN0RGVzY2VuZGFudCk7CisgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNj
ZW5kYW50LT5sZW5ndGgoKTsKICAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+aW50
ZXJzZWN0c05vZGUobm9kZSk7CiAgICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpCiAgICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAppbmRleCBkZmYyYmE4ZmQ2MjkwYTY1ZGZm
YWRhNzc5YmEwMTkyNjM5OGY0Y2YwLi4xMzEzOWEyYTYyZDEwYTg0ZTVlNDk5MGFlYWRjNWQ5NWVl
NGI2YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCkBAIC0yMzksOSArMjM5
LDQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3Ry
aW5nJiBvbGREYXRhKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0
YU1vZGlmaWVkKGRvY3VtZW50KCksICp0aGlzKTsKIH0KIAotaW50IENoYXJhY3RlckRhdGE6Om1h
eENoYXJhY3Rlck9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
bGVuZ3RoKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuaAppbmRleCBlMjMxZDUzNTc3Y2I1MDg1YWQzOGViZTZlMDMyZjQxZTc5MTVhM2Q1
Li5mZTY2MDAzMGE0NjBiNDI1NTNlZGUyMDZlMzU2ZTI0MTdlNjc0ZDJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTYzLDcgKzYzLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bm9kZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Tm9kZVZh
bHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0
YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBpbnQgbWF4Q2hhcmFjdGVyT2Zm
c2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVu
c2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBub3RpZnlQYXJlbnRBZnRlckNoYW5nZShDb250
YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJjZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggNGM1Mjg2MTc4NGE2NTcyY2ZhNWEy
NGVmYTA0MWM3ZTVkZmE5Y2E2MS4uODJlYWI4Y2NlNjBmNTBkNTc2OTRlYTE4NjcwNTI3YzljNWM2
OTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgICAg
ICAvLyBGSVhNRTogTm8gb2J2aW91cyByZWFzb24gdGhpcyBzaG91bGQgYmUgaU9TLXNwZWNpZmlj
LiBSZW1vdmUgdGhlICNpZiBhdCBzb21lIHBvaW50LgogICAgICAgICBpbnQgdGFyZ2V0U3RhcnRP
ZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRhOwogICAgICAgICBpbnQgdGFyZ2V0
RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIGlmICh0YXJn
ZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9m
ZnNldCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFyZ2V0U3Rh
cnRPZmZzZXQpID49IG5vZGUubGVuZ3RoKCkgfHwgdGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKICAg
ICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CkBAIC02MTUsNyArNjE1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNo
aWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAg
ICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNl
dCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJnZXRFbmRPZmZzZXQgOiBub2RlLm1h
eENoYXJhY3Rlck9mZnNldCgpKTsKKyAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQoc3Rk
OjptaW48dW5zaWduZWQ+KHRhcmdldEVuZE9mZnNldCwgbm9kZS5sZW5ndGgoKSkpOwogICAgICAg
ICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAppbmRleCA4YzFiYTdlNmZmODY3Zjk1MTM4NGZhZWE3MjRjZGJiNzU1NjQ5NDNkLi4yNzNh
NTM5ODg4MmJiYjFhYWI0YzFmMWNlYzhiYzgyY2ZiOGQxNTViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBA
IC0xMTAyLDEyICsxMTAyLDYgQEAgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5
bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKICAgICByZXR1cm4gY29tcG9zZWRQ
YXJlbnQtPmNvbXB1dGVkU3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7CiB9CiAKLWludCBO
b2RlOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBGSVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0
aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAgQ29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFi
b3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNzCiAvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2Vk
LgogYm9vbCBOb2RlOjpjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA5
M2E3MWExNTYyY2E1MDkxYmIwMDBiZmQyMzRmNmIwNTcyYWJmN2QxLi4xODIyYWY3MzY0NzM5NzY5
YjM3MWUxOWMzNTE1ODkzMmRmNzk0ZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTM3NywxMCArMzc3LDYg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSop
IGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY29uc3QgTm9kZSop
IGNvbnN0OwogCi0gICAgLy8gTnVtYmVyIG9mIERPTSAxNi1iaXQgdW5pdHMgY29udGFpbmVkIGlu
IG5vZGUuIE5vdGUgdGhhdCByZW5kZXJlZCB0ZXh0IGxlbmd0aCBjYW4gYmUgZGlmZmVyZW50IC0g
ZS5nLiBiZWNhdXNlIG9mCi0gICAgLy8gY3NzLXRyYW5zZm9ybTpjYXBpdGFsaXplIGJyZWFraW5n
IHVwIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMgYW5kIGxpZ2F0dXJlcy4KLSAgICB2aXJ0dWFsIGlu
dCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsKLQogICAgIC8vIFdoZXRoZXIgb3Igbm90IGEg
c2VsZWN0aW9uIGNhbiBiZSBzdGFydGVkIGluIHRoaXMgb2JqZWN0CiAgICAgdmlydHVhbCBib29s
IGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4
IDc3ZGFhZGU5NDQzNjZlN2ZlNDNhYTNlMGM3OGZiYTVkNDczMzIwNzEuLmJjZjY5MDQ1NzVlYmRl
MjQ0ZDkxNDUxZDk3MTM4NjQ4YjcxMjE4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAt
MjA3LDcgKzIwNyw3IEBAIGludCBQb3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9k
ZSgpIGNvbnN0CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46CiAgICAgICAgIHJl
dHVybiAwOwogICAgIGNhc2UgUG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgIHJldHVy
biBsYXN0T2Zmc2V0SW5Ob2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBt
X2FuY2hvck5vZGUtPmxlbmd0aCgpOwogICAgIGNhc2UgUG9zaXRpb25Jc09mZnNldEluQW5jaG9y
OgogICAgICAgICByZXR1cm4gbWluT2Zmc2V0Rm9yTm9kZShtX2FuY2hvck5vZGUuZ2V0KCksIG1f
b2Zmc2V0KTsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCmluZGV4IGMyOGU3MDZiMTA1NmY2ZWE1ZTkwNDlkMDBhNDYyY2QzYTVhMTI3OTkuLjJjMmQ2
YTIyNjE2ZjRiMjJiYWQ5MjY3OTExNmRjZWE1Nzk2NGIwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5o
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2hhcmFjdGVy
RGF0YS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91
bmRhcnkuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKQEAgLTIzNyw4ICsyMzgsNiBAQCBQ
b3NpdGlvbiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKE5vZGUqKTsKIFBvc2l0aW9uIHBvc2l0
aW9uQmVmb3JlTm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJO
b2RlKE5vZGUqIGFuY2hvck5vZGUpOwogCi1pbnQgbGFzdE9mZnNldEluTm9kZShOb2RlKik7Ci0K
IC8vIGZpcnN0UG9zaXRpb25Jbk5vZGUgYW5kIGxhc3RQb3NpdGlvbkluTm9kZSByZXR1cm4gcGFy
ZW50LWFuY2hvcmVkIHBvc2l0aW9ucywgbGFzdFBvc2l0aW9uSW5Ob2RlIGNvbnN0cnVjdGlvbiBp
cyBPKG4pIGR1ZSB0byBjb3VudENoaWxkTm9kZXMoKQogUG9zaXRpb24gZmlyc3RQb3NpdGlvbklu
Tm9kZShOb2RlKiBhbmNob3JOb2RlKTsKIFBvc2l0aW9uIGxhc3RQb3NpdGlvbkluTm9kZShOb2Rl
KiBhbmNob3JOb2RlKTsKQEAgLTMwNiwxMSArMzA1LDYgQEAgaW5saW5lIFBvc2l0aW9uIHBvc2l0
aW9uQWZ0ZXJOb2RlKE5vZGUqIGFuY2hvck5vZGUpCiAgICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hv
ck5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwogfQogCi1pbmxpbmUgaW50
IGxhc3RPZmZzZXRJbk5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aXNDaGFy
YWN0ZXJEYXRhTm9kZSgpID8gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgOiBub2RlLT5jb3Vu
dENoaWxkTm9kZXMoKTsKLX0KLQogLy8gZmlyc3RQb3NpdGlvbkluTm9kZSBhbmQgbGFzdFBvc2l0
aW9uSW5Ob2RlIHJldHVybiBwYXJlbnQtYW5jaG9yZWQgcG9zaXRpb25zLCBsYXN0UG9zaXRpb25J
bk5vZGUgY29uc3RydWN0aW9uIGlzIE8obikgZHVlIHRvIGNvdW50Q2hpbGROb2RlcygpCiBpbmxp
bmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2RlKiBhbmNob3JOb2RlKQogewpAQCAt
MzIyLDMyICszMTYsMjkgQEAgaW5saW5lIFBvc2l0aW9uIGZpcnN0UG9zaXRpb25Jbk5vZGUoTm9k
ZSogYW5jaG9yTm9kZSkKIGlubGluZSBQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSog
YW5jaG9yTm9kZSkKIHsKICAgICBpZiAoYW5jaG9yTm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAg
ICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwgbGFzdE9mZnNldEluTm9kZShhbmNob3JOb2Rl
KSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgIHJldHVybiBQ
b3NpdGlvbihhbmNob3JOb2RlLCBhbmNob3JOb2RlLT5sZW5ndGgoKSwgUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBv
c2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbik7CiB9CiAKIGlubGluZSBpbnQgbWluT2Zm
c2V0Rm9yTm9kZShOb2RlKiBhbmNob3JOb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgaWYg
KGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWluPHVuc2lnbmVkPihvZmZzZXQsIGFuY2hvck5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKTsK
KyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5vZGUpKQorICAgICAgICByZXR1cm4g
c3RkOjptaW4ob2Zmc2V0LCBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqYW5jaG9yTm9kZSkubGVu
Z3RoKCkpOwogCiAgICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gMDsKICAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBhbmNob3JOb2RlLT5maXJzdENoaWxkKCk7IG5vZGUgJiYgbmV3T2Zmc2V0IDwgb2Zmc2V0
OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbmV3T2Zmc2V0Kys7Ci0gICAg
CiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0KIAogaW5saW5lIGJvb2wgb2Zmc2V0SXNCZWZvcmVM
YXN0Tm9kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGFuY2hvck5vZGUpCiB7Ci0gICAg
aWYgKGFuY2hvck5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG9m
ZnNldCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihhbmNob3JOb2RlLT5tYXhDaGFyYWN0ZXJPZmZz
ZXQoKSk7CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KCphbmNob3JOb2RlKSkKKyAgICAgICAg
cmV0dXJuIG9mZnNldCA8IGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCphbmNob3JOb2RlKS5sZW5n
dGgoKTsKIAogICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQgPSAwOwogICAgIGZvciAoTm9kZSog
bm9kZSA9IGFuY2hvck5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZSAmJiBjdXJyZW50T2Zmc2V0IDwg
b2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3VycmVudE9mZnNl
dCsrOwotICAgIAotICAgIAogICAgIHJldHVybiBvZmZzZXQgPCBjdXJyZW50T2Zmc2V0OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXggZDhjZWU3N2U1Yzc4
NGJjMGU4NjRjYmU2NWE0YTE5MGY1YWY3YzIzNy4uMTlmYTg0NDJjNDgyNzUzOTRhMTAwN2JkMTRm
NmM2Nzg3ZjhjNWRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRh
cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaApA
QCAtMTQ3LDggKzE0Nyw4IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6c2V0VG9T
dGFydE9mTm9kZShSZWY8Tm9kZT4mJiBjb250YWluZXIpCiBpbmxpbmUgdm9pZCBSYW5nZUJvdW5k
YXJ5UG9pbnQ6OnNldFRvRW5kT2ZOb2RlKFJlZjxOb2RlPiYmIGNvbnRhaW5lcikKIHsKICAgICBt
X2NvbnRhaW5lck5vZGUgPSBXVEZNb3ZlKGNvbnRhaW5lcik7Ci0gICAgaWYgKG1fY29udGFpbmVy
Tm9kZS0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKSB7Ci0gICAgICAgIG1fb2Zmc2V0SW5Db250YWlu
ZXIgPSBtX2NvbnRhaW5lck5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpOworICAgIGlmIChpczxD
aGFyYWN0ZXJEYXRhPigqbV9jb250YWluZXJOb2RlKSkgeworICAgICAgICBtX29mZnNldEluQ29u
dGFpbmVyID0gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKm1fY29udGFpbmVyTm9kZSkubGVuZ3Ro
KCk7CiAgICAgICAgIG1fY2hpbGRCZWZvcmVCb3VuZGFyeSA9IG51bGxwdHI7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbV9jaGlsZEJlZm9yZUJvdW5kYXJ5ID0gbV9jb250YWluZXJOb2RlLT5sYXN0
Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0Vs
ZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcAppbmRleCA2ZDVjZWM1NTIxMjAxNzE4ZjQ4YmJmMDIyOGYzODMzZjE2NDZh
YjZhLi4xNjc4Y2UzMjc1OGM5NDk5NDc5OGU1ZjYwNTM5NDMyYmEzY2Y3MjJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBA
IC0xNzUsOCArMTc1LDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZTZWwKIHN0YXRpYyBib29sIGlz
TmV3TGluZUF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIE5vZGUq
IHRleHROb2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBvZmZzZXQgPSBw
b3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWlzPFRleHQ+KHRleHRO
b2RlKSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zm
c2V0KCkpCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgaWYgKCFpczxUZXh0Pih0ZXh0Tm9kZSkgfHwgb2Zmc2V0ID49IGRvd25jYXN0
PFRleHQ+KCp0ZXh0Tm9kZSkubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gZG93bmNhc3Q8VGV4dD4oKnRleHROb2RlKS5kYXRhKClbb2Zmc2V0XSA9PSAnXG4nOwog
fQpAQCAtMjMyLDE4ICsyMzIsMTggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJh
bmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QKICAgICBpZiAo
YXV0byogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgewog
ICAgICAgICBib29sIGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRl
clN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5kLmRl
cHJlY2F0ZWROb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgd2UncmUgYXQgYW4g
ZW1wdHkgcGFyYWdyYXBoCi0gICAgICAgIGlmIChlbmRTdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkg
JiYgc3RhcnQgPT0gZW5kICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250
YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7Ci0gICAgICAgICAgICBpbnQgZW5k
T2Zmc2V0ID0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgICAgIGlmIChlbmRT
dHlsZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgc3RhcnQgPT0gZW5kICYmIGVuZE9mZnNldCA8IGVu
ZC5jb250YWluZXJOb2RlKCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzTmV3TGlu
ZUF0UG9zaXRpb24oZW5kLnByZXZpb3VzKCkpICYmIGlzTmV3TGluZUF0UG9zaXRpb24oZW5kKSkK
LSAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQuY29udGFpbmVyVGV4dCgpLCBlbmRP
ZmZzZXQgKyAxKTsKKyAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQuY29udGFpbmVy
VGV4dCgpLCArK2VuZE9mZnNldCk7CiAgICAgICAgICAgICBpZiAoaXNFbmRBbmRFbmRPZkxhc3RQ
YXJhZ3JhcGhPblNhbWVOb2RlICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSBtX2Vu
ZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgICAgICAg
ICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IGVuZDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IGVuZCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlIGFuZCB0aGUgdGV4dCBub2RlIGlz
IGVkaXRhYmxlLCBzcGxpdC4KLSAgICAgICAgaWYgKGVuZFN0eWxlLT51c2VyTW9kaWZ5KCkgIT0g
VXNlck1vZGlmeTo6UmVhZE9ubHkgJiYgIWVuZFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAm
JiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpIDwgZW5kLmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKKyAgICAg
ICAgaWYgKGVuZFN0eWxlLT51c2VyTW9kaWZ5KCkgIT0gVXNlck1vZGlmeTo6UmVhZE9ubHkgJiYg
IWVuZFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmRPZmZzZXQgJiYgZW5kT2Zmc2V0
IDwgZW5kLmNvbnRhaW5lck5vZGUoKS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxU
ZXh0PiBlbmRDb250YWluZXIgPSBlbmQuY29udGFpbmVyVGV4dCgpOwotICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZSgqZW5kQ29udGFpbmVyLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
ICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSgqZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpOwogICAg
ICAgICAgICAgaWYgKGlzPFRleHQ+KGVuZENvbnRhaW5lcikgJiYgIWVuZENvbnRhaW5lci0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBzdGFydCA9IHsgfTsKICAgICAgICAg
ICAgICAgICBlbmQgPSB7IH07CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIEFwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRl
ZChjb25zdAogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlKQogICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGVuZENvbnRhaW5l
ci0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0
UGFyYWdyYXBoT25TYW1lTm9kZSkgewotICAgICAgICAgICAgICAgIGlmIChtX2VuZE9mTGFzdFBh
cmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBlbmQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpCisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2VuZE9m
TGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPT0gZW5kT2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IGxhc3RQb3NpdGlvbkluT3JB
ZnRlck5vZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0
aW9uKGVuZENvbnRhaW5lci5nZXQoKSwgbV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgLSBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKGVuZENvbnRhaW5lci5nZXQo
KSwgbV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBlbmRPZmZz
ZXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW5kID0gbGFzdFBvc2l0aW9uSW5Ob2Rl
KGVuZENvbnRhaW5lci0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDA4NGVhNzJjOGFkMjUx
Mjk2YjQzOTJiNmE5YmM2N2Y1ZWIwZDhhNzEuLjRmNDk5Njk5YWRlMWNhMjI0ZWM0NzQzYTk5NGIw
OTU0ZTAyMWU0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogICAg
IC8vIE1vdmUgaXQgdG8gdGhlIG5leHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQg
cmVtb3ZpbmcgdGhlIHN0eWxlIGZyb20gdGhpcyBub2RlLgogICAgIC8vIGUuZy4gaWYgcHVzaERv
d25TdGFydCB3YXMgYXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2Pndvcmxk
PC9kaXY+PC9iPiwgd2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLgogICAgIGF1
dG8qIHB1c2hEb3duU3RhcnRDb250YWluZXIgPSBwdXNoRG93blN0YXJ0LmNvbnRhaW5lck5vZGUo
KTsKLSAgICBpZiAoaXM8VGV4dD4ocHVzaERvd25TdGFydENvbnRhaW5lcikgJiYgcHVzaERvd25T
dGFydC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gcHVzaERvd25TdGFydENvbnRh
aW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgaWYgKGlzPFRleHQ+KHB1c2hEb3duU3Rh
cnRDb250YWluZXIpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwdXNoRG93blN0YXJ0LmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPT0gZG93bmNhc3Q8VGV4dD4oKnB1c2hEb3duU3Rh
cnRDb250YWluZXIpLmxlbmd0aCgpKQogICAgICAgICBwdXNoRG93blN0YXJ0ID0gbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUocHVzaERvd25TdGFydCk7CiAgICAgLy8gSWYgcHVzaERvd25F
bmQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3Qg
ZnVsbHkgc2VsZWN0ZWQuCiAgICAgLy8gTW92ZSBpdCB0byB0aGUgcHJldmlvdXMgZGVlcCBlcXVp
dmFsZW50IHBvc2l0aW9uIHRvIGF2b2lkIHJlbW92aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9k
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGIyZjI4NmMwYjZlYzFmNDY2OTcw
OGM2MjE4ZGE0YmYyY2EzNWM0NzEuLmZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5Y2U1
NzlmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMzc3LDE4ICszNzcsMTEg
QEAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKIC8vIG9uIGEgUG9zaXRpb24gYmVmb3JlIHVzaW5nIGl0IHRvIGNyZWF0ZSBh
IERPTSBSYW5nZSwgb3IgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgogaW50IGxhc3RPZmZz
ZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUuaXNDaGFyYWN0
ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKTsK
KyAgICBpZiAobm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkgfHwgbm9kZS5oYXNDaGlsZE5vZGVz
KCkpCisgICAgICAgIHJldHVybiBub2RlLmxlbmd0aCgpOwogCi0gICAgaWYgKG5vZGUuaGFzQ2hp
bGROb2RlcygpKQotICAgICAgICByZXR1cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKLQotICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQgdGhlIGNvdW50Q2hpbGROb2RlcygpIGZvciwg
ZS5nLiwgc2VsZWN0IG5vZGVzLgotICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgdGhlIGNvbW1lbnQg
YWJvdmUgbWVhbj8KLSAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQotICAgICAg
ICByZXR1cm4gMTsKLQotICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBNaWdodCBiZSBtb3Jl
IGhlbHBmdWwgdG8gcmV0dXJuIDEgZm9yIGFueSBub2RlIHdoZXJlIGVkaXRpbmdJZ25vcmVzQ29u
dGVudCBpcyB0cnVlLCBldmVuIG9uZSB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBjaGlsZCBub2Rlcywg
bGlrZSBhIHNlbGVjdCBlbGVtZW50IHdpdGggb3B0aW9uIG5vZGUgY2hpbGRyZW4uCisgICAgcmV0
dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSA/IDEgOiAwOwogfQogCiBib29sIGlzQW1i
aWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDdmZjFjMzI1NTFhNmEyODU3MDkzNjIwNzUyZTcz
NGQzYTk2YmU4ZWYuLjBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIwYmQ1OGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE0OTcsOCArMTQ5Nyw4
IEBAIFJlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0
YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgLy8gZS5nLiBpZiBwb3Mgd2FzIGF0IFBv
c2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhlbGxvPGRpdj53b3JsZDwvZGl2PjwvYj4sIHdlIHdh
bnQgUG9zaXRpb24oIndvcmxkIiwgMCkgaW5zdGVhZC4gCiAgICAgLy8gV2Ugb25seSBkbyB0aGlz
IGZvciByYW5nZSBiZWNhdXNlIGNhcmV0IGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhl
bGxvPC9iPndvcmxkIHNob3VsZCBnaXZlIHlvdSBmb250LXdlaWdodDogYm9sZC4gCiAgICAgTm9k
ZSogcG9zaXRpb25Ob2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOyAKLSAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSAmJiBwb3NpdGlvbk5vZGUgJiYgcG9zaXRpb25Ob2RlLT5pc1RleHRO
b2RlKCkgJiYgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IHBvc2l0
aW9uTm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIAotICAgICAgICBwb3NpdGlvbiA9IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHBvc2l0aW9uKTsgCisgICAgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgaXM8VGV4dD4ocG9zaXRpb25Ob2RlKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA9PSBkb3duY2FzdDxU
ZXh0PigqcG9zaXRpb25Ob2RlKS5sZW5ndGgoKSkKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwb3NpdGlvbik7CiAKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gcG9zaXRpb24uZWxlbWVudCgpOwogICAgIGlmICghZWxlbWVudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggMWM4OTNmYzM0ZTMwNDFjZWZj
MDAwNGQ2MTQ0YjU5MjZlNWZlY2FkOS4uZmU0ZWQ0MGVkMjI5OWQ2NjcwZDg3MjQ5OWVmMTJmNDEy
ZGMxY2RlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAg
ICAgaWYgKHJhbmdlU3RhcnRJc0luTGlzdCAmJiBuZXdMaXN0KQogICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24tPnNldFN0YXJ0KCpuZXdMaXN0LCAwKTsKICAgICAgICAgICAgIGlmIChy
YW5nZUVuZElzSW5MaXN0ICYmIG5ld0xpc3QpCi0gICAgICAgICAgICAgICAgY3VycmVudFNlbGVj
dGlvbi0+c2V0RW5kKCpuZXdMaXN0LCBsYXN0T2Zmc2V0SW5Ob2RlKG5ld0xpc3QuZ2V0KCkpKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIG5ld0xp
c3QtPmxlbmd0aCgpKTsKIAogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5ld0xpc3QuZ2V0KCkpKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAxNzJlMjY0NGMyMjE0NDljNWM3NzRm
MTllNjA1YmUyNTk4NWExNjVkLi4wNjhiYzk4YzJiM2ZiZGMxODUzNDA4NTJmMmE5NTViODgyZmQ2
NTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xMTM0LDcg
KzExMzQsNyBAQCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbgogICAgIGlmICghZW5kTm9kZS0+aXND
aGFyYWN0ZXJEYXRhTm9kZSgpKSB7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPiAwICYmIGVuZE9m
ZnNldCA8PSBlbmROb2RlLT5jb3VudENoaWxkTm9kZXMoKSkgewogICAgICAgICAgICAgZW5kTm9k
ZSA9IGVuZE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KGVuZE9mZnNldCAtIDEpOwotICAgICAgICAg
ICAgZW5kT2Zmc2V0ID0gbGFzdE9mZnNldEluTm9kZShlbmROb2RlKTsKKyAgICAgICAgICAgIGVu
ZE9mZnNldCA9IGVuZE5vZGUtPmxlbmd0aCgpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggMzI1M2I2ZmIwYmFiMGVhMDQ3NGRj
YjNlYzcxYzk0MjBiNWE5NzA0NC4uZGJmYzIwMzI2YjBmODFkNjliYzcyNDk3NjI0NjFmNWQ1NWMw
OGIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtNjM3LDcg
KzYzNyw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oaXQuYXRFbmQoKSA/IHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkgOiBwb3Ms
IERPV05TVFJFQU0pOwogCiAgICAgYXV0byYgbm9kZSA9IGl0LmF0RW5kKCkgPyBzZWFyY2hSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSA6IGl0LnJhbmdlKCkuc3RhcnQuY29udGFpbmVyLmdldCgpOwot
ICAgIGlmICgoIXN1ZmZpeExlbmd0aCAmJiBub2RlLmlzVGV4dE5vZGUoKSAmJiBzdGF0aWNfY2Fz
dDxpbnQ+KG5leHQpIDw9IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHx8IChub2RlLnJlbmRl
cmVyKCkgJiYgbm9kZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7CisgICAgaWYgKCgh
c3VmZml4TGVuZ3RoICYmIGlzPFRleHQ+KG5vZGUpICYmIG5leHQgPD0gZG93bmNhc3Q8VGV4dD4o
bm9kZSkubGVuZ3RoKCkpIHx8IChub2RlLnJlbmRlcmVyKCkgJiYgbm9kZS5yZW5kZXJlcigpLT5p
c0JSKCkgJiYgIW5leHQpKSB7CiAgICAgICAgIC8vIFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5z
IGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG5leHQpLCBET1dOU1RS
RUFNKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwCmluZGV4IDI4YjQyZGIwMzUxNDY3NTYzZGQ3Njk0YTNhNzI5ZWFlMTIw
NDIyMzEuLjExZjc2ZTkzYTAwYzFjNTRkMWFiMDYzOGE5MTA2YTBmODhhZTkxN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBA
IC00NjgsNyArNDY4LDcgQEAgUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0aW9uKCkgY29uc3QKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5uZXJU
ZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2Rl
LCBpbm5lclRleHQuZ2V0KCkpKSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgp
KTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1l
KGJyVGFnKSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0
T2Zmc2V0SW5Ob2RlKG5vZGUuZ2V0KCkpIDogMTsKKyAgICAgICAgaW50IGxlbmd0aCA9IGlzPFRl
eHQ+KCpub2RlKSA/IGRvd25jYXN0PFRleHQ+KCpub2RlKS5sZW5ndGgoKSA6IDE7CiAKICAgICAg
ICAgaWYgKG9mZnNldCA8PSBzdGFydCAmJiBzdGFydCA8PSBvZmZzZXQgKyBsZW5ndGgpCiAgICAg
ICAgICAgICBzZXRDb250YWluZXJBbmRPZmZzZXRGb3JSYW5nZShub2RlLmdldCgpLCBzdGFydCAt
IG9mZnNldCwgc3RhcnROb2RlLCBzdGFydCk7Cg==
</data>
<flag name="review"
          id="411584"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>