<?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>224713</bug_id>
          
          <creation_ts>2021-04-16 22:11:21 -0700</creation_ts>
          <short_desc>[JSC] Make more DFG/FTL data FixedVector/Vector</short_desc>
          <delta_ts>2021-04-19 22:08:26 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1751389</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-16 22:11:21 -0700</bug_when>
    <thetext>[JSC] Make more DFG/FTL data FixedVector/Vector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751391</commentid>
    <comment_count>1</comment_count>
      <attachid>426321</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-16 22:24:43 -0700</bug_when>
    <thetext>Created attachment 426321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751392</commentid>
    <comment_count>2</comment_count>
      <attachid>426322</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-16 22:29:06 -0700</bug_when>
    <thetext>Created attachment 426322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751563</commentid>
    <comment_count>3</comment_count>
      <attachid>426322</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-17 21:50:15 -0700</bug_when>
    <thetext>Comment on attachment 426322
Patch

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

&gt; Source/JavaScriptCore/bytecode/Operands.h:141
&gt; +    template&lt;typename U, typename V&gt; friend class Operands;

No need for the &quot;U&quot; and &quot;V&quot; here.

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:269
&gt; +    unsigned appendOSRExit(OSRExit&amp;&amp; exit)

This creates a 2^32 maximum. Does something check that and prevent overflow?

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:276
&gt; +    unsigned appendSpeculationRecovery(const SpeculationRecovery&amp; recovery)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:394
&gt; +public:
&gt; +    Vector&lt;DFG::OSREntryData&gt; m_osrEntry;
&gt; +    Vector&lt;DFG::OSRExit&gt; m_osrExit;
&gt; +    Vector&lt;DFG::SpeculationRecovery&gt; m_speculationRecovery;
&gt; +private:

This is inelegant. Is there a way to do this without making the vectors public? Even accessor functions that return references would be more elegant than this. But also could use friend maybe?

&gt; Source/JavaScriptCore/ftl/FTLOSRExit.cpp:88
&gt; +    unsigned index = state.jitCode-&gt;m_osrExit.size();

Same 2^32 question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751580</commentid>
    <comment_count>4</comment_count>
      <attachid>426322</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 00:09:50 -0700</bug_when>
    <thetext>Comment on attachment 426322
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:269
&gt;&gt; +    unsigned appendOSRExit(OSRExit&amp;&amp; exit)
&gt; 
&gt; This creates a 2^32 maximum. Does something check that and prevent overflow?

Vector crashes on overflow. And there is no way to achieve that since DFG / FTL has node amount limit (10000)

&gt;&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:276
&gt;&gt; +    unsigned appendSpeculationRecovery(const SpeculationRecovery&amp; recovery)
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:394
&gt;&gt; +private:
&gt; 
&gt; This is inelegant. Is there a way to do this without making the vectors public? Even accessor functions that return references would be more elegant than this. But also could use friend maybe?

I don&apos;t think accessor function is better since we WTFMove(them). I don&apos;t think we expect that when we are using accessor functions.
friend class would be better.

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExit.cpp:88
&gt;&gt; +    unsigned index = state.jitCode-&gt;m_osrExit.size();
&gt; 
&gt; Same 2^32 question.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751582</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 00:14:27 -0700</bug_when>
    <thetext>Committed r276224 (236706@main): &lt;https://commits.webkit.org/236706@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751610</commentid>
    <comment_count>6</comment_count>
      <attachid>426322</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-18 09:06:42 -0700</bug_when>
    <thetext>Comment on attachment 426322
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.h:394
&gt;&gt;&gt; +private:
&gt;&gt; 
&gt;&gt; This is inelegant. Is there a way to do this without making the vectors public? Even accessor functions that return references would be more elegant than this. But also could use friend maybe?
&gt; 
&gt; I don&apos;t think accessor function is better since we WTFMove(them). I don&apos;t think we expect that when we are using accessor functions.
&gt; friend class would be better.

If what we are doing is moving vectors out, then the style of access function I would recommend is “take“ which includes the move (or std::exchange) and returns the moved object. This does create better encapsulation than just having public data members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752141</commentid>
    <comment_count>7</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-04-19 22:08:26 -0700</bug_when>
    <thetext>rdar://76809579</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426321</attachid>
            <date>2021-04-16 22:24:43 -0700</date>
            <delta_ts>2021-04-16 22:34:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224713-20210416222441.patch</filename>
            <type>text/plain</type>
            <size>34019</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li5jOTI3MTMwMGIzZTVjMzJi
MDNkZDYxYjM5YTgwMTBiMTAxNmRlOTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMS0wNC0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE1ha2UgbW9yZSBERkcvRlRMIGRhdGEgRml4ZWRWZWN0b3IvVmVj
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3
MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBE
Rkc6OkpJVENvZGU6Om1fb3NyRW50cnkgLyBERkc6OkpJVENvZGU6Om1fb3NyRXhpdCAvIERGRzo6
SklUQ29kZTo6bV9zcGVjdWxhdGlvblJlY292ZXJ5IGFyZSBjaGFuZ2VkIHRvIEZpeGVkVmVjdG9y
LgorICAgICAgICAgICBUaGV5IGFyZSBhZGRlZCBhdCBjb21waWxpbmcgdGltZSwgYW5kIGFmdGVy
IHRoYXQsIHRoZXNlIHZlY3RvcnMgYXJlIG5vdCBtb2RpZmllZC4gU28gd2hlbiBmaW5hbGl6aW5n
LCB3ZSBjYW4gZWFzaWx5IG1ha2UgaXQgRml4ZWRWZWN0b3IuCisgICAgICAgICAgIFdlIGFsc28g
Y2hhbmdlIE9TUkVudHJ5Ojp7bV9yZXNodWZmbGluZ3MsbV9leHBlY3RlZFZhbHVlc30gdG8gRml4
ZWRWZWN0b3IgYW5kIEZpeGVkT3BlcmFuZHMuCisgICAgICAgIDIuIEZUTDo6SklUQ29kZTo6bV9v
c3JFeGl0IGlzIGNoYW5nZWQgZnJvbSBTZWdtZW50ZWRWZWN0b3IgdG8gVmVjdG9yLiBXZSBhcmUg
c3RpbGwgdXNpbmcgVmVjdG9yIHNpbmNlIGl0IGFsc28gaW52b2x2ZXMgb3NyRXhpdERlc2NyaXB0
b3IuCisgICAgICAgICAgIEJ1dCBsYXRlciwgd2Ugc2hvdWxkIG1lcmdlIG1fb3NyRXhpdCB0byBv
c3JFeGl0RGVzY3JpcHRvci4gVmVjdG9yIGlzIHN0aWxsIGJldHRlciB0aGFuIFNlZ21lbnRlZFZl
Y3RvciBzaW5jZSBpdCB3YXN0ZXMgc2V2ZXJhbCBlbnRyaWVzCisgICAgICAgICAgIHBlciBzZWdt
ZW50LiBTZWdtZW50ZWRWZWN0b3Igd2FzIHVzZWQgdG8gdXNlIGEgZGlyZWN0IHBvaW50ZXIgb2Yg
T1NSRXhpdCAodGhpcyBpcyBub3QgcG9zc2libGUgaW4gVmVjdG9yIHNpbmNlIHRoaXMgcG9pbnRl
ciBjYW4gYmUgaW52YWxpZGF0ZWQKKyAgICAgICAgICAgYWZ0ZXIgZ3Jvd2luZyksIGJ1dCB1c2Fn
ZSBvZiB0aGF0IGlzIGZhaXJseSBsaW1pdGVkIHNvIHRoYXQgd2UgY2FuIGp1c3QgcmVwbGFjZSB0
aGVtIHdpdGggbV9pbmRleCArIG9zckV4aXQgdmVjdG9yLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhp
dFNpdGVzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29kZTo6c2hyaW5rVG9GaXQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6Omxp
dmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6Zmlu
YWxpemVPU1JFbnRyeXBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5r
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRFeGNlcHRpb25IYW5kbGluZ09TUkV4
aXQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29k
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6c2hyaW5rVG9GaXQpOgorICAgICAg
ICAoSlNDOjpGVEw6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5n
Q2FsbFNpdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAg
ICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRM
T1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZnRsL0ZU
TE9TUkV4aXRIYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXRIYW5kbGU6OmVt
aXRFeGl0VGh1bmspOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmg6CisgICAgICAg
IChKU0M6OkZUTDo6T1NSRXhpdEhhbmRsZTo6T1NSRXhpdEhhbmRsZSk6CisgICAgICAgICogZnRs
L0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToK
KwogMjAyMS0wNC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9yZSBjaGFuZ2VzIHRvIHN1cHBvcnQgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBjZTdiNTdlYmVm
ZmViN2IxMDg2YmQyMzgyYWVkNjFkMjJkNDM2MWRiLi5kZTljYjVlMWMzOTI2ZmE1ODY5NzBjMzlj
MWQ1MTRmODYzZDZlNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcApAQCAtMjk3MywyMSArMjk3MywxOSBAQCB2b2lkIENvZGVCbG9jazo6dGFsbHlG
cmVxdWVudEV4aXRTaXRlcygpCiAgICAgc3dpdGNoIChqaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJ
VFR5cGU6OkRGR0pJVDogewogICAgICAgICBERkc6OkpJVENvZGUqIGppdENvZGUgPSBtX2ppdENv
ZGUtPmRmZygpOwotICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBqaXRDb2RlLT5vc3JFeGl0KQor
ICAgICAgICBmb3IgKGF1dG8mIGV4aXQgOiBqaXRDb2RlLT5tX29zckV4aXQpCiAgICAgICAgICAg
ICBleGl0LmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDogewotICAgICAgICAvLyBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBhdm9p
ZCBkdXBsaWNhdGluZyB0aGlzIGNvZGUgc2luY2UgdGhlIEZUTDo6SklUQ29kZTo6b3NyRXhpdAor
ICAgICAgICAvLyBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGlz
IGNvZGUgc2luY2UgdGhlIEZUTDo6SklUQ29kZTo6bV9vc3JFeGl0CiAgICAgICAgIC8vIHZlY3Rv
ciBjb250YWlucyBhIHRvdGFsbHkgZGlmZmVyZW50IHR5cGUsIHRoYXQganVzdCBzbyBoYXBwZW5z
IHRvIGJlaGF2ZSBsaWtlCi0gICAgICAgIC8vIERGRzo6SklUQ29kZTo6b3NyRXhpdC4KKyAgICAg
ICAgLy8gREZHOjpKSVRDb2RlOjptX29zckV4aXQuCiAgICAgICAgIEZUTDo6SklUQ29kZSogaml0
Q29kZSA9IG1faml0Q29kZS0+ZnRsKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBGVEw6Ok9TUkV4
aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICBmb3IgKGF1dG8mIGV4aXQg
OiBqaXRDb2RlLT5tX29zckV4aXQpCiAgICAgICAgICAgICBleGl0LmNvbnNpZGVyQWRkaW5nQXNG
cmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQmxvY2spOwotICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMu
aAppbmRleCA1MWFlYTRlNzg2YmVlMzU1NmE2NzhkNGI0MGFjMDVjY2ZiYjE5NzcwLi40NDRiY2Vi
ZmE5ODZmZGQxY2IwYjY4ZTYwN2MzODUwZTliNDdkMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApAQCAtMTcwLDYgKzE3MCwxNCBAQCBjbGFzcyBPcGVyYW5k
cyB7CiAgICAgICAgIG1fdmFsdWVzLmZpbGwoaW5pdGlhbFZhbHVlKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGV4cGxpY2l0IE9wZXJhbmRzKGNvbnN0IE9wZXJhbmRz
PFQsIFU+JiBvdGhlcikKKyAgICAgICAgOiBtX3ZhbHVlcyhvdGhlci5tX3ZhbHVlcykKKyAgICAg
ICAgLCBtX251bUFyZ3VtZW50cyhvdGhlci5tX251bUFyZ3VtZW50cykKKyAgICAgICAgLCBtX251
bUxvY2FscyhvdGhlci5tX251bUxvY2FscykKKyAgICB7CisgICAgfQorCiAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Bcmd1bWVudHM7IH0KICAgICBz
aXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUxvY2FsczsgfQogICAg
IHNpemVfdCBudW1iZXJPZlRtcHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBu
dW1iZXJPZkFyZ3VtZW50cygpIC0gbnVtYmVyT2ZMb2NhbHMoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKaW5kZXggMDRjMTMwZjFjY2M5NzUzNTU2MDA5NjI4NWMy
NjUzY2UzMWMyMDhkZS4uODdlOTlhOTRmNjNjN2VhMzU2ZDNkYzFlYmQyMzhmNTc1YmFmZDgzNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCkBAIC01OSw5ICs1OSw2
IEBAIEpJVENvZGUqIEpJVENvZGU6OmRmZygpCiB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAgY29tbW9uLnNocmlua1RvRml0KCk7Ci0g
ICAgb3NyRW50cnkuc2hyaW5rVG9GaXQoKTsKLSAgICBvc3JFeGl0LnNocmlua1RvRml0KCk7Ci0g
ICAgc3BlY3VsYXRpb25SZWNvdmVyeS5zaHJpbmtUb0ZpdCgpOwogICAgIG1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7
CiB9CkBAIC04Niw3ICs4Myw3IEBAIHZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luCiAKIFJlZ2lzdGVy
U2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0Nh
bGxTaXRlKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
CiB7Ci0gICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgIGZvciAoT1NSRXhp
dCYgZXhpdCA6IG1fb3NyRXhpdCkgewogICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSAmJiBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXguYml0cygpID09IGNh
bGxTaXRlSW5kZXguYml0cygpKSB7CiAgICAgICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiB2YWx1ZVJlY292ZXJpZXM7CiAgICAgICAgICAgICByZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4
aXQubV9jb2RlT3JpZ2luLCBleGl0Lm1fc3RyZWFtSW5kZXgsIHZhbHVlUmVjb3Zlcmllcyk7CkBA
IC0yMTksNyArMjE2LDcgQEAgdm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKQogewogICAgIGNvbW1vbi52YWxp
ZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogICAgIAotICAgIGZvciAoT1NSRW50
cnlEYXRhJiBlbnRyeSA6IG9zckVudHJ5KSB7CisgICAgZm9yIChPU1JFbnRyeURhdGEmIGVudHJ5
IDogbV9vc3JFbnRyeSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbnRyeS5tX2V4cGVj
dGVkVmFsdWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIGVudHJ5Lm1fZXhwZWN0ZWRWYWx1
ZXNbaV0udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKICAgICB9CkBAIC0y
MjksNyArMjI2LDcgQEAgdm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJh
Y2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKQogCiBPcHRpb25hbDxDb2RlT3JpZ2lu
PiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpCiB7Ci0gICAgZm9yIChPU1JF
eGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG1fb3NyRXhp
dCkgewogICAgICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5t
X2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpKSB7CiAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFy
dCgpLnVudGFnZ2VkUHRyKCkgPD0gcGMgJiYgcGMgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRy
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPENvZGVPcmlnaW4+KGV4aXQubV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpOwpAQCAtMjM5LDcgKzIzNiw3IEBAIE9wdGlvbmFsPENv
ZGVPcmlnaW4+IEpJVENvZGU6OmZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIEpJVENvZGU6OmZpbmFsaXplT1NSRW50cnlwb2lu
dHMoKQordm9pZCBKSVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKFZlY3RvcjxPU1JFbnRy
eURhdGE+JiYgb3NyRW50cnkpCiB7CiAgICAgYXV0byBjb21wYXJhdG9yID0gW10gKGNvbnN0IGF1
dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKICAgICAgICAgcmV0dXJuIGEubV9ieXRlY29kZUluZGV4
IDwgYi5tX2J5dGVjb2RlSW5kZXg7CkBAIC0yNTMsNiArMjUwLDcgQEAgdm9pZCBKSVRDb2RlOjpm
aW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKICAgICB9OwogICAgIHZlcmlmeUlzU29ydGVkKG9zckVu
dHJ5KTsKICNlbmRpZgorICAgIG1fb3NyRW50cnkgPSBXVEZNb3ZlKG9zckVudHJ5KTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAppbmRleCAwNDFlYWQ5ZTc5MzAwMzEzMGExYzhiYTUzYTdhMDkxMzEzNzMyNzI5Li5iMTU4
MjNjMzYxYmFkODI1MGZlZDkzODBiYjMyMWRlNzI0MzBjZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuaApAQCAtNTQsNDIgKzU0LDE0IEBAIGNsYXNzIEpJVENvZGUgZmlu
YWwgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSB7CiAgICAgQ29tbW9uRGF0YSogZGZnQ29tbW9uKCkg
ZmluYWw7CiAgICAgSklUQ29kZSogZGZnKCkgZmluYWw7CiAgICAgCi0gICAgT1NSRW50cnlEYXRh
KiBhcHBlbmRPU1JFbnRyeURhdGEoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDb2RlTG9j
YXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbWFjaGluZUNvZGUpCi0gICAgewotICAgICAgICBE
Rkc6Ok9TUkVudHJ5RGF0YSBlbnRyeTsKLSAgICAgICAgZW50cnkubV9ieXRlY29kZUluZGV4ID0g
Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgZW50cnkubV9tYWNoaW5lQ29kZSA9IG1hY2hpbmVDb2Rl
OwotICAgICAgICBvc3JFbnRyeS5hcHBlbmQoZW50cnkpOwotICAgICAgICByZXR1cm4gJm9zckVu
dHJ5Lmxhc3QoKTsKLSAgICB9Ci0gICAgCiAgICAgT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGFG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8T1NSRW50cnlEYXRhLCBCeXRlY29kZUluZGV4PigK
LSAgICAgICAgICAgIG9zckVudHJ5LCBvc3JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCisg
ICAgICAgICAgICBtX29zckVudHJ5LCBtX29zckVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCwK
ICAgICAgICAgICAgIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgpOwogICAgIH0KIAotICAg
IHZvaWQgZmluYWxpemVPU1JFbnRyeXBvaW50cygpOwotCi0gICAgdW5zaWduZWQgYXBwZW5kT1NS
RXhpdChjb25zdCBPU1JFeGl0JiBleGl0KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gb3NyRXhpdC5zaXplKCk7Ci0gICAgICAgIG9zckV4aXQuYXBwZW5kKGV4aXQpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBPU1JFeGl0JiBsYXN0T1NSRXhpdCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gb3NyRXhpdC5sYXN0KCk7Ci0gICAgfQotICAgIAotICAg
IHVuc2lnbmVkIGFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkoY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYgcmVjb3ZlcnkpCi0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBzcGVjdWxh
dGlvblJlY292ZXJ5LnNpemUoKTsKLSAgICAgICAgc3BlY3VsYXRpb25SZWNvdmVyeS5hcHBlbmQo
cmVjb3ZlcnkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICB2b2lkIGZpbmFs
aXplT1NSRW50cnlwb2ludHMoVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiYmKTsKICAgICAKICAg
ICB2b2lkIHJlY29uc3RydWN0KAogICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNp
Z25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCk7CkBAIC0x
MzUsOSArMTA3LDkgQEAgY2xhc3MgSklUQ29kZSBmaW5hbCA6IHB1YmxpYyBEaXJlY3RKSVRDb2Rl
IHsKIAogcHVibGljOgogICAgIENvbW1vbkRhdGEgY29tbW9uOwotICAgIFZlY3RvcjxERkc6Ok9T
UkVudHJ5RGF0YT4gb3NyRW50cnk7Ci0gICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwg
OD4gb3NyRXhpdDsKLSAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxh
dGlvblJlY292ZXJ5OworICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX29zckVu
dHJ5OworICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0OworICAgIEZpeGVk
VmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJlY292ZXJ5Owog
ICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERG
Rzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCAxZTJjN2EyZWQ2YTRhZDM0ZWQ1MjkyODBjMTEz
M2FlYWNkNDgwMDIxLi5mOGFjNWYwYjhmNjE4ZDI5M2JlZTU5ZGJhNjRmYzYyNDIxNTM3YzgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtNjYs
OSArNjYsOSBAQCBKSVRDb21waWxlcjo6fkpJVENvbXBpbGVyKCkKIAogdm9pZCBKSVRDb21waWxl
cjo6bGlua09TUkV4aXRzKCkKIHsKLSAgICBBU1NFUlQobV9qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KSA9PSBtX2V4aXRDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9vc3JFeGl0
LnNpemUoKSA9PSBtX2V4aXRDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBpZiAoVU5MSUtF
TFkobV9ncmFwaC5jb21waWxhdGlvbigpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE9T
UkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAg
ICAgICAgICAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKICAgICAgICAgICAgIGlmICghaW5mby5t
X2ZhaWx1cmVKdW1wcy5lbXB0eSgpKSB7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmxpbmtPU1JFeGl0cygpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXTsK
ICAgICAgICAgSnVtcExpc3QmIGZhaWx1cmVKdW1wcyA9IGluZm8ubV9mYWlsdXJlSnVtcHM7CiAg
ICAgICAgIGlmICghZmFpbHVyZUp1bXBzLmVtcHR5KCkpCkBAIC0yNzgsMTEgKzI3OCwxMSBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmsgPSB2bSgp
LmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgYXV0byB0
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5rLmNv
ZGUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5z
aXplKCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXQuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZXhp
dENvbXBpbGF0aW9uSW5mb1tpXTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VQcm9iZU9TUkV4
aXQoKSkgewogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV9wYXRjaGFibGVKdW1w
Lm1fanVtcCwgdGFyZ2V0KTsKLSAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUt
Pm9zckV4aXRbaV07CisgICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9vc3JFeGl0W2ldOwog
ICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUp1bXBMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihpbmZvLm1fcGF0Y2hhYmxlSnVtcCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZS5pc1NldCgpKSB7CkBAIC0y
OTMsNyArMjkzLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5jb21waWxhdGlvbigp
KSkgewotICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKSk7CisgICAgICAgIEFTU0VSVChtX2V4aXRTaXRlTGFiZWxzLnNpemUo
KSA9PSBtX29zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZlY3RvcjxMYWJl
bD4mIGxhYmVscyA9IG1fZXhpdFNpdGVMYWJlbHNbaV07CiAgICAgICAgICAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBhZGRyZXNzZXM7CkBAIC0zMDUs
NiArMzA1LDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQogICAgICAgICBBU1NFUlQoIW1fZXhpdFNpdGVMYWJlbHMuc2l6ZSgpKTsKIAogICAgIG1faml0
Q29kZS0+Y29tbW9uLmNvbXBpbGF0aW9uID0gbV9ncmFwaC5jb21waWxhdGlvbigpOworICAgIG1f
aml0Q29kZS0+bV9vc3JFeGl0ID0gV1RGTW92ZShtX29zckV4aXQpOworICAgIG1faml0Q29kZS0+
bV9zcGVjdWxhdGlvblJlY292ZXJ5ID0gV1RGTW92ZShtX3NwZWN1bGF0aW9uUmVjb3ZlcnkpOwog
ICAgIAogICAgIC8vIExpbmsgbmV3IERGRyBleGNlcHRpb24gaGFuZGxlcnMgYW5kIHJlbW92ZSBi
YXNlbGluZSBKSVQgaGFuZGxlcnMuCiAgICAgbV9jb2RlQmxvY2stPmNsZWFyRXhjZXB0aW9uSGFu
ZGxlcnMoKTsKQEAgLTU0NywzMiArNTQ5LDM1IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9T
UkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAg
ICAgaWYgKCFiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IG1faml0Q29kZS0+YXBwZW5kT1NS
RW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9m
PE9TUkVudHJ5UHRyVGFnPihibG9ja0hlYWQpKTsKKyAgICBPU1JFbnRyeURhdGEgZW50cnk7Cisg
ICAgZW50cnkubV9ieXRlY29kZUluZGV4ID0gYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luOworICAg
IGVudHJ5Lm1fbWFjaGluZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8T1NSRW50cnlQdHJU
YWc+KGJsb2NrSGVhZCk7CisKKyAgICBGaXhlZE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IGV4cGVj
dGVkVmFsdWVzKGJhc2ljQmxvY2suaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKTsKKyAg
ICBWZWN0b3I8T1NSRW50cnlSZXNodWZmbGluZz4gcmVzaHVmZmxpbmdzOwogCi0gICAgZW50cnkt
Pm1fZXhwZWN0ZWRWYWx1ZXMgPSBiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0
SGVhZDsKLSAgICAgICAgCiAgICAgLy8gRml4IHRoZSBleHBlY3RlZCB2YWx1ZXM6IGluIG91ciBw
cm90b2NvbCwgYSBkZWFkIHZhcmlhYmxlIHdpbGwgaGF2ZSBhbiBleHBlY3RlZAogICAgIC8vIHZh
bHVlIG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMg
dGhlcmUuIFNvIHdlIHJlYWxseQogICAgIC8vIG5lZWQgKFRvcCwgVE9QKS4KICAgICBmb3IgKHNp
emVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogICAgICAgICBOb2RlKiBub2RlID0g
YmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZUJ5dGVjb2RlVG9wKCk7Cisg
ICAgICAgICAgICBleHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZUJ5dGVjb2Rl
VG9wKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Js
b2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CiAg
ICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5tYWtlQnl0ZWNvZGVUb3AoKTsK
KyAgICAgICAgICAgIGV4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5tYWtlQnl0ZWNvZGVUb3Ao
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBlbnRyeS0+bV9t
YWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkudG9Mb2NhbCgpKTsK
KyAgICAgICAgICAgIGVudHJ5Lm1fbWFjaGluZVN0YWNrVXNlZC5zZXQodmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRE
b3VibGU6Ci0gICAgICAgICAgICAgICAgZW50cnktPm1fbG9jYWxzRm9yY2VkRG91YmxlLnNldChs
b2NhbCk7CisgICAgICAgICAgICAgICAgZW50cnkubV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxv
Y2FsKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZElu
dDUyOgotICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZEFueUludC5zZXQobG9j
YWwpOworICAgICAgICAgICAgICAgIGVudHJ5Lm1fbG9jYWxzRm9yY2VkQW55SW50LnNldChsb2Nh
bCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTgwLDE0ICs1ODUsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6
bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVs
IGJsb2MKIAogICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFuZCgpLmlzVG1wKCkp
OwogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkg
IT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPm1f
cmVzaHVmZmxpbmdzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICByZXNodWZmbGluZ3MuYXBwZW5k
KAogICAgICAgICAgICAgICAgICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAogICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQo
KSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgICAgIAotICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5zaHJp
bmtUb0ZpdCgpOworICAgIGVudHJ5Lm1fZXhwZWN0ZWRWYWx1ZXMgPSBXVEZNb3ZlKGV4cGVjdGVk
VmFsdWVzKTsKKyAgICBlbnRyeS5tX3Jlc2h1ZmZsaW5ncyA9IFdURk1vdmUocmVzaHVmZmxpbmdz
KTsKKyAgICBtX29zckVudHJ5LmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmFwcGVuZEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdChFeGl0S2luZCBraW5kLCB1
bnNpZ25lZCBldmVudFN0cmVhbUluZGV4LCBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW4sIEhhbmRs
ZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QganVtcHNUb0ZhaWwpCkBAIC01OTYsNyArNjAzLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6YXBwZW5kRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0KEV4aXRLaW5kIGtpbmQs
IHVuc2lnbmVkIGV2ZW50U3QKICAgICBleGl0Lm1fY29kZU9yaWdpbiA9IG9wQ2F0Y2hPcmlnaW47
CiAgICAgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAg
ICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgZXhpdEluZm8gPSBhcHBlbmRFeGl0SW5mbyhqdW1w
c1RvRmFpbCk7Ci0gICAgaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KGV4aXQpOworICAgIG1fb3Ny
RXhpdC5hcHBlbmQoV1RGTW92ZShleGl0KSk7CiAgICAgbV9leGNlcHRpb25IYW5kbGVyT1NSRXhp
dENhbGxTaXRlcy5hcHBlbmQoRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SW5mbyB7IGV4aXRJbmZv
LCAqZXhjZXB0aW9uSGFuZGxlciwgY2FsbFNpdGUgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA4OGQ2Mjc2NzI0OGUxODhlZjAzNzU5NjNk
YzE3MmJmYzU0YmJkODBjLi4xOGUzNjYwMTMwNTVmMjU3M2JmZjY1YWM4OWE3NDc5MGI2YTIyNjgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0yNjUs
NyArMjY1LDIxIEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiAK
ICAgICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smLCBKSVRDb21waWxlcjo6TGFiZWwg
YmxvY2tIZWFkLCBMaW5rQnVmZmVyJik7CiAgICAgdm9pZCBub3RpY2VDYXRjaEVudHJ5cG9pbnQo
QmFzaWNCbG9jayYsIEpJVENvbXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImLCBW
ZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKTsKLSAgICAKKworICAgIHVuc2ln
bmVkIGFwcGVuZE9TUkV4aXQoT1NSRXhpdCYmIGV4aXQpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX29zckV4aXQuc2l6ZSgpOworICAgICAgICBtX29zckV4aXQuYXBwZW5kKFdU
Rk1vdmUoZXhpdCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2ln
bmVkIGFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkoY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3NwZWN1bGF0aW9u
UmVjb3Zlcnkuc2l6ZSgpOworICAgICAgICBtX3NwZWN1bGF0aW9uUmVjb3ZlcnkuYXBwZW5kKHJl
Y292ZXJ5KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBSZWZQdHI8SklU
Q29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgIAogICAgIFZlY3RvcjxM
YWJlbD4mIGJsb2NrSGVhZHMoKSB7IHJldHVybiBtX2Jsb2NrSGVhZHM7IH0KQEAgLTM3Myw2ICsz
ODcsMTEgQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKICAgICBW
ZWN0b3I8SlNEaXJlY3RUYWlsQ2FsbFJlY29yZCwgND4gbV9qc0RpcmVjdFRhaWxDYWxsczsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbywgND4gbV9leGl0Q29tcGls
YXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+PiBtX2V4aXRTaXRlTGFiZWxzOwor
cHVibGljOgorICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JFbnRyeTsKKyAgICBW
ZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CisgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRp
b25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJlY292ZXJ5OworcHJpdmF0ZToKICAgICAKICAgICBz
dHJ1Y3QgRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SW5mbyB7CiAgICAgICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGV4aXRJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCmluZGV4IDE2YjM4MjFiODk3MjgxYmExZDU1Y2Q4ZWYwYWIxNDA5NjZlZjcyZWUuLmI5YmUx
OTc5ZTVjMGQ3ZWE2Y2RhODE0MjYwZGI5ZDc0MGRlZjFjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmgKQEAgLTU2LDExICs1NiwxMSBAQCBzdHJ1Y3QgT1NSRW50cnlS
ZXNodWZmbGluZyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICBCeXRlY29kZUluZGV4IG1f
Ynl0ZWNvZGVJbmRleDsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxPU1JFbnRyeVB0clRhZz4gbV9t
YWNoaW5lQ29kZTsKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVz
OworICAgIEZpeGVkT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV9leHBlY3RlZFZhbHVlczsKICAg
ICAvLyBVc2UgYml0dmVjdG9ycyBoZXJlIGJlY2F1c2UgdGhleSB0ZW5kIHRvIG9ubHkgcmVxdWly
ZSBvbmUgd29yZC4KICAgICBCaXRWZWN0b3IgbV9sb2NhbHNGb3JjZWREb3VibGU7CiAgICAgQml0
VmVjdG9yIG1fbG9jYWxzRm9yY2VkQW55SW50OwotICAgIFZlY3RvcjxPU1JFbnRyeVJlc2h1ZmZs
aW5nPiBtX3Jlc2h1ZmZsaW5nczsKKyAgICBGaXhlZFZlY3RvcjxPU1JFbnRyeVJlc2h1ZmZsaW5n
PiBtX3Jlc2h1ZmZsaW5nczsKICAgICBCaXRWZWN0b3IgbV9tYWNoaW5lU3RhY2tVc2VkOwogICAg
IAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBmZDYzOGEz
OGNkNjM5NWE1MDhjOGY5NWU4YTkxNzUzYTY0ZDk1MjBiLi5jZjI0YzMxMjk4ODU1ZDA4ZjAxZTgw
Mjc3YTY4ZWY5YzkwMzE2MTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ29tcGlsZU9TUkV4aXQsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogCiAgICAgdWludDMyX3QgZXhpdEluZGV4
ID0gdm0ub3NyRXhpdEluZGV4OwotICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPm9zckV4aXRbZXhpdEluZGV4XTsKKyAgICBPU1JFeGl0JiBleGl0ID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5tX29zckV4aXRbZXhpdEluZGV4XTsKIAogICAgIEFT
U0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9u
KCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWxlT1NSRXhpdCwgdm9pZCwgKENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKIAogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5
ID0gbnVsbHB0cjsKICAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpCi0g
ICAgICAgIHJlY292ZXJ5ID0gJmNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c3BlY3VsYXRp
b25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07CisgICAgICAgIHJlY292ZXJ5ID0gJmNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+bV9zcGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9y
ZWNvdmVyeUluZGV4XTsKIAogICAgIHsKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxv
Y2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAppbmRleCAwMmQ2MTVmOTExNThlNDJiYWFjYWYzNjJlOTYxZWQ2Zjc1ZjFjYTExLi5kYWM4MjU0
ZTY3YmE3YTU4MDY3ZGI3MGYyNzE0NGViMTdmNTViMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlCiAgICAgICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBz
VG9GYWlsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRv
RmFpbCk7Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAg
bV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2Rl
KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFp
bCkKQEAgLTI4MywxNiArMjgzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlCiAgICAgICAg
IG1faml0LmFwcGVuZEV4aXRJbmZvKG15SnVtcHNUb0ZhaWwpOwogICAgIH0gZWxzZQogICAgICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAgbV9qaXQuaml0Q29kZSgp
LT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgo
KS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkp
OwogfQogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSog
bm9kZSkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5qaXRDb2RlKCkt
Pm9zckV4aXQuc2l6ZSgpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQubV9vc3JFeGl0LnNp
emUoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwotICAgIG1faml0LmppdENvZGUoKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCku
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhp
cywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChr
aW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsK
ICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcihpbmRleCk7CiB9CiAKQEAgLTMxNSw5
ICszMTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZQogewogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOworICAgIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSBtX2ppdC5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJl
Y292ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKLSAgICBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9k
ZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKKyAgICBt
X2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3Jh
cGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUp
LCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4KSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQpAQCAtMzMwLDcgKzMz
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2ludChOb2RlKiBu
b2RlKQogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxl
cjo6SnVtcExpc3QoKSk7Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoCisgICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KAogICAgICAgICBVbmNvdW50YWJs
ZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJjZSgpLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlKCksCiAgICAgICAgIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAgICBpbmZvLm1fcmVw
bGFjZW1lbnRTb3VyY2UgPSBtX2ppdC53YXRjaHBvaW50TGFiZWwoKTsKQEAgLTIyMDEsNyArMjIw
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2ppdC5qaXRDb2RlKCktPmZpbmFs
aXplT1NSRW50cnlwb2ludHMoKTsKKyAgICBtX2ppdC5qaXRDb2RlKCktPmZpbmFsaXplT1NSRW50
cnlwb2ludHMoV1RGTW92ZShtX2ppdC5tX29zckVudHJ5KSk7CiAgICAgbV9qaXQuaml0Q29kZSgp
LT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKFdURk1vdmUobV9qaXQuZ3JhcGgoKS5t
X2NhdGNoRW50cnlwb2ludHMpKTsKIAogICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3Ny
RW50cnlIZWFkcy5zaXplKCkpOwpAQCAtMjIwOSw3ICsyMjA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIER1bXBDb250ZXh0IGR1bXBDb250
ZXh0OwogICAgICAgICBkYXRhTG9nKCJPU1IgRW50cmllczpcbiIpOwotICAgICAgICBmb3IgKE9T
UkVudHJ5RGF0YSYgZW50cnlEYXRhIDogbV9qaXQuaml0Q29kZSgpLT5vc3JFbnRyeSkKKyAgICAg
ICAgZm9yIChPU1JFbnRyeURhdGEmIGVudHJ5RGF0YSA6IG1faml0LmppdENvZGUoKS0+bV9vc3JF
bnRyeSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpbkNvbnRleHQoZW50cnlEYXRhLCAm
ZHVtcENvbnRleHQpLCAiXG4iKTsKICAgICAgICAgaWYgKCFkdW1wQ29udGV4dC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBkdW1wQ29udGV4dC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAppbmRleCA3MzlhNjRkYzFiMTMwMjI1ZjI4
ZDExMzZhZDlhOTA5NjY5YWU3ZWUxLi5iZjM2NDQxYTczNWFhNWU1ODdkMjk5MGZjYWUxNjk3ZThi
ZmY2MmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKQEAgLTEz
OCw3ICsxMzgsNyBAQCBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6OmRmZ0NvbW1vbigpCiB2b2lk
IEpJVENvZGU6OnNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB7CiAgICAg
Y29tbW9uLnNocmlua1RvRml0KCk7Ci0gICAgb3NyRXhpdC5zaHJpbmtUb0ZpdCgpOworICAgIG1f
b3NyRXhpdC5zaHJpbmtUb0ZpdCgpOwogICAgIG9zckV4aXREZXNjcmlwdG9ycy5zaHJpbmtUb0Zp
dCgpOwogICAgIGxhenlTbG93UGF0aHMuc2hyaW5rVG9GaXQoKTsKIH0KQEAgLTE0NywxMyArMTQ3
LDEzIEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZl
cmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKIHsKICAgICBjb21tb24udmFsaWRhdGVSZWZlcmVu
Y2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKICAgICAKLSAgICBmb3IgKE9TUkV4aXQmIGV4aXQgOiBv
c3JFeGl0KQorICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG1fb3NyRXhpdCkKICAgICAgICAgZXhp
dC5tX2Rlc2NyaXB0b3ItPnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9
CiAKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKIHsKLSAgICBmb3IgKE9TUkV4aXQmIGV4aXQgOiBvc3JFeGl0KSB7CisgICAgZm9yIChPU1JF
eGl0JiBleGl0IDogbV9vc3JFeGl0KSB7CiAgICAgICAgIGlmIChleGl0Lm1fZXhjZXB0aW9uSGFu
ZGxlckNhbGxTaXRlSW5kZXguYml0cygpID09IGNhbGxTaXRlSW5kZXguYml0cygpKSB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKTsKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQuaXNHZW5lcmljVW53aW5kSGFuZGxlcigpKTsKQEAg
LTE2NSw3ICsxNjUsNyBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvYwogCiBPcHRpb25hbDxDb2Rl
T3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIHBjKQog
ewotICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKKyAgICBmb3IgKE9TUkV4aXQm
IGV4aXQgOiBtX29zckV4aXQpIHsKICAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUq
IGhhbmRsZSA9IGV4aXQubV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKSkgewogICAgICAgICAgICAg
aWYgKGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpIDw9IHBjICYmIHBjIDwgaGFuZGxlLT5l
bmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxDb2Rl
T3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgKaW5kZXggZjNlZWRlMmVkODk0OTAxYTJhYTdkMDRkNTE4YTU3
YjJmYzVkOTRhOC4uZTdiOGU4YjNjZTRiNDZlYzMyNWYzNzA0ZTNkZWVjYTA4ZWVkYWIyMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKQEAgLTcwLDcgKzcwLDcgQEAgY2xh
c3MgSklUQ29kZSA6IHB1YmxpYyBKU0M6OkpJVENvZGUgewogICAgIHZvaWQgc2hyaW5rVG9GaXQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CiAgICAgCiAgICAgREZHOjpDb21t
b25EYXRhIGNvbW1vbjsKLSAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsK
KyAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JF
eGl0RGVzY3JpcHRvciwgOD4gb3NyRXhpdERlc2NyaXB0b3JzOwogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8TGF6eVNsb3dQYXRoPj4gbGF6eVNsb3dQYXRoczsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCmluZGV4IDMzOTkzZDIyODY0OGE4MWI5MDk3Nzhl
Nzk1NzA0ZDJiODljZDc2YjEuLjQ2MTYxMTYzOWMwMDg2ZDYyZjIyZGFiNDNlMDg3OTVmZDJlZGY5
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcApAQCAtODIsMjEg
KzgyLDIwIEBAIFJlZjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjo6cHJlcGFyZU9T
UkV4aXRIYW5kbGUoCiAgICAgU3RhdGUmIHN0YXRlLCBFeGl0S2luZCBleGl0S2luZCwgY29uc3Qg
Tm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwKICAgICBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcywgdWludDMyX3QgZGZnTm9kZUluZGV4LCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0g
ICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsKLSAgICBP
U1JFeGl0JiBleGl0ID0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hbGxvYygKLSAgICAgICAgdGhp
cywgZXhpdEtpbmQsIG5vZGVPcmlnaW4uZm9yRXhpdCwgbm9kZU9yaWdpbi5zZW1hbnRpYywgbm9k
ZU9yaWdpbi53YXNIb2lzdGVkLCBkZmdOb2RlSW5kZXgpOwotICAgIFJlZjxPU1JFeGl0SGFuZGxl
PiBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIGV4aXQpKTsKLSAg
ICBleGl0Lm1fdmFsdWVSZXBzID0gRml4ZWRWZWN0b3I8QjM6OlZhbHVlUmVwPihwYXJhbXMuc2l6
ZSgpIC0gb2Zmc2V0KTsKKyAgICBGaXhlZFZlY3RvcjxCMzo6VmFsdWVSZXA+IHZhbHVlUmVwcyhw
YXJhbXMuc2l6ZSgpIC0gb2Zmc2V0KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvZmZzZXQsIGlu
ZGV4SW5WYWx1ZVJlcHMgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpLCArK2luZGV4SW5WYWx1
ZVJlcHMpCi0gICAgICAgIGV4aXQubV92YWx1ZVJlcHNbaW5kZXhJblZhbHVlUmVwc10gPSBwYXJh
bXNbaV07Ci0gICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgICAgdmFsdWVSZXBzW2luZGV4SW5WYWx1
ZVJlcHNdID0gcGFyYW1zW2ldOworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGUuaml0Q29kZS0+
bV9vc3JFeGl0LnNpemUoKTsKKyAgICBzdGF0ZS5qaXRDb2RlLT5tX29zckV4aXQuYXBwZW5kKE9T
UkV4aXQodGhpcywgZXhpdEtpbmQsIG5vZGVPcmlnaW4uZm9yRXhpdCwgbm9kZU9yaWdpbi5zZW1h
bnRpYywgbm9kZU9yaWdpbi53YXNIb2lzdGVkLCBkZmdOb2RlSW5kZXgsIFdURk1vdmUodmFsdWVS
ZXBzKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIHN0
YXRlLmppdENvZGUuZ2V0KCkpKTsKIH0KIAogT1NSRXhpdDo6T1NSRXhpdCgKICAgICBPU1JFeGl0
RGVzY3JpcHRvciogZGVzY3JpcHRvciwgRXhpdEtpbmQgZXhpdEtpbmQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYm9vbCB3
YXNIb2lzdGVkLCB1aW50MzJfdCBkZmdOb2RlSW5kZXgpCisgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2FzSG9pc3RlZCwgdWludDMyX3QgZGZnTm9kZUluZGV4
LCBGaXhlZFZlY3RvcjxCMzo6VmFsdWVSZXA+JiYgdmFsdWVSZXBzKQogICAgIDogT1NSRXhpdEJh
c2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4sIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgd2FzSG9p
c3RlZCwgZGZnTm9kZUluZGV4KQogICAgICwgbV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCisgICAg
LCBtX3ZhbHVlUmVwcyhXVEZNb3ZlKHZhbHVlUmVwcykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXggOTJjYTRmZTlkMzFmZmY0MTY5MDg0ZDk4ZmI4YmVm
NGMwYWQ2OWE3YS4uOTJjYjg4NzNjNTg2M2E3ZTc5NWJhODE5NTY2Mzc2NDA3MmM0NTI3YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKQEAgLTEyMCw3ICsxMjAsNyBAQCBz
dHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogfTsKIAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMg
REZHOjpPU1JFeGl0QmFzZSB7Ci0gICAgT1NSRXhpdChPU1JFeGl0RGVzY3JpcHRvciosIEV4aXRL
aW5kLCBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYm9v
bCB3YXNIb2lzdGVkLCB1aW50MzJfdCBkZmdOb2RlSW5kZXgpOworICAgIE9TUkV4aXQoT1NSRXhp
dERlc2NyaXB0b3IqLCBFeGl0S2luZCwgQ29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUsIGJvb2wgd2FzSG9pc3RlZCwgdWludDMyX3QgZGZnTm9kZUluZGV4LCBG
aXhlZFZlY3RvcjxCMzo6VmFsdWVSZXA+JiYpOwogCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1f
ZGVzY3JpcHRvcjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0clRhZz4gbV9j
b2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCmluZGV4IGEyOGQ5NzYwODYwMjU3Njg0MjY0ZTRiZWE5MmExMjQxYzE3OGU2ZGUuLjBlMDkw
YzgxMDc2N2Q1NzRlZDBiNTZkMWYyMmY1OGNmMzkyYTczMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTU0Myw3ICs1NDMsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGlsZUZUTE9TUkV4aXQsIHZv
aWQqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2
bS5oZWFwKTsKIAogICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZnRsKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbZXhpdElEXTsKKyAg
ICBPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+bV9vc3JFeGl0W2V4aXRJRF07CiAgICAgCiAgICAg
aWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBP
cHRpb25zOjp2ZXJib3NlRlRMT1NSRXhpdCgpKSB7CiAgICAgICAgIGRhdGFMb2coIiAgICBPd25p
bmcgYmxvY2s6ICIsIHBvaW50ZXJEdW1wKGNvZGVCbG9jayksICJcbiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKaW5kZXggNTlkMjJlY2Q2MTMz
MmVlNzI4N2U2ODE0NjE0OTJhYzk1MWI2OWJiYS4uYmIwMDM2ZGEwYTg0NDU1YjhiNGQ5ZmRiNjZj
Mzc4Y2EwMDllNzE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0SGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRIYW5kbGUuY3BwCkBAIC00MSwxMyArNDEsMTMgQEAgdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0
RXhpdFRodW5rKFN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IHN0YXRlLmdyYXBoLmNvbXBpbGF0aW9uKCk7CiAg
ICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBteUxhYmVsID0gaml0LmxhYmVsKCk7CiAgICAgbGFiZWwg
PSBteUxhYmVsOwotICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVn
aXN0ZXJzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgaml0LnB1c2hU
b1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobV9pbmRleCkpOwogICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBqdW1w
ID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gc2VsZiA9
IHRoaXM7CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCiAg
ICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJsZUp1bXAg
PSBDb2RlTG9jYXRpb25KdW1wPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihqdW1wKSk7CisgICAgICAgICAgICBzZWxmLT5tX2ppdENvZGUt
Pm1fb3NyRXhpdFtzZWxmLT5tX2luZGV4XS5tX3BhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25K
dW1wPEpTSW50ZXJuYWxQdHJUYWc+KGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihqdW1wKSk7CiAKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAg
ICAgICBqdW1wLm1fanVtcCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdEhhbmRsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
SGFuZGxlLmgKaW5kZXggMDc2M2Q3OTdjY2Q4MmFjNTEzNDE5YmVjMDJhMmE1MzU5MzY1OTQ2Ni4u
NWJjOTY0OTE1YjQ0NjBmNjRjY2NkY2JhYTEyODA1ODAxMmZhNGVjOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmgKQEAgLTQwLDE0ICs0MCwxNCBAQCBz
dHJ1Y3QgT1NSRXhpdDsKIC8vIFRoaXMgaXMgYW4gb2JqZWN0IHRoYXQgc3RvcmVzIHNvbWUgaW50
ZXJlc3RpbmcgZGF0YSBhYm91dCBhbiBPU1IgZXhpdC4gSXQncyBleHBlY3RlZCB0aGF0IHlvdSB3
aWxsCiAvLyBzY3JhcGUgdGhpcyBkYXRhIGZyb20gdGhpcyBvYmplY3QgYnkgdGhlIHRpbWUgY29t
cGlsYXRpb24gZmluaXNoZXMuCiBzdHJ1Y3QgT1NSRXhpdEhhbmRsZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxPU1JFeGl0SGFuZGxlPiB7Ci0gICAgT1NSRXhpdEhhbmRsZSh1bnNpZ25l
ZCBpbmRleCwgT1NSRXhpdCYgZXhpdCkKLSAgICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAg
LCBleGl0KGV4aXQpCisgICAgT1NSRXhpdEhhbmRsZSh1bnNpZ25lZCBpbmRleCwgSklUQ29kZSog
aml0Q29kZSkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1faml0Q29kZShq
aXRDb2RlKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleDsKLSAgICBPU1JFeGl0
JiBleGl0OworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSklUQ29kZSogbV9qaXRDb2RlOwog
CiAgICAgLy8gVGhpcyBpcyB0aGUgbGFiZWwgYXQgd2hpY2ggdGhlIE9TUiBleGl0IGp1bXAgbGl2
ZXMuIFRoaXMgd2lsbCBnZXQgcG9wdWxhdGVkIG9uY2UgdGhlIE9TUiBleGl0CiAgICAgLy8gZW1p
dHMgaXRzIGp1bXAuIFRoaXMgaGFwcGVucyBpbW1lZGlhdGVseSB3aGVuIHlvdSBjYWxsIE9TUkV4
aXQ6OmFwcGVuZE9TUkV4aXQoKS4gSXQgaGFwcGVucyBhdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKaW5k
ZXggMjQyMzczODY2NjU5NmRiMjAyODQxMmYxMzU1ZTM4ZGU1MWU4MmJlNy4uY2QyZjJmNWQ0ZDg5
NjJhZTU1NGQwMzdjNTMwNTJjOWE3MmQzNTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCkBAIC04
MCw3ICs4MCw3IEBAIHZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0
Q3JlYXRpb25Gb3JVbndpbmQoCiAgICAgCiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRs
ZSA9IGNyZWF0ZUhhbmRsZShHZW5lcmljVW53aW5kLCBwYXJhbXMpOwogCi0gICAgaGFuZGxlLT5l
eGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4OworICAg
IGhhbmRsZS0+bV9qaXRDb2RlLT5tX29zckV4aXRbaGFuZGxlLT5tX2luZGV4XS5tX2V4Y2VwdGlv
bkhhbmRsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsKIAogICAgIEhhbmRsZXJJbmZv
IGhhbmRsZXIgPSBtX2hhbmRsZXI7CiAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAo=
</data>
<flag name="commit-queue"
          id="446576"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426322</attachid>
            <date>2021-04-16 22:29:06 -0700</date>
            <delta_ts>2021-04-17 21:50:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224713-20210416222905.patch</filename>
            <type>text/plain</type>
            <size>34614</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li5lNTBhYWE4YWU4Y2Y0NGJl
ZmUyMGJmOGI4MzQ5NjNmZjcwZDFhNjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAyMS0wNC0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE1ha2UgbW9yZSBERkcvRlRMIGRhdGEgRml4ZWRWZWN0b3IvVmVj
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3
MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBE
Rkc6OkpJVENvZGU6Om1fb3NyRW50cnkgLyBERkc6OkpJVENvZGU6Om1fb3NyRXhpdCAvIERGRzo6
SklUQ29kZTo6bV9zcGVjdWxhdGlvblJlY292ZXJ5IGFyZSBjaGFuZ2VkIHRvIEZpeGVkVmVjdG9y
LgorICAgICAgICAgICBUaGV5IGFyZSBhZGRlZCBhdCBjb21waWxpbmcgdGltZSwgYW5kIGFmdGVy
IHRoYXQsIHRoZXNlIHZlY3RvcnMgYXJlIG5vdCBtb2RpZmllZC4gU28gd2hlbiBmaW5hbGl6aW5n
LCB3ZSBjYW4gZWFzaWx5IG1ha2UgaXQgRml4ZWRWZWN0b3IuCisgICAgICAgICAgIFdlIGFsc28g
Y2hhbmdlIE9TUkVudHJ5Ojp7bV9yZXNodWZmbGluZ3MsbV9leHBlY3RlZFZhbHVlc30gdG8gRml4
ZWRWZWN0b3IgYW5kIEZpeGVkT3BlcmFuZHMuCisgICAgICAgIDIuIEZUTDo6SklUQ29kZTo6bV9v
c3JFeGl0IGlzIGNoYW5nZWQgZnJvbSBTZWdtZW50ZWRWZWN0b3IgdG8gVmVjdG9yLiBXZSBhcmUg
c3RpbGwgdXNpbmcgVmVjdG9yIHNpbmNlIGl0IGFsc28gaW52b2x2ZXMgb3NyRXhpdERlc2NyaXB0
b3IuCisgICAgICAgICAgIEJ1dCBsYXRlciwgd2Ugc2hvdWxkIG1lcmdlIG1fb3NyRXhpdCB0byBv
c3JFeGl0RGVzY3JpcHRvci4gVmVjdG9yIGlzIHN0aWxsIGJldHRlciB0aGFuIFNlZ21lbnRlZFZl
Y3RvciBzaW5jZSBpdCB3YXN0ZXMgc2V2ZXJhbCBlbnRyaWVzCisgICAgICAgICAgIHBlciBzZWdt
ZW50LiBTZWdtZW50ZWRWZWN0b3Igd2FzIHVzZWQgdG8gdXNlIGEgZGlyZWN0IHBvaW50ZXIgb2Yg
T1NSRXhpdCAodGhpcyBpcyBub3QgcG9zc2libGUgaW4gVmVjdG9yIHNpbmNlIHRoaXMgcG9pbnRl
ciBjYW4gYmUgaW52YWxpZGF0ZWQKKyAgICAgICAgICAgYWZ0ZXIgZ3Jvd2luZyksIGJ1dCB1c2Fn
ZSBvZiB0aGF0IGlzIGZhaXJseSBsaW1pdGVkIHNvIHRoYXQgd2UgY2FuIGp1c3QgcmVwbGFjZSB0
aGVtIHdpdGggbV9pbmRleCArIG9zckV4aXQgdmVjdG9yLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhp
dFNpdGVzKToKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpP
cGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNp
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZS5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFwcGVuZEV4Y2VwdGlvbkhh
bmRsaW5nT1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjphcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bGlua09TUkVudHJpZXMpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRDb2RlOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjps
aXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZmluZFBDKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29k
ZS5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
U1JFeGl0RGVzY3JpcHRvcjo6cHJlcGFyZU9TUkV4aXRIYW5kbGUpOgorICAgICAgICAoSlNDOjpG
VEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayk6Cisg
ICAgICAgICogZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JF
eGl0SGFuZGxlOjpPU1JFeGl0SGFuZGxlKToKKyAgICAgICAgKiBmdGwvRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6UGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZTo6c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQpOgorCiAyMDIxLTA0LTE2ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3JlIGNoYW5nZXMgdG8g
c3VwcG9ydCB0aGUgVGVybWluYXRpb25FeGNlcHRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGNlN2I1N2ViZWZmZWI3YjEwODZiZDIzODJh
ZWQ2MWQyMmQ0MzYxZGIuLmRlOWNiNWUxYzM5MjZmYTU4Njk3MGMzOWMxZDUxNGY4NjNkNmU1NGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0y
OTczLDIxICsyOTczLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVz
KCkKICAgICBzd2l0Y2ggKGppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOiB7
CiAgICAgICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZnKCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgZXhpdCA6IGppdENvZGUtPm9zckV4aXQpCisgICAgICAgIGZvciAoYXV0
byYgZXhpdCA6IGppdENvZGUtPm1fb3NyRXhpdCkKICAgICAgICAgICAgIGV4aXQuY29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRCbG9jayk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOiB7
Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRo
aXMgY29kZSBzaW5jZSB0aGUgRlRMOjpKSVRDb2RlOjpvc3JFeGl0CisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIGVhc3kgd2F5IHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoaXMgY29kZSBzaW5jZSB0aGUg
RlRMOjpKSVRDb2RlOjptX29zckV4aXQKICAgICAgICAgLy8gdmVjdG9yIGNvbnRhaW5zIGEgdG90
YWxseSBkaWZmZXJlbnQgdHlwZSwgdGhhdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmVoYXZlIGxpa2UK
LSAgICAgICAgLy8gREZHOjpKSVRDb2RlOjpvc3JFeGl0LgorICAgICAgICAvLyBERkc6OkpJVENv
ZGU6Om1fb3NyRXhpdC4KICAgICAgICAgRlRMOjpKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2Rl
LT5mdGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4
aXQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZUTDo6T1NSRXhpdCYgZXhpdCA9IGppdENv
ZGUtPm9zckV4aXRbaV07CisgICAgICAgIGZvciAoYXV0byYgZXhpdCA6IGppdENvZGUtPm1fb3Ny
RXhpdCkKICAgICAgICAgICAgIGV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUo
cHJvZmlsZWRCbG9jayk7Ci0gICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCmluZGV4IDUxYWVhNGU3
ODZiZWUzNTU2YTY3OGQ0YjQwYWMwNWNjZmJiMTk3NzAuLjJlNDc0MTJhZGMxMzEzYmI4ZmQ0MWI3
MTZkMTNiYTllYTA4NzZlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCkBAIC0xMzgsNiArMTM4LDggQEAgZW51bSBPcGVyYW5kc0xpa2VUYWcgeyBPcGVyYW5k
c0xpa2UgfTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFN0b3JhZ2VBcmcgPSBzdGQ6
OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RCaXRWZWN0b3IsIFZl
Y3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4+PgogY2xhc3MgT3BlcmFuZHMgewogcHVi
bGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGZyaWVuZCBjbGFzcyBP
cGVyYW5kczsKKwogICAgIHVzaW5nIFN0b3JhZ2UgPSBTdG9yYWdlQXJnOwogICAgIHVzaW5nIFJl
ZlR5cGUgPSBzdGQ6OmNvbmRpdGlvbmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIEZhc3RC
aXRSZWZlcmVuY2UsIFQmPjsKICAgICB1c2luZyBDb25zdFJlZlR5cGUgPSBzdGQ6OmNvbmRpdGlv
bmFsX3Q8c3RkOjppc19zYW1lX3Y8VCwgYm9vbD4sIGJvb2wsIGNvbnN0IFQmPjsKQEAgLTE3MCw2
ICsxNzIsMTQgQEAgY2xhc3MgT3BlcmFuZHMgewogICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRp
YWxWYWx1ZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBleHBsaWNp
dCBPcGVyYW5kcyhjb25zdCBPcGVyYW5kczxULCBVPiYgb3RoZXIpCisgICAgICAgIDogbV92YWx1
ZXMob3RoZXIubV92YWx1ZXMpCisgICAgICAgICwgbV9udW1Bcmd1bWVudHMob3RoZXIubV9udW1B
cmd1bWVudHMpCisgICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubV9udW1Mb2NhbHMpCisgICAg
eworICAgIH0KKwogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQXJndW1lbnRzOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1Mb2NhbHM7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9j
YWxzKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCmluZGV4IDA0
YzEzMGYxY2NjOTc1MzU1NjAwOTYyODVjMjY1M2NlMzFjMjA4ZGUuLjg3ZTk5YTk0ZjYzYzdlYTM1
NmQzZGMxZWJkMjM4ZjU3NWJhZmQ4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmNwcApAQCAtNTksOSArNTksNiBAQCBKSVRDb2RlKiBKSVRDb2RlOjpkZmcoKQogdm9p
ZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogewogICAg
IGNvbW1vbi5zaHJpbmtUb0ZpdCgpOwotICAgIG9zckVudHJ5LnNocmlua1RvRml0KCk7Ci0gICAg
b3NyRXhpdC5zaHJpbmtUb0ZpdCgpOwotICAgIHNwZWN1bGF0aW9uUmVjb3Zlcnkuc2hyaW5rVG9G
aXQoKTsKICAgICBtaW5pZmllZERGRy5wcmVwYXJlQW5kU2hyaW5rKCk7CiAgICAgdmFyaWFibGVF
dmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQpAQCAtODYsNyArODMsNyBAQCB2b2lkIEpJVENv
ZGU6OnJlY29uc3RydWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZU9yaWdpbgogCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQogewotICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9z
ckV4aXQpIHsKKyAgICBmb3IgKE9TUkV4aXQmIGV4aXQgOiBtX29zckV4aXQpIHsKICAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkgJiYgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJD
YWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxsU2l0ZUluZGV4LmJpdHMoKSkgewogICAgICAgICAg
ICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gdmFsdWVSZWNvdmVyaWVzOwogICAgICAgICAgICAg
cmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZXhpdC5tX3N0cmVhbUlu
ZGV4LCB2YWx1ZVJlY292ZXJpZXMpOwpAQCAtMjE5LDcgKzIxNiw3IEBAIHZvaWQgSklUQ29kZTo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJl
bmNlcykKIHsKICAgICBjb21tb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2Vz
KTsKICAgICAKLSAgICBmb3IgKE9TUkVudHJ5RGF0YSYgZW50cnkgOiBvc3JFbnRyeSkgeworICAg
IGZvciAoT1NSRW50cnlEYXRhJiBlbnRyeSA6IG1fb3NyRW50cnkpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZW50cnkubV9leHBlY3RlZFZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAg
ICAgICBlbnRyeS5tX2V4cGVjdGVkVmFsdWVzW2ldLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2Vk
UmVmZXJlbmNlcyk7CiAgICAgfQpAQCAtMjI5LDcgKzIyNiw3IEBAIHZvaWQgSklUQ29kZTo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNl
cykKIAogT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVCbG9jayosIHZv
aWQqIHBjKQogewotICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKKyAgICBmb3Ig
KE9TUkV4aXQmIGV4aXQgOiBtX29zckV4aXQpIHsKICAgICAgICAgaWYgKEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGUqIGhhbmRsZSA9IGV4aXQubV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKSkgewogICAg
ICAgICAgICAgaWYgKGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpIDw9IHBjICYmIHBjIDwg
aGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKTsKQEAgLTIz
OSw3ICsyMzYsNyBAQCBPcHRpb25hbDxDb2RlT3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJs
b2NrKiwgdm9pZCogcGMpCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdm9pZCBKSVRD
b2RlOjpmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCkKK3ZvaWQgSklUQ29kZTo6ZmluYWxpemVPU1JF
bnRyeXBvaW50cyhWZWN0b3I8T1NSRW50cnlEYXRhPiYmIG9zckVudHJ5KQogewogICAgIGF1dG8g
Y29tcGFyYXRvciA9IFtdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7CiAgICAgICAg
IHJldHVybiBhLm1fYnl0ZWNvZGVJbmRleCA8IGIubV9ieXRlY29kZUluZGV4OwpAQCAtMjUzLDYg
KzI1MCw3IEBAIHZvaWQgSklUQ29kZTo6ZmluYWxpemVPU1JFbnRyeXBvaW50cygpCiAgICAgfTsK
ICAgICB2ZXJpZnlJc1NvcnRlZChvc3JFbnRyeSk7CiAjZW5kaWYKKyAgICBtX29zckVudHJ5ID0g
V1RGTW92ZShvc3JFbnRyeSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKaW5kZXggMDQxZWFkOWU3OTMwMDMxMzBhMWM4
YmE1M2E3YTA5MTMxMzczMjcyOS4uYjE1ODIzYzM2MWJhZDgyNTBmZWQ5MzgwYmIzMjFkZTcyNDMw
Y2U3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKQEAgLTU0LDQyICs1
NCwxNCBAQCBjbGFzcyBKSVRDb2RlIGZpbmFsIDogcHVibGljIERpcmVjdEpJVENvZGUgewogICAg
IENvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIGZpbmFsOwogICAgIEpJVENvZGUqIGRmZygpIGZpbmFs
OwogICAgIAotICAgIE9TUkVudHJ5RGF0YSogYXBwZW5kT1NSRW50cnlEYXRhKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uTGFiZWw8T1NSRW50cnlQdHJUYWc+IG1hY2hp
bmVDb2RlKQotICAgIHsKLSAgICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7Ci0gICAgICAg
IGVudHJ5Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGVudHJ5Lm1f
bWFjaGluZUNvZGUgPSBtYWNoaW5lQ29kZTsKLSAgICAgICAgb3NyRW50cnkuYXBwZW5kKGVudHJ5
KTsKLSAgICAgICAgcmV0dXJuICZvc3JFbnRyeS5sYXN0KCk7Ci0gICAgfQotICAgIAogICAgIE9T
UkVudHJ5RGF0YSogb3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPE9TUkVu
dHJ5RGF0YSwgQnl0ZWNvZGVJbmRleD4oCi0gICAgICAgICAgICBvc3JFbnRyeSwgb3NyRW50cnku
c2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgbV9vc3JFbnRyeSwgbV9vc3JFbnRy
eS5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBnZXRPU1JFbnRyeURhdGFCeXRl
Y29kZUluZGV4KTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmFsaXplT1NSRW50cnlwb2ludHMoKTsK
LQotICAgIHVuc2lnbmVkIGFwcGVuZE9TUkV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG9zckV4aXQuc2l6ZSgpOwotICAgICAgICBvc3JF
eGl0LmFwcGVuZChleGl0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0g
ICAgT1NSRXhpdCYgbGFzdE9TUkV4aXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9zckV4aXQu
bGFzdCgpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcHBlbmRTcGVjdWxhdGlvblJlY292
ZXJ5KGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gc3BlY3VsYXRpb25SZWNvdmVyeS5zaXplKCk7Ci0gICAgICAgIHNw
ZWN1bGF0aW9uUmVjb3ZlcnkuYXBwZW5kKHJlY292ZXJ5KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9CisgICAgdm9pZCBmaW5hbGl6ZU9TUkVudHJ5cG9pbnRzKFZlY3RvcjxERkc6Ok9T
UkVudHJ5RGF0YT4mJik7CiAgICAgCiAgICAgdm9pZCByZWNvbnN0cnVjdCgKICAgICAgICAgQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiByZXN1bHQpOwpAQCAtMTM1LDkgKzEwNyw5IEBAIGNsYXNzIEpJVENvZGUgZmlu
YWwgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSB7CiAKIHB1YmxpYzoKICAgICBDb21tb25EYXRhIGNv
bW1vbjsKLSAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OwotICAgIFNlZ21l
bnRlZFZlY3RvcjxERkc6Ok9TUkV4aXQsIDg+IG9zckV4aXQ7Ci0gICAgVmVjdG9yPERGRzo6U3Bl
Y3VsYXRpb25SZWNvdmVyeT4gc3BlY3VsYXRpb25SZWNvdmVyeTsKKyAgICBGaXhlZFZlY3RvcjxE
Rkc6Ok9TUkVudHJ5RGF0YT4gbV9vc3JFbnRyeTsKKyAgICBGaXhlZFZlY3RvcjxERkc6Ok9TUkV4
aXQ+IG1fb3NyRXhpdDsKKyAgICBGaXhlZFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+
IG1fc3BlY3VsYXRpb25SZWNvdmVyeTsKICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFy
aWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggMWUy
YzdhMmVkNmE0YWQzNGVkNTI5MjgwYzExMzNhZWFjZDQ4MDAyMS4uZjhhYzVmMGI4ZjYxOGQyOTNi
ZWU1OWRiYTY0ZmM2MjQyMTUzN2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKQEAgLTY2LDkgKzY2LDkgQEAgSklUQ29tcGlsZXI6On5KSVRDb21w
aWxlcigpCiAKIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiB7Ci0gICAgQVNTRVJU
KG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9leGl0Q29tcGlsYXRpb25JbmZvLnNpemUo
KSk7CisgICAgQVNTRVJUKG1fb3NyRXhpdC5zaXplKCkgPT0gbV9leGl0Q29tcGlsYXRpb25JbmZv
LnNpemUoKSk7CiAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7
ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0LnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9l
eGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICAgICAgVmVjdG9yPExhYmVsPiBsYWJlbHM7
CiAgICAgICAgICAgICBpZiAoIWluZm8ubV9mYWlsdXJlSnVtcHMuZW1wdHkoKSkgewpAQCAtODAs
NyArODAsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4
aXQuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBt
X2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMg
PSBpbmZvLm1fZmFpbHVyZUp1bXBzOwogICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgp
KQpAQCAtMjc4LDExICsyNzgsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOwogICAgIGF1dG8gdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KG9zckV4aXRUaHVuay5jb2RlKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9vc3JFeGl0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlvbkluZm9baV07CiAgICAgICAgIGlm
ICghT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhpbmZvLm1fcGF0Y2hhYmxlSnVtcC5tX2p1bXAsIHRhcmdldCk7Ci0gICAgICAgICAgICBP
U1JFeGl0JiBleGl0ID0gbV9qaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fb3NyRXhpdFtpXTsKICAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVKdW1w
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oaW5mby5t
X3BhdGNoYWJsZUp1bXApOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmZvLm1fcmVwbGFjZW1l
bnRTb3VyY2UuaXNTZXQoKSkgewpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElL
RUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpIHsKLSAgICAgICAgQVNTRVJUKG1fZXhpdFNpdGVM
YWJlbHMuc2l6ZSgpID09IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICBBU1NF
UlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9vc3JFeGl0LnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4aXRTaXRlTGFiZWxzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBWZWN0b3I8TGFiZWw+JiBsYWJlbHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ld
OwogICAgICAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRy
VGFnPj4gYWRkcmVzc2VzOwpAQCAtMzA1LDYgKzMwNSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICAgICAgQVNTRVJUKCFtX2V4aXRTaXRlTGFi
ZWxzLnNpemUoKSk7CiAKICAgICBtX2ppdENvZGUtPmNvbW1vbi5jb21waWxhdGlvbiA9IG1fZ3Jh
cGguY29tcGlsYXRpb24oKTsKKyAgICBtX2ppdENvZGUtPm1fb3NyRXhpdCA9IFdURk1vdmUobV9v
c3JFeGl0KTsKKyAgICBtX2ppdENvZGUtPm1fc3BlY3VsYXRpb25SZWNvdmVyeSA9IFdURk1vdmUo
bV9zcGVjdWxhdGlvblJlY292ZXJ5KTsKICAgICAKICAgICAvLyBMaW5rIG5ldyBERkcgZXhjZXB0
aW9uIGhhbmRsZXJzIGFuZCByZW1vdmUgYmFzZWxpbmUgSklUIGhhbmRsZXJzLgogICAgIG1fY29k
ZUJsb2NrLT5jbGVhckV4Y2VwdGlvbkhhbmRsZXJzKCk7CkBAIC01NDcsMzIgKzU0OSwzNSBAQCB2
b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrLCBK
SVRDb21waWxlcjo6TGFiZWwgYmxvYwogICAgIGlmICghYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25P
ZkNGQUhhc1Zpc2l0ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIE9TUkVudHJ5RGF0YSogZW50
cnkgPSBtX2ppdENvZGUtPmFwcGVuZE9TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVn
aW4sIGxpbmtCdWZmZXIubG9jYXRpb25PZjxPU1JFbnRyeVB0clRhZz4oYmxvY2tIZWFkKSk7Cisg
ICAgT1NSRW50cnlEYXRhIGVudHJ5OworICAgIGVudHJ5Lm1fYnl0ZWNvZGVJbmRleCA9IGJhc2lj
QmxvY2suYnl0ZWNvZGVCZWdpbjsKKyAgICBlbnRyeS5tX21hY2hpbmVDb2RlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPE9TUkVudHJ5UHRyVGFnPihibG9ja0hlYWQpOworCisgICAgRml4ZWRPcGVy
YW5kczxBYnN0cmFjdFZhbHVlPiBleHBlY3RlZFZhbHVlcyhiYXNpY0Jsb2NrLmludGVyc2VjdGlv
bk9mUGFzdFZhbHVlc0F0SGVhZCk7CisgICAgVmVjdG9yPE9TUkVudHJ5UmVzaHVmZmxpbmc+IHJl
c2h1ZmZsaW5nczsKIAotICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay5p
bnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQ7Ci0gICAgICAgIAogICAgIC8vIEZpeCB0aGUg
ZXhwZWN0ZWQgdmFsdWVzOiBpbiBvdXIgcHJvdG9jb2wsIGEgZGVhZCB2YXJpYWJsZSB3aWxsIGhh
dmUgYW4gZXhwZWN0ZWQKICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhlIG9sZCBK
SVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKICAgICAvLyBuZWVk
IChUb3AsIFRPUCkuCiAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJh
c2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQp
IHsKICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1l
bnQpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICAgICAgZXhwZWN0ZWRWYWx1ZXMuYXJndW1l
bnQoYXJndW1lbnQpLm1ha2VCeXRlY29kZVRvcCgpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBs
b2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsgKytsb2NhbCkgewogICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJs
ZXNBdEhlYWQubG9jYWwobG9jYWwpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChs
b2NhbCkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgICAgICBleHBlY3RlZFZhbHVlcy5sb2Nh
bChsb2NhbCkubWFrZUJ5dGVjb2RlVG9wKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgZW50cnktPm1fbWFjaGluZVN0YWNrVXNlZC5zZXQodmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpLnRvTG9jYWwoKSk7CisgICAgICAgICAgICBlbnRyeS5tX21hY2hpbmVTdGFj
a1VzZWQuc2V0KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS50b0xvY2FsKCkpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewog
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xvY2Fsc0ZvcmNlZERvdWJsZS5zZXQobG9jYWwpOworICAgICAgICAgICAgICAgIGVudHJ5Lm1f
bG9jYWxzRm9yY2VkRG91YmxlLnNldChsb2NhbCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICBlbnRyeS0+bV9s
b2NhbHNGb3JjZWRBbnlJbnQuc2V0KGxvY2FsKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5tX2xv
Y2Fsc0ZvcmNlZEFueUludC5zZXQobG9jYWwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU4MCwxNCArNTg1
LDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2lj
QmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9jCiAKICAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPm9wZXJhbmQoKS5pc1RtcCgpKTsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewot
ICAgICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgcmVzaHVmZmxpbmdzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlS
ZXNodWZmbGluZygKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5vcGVyYW5kKCku
dmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZz
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgICAgICAKLSAgICBl
bnRyeS0+bV9yZXNodWZmbGluZ3Muc2hyaW5rVG9GaXQoKTsKKyAgICBlbnRyeS5tX2V4cGVjdGVk
VmFsdWVzID0gV1RGTW92ZShleHBlY3RlZFZhbHVlcyk7CisgICAgZW50cnkubV9yZXNodWZmbGlu
Z3MgPSBXVEZNb3ZlKHJlc2h1ZmZsaW5ncyk7CisgICAgbV9vc3JFbnRyeS5hcHBlbmQoV1RGTW92
ZShlbnRyeSkpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjphcHBlbmRFeGNlcHRpb25IYW5kbGlu
Z09TUkV4aXQoRXhpdEtpbmQga2luZCwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRleCwgQ29kZU9y
aWdpbiBvcENhdGNoT3JpZ2luLCBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlciwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGp1bXBzVG9GYWlsKQpA
QCAtNTk2LDcgKzYwMyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmFwcGVuZEV4Y2VwdGlvbkhhbmRs
aW5nT1NSRXhpdChFeGl0S2luZCBraW5kLCB1bnNpZ25lZCBldmVudFN0CiAgICAgZXhpdC5tX2Nv
ZGVPcmlnaW4gPSBvcENhdGNoT3JpZ2luOwogICAgIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2Fs
bFNpdGVJbmRleCA9IGNhbGxTaXRlOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGV4aXRJ
bmZvID0gYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwpOwotICAgIGppdENvZGUoKS0+YXBwZW5k
T1NSRXhpdChleGl0KTsKKyAgICBtX29zckV4aXQuYXBwZW5kKFdURk1vdmUoZXhpdCkpOwogICAg
IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXMuYXBwZW5kKEV4Y2VwdGlvbkhhbmRs
aW5nT1NSRXhpdEluZm8geyBleGl0SW5mbywgKmV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxTaXRlIH0p
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXgg
ODhkNjI3NjcyNDhlMTg4ZWYwMzc1OTYzZGMxNzJiZmM1NGJiZDgwYy4uMThlMzY2MDEzMDU1ZjI1
NzNiZmY2NWFjODlhNzQ3OTBiNmEyMjY4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaApAQCAtMjY1LDcgKzI2NSwyMSBAQCBjbGFzcyBKSVRDb21waWxlciA6
IHB1YmxpYyBDQ2FsbEhlbHBlcnMgewogCiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Js
b2NrJiwgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1ZmZlciYpOwogICAgIHZv
aWQgbm90aWNlQ2F0Y2hFbnRyeXBvaW50KEJhc2ljQmxvY2smLCBKSVRDb21waWxlcjo6TGFiZWwg
YmxvY2tIZWFkLCBMaW5rQnVmZmVyJiwgVmVjdG9yPEZsdXNoRm9ybWF0PiYmIGFyZ3VtZW50Rm9y
bWF0cyk7Ci0gICAgCisKKyAgICB1bnNpZ25lZCBhcHBlbmRPU1JFeGl0KE9TUkV4aXQmJiBleGl0
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9vc3JFeGl0LnNpemUoKTsKKyAg
ICAgICAgbV9vc3JFeGl0LmFwcGVuZChXVEZNb3ZlKGV4aXQpKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KGNv
bnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gbV9zcGVjdWxhdGlvblJlY292ZXJ5LnNpemUoKTsKKyAgICAgICAgbV9zcGVj
dWxhdGlvblJlY292ZXJ5LmFwcGVuZChyZWNvdmVyeSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENv
ZGU7IH0KICAgICAKICAgICBWZWN0b3I8TGFiZWw+JiBibG9ja0hlYWRzKCkgeyByZXR1cm4gbV9i
bG9ja0hlYWRzOyB9CkBAIC0zNzMsNiArMzg3LDExIEBAIGNsYXNzIEpJVENvbXBpbGVyIDogcHVi
bGljIENDYWxsSGVscGVycyB7CiAgICAgVmVjdG9yPEpTRGlyZWN0VGFpbENhbGxSZWNvcmQsIDQ+
IG1fanNEaXJlY3RUYWlsQ2FsbHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXRDb21waWxh
dGlvbkluZm8sIDQ+IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9yPExh
YmVsPj4gbV9leGl0U2l0ZUxhYmVsczsKK3B1YmxpYzoKKyAgICBWZWN0b3I8REZHOjpPU1JFbnRy
eURhdGE+IG1fb3NyRW50cnk7CisgICAgVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0Owor
ICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IG1fc3BlY3VsYXRpb25SZWNvdmVy
eTsKK3ByaXZhdGU6CiAgICAgCiAgICAgc3RydWN0IEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElu
Zm8gewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBleGl0SW5mbzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAppbmRleCAxNmIzODIxYjg5NzI4MWJhMWQ1NWNk
OGVmMGFiMTQwOTY2ZWY3MmVlLi5iOWJlMTk3OWU1YzBkN2VhNmNkYTgxNDI2MGRiOWQ3NDBkZWYx
YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCkBAIC01NiwxMSAr
NTYsMTEgQEAgc3RydWN0IE9TUkVudHJ5UmVzaHVmZmxpbmcgewogc3RydWN0IE9TUkVudHJ5RGF0
YSB7CiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8T1NSRW50cnlQdHJUYWc+IG1fbWFjaGluZUNvZGU7Ci0gICAgT3BlcmFuZHM8QWJzdHJh
Y3RWYWx1ZT4gbV9leHBlY3RlZFZhbHVlczsKKyAgICBGaXhlZE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiAgICAgLy8gVXNlIGJpdHZlY3RvcnMgaGVyZSBiZWNhdXNl
IHRoZXkgdGVuZCB0byBvbmx5IHJlcXVpcmUgb25lIHdvcmQuCiAgICAgQml0VmVjdG9yIG1fbG9j
YWxzRm9yY2VkRG91YmxlOwogICAgIEJpdFZlY3RvciBtX2xvY2Fsc0ZvcmNlZEFueUludDsKLSAg
ICBWZWN0b3I8T1NSRW50cnlSZXNodWZmbGluZz4gbV9yZXNodWZmbGluZ3M7CisgICAgRml4ZWRW
ZWN0b3I8T1NSRW50cnlSZXNodWZmbGluZz4gbV9yZXNodWZmbGluZ3M7CiAgICAgQml0VmVjdG9y
IG1fbWFjaGluZVN0YWNrVXNlZDsKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKaW5kZXggZmQ2MzhhMzhjZDYzOTVhNTA4YzhmOTVlOGE5MTc1M2E2NGQ5NTIw
Yi4uY2YyNGMzMTI5ODg1NWQwOGYwMWU4MDI3N2E2OGVmOWM5MDMxNjEyNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBpbGVPU1JFeGl0LCB2b2lkLCAoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsK
IAogICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBPU1JFeGl0
JiBleGl0ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFeGl0W2V4aXRJbmRleF07
CisgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+bV9vc3JF
eGl0W2V4aXRJbmRleF07CiAKICAgICBBU1NFUlQoIXZtLmNhbGxGcmFtZUZvckNhdGNoIHx8IGV4
aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpOwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VE
KHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
Q29tcGlsZU9TUkV4aXQsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiAKICAgICBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7CiAgICAgaWYgKGV4aXQubV9yZWNv
dmVyeUluZGV4ICE9IFVJTlRfTUFYKQotICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhd
OworICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm1fc3Bl
Y3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07CiAKICAgICB7CiAgICAgICAg
IENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMDJkNjE1ZjkxMTU4ZTQyYmFhY2FmMzYy
ZTk2MWVkNmY3NWYxY2ExMS4uZGFjODI1NGU2N2JhN2E1ODA2N2RiNzBmMjcxNDRlYjE3ZjU1YjIy
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZQogICAgICAgICBt
X2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
aml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwotICAgIG1faml0LmppdENvZGUoKS0+YXBw
ZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywg
bV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5k
LCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCkBAIC0yODMsMTYgKzI4MywxNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZQogICAgICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhteUp1bXBzVG9G
YWlsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0Zh
aWwpOwotICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1f
aml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFw
aCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSks
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IG1faml0Lm1fb3NyRXhpdC5zaXplKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8o
KTsKLSAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1Zh
bHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
bV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBtX2pp
dC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgo
KS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIoaW5kZXgpOwogfQogCkBAIC0zMTUsOSArMzE1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICB1bnNp
Z25lZCByZWNvdmVyeUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJl
Y292ZXJ5KHJlY292ZXJ5KTsKKyAgICB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gbV9qaXQuYXBw
ZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdElu
Zm8oanVtcFRvRmFpbCk7Ci0gICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgp
LCByZWNvdmVyeUluZGV4KSk7CisgICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgcmVjb3Zl
cnlJbmRleCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
JiByZWNvdmVyeSkKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
SW52YWxpZGF0aW9uUG9pbnQoTm9kZSogbm9kZSkKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQu
YXBwZW5kRXhpdEluZm8oSklUQ29tcGlsZXI6Okp1bXBMaXN0KCkpOwotICAgIG1faml0LmppdENv
ZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KAorICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NS
RXhpdCgKICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEpTVmFsdWVTb3VyY2UoKSwg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAogICAgICAgICB0aGlzLCBtX3N0cmVhbS0+
c2l6ZSgpKSk7CiAgICAgaW5mby5tX3JlcGxhY2VtZW50U291cmNlID0gbV9qaXQud2F0Y2hwb2lu
dExhYmVsKCk7CkBAIC0yMjAxLDcgKzIyMDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5r
T1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9qaXQuaml0Q29kZSgpLT5maW5hbGl6ZU9TUkVudHJ5cG9pbnRzKCk7CisgICAgbV9qaXQu
aml0Q29kZSgpLT5maW5hbGl6ZU9TUkVudHJ5cG9pbnRzKFdURk1vdmUobV9qaXQubV9vc3JFbnRy
eSkpOwogICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50
cyhXVEZNb3ZlKG1faml0LmdyYXBoKCkubV9jYXRjaEVudHJ5cG9pbnRzKSk7CiAKICAgICBBU1NF
UlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKQEAgLTIyMDksNyAr
MjIwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpCiAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAg
ICAgICBEdW1wQ29udGV4dCBkdW1wQ29udGV4dDsKICAgICAgICAgZGF0YUxvZygiT1NSIEVudHJp
ZXM6XG4iKTsKLSAgICAgICAgZm9yIChPU1JFbnRyeURhdGEmIGVudHJ5RGF0YSA6IG1faml0Lmpp
dENvZGUoKS0+b3NyRW50cnkpCisgICAgICAgIGZvciAoT1NSRW50cnlEYXRhJiBlbnRyeURhdGEg
OiBtX2ppdC5qaXRDb2RlKCktPm1fb3NyRW50cnkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
IiwgaW5Db250ZXh0KGVudHJ5RGF0YSwgJmR1bXBDb250ZXh0KSwgIlxuIik7CiAgICAgICAgIGlm
ICghZHVtcENvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgZHVtcENvbnRleHQuZHVtcChX
VEY6OmRhdGFGaWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAK
aW5kZXggNzM5YTY0ZGMxYjEzMDIyNWYyOGQxMTM2YWQ5YTkwOTY2OWFlN2VlMS4uYmYzNjQ0MWE3
MzVhYTVlNTg3ZDI5OTBmY2FlMTY5N2U4YmZmNjJjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAgREZHOjpDb21tb25EYXRhKiBK
SVRDb2RlOjpkZmdDb21tb24oKQogdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKQogewogICAgIGNvbW1vbi5zaHJpbmtUb0ZpdCgpOwotICAgIG9zckV4
aXQuc2hyaW5rVG9GaXQoKTsKKyAgICBtX29zckV4aXQuc2hyaW5rVG9GaXQoKTsKICAgICBvc3JF
eGl0RGVzY3JpcHRvcnMuc2hyaW5rVG9GaXQoKTsKICAgICBsYXp5U2xvd1BhdGhzLnNocmlua1Rv
Rml0KCk7CiB9CkBAIC0xNDcsMTMgKzE0NywxMyBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVm
ZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCiB7CiAg
ICAgY29tbW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiAgICAgCi0g
ICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkKKyAgICBmb3IgKE9TUkV4aXQmIGV4aXQg
OiBtX29zckV4aXQpCiAgICAgICAgIGV4aXQubV9kZXNjcmlwdG9yLT52YWxpZGF0ZVJlZmVyZW5j
ZXModHJhY2tlZFJlZmVyZW5jZXMpOwogfQogCiBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZShDb2RlQmxvY2sqLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCiB7Ci0gICAgZm9yIChPU1JFeGl0JiBleGl0IDog
b3NyRXhpdCkgeworICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG1fb3NyRXhpdCkgewogICAgICAg
ICBpZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxs
U2l0ZUluZGV4LmJpdHMoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0LmlzR2Vu
ZXJpY1Vud2luZEhhbmRsZXIoKSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgUmVnaXN0ZXJTZXQgSklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUo
Q29kZUJsb2MKIAogT3B0aW9uYWw8Q29kZU9yaWdpbj4gSklUQ29kZTo6ZmluZFBDKENvZGVCbG9j
ayogY29kZUJsb2NrLCB2b2lkKiBwYykKIHsKLSAgICBmb3IgKE9TUkV4aXQmIGV4aXQgOiBvc3JF
eGl0KSB7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogbV9vc3JFeGl0KSB7CiAgICAgICAgIGlm
IChFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBleGl0Lm1fY29kZS5leGVjdXRhYmxl
TWVtb3J5KCkpIHsKICAgICAgICAgICAgIGlmIChoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIo
KSA8PSBwYyAmJiBwYyA8IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8Q29kZU9yaWdpbj4oZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENv
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCmluZGV4IGYzZWVk
ZTJlZDg5NDkwMWEyYWE3ZDA0ZDUxOGE1N2IyZmM1ZDk0YTguLmU3YjhlOGIzY2U0YjQ2ZWMzMjVm
MzcwNGUzZGVlY2EwOGVlZGFiMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5oCkBAIC03MCw3ICs3MCw3IEBAIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgSlNDOjpKSVRDb2Rl
IHsKICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJy
aWRlOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247Ci0gICAgU2VnbWVudGVkVmVj
dG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CisgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsK
ICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNjcmlw
dG9yczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93
UGF0aHM7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAppbmRl
eCAzMzk5M2QyMjg2NDhhODFiOTA5Nzc4ZTc5NTcwNGQyYjg5Y2Q3NmIxLi40NjE2MTE2MzljMDA4
NmQ2MmYyMmRhYjQzZTA4Nzk1ZmQyZWRmOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5jcHAKQEAgLTgyLDIxICs4MiwyMCBAQCBSZWY8T1NSRXhpdEhhbmRsZT4gT1NS
RXhpdERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKAogICAgIFN0YXRlJiBzdGF0ZSwg
RXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVPcmlnaW4sCiAgICAgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVpbnQzMl90IGRmZ05vZGVJbmRl
eCwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUtPm9z
ckV4aXQuYWxsb2MoCi0gICAgICAgIHRoaXMsIGV4aXRLaW5kLCBub2RlT3JpZ2luLmZvckV4aXQs
IG5vZGVPcmlnaW4uc2VtYW50aWMsIG5vZGVPcmlnaW4ud2FzSG9pc3RlZCwgZGZnTm9kZUluZGV4
KTsKLSAgICBSZWY8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBPU1JFeGl0
SGFuZGxlKGluZGV4LCBleGl0KSk7Ci0gICAgZXhpdC5tX3ZhbHVlUmVwcyA9IEZpeGVkVmVjdG9y
PEIzOjpWYWx1ZVJlcD4ocGFyYW1zLnNpemUoKSAtIG9mZnNldCk7CisgICAgRml4ZWRWZWN0b3I8
QjM6OlZhbHVlUmVwPiB2YWx1ZVJlcHMocGFyYW1zLnNpemUoKSAtIG9mZnNldCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gb2Zmc2V0LCBpbmRleEluVmFsdWVSZXBzID0gMDsgaSA8IHBhcmFtcy5z
aXplKCk7ICsraSwgKytpbmRleEluVmFsdWVSZXBzKQotICAgICAgICBleGl0Lm1fdmFsdWVSZXBz
W2luZGV4SW5WYWx1ZVJlcHNdID0gcGFyYW1zW2ldOwotICAgIHJldHVybiBoYW5kbGU7CisgICAg
ICAgIHZhbHVlUmVwc1tpbmRleEluVmFsdWVSZXBzXSA9IHBhcmFtc1tpXTsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IHN0YXRlLmppdENvZGUtPm1fb3NyRXhpdC5zaXplKCk7CisgICAgc3RhdGUuaml0
Q29kZS0+bV9vc3JFeGl0LmFwcGVuZChPU1JFeGl0KHRoaXMsIGV4aXRLaW5kLCBub2RlT3JpZ2lu
LmZvckV4aXQsIG5vZGVPcmlnaW4uc2VtYW50aWMsIG5vZGVPcmlnaW4ud2FzSG9pc3RlZCwgZGZn
Tm9kZUluZGV4LCBXVEZNb3ZlKHZhbHVlUmVwcykpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBPU1JFeGl0SGFuZGxlKGluZGV4LCBzdGF0ZS5qaXRDb2RlLmdldCgpKSk7CiB9CiAKIE9TUkV4
aXQ6Ok9TUkV4aXQoCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIEV4aXRLaW5k
IGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2FzSG9pc3RlZCwgdWludDMyX3QgZGZnTm9kZUluZGV4
KQorICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29sIHdhc0hvaXN0
ZWQsIHVpbnQzMl90IGRmZ05vZGVJbmRleCwgRml4ZWRWZWN0b3I8QjM6OlZhbHVlUmVwPiYmIHZh
bHVlUmVwcykKICAgICA6IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luLCBjb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsIHdhc0hvaXN0ZWQsIGRmZ05vZGVJbmRleCkKICAgICAsIG1fZGVz
Y3JpcHRvcihkZXNjcmlwdG9yKQorICAgICwgbV92YWx1ZVJlcHMoV1RGTW92ZSh2YWx1ZVJlcHMp
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCmluZGV4IDkyY2E0
ZmU5ZDMxZmZmNDE2OTA4NGQ5OGZiOGJlZjRjMGFkNjlhN2EuLjkyY2I4ODczYzU4NjNhN2U3OTVi
YTgxOTU2NjM3NjQwNzJjNDUyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKIH07CiAK
IHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UgewotICAgIE9TUkV4aXQo
T1NSRXhpdERlc2NyaXB0b3IqLCBFeGl0S2luZCwgQ29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2FzSG9pc3RlZCwgdWludDMyX3QgZGZnTm9kZUlu
ZGV4KTsKKyAgICBPU1JFeGl0KE9TUkV4aXREZXNjcmlwdG9yKiwgRXhpdEtpbmQsIENvZGVPcmln
aW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29sIHdhc0hvaXN0ZWQs
IHVpbnQzMl90IGRmZ05vZGVJbmRleCwgRml4ZWRWZWN0b3I8QjM6OlZhbHVlUmVwPiYmKTsKIAog
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBtX2Rlc2NyaXB0b3I7CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAppbmRleCBhMjhkOTc2MDg2MDI1NzY4NDI2NGU0
YmVhOTJhMTI0MWMxNzhlNmRlLi4wZTA5MGM4MTA3NjdkNTc0ZWQwYjU2ZDFmMjJmNThjZjM5MmE3
MzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCkBAIC01NDMsNyArNTQzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkNvbXBpbGVGVExPU1JFeGl0LCB2b2lkKiwgKENhbGxGcmFtZSogY2FsbEZyYW0KICAgICBE
ZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAKICAgICBKSVRDb2RlKiBqaXRDb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOwotICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRD
b2RlLT5vc3JFeGl0W2V4aXRJRF07CisgICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm1fb3Ny
RXhpdFtleGl0SURdOwogICAgIAogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBP
cHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSkgewog
ICAgICAgICBkYXRhTG9nKCIgICAgT3duaW5nIGJsb2NrOiAiLCBwb2ludGVyRHVtcChjb2RlQmxv
Y2spLCAiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdEhhbmRsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5k
bGUuY3BwCmluZGV4IDU5ZDIyZWNkNjEzMzJlZTcyODdlNjgxNDYxNDkyYWM5NTFiNjliYmEuLmJi
MDAzNmRhMGE4NDQ1NWI4YjRkOWZkYjY2YzM3OGNhMDA5ZTcxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcApAQCAtNDEsMTMgKzQxLDEzIEBA
IHZvaWQgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayhTdGF0ZSYgc3RhdGUsIENDYWxsSGVs
cGVycyYgaml0KQogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBzdGF0
ZS5ncmFwaC5jb21waWxhdGlvbigpOwogICAgIENDYWxsSGVscGVyczo6TGFiZWwgbXlMYWJlbCA9
IGppdC5sYWJlbCgpOwogICAgIGxhYmVsID0gbXlMYWJlbDsKLSAgICBqaXQucHVzaFRvU2F2ZUlt
bWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihpbmRleCkpOworICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVn
aXN0ZXJzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1faW5kZXgpKTsKICAgICBDQ2FsbEhl
bHBlcnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgUmVm
UHRyPE9TUkV4aXRIYW5kbGU+IHNlbGYgPSB0aGlzOwogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CiAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICBbc2VsZiwganVtcCwgbXlMYWJlbCwgY29t
cGlsYXRpb24sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHNl
bGYtPmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRy
VGFnPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oanVtcCkpOworICAg
ICAgICAgICAgc2VsZi0+bV9qaXRDb2RlLT5tX29zckV4aXRbc2VsZi0+bV9pbmRleF0ubV9wYXRj
aGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oanVtcCkpOwogCiAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5oCmluZGV4IDA3NjNkNzk3Y2NkODJhYzUx
MzQxOWJlYzAyYTJhNTM1OTM2NTk0NjYuLjViYzk2NDkxNWI0NDYwZjY0Y2NjZGNiYWExMjgwNTgw
MTJmYTRlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dEhhbmRsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRs
ZS5oCkBAIC00MCwxNCArNDAsMTQgQEAgc3RydWN0IE9TUkV4aXQ7CiAvLyBUaGlzIGlzIGFuIG9i
amVjdCB0aGF0IHN0b3JlcyBzb21lIGludGVyZXN0aW5nIGRhdGEgYWJvdXQgYW4gT1NSIGV4aXQu
IEl0J3MgZXhwZWN0ZWQgdGhhdCB5b3Ugd2lsbAogLy8gc2NyYXBlIHRoaXMgZGF0YSBmcm9tIHRo
aXMgb2JqZWN0IGJ5IHRoZSB0aW1lIGNvbXBpbGF0aW9uIGZpbmlzaGVzLgogc3RydWN0IE9TUkV4
aXRIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T1NSRXhpdEhhbmRsZT4gewot
ICAgIE9TUkV4aXRIYW5kbGUodW5zaWduZWQgaW5kZXgsIE9TUkV4aXQmIGV4aXQpCi0gICAgICAg
IDogaW5kZXgoaW5kZXgpCi0gICAgICAgICwgZXhpdChleGl0KQorICAgIE9TUkV4aXRIYW5kbGUo
dW5zaWduZWQgaW5kZXgsIEpJVENvZGUqIGppdENvZGUpCisgICAgICAgIDogbV9pbmRleChpbmRl
eCkKKyAgICAgICAgLCBtX2ppdENvZGUoaml0Q29kZSkKICAgICB7CiAgICAgfQogCi0gICAgdW5z
aWduZWQgaW5kZXg7Ci0gICAgT1NSRXhpdCYgZXhpdDsKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIEpJVENvZGUqIG1faml0Q29kZTsKIAogICAgIC8vIFRoaXMgaXMgdGhlIGxhYmVsIGF0IHdo
aWNoIHRoZSBPU1IgZXhpdCBqdW1wIGxpdmVzLiBUaGlzIHdpbGwgZ2V0IHBvcHVsYXRlZCBvbmNl
IHRoZSBPU1IgZXhpdAogICAgIC8vIGVtaXRzIGl0cyBqdW1wLiBUaGlzIGhhcHBlbnMgaW1tZWRp
YXRlbHkgd2hlbiB5b3UgY2FsbCBPU1JFeGl0OjphcHBlbmRPU1JFeGl0KCkuIEl0IGhhcHBlbnMg
YXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwCmluZGV4IDI0MjM3Mzg2NjY1OTZkYjIwMjg0MTJmMTM1NWUz
OGRlNTFlODJiZTcuLmNkMmYyZjVkNGQ4OTYyYWU1NTRkMDM3YzUzMDUyYzlhNzJkMzU3YTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlLmNwcApAQCAtODAsNyArODAsNyBAQCB2b2lkIFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKAogICAgIAogICAgIFJl
ZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBjcmVhdGVIYW5kbGUoR2VuZXJpY1Vud2luZCwg
cGFyYW1zKTsKIAotICAgIGhhbmRsZS0+ZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGVJbmRleDsKKyAgICBoYW5kbGUtPm1faml0Q29kZS0+bV9vc3JFeGl0W2hh
bmRsZS0+bV9pbmRleF0ubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxTaXRl
SW5kZXg7CiAKICAgICBIYW5kbGVySW5mbyBoYW5kbGVyID0gbV9oYW5kbGVyOwogICAgIHBhcmFt
cy5hZGRMYXRlUGF0aCgK
</data>
<flag name="review"
          id="446573"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>