<?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>204879</bug_id>
          
          <creation_ts>2019-12-05 01:55:30 -0800</creation_ts>
          <short_desc>Do not use DOMGuarded for maplike</short_desc>
          <delta_ts>2019-12-09 11:27:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1595744</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-05 01:55:30 -0800</bug_when>
    <thetext>Do not use DOMGuarded for maplike.
This is not really useful right now, instead we can reuse setlike model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595746</commentid>
    <comment_count>1</comment_count>
      <attachid>384887</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-05 02:01:57 -0800</bug_when>
    <thetext>Created attachment 384887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596174</commentid>
    <comment_count>2</comment_count>
      <attachid>384992</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-06 00:22:40 -0800</bug_when>
    <thetext>Created attachment 384992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596177</commentid>
    <comment_count>3</comment_count>
      <attachid>384995</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-06 00:35:46 -0800</bug_when>
    <thetext>Created attachment 384995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596317</commentid>
    <comment_count>4</comment_count>
      <attachid>384995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-06 12:31:03 -0800</bug_when>
    <thetext>Comment on attachment 384995
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Update maplike according setlike model where we support syncing at creation of the JS wrapper
&gt; +        and syncing whenever setlike/maplike methods are called.

I don’t fully understand the model here.

This assumes all calls to change the state of a maplike or setlike are made from DOM bindings. If code other than the DOM bindings modifies such an object’s state directly, then the wrapper will be out of sync? If that’s so, then it’s dangerous to have many functions that could be called from elsewhere in WebKit, but it’s unsafe to call them.

Can we do better? I don’t mind the concept here, but I’m worried that this is possibly easy to use wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596333</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-06 13:32:50 -0800</bug_when>
    <thetext>The current use of setlike/maplike is limited to adding items at init time of the JS wrapper and updating through DOM binding. Hence the proposed model.

When we will want to support updating from C++ and then the JS wrapper backing set/map, I see two options:
1. Everytime a setlike/maplike method is called from binding generated code, we first call a synchronise method to sync the backing set/map (brute force or optimised).
2. At the time we update the C++ map/set, we create the JS wrapper (if it exists, otherwise we can return early) and update its backing set/map. We anyway need to call toJS on the key/value to update the backing set/map so getting the JS wrapper should be feasible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596336</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-06 13:39:37 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; The current use of setlike/maplike is limited to adding items at init time
&gt; of the JS wrapper and updating through DOM binding. Hence the proposed model.

Sure, got it.

As long as this is true, I kind of wish the functions that modify the object were not accessible to other WebKit C++ code that’s not generated by the bindings script. That way you can’t make the mistake of calling them. So many other DOM functions are both accessible from the DOM bindings, but also functions that are safe to call from elsewhere in WebKit, and I can imagine someone not understanding that is true here.

Something simple like making the functions private and using friend, giving the functions strange names, or giving the functions unusual calling conventions. None of those options seem excellent to me, but maybe there’s a good/simple idea that could achieve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596344</commentid>
    <comment_count>7</comment_count>
      <attachid>384995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-06 13:48:41 -0800</bug_when>
    <thetext>Comment on attachment 384995
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:39
&gt; +    if (backingMap.isUndefined()) {

I would like this better with an early exit:

    if (!undefined)
        // less code

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:52
&gt; +void clearBackingMap(JSC::JSGlobalObject&amp; lexicalGlobalObject, JSC::JSObject&amp; backingMap)

Could we refactor this so clearBackingMap and setBackingMap share more code? I think we could make a helper function that takes a property name and a argument buffer and does all the work.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:56
&gt; +    ASSERT(!function.isUndefined());

What makes this a safe assertion? I don’t see how we can guarantee this. But also, I don’t think we need to assert it since getCallData can handle undefined.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:60
&gt; +    ASSERT(callType != JSC::CallType::None);

What makes this a safe assertion? I don’t see how we can guarantee this.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:69
&gt; +    ASSERT(!function.isUndefined());

What makes this a safe assertion? I don’t see how we can guarantee this. But also, I don’t think we need to assert it since getCallData can handle undefined.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.cpp:73
&gt; +    ASSERT(callType != JSC::CallType::None);

What makes this a safe assertion? I don’t see how we can guarantee this.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:56
&gt; +    template&lt;class IDLKeyType, class IDLValueType&gt; void set(typename IDLKeyType::ParameterType, typename IDLValueType::ParameterType);

I personally prefer typename to class for the template arguments.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:70
&gt; +template&lt;class IDLKeyType, class IDLValueType&gt;

Ditto.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:71
&gt; +inline void DOMMapAdapter::set(typename IDLKeyType::ParameterType key, typename IDLValueType::ParameterType value)

I don’t think we need inline here. It probably does not affect whether this is inlined or not, and outside of that the main function of &quot;inline&quot; is to make it safe to have something in the header, which is already the case for a function template.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:79
&gt; +inline void DOMMapAdapter::clear()

Why should this be inline and in the header?

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:84
&gt; +template&lt;typename WrapperClass&gt; inline JSC::JSObject&amp; getAndInitializeBackingMap(JSC::JSGlobalObject&amp; lexicalGlobalObject, WrapperClass&amp; mapLike)

Don’t think we need inline here (same reason as above&gt;.

&gt; Source/WebCore/bindings/js/JSDOMMapLike.h:94
&gt;  template&lt;typename WrapperClass&gt; inline JSC::JSValue forwardSizeToMapLike(JSC::JSGlobalObject&amp; lexicalGlobalObject, WrapperClass&amp; mapLike)

Don’t think we need inline here (same reason as above&gt;. Same for the other functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596694</commentid>
    <comment_count>8</comment_count>
      <attachid>385121</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-08 08:05:40 -0800</bug_when>
    <thetext>Created attachment 385121
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596695</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-08 08:06:55 -0800</bug_when>
    <thetext>Thanks for the review, I updated accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596714</commentid>
    <comment_count>10</comment_count>
      <attachid>385121</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-08 11:10:49 -0800</bug_when>
    <thetext>Comment on attachment 385121
Patch for landing

Clearing flags on attachment: 385121

Committed r253276: &lt;https://trac.webkit.org/changeset/253276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596715</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-08 11:10:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596716</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-08 11:11:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/57735209&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596892</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-12-09 10:50:28 -0800</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/253276/webkit

broke webrtc/multi-video.html 

tracking in https://bugs.webkit.org/show_bug.cgi?id=205020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596908</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-12-09 11:27:38 -0800</bug_when>
    <thetext>(In reply to Truitt Savell from comment #13)
&gt; It looks like the changes in https://trac.webkit.org/changeset/253276/webkit
&gt; 
&gt; broke webrtc/multi-video.html 
&gt; 
&gt; tracking in https://bugs.webkit.org/show_bug.cgi?id=205020

I doubt this change set caused the regression.
I&apos;ll look at it tomorrow.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384887</attachid>
            <date>2019-12-05 02:01:57 -0800</date>
            <delta_ts>2019-12-06 00:22:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204879-20191205110155.patch</filename>
            <type>text/plain</type>
            <size>52049</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJkMzllMGE4NzlkM2M0
OGE0NDNlNTkyMGU1MGI1MmFiZjAwYzM5Mi4uNWM2NDQzNjAxZjNlNDg0MjEzMDA1YmQyZjNkM2Ix
Y2Y0OTkxOTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE5LTEyLTA1ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBEbyBub3QgdXNlIERPTUd1
YXJkZWQgZm9yIG1hcGxpa2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSBtYXBsaWtlIGFjY29yZGluZyBzZXRsaWtlIG1vZGVsIHdoZXJlIHdl
IHN1cHBvcnQgc3luY2luZyBhdCBjcmVhdGlvbiBvZiB0aGUgSlMgd3JhcHBlcgorICAgICAgICBh
bmQgc3luY2luZyB3aGVuZXZlciBzZXRsaWtlL21hcGxpa2UgbWV0aG9kcyBhcmUgY2FsbGVkLgor
ICAgICAgICBSZW1vdmluZyBET01HdWFyZGVkT2JqZWN0IG1ha2VzIGltcGxlbWVudGF0aW9uICBt
b3JlIGxpZ2h0d2VpZ2h0LgorICAgICAgICBBbHNvIGZpeCBzZXRsaWtlLmZvckVhY2ggbnVtYmVy
IG9mIHBhcmFtZXRlcnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cyBhbmQg
dXBkYXRlZCB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OmluaXRpYWxpemVNYXBMaWtl
KToKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaDoKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVwb3J0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpSVENTdGF0c1JlcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVw
b3J0Ojppbml0aWFsaXplTWFwTGlrZSk6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9y
dDo6UlRDU3RhdHNSZXBvcnQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2Vi
UlRDTWVkaWFFbmRwb2ludDo6Y3JlYXRlU3RhdHNDb2xsZWN0b3IpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjp+TGliV2ViUlRDU3RhdHND
b2xsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVJUQ1N0YXRzUmVwb3J0QmFj
a2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENTdGF0c0NvbGxlY3Rvcjo6T25T
dGF0c0RlbGl2ZXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTU1h
cExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0QmFja2luZ01hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpjbGVhckJhY2tpbmdNYXApOgorICAgICAgICAoV2ViQ29yZTo6c2V0VG9CYWNraW5n
TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdN
YXApOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcCk6
CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXApOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5oOgorICAgICAgICAoV2ViQ29yZTo6RE9N
TWFwQWRhcHRlcjo6RE9NTWFwQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpET01NYXBBZGFw
dGVyOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTWFwQWRhcHRlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6Zm9yd2FyZFNpemVUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEVu
dHJpZXNUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEtleXNUb01hcExpa2Up
OgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZFZhbHVlc1RvTWFwTGlrZSk6CisgICAgICAgIChX
ZWJDb3JlOjpmb3J3YXJkQ2xlYXJUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2Fy
ZEZvckVhY2hUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEdldFRvTWFwTGlr
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkSGFzVG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmRTZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZERl
bGV0ZVRvTWFwTGlrZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmZvcndhcmRGb3JFYWNoVG9TZXRMaWtlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtOgorICAgICAgICAocGFyc2VTZXRM
aWtlUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01hcExpa2U6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkT25seU1hcExpa2U6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsc01hcExpa2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzTWFwTGlrZTo6aW5pdGlhbGl6ZU1hcExpa2UpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzTWFwTGlrZS5oOgorCiAyMDE5LTEyLTA1ICB5b3Vlbm4gZmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYXBsaWtlIHNob3VsZCBkZWZpbmUgYSBzZXQgbWV0
aG9kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGln
aHRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0TWFw
LmNwcAppbmRleCBiMjQ4ZWY3ZDJlNTU1Nzk0ZDRkNzNjZDk3YTk3MzdhZjhiNGYxMzAzLi40MzNj
ZDZlZDgyZTBjMmFmZWNmMThmMjUyNjZhYjk4N2JhODM5YWRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5jcHAKQEAgLTI2LDYgKzI2LDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaWdobGlnaHRNYXAuaCIKIAorI2lu
Y2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTSGlnaGxpZ2h0UmFuZ2VHcm91cC5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgSGlnaGxpZ2h0TWFwOjphZGRIaWdobGln
aHRHcm91cChTdHJpbmcmIGNzc1N0eWxlLCBIaWdobGlnaHRSYW5nZUdyb3VwICZncm91cCkKQEAg
LTM0LDYgKzM3LDEyIEBAIHZvaWQgSGlnaGxpZ2h0TWFwOjphZGRIaWdobGlnaHRHcm91cChTdHJp
bmcmIGNzc1N0eWxlLCBIaWdobGlnaHRSYW5nZUdyb3VwICZncm91CiAgICAgVU5VU0VEX1BBUkFN
KGdyb3VwKTsKIH0KIAordm9pZCBIaWdobGlnaHRNYXA6OmluaXRpYWxpemVNYXBMaWtlKERPTU1h
cEFkYXB0ZXImIG1hcCkKK3sKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbV9tYXApCisgICAg
ICAgIG1hcC5zZXQ8SURMRE9NU3RyaW5nLCBJRExJbnRlcmZhY2U8SGlnaGxpZ2h0UmFuZ2VHcm91
cD4+KGtleVZhbHVlLmtleSwga2V5VmFsdWUudmFsdWUpOworfQorCiB2b2lkIEhpZ2hsaWdodE1h
cDo6c2V0RnJvbU1hcExpa2UoU3RyaW5nJiYsIFJlZjxIaWdobGlnaHRSYW5nZUdyb3VwPiYmKQog
ewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxp
Z2h0TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAu
aAppbmRleCA2NDFlMjRiZDgwZDc1ZmIyNTExODYyOWIyMmMwYzQ0Y2Y1Njk4MTRiLi42OWE3MGIw
MGM4ZDZmNGM4NDRlZjc5OGZlMzc4MzBjMzI0OWJiY2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaApAQCAtMjYsMjMgKzI2LDIxIEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhpZ2hsaWdodFJhbmdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFwQWRh
cHRlcjsKIGNsYXNzIERPTVN0cmluZzsKIGNsYXNzIEhpZ2hsaWdodFJhbmdlR3JvdXA7CiAKIGNs
YXNzIEhpZ2hsaWdodE1hcCA6IHB1YmxpYyBSZWZDb3VudGVkPEhpZ2hsaWdodE1hcD4gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SGlnaGxpZ2h0TWFwPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IEhpZ2hsaWdodE1hcCk7IH0KLSAgICAKKwogICAgIHZvaWQgYWRkSGlnaGxpZ2h0
R3JvdXAoU3RyaW5nJiwgSGlnaGxpZ2h0UmFuZ2VHcm91cCYpOwotICAgIAotICAgIHZvaWQgc3lu
Y2hyb25pemVCYWNraW5nTWFwKFJlZjxET01NYXBMaWtlPiYmIG1hcExpa2UpIHsgbV9tYXBMaWtl
ID0gV1RGTW92ZShtYXBMaWtlKTsgfQotICAgIERPTU1hcExpa2UqIGJhY2tpbmdNYXAoKSB7IHJl
dHVybiBtX21hcExpa2UuZ2V0KCk7IH0KKyAgICB2b2lkIGluaXRpYWxpemVNYXBMaWtlKERPTU1h
cEFkYXB0ZXImKTsKIAogICAgIC8vIEJpbmRpbmdzIHN1cHBvcnQuCiAgICAgU3RyaW5nIG5hbWVk
SXRlbShjb25zdCBBdG9tU3RyaW5nJiBuYW1lKSBjb25zdDsKQEAgLTU1LDggKzUzLDcgQEAgcHVi
bGljOgogICAgIAogcHJpdmF0ZToKICAgICBIaWdobGlnaHRNYXAoKSA9IGRlZmF1bHQ7Ci0gICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxIaWdobGlnaHRSYW5nZUdyb3VwPj4gbV9tYXA7Ci0gICAg
UmVmUHRyPERPTU1hcExpa2U+IG1fbWFwTGlrZTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmPEhp
Z2hsaWdodFJhbmdlR3JvdXA+PiBtX21hcDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuaAppbmRleCBhOGJlNjA1ZDM5
ZDgwYTIyNGM2MzE0NTZkMzZkMjhlZWNjYWJhNTBmLi5hZDczMjE5YTAwZTFmOTJhNDVkZjUwYTQx
Zjk4NjNkYzdkNThiODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1N0YXRzUmVwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTdGF0c1JlcG9ydC5oCkBAIC0yNSwxOSArMjUsMTggQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENTdGF0
c0NvbGxlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERPTU1hcEFkYXB0
ZXI7CisKIGNsYXNzIFJUQ1N0YXRzUmVwb3J0IDogcHVibGljIFJlZkNvdW50ZWQ8UlRDU3RhdHNS
ZXBvcnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJUQ1N0YXRzUmVwb3J0PiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJUQ1N0YXRzUmVwb3J0KTsgfQotCi0gICAgdm9pZCBz
eW5jaHJvbml6ZUJhY2tpbmdNYXAoUmVmPERPTU1hcExpa2U+JiYgbWFwTGlrZSkgeyBtX21hcExp
a2UgPSBXVEZNb3ZlKG1hcExpa2UpOyB9Ci0gICAgRE9NTWFwTGlrZSogYmFja2luZ01hcCgpIHsg
cmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWU+
IHZvaWQgYWRkU3RhdHModHlwZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUmJiB2YWx1ZSkgeyBt
X21hcExpa2UtPnNldDxJRExET01TdHJpbmcsIFZhbHVlPih2YWx1ZS5pZCwgc3RkOjpmb3J3YXJk
PHR5cGVuYW1lIFZhbHVlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOyB9CisgICAgdXNpbmcgTWFw
SW5pdGlhbGl6ZXIgPSBGdW5jdGlvbjx2b2lkKERPTU1hcEFkYXB0ZXImKT47CisgICAgc3RhdGlj
IFJlZjxSVENTdGF0c1JlcG9ydD4gY3JlYXRlKE1hcEluaXRpYWxpemVyJiYgbWFwSW5pdGlhbGl6
ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUlRDU3RhdHNSZXBvcnQoV1RGTW92ZShtYXBJbml0
aWFsaXplcikpKTsgfQogCisgICAgdm9pZCBpbml0aWFsaXplTWFwTGlrZShET01NYXBBZGFwdGVy
JiBhZGFwdGVyKSB7IG1fbWFwSW5pdGlhbGl6ZXIoYWRhcHRlcik7IH0KIAogICAgIGVudW0gY2xh
c3MgVHlwZSB7CiAgICAgICAgIENvZGVjLApAQCAtMjM2LDEwICsyMzUsMTQgQEAgcHVibGljOgog
ICAgIH07CiAKIHByaXZhdGU6Ci0gICAgUlRDU3RhdHNSZXBvcnQoKSA9IGRlZmF1bHQ7CisgICAg
ZXhwbGljaXQgUlRDU3RhdHNSZXBvcnQoTWFwSW5pdGlhbGl6ZXImJik7CiAKLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPERPTU1hcExpa2U+IG1fbWFwTGlrZTsKKyAgICBNYXBJbml0aWFsaXplciBtX21h
cEluaXRpYWxpemVyOwogfTsKIAoraW5saW5lIFJUQ1N0YXRzUmVwb3J0OjpSVENTdGF0c1JlcG9y
dChNYXBJbml0aWFsaXplciYmIG1hcEluaXRpYWxpemVyKQorICAgIDogbV9tYXBJbml0aWFsaXpl
cihXVEZNb3ZlKG1hcEluaXRpYWxpemVyKSkKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJy
dGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcAppbmRleCA3NTVl
NzMyY2JjOTlhYmRhNTEzZjE0ZDFjNTc1NmVmOWJhY2E2Y2JkLi5mMjAxM2U1NGZmMTQ0NzNkNDBh
MzM0YTY4Nzk0ODA3ZWVjYTY3NmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBvaW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRp
YUVuZHBvaW50LmNwcApAQCAtMjg2LDE5ICsyODYsMTIgQEAgdm9pZCBMaWJXZWJSVENNZWRpYUVu
ZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcigpCiAKIHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJSVENT
dGF0c0NvbGxlY3Rvcj4gTGliV2ViUlRDTWVkaWFFbmRwb2ludDo6Y3JlYXRlU3RhdHNDb2xsZWN0
b3IoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewotICAgIHJldHVybiBMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvcjo6Y3JlYXRlKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFibGUgLT4gUmVmUHRyPFJUQ1N0YXRz
UmVwb3J0PiB7CisgICAgcmV0dXJuIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpjcmVhdGUoW3By
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
KGF1dG8mJiByZXBvcnQpIG11dGFibGUgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHJlcG9ydCA9IFJUQ1N0YXRzUmVwb3J0Ojpj
cmVhdGUoKTsKLQotICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0
c1JlcG9ydD4+KHJlcG9ydC5jb3B5UmVmKCkpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNTdG9wcGVkKCkgfHwgIXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAv
LyBUaGUgcHJvbWlzZSByZXNvbHV0aW9uIG1pZ2h0IGZhaWwgaW4gd2hpY2ggY2FzZSBubyBiYWNr
aW5nIG1hcCB3aWxsIGJlIGNyZWF0ZWQuCi0gICAgICAgIGlmICghcmVwb3J0LT5iYWNraW5nTWFw
KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHJlcG9ydDsK
KyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8UlRDU3RhdHNSZXBvcnQ+Pihy
ZXBvcnQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcAppbmRleCA2MmFkODIzODMzNDQzNTE5NjFkMDli
Y2ZiMzMxOTY2ODA2NjkzNGU5Li44YTY3YzA3OWVlYTBkYTMwNDBhM2UzYzA1ZGJhMTVlZmRiOWZm
OGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBVU0UoTElCV0VCUlRDKQogCisjaW5jbHVkZSAiSlNET01N
YXBMaWtlLmgiCiAjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgogI2luY2x1ZGUgIlBlcmZv
cm1hbmNlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQ0LDcgKzQ1LDcgQEAg
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I6On5MaWJXZWJSVENTdGF0c0NvbGxlY3RvcigpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92ZSht
X2NhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgY2Fs
bGJhY2sobnVsbHB0cik7CiAgICAgfSk7CiB9CiAKQEAgLTM4MCw1OCArMzgxLDYwIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhSVENTdGF0c1JlcG9ydDo6
UGVlckNvbm5lY3Rpb25TdGF0CiAgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc0Nsb3NlZCA9ICpy
dGNTdGF0cy5kYXRhX2NoYW5uZWxzX2Nsb3NlZDsKIH0KIAotdm9pZCBMaWJXZWJSVENTdGF0c0Nv
bGxlY3Rvcjo6T25TdGF0c0RlbGl2ZXJlZChjb25zdCBydGM6OnNjb3BlZF9yZWZwdHI8Y29uc3Qg
d2VicnRjOjpSVENTdGF0c1JlcG9ydD4mIHJ0Y1JlcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBp
bml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKERPTU1hcEFkYXB0ZXImIHJlcG9ydCwg
Y29uc3Qgd2VicnRjOjpSVENTdGF0c1JlcG9ydCYgcnRjUmVwb3J0KQogewotICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBydGM6OnNjb3BlZF9yZWZwdHI8TGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3I+KHRoaXMpLCBydGNSZXBvcnRdIHsKLSAgICAgICAgYXV0byByZXBvcnQgPSBw
cm90ZWN0ZWRUaGlzLT5tX2NhbGxiYWNrKCk7Ci0gICAgICAgIGlmICghcmVwb3J0KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFTU0VSVChyZXBvcnQtPmJhY2tpbmdNYXAoKSk7Ci0K
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBydGNTdGF0cyA6ICpydGNSZXBvcnQpIHsKLSAgICAg
ICAgICAgIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFt
U3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkluYm91bmRS
VFBTdHJlYW1TdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVh
bVN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0luYm91bmRSVFBTdHJl
YW1TdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJ
RExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUlRQU3RyZWFtU3RhdHM+PihXVEZN
b3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ091dGJvdW5kUlRQU3RyZWFtU3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUlRQU3RyZWFtU3RhdHMgc3RhdHM7Ci0gICAgICAg
ICAgICAgICAgZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNv
bnN0IHdlYnJ0Yzo6UlRDT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAg
ICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0
OjpPdXRib3VuZFJUUFN0cmVhbVN0YXRzPj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENNZWRpYVN0cmVhbVRyYWNr
U3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok1lZGlhU3Ry
ZWFtVHJhY2tTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDTWVkaWFTdHJlYW1U
cmFja1N0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ01lZGlhU3RyZWFt
VHJhY2tTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0
czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpNZWRpYVN0cmVhbVRyYWNrU3RhdHM+PihX
VEZNb3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9
PSB3ZWJydGM6OlJUQ0RhdGFDaGFubmVsU3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHMgc3RhdHM7Ci0gICAgICAgICAgICAgICAg
ZmlsbFJUQ0RhdGFDaGFubmVsU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6
UlRDRGF0YUNoYW5uZWxTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0
LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpEYXRhQ2hhbm5lbFN0YXRz
Pj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBl
KCkgPT0gd2VicnRjOjpSVENJY2VDYW5kaWRhdGVQYWlyU3RhdHM6OmtUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVBhaXJTdGF0cyBzdGF0czsKLSAg
ICAgICAgICAgICAgICBmaWxsUlRDSWNlQ2FuZGlkYXRlUGFpclN0YXRzKHN0YXRzLCBzdGF0aWNf
Y2FzdDxjb25zdCB3ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0cyY+KHJ0Y1N0YXRzKSk7
Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRz
UmVwb3J0OjpJY2VDYW5kaWRhdGVQYWlyU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ1JlbW90ZUljZUNh
bmRpZGF0ZVN0YXRzOjprVHlwZSB8fCBydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENMb2Nh
bEljZUNhbmRpZGF0ZVN0YXRzOjprVHlwZSkgewotICAgICAgICAgICAgICAgIFJUQ1N0YXRzUmVw
b3J0OjpJY2VDYW5kaWRhdGVTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDSWNl
Q2FuZGlkYXRlU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDSWNlQ2Fu
ZGlkYXRlU3RhdHMmPihydGNTdGF0cykpOwotICAgICAgICAgICAgICAgIHJlcG9ydC0+YWRkU3Rh
dHM8SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlU3RhdHM+PihXVEZN
b3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ0NlcnRpZmljYXRlU3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRD
U3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHMgc3RhdHM7Ci0gICAgICAgICAgICAgICAgZmls
bFJUQ0NlcnRpZmljYXRlU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRD
Q2VydGlmaWNhdGVTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5h
ZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDZXJ0aWZpY2F0ZVN0YXRzPj4o
V1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkg
PT0gd2VicnRjOjpSVENDb2RlY1N0YXRzOjprVHlwZSkgewotICAgICAgICAgICAgICAgIFJUQ1N0
YXRzUmVwb3J0OjpDb2RlY1N0YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENDb2Rl
Y1N0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NvZGVjU3RhdHMmPihy
dGNTdGF0cykpOwotICAgICAgICAgICAgICAgIHJlcG9ydC0+YWRkU3RhdHM8SURMRGljdGlvbmFy
eTxSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDVHJhbnNwb3J0U3Rh
dHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0
YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhzdGF0cywg
c3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENUcmFuc3BvcnRTdGF0cyY+KHJ0Y1N0YXRzKSk7
Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRz
UmVwb3J0OjpUcmFuc3BvcnRTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rpb25TdGF0
czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rp
b25TdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0
cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENQZWVyQ29ubmVjdGlvblN0YXRz
Jj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rp
b25hcnk8UlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHM+PihXVEZNb3ZlKHN0YXRz
KSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBydGNTdGF0cyA6IHJ0Y1Jl
cG9ydCkgeworICAgICAgICBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDSW5ib3Vu
ZFJUUFN0cmVhbVN0YXRzOjprVHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Oklu
Ym91bmRSVFBTdHJlYW1TdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxJbmJvdW5kUlRQU3Ry
ZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDSW5ib3VuZFJUUFN0
cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsKKyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3Ry
aW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUlRQU3RyZWFtU3RhdHM+
PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRz
LnR5cGUoKSA9PSB3ZWJydGM6OlJUQ091dGJvdW5kUlRQU3RyZWFtU3RhdHM6OmtUeXBlKSB7Cisg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSVFBTdHJlYW1TdGF0cyBzdGF0czsK
KyAgICAgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdGF0aWNfY2Fz
dDxjb25zdCB3ZWJydGM6OlJUQ091dGJvdW5kUlRQU3RyZWFtU3RhdHMmPihydGNTdGF0cykpOwor
ICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3Rh
dHNSZXBvcnQ6Ok91dGJvdW5kUlRQU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0
cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ01l
ZGlhU3RyZWFtVHJhY2tTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0
OjpNZWRpYVN0cmVhbVRyYWNrU3RhdHMgc3RhdHM7CisgICAgICAgICAgICBmaWxsUlRDTWVkaWFT
dHJlYW1UcmFja1N0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ01lZGlh
U3RyZWFtVHJhY2tTdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6TWVkaWFTdHJlYW1UcmFj
a1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgfSBlbHNlIGlmIChy
dGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENEYXRhQ2hhbm5lbFN0YXRzOjprVHlwZSkgewor
ICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHMgc3RhdHM7CisgICAg
ICAgICAgICBmaWxsUlRDRGF0YUNoYW5uZWxTdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qg
d2VicnRjOjpSVENEYXRhQ2hhbm5lbFN0YXRzJj4ocnRjU3RhdHMpKTsKKyAgICAgICAgICAgIHJl
cG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpEYXRh
Q2hhbm5lbFN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENJY2VDYW5kaWRhdGVQYWlyU3RhdHM6
OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlUGFpclN0
YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0cyhzdGF0
cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVQYWlyU3RhdHMmPihy
dGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rp
b25hcnk8UlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVBhaXJTdGF0cz4+KHN0YXRzLmlkLCBX
VEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdl
YnJ0Yzo6UlRDUmVtb3RlSWNlQ2FuZGlkYXRlU3RhdHM6OmtUeXBlIHx8IHJ0Y1N0YXRzLnR5cGUo
KSA9PSB3ZWJydGM6OlJUQ0xvY2FsSWNlQ2FuZGlkYXRlU3RhdHM6OmtUeXBlKSB7CisgICAgICAg
ICAgICBSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlU3RhdHMgc3RhdHM7CisgICAgICAgICAg
ICBmaWxsUlRDSWNlQ2FuZGlkYXRlU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0
Yzo6UlRDSWNlQ2FuZGlkYXRlU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0
LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRp
ZGF0ZVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENDZXJ0aWZpY2F0ZVN0YXRzOjprVHlwZSkg
eworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHMgc3RhdHM7Cisg
ICAgICAgICAgICBmaWxsUlRDQ2VydGlmaWNhdGVTdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29u
c3Qgd2VicnRjOjpSVENDZXJ0aWZpY2F0ZVN0YXRzJj4ocnRjU3RhdHMpKTsKKyAgICAgICAgICAg
IHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpD
ZXJ0aWZpY2F0ZVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENDb2RlY1N0YXRzOjprVHlwZSkg
eworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMgc3RhdHM7CisgICAgICAg
ICAgICBmaWxsUlRDQ29kZWNTdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpS
VENDb2RlY1N0YXRzJj4ocnRjU3RhdHMpKTsKKyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9N
U3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMu
aWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkg
PT0gd2VicnRjOjpSVENUcmFuc3BvcnRTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0
YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENUcmFu
c3BvcnRTdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENUcmFuc3BvcnRT
dGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywg
SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ1BlZXJDb25uZWN0aW9uU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENT
dGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxS
VENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJU
Q1BlZXJDb25uZWN0aW9uU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNl
dDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0
aW9uU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOwogICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZlcmVkKGNvbnN0
IHJ0Yzo6c2NvcGVkX3JlZnB0cjxjb25zdCB3ZWJydGM6OlJUQ1N0YXRzUmVwb3J0PiYgcnRjUmVw
b3J0KQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBydGM6
OnNjb3BlZF9yZWZwdHI8TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I+KHRoaXMpLCBydGNSZXBvcnRd
KCkgeworICAgICAgICBtX2NhbGxiYWNrKFJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUoW3J0Y1JlcG9y
dF0oYXV0byYgbWFwQWRhcHRlcikgeworICAgICAgICAgICAgaWYgKHJ0Y1JlcG9ydCkKKyAgICAg
ICAgICAgICAgICBpbml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKG1hcEFkYXB0ZXIs
ICpydGNSZXBvcnQpOworICAgICAgICB9KSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRz
Q29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oCmluZGV4IDMyYWQ4N2Y0ODk4NTllZmI1NTQwN2Iz
MzExMWUyZDE3ZDNkNTU0NDguLmYyYjQyY2EwNWJiNmViM2E2YzMzMmJkNjdlNWUyMTNmMzJhZjg5
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaApAQCAtMzgs
MTEgKzM4LDE0IEBAIEFMTE9XX1VOVVNFRF9QQVJBTUVURVJTX0VORAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERPTU1hcEFkYXB0ZXI7CiBjbGFzcyBSVENTdGF0c1JlcG9ydDsKIAor
dm9pZCBpbml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKFJUQ1N0YXRzUmVwb3J0Jik7
CisKIGNsYXNzIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yIDogcHVibGljIHdlYnJ0Yzo6UlRDU3Rh
dHNDb2xsZWN0b3JDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjxSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+KCk+OworICAgIHVz
aW5nIENvbGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8UlRD
U3RhdHNSZXBvcnQ+JiYpPjsKICAgICBzdGF0aWMgcnRjOjpzY29wZWRfcmVmcHRyPExpYldlYlJU
Q1N0YXRzQ29sbGVjdG9yPiBjcmVhdGUoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaykgeyBy
ZXR1cm4gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxMaWJXZWJSVENTdGF0c0NvbGxlY3Rvcj4o
V1RGTW92ZShjYWxsYmFjaykpOyB9CiAKICAgICBleHBsaWNpdCBMaWJXZWJSVENTdGF0c0NvbGxl
Y3RvcihDb2xsZWN0b3JDYWxsYmFjayYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTU1hcExpa2UuY3BwCmluZGV4IGY3ZTYxZmViZGUyZWVhYWMwODEzYTlkZTVlM2Q2MmEyNWQ1
M2YwM2EuLmYwMWUyMDExNDJlNzJlY2MwMmViYjFjYjk5NjdmMmVmMjE1ZjAwN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcApAQCAtMjgsNDIgKzI4LDYy
IEBACiAKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQ2F0Y2hTY29wZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTWFwLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBKU0M6OkpTT2JqZWN0JiBn
ZXRCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SlNPYmplY3QmIG1hcExpa2UpCitzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxKU0M6OkpTT2JqZWN0Pj4gZ2V0QmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQogewogICAgIGF1dG8m
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gYmFja2luZ01hcCA9IG1h
cExpa2UuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0ZU5hbWUo
KSk7Ci0gICAgcmV0dXJuICpKU0M6OmFzT2JqZWN0KGJhY2tpbmdNYXApOworICAgIGlmIChiYWNr
aW5nTWFwLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKworICAgICAgICBiYWNraW5nTWFwID0gSlNDOjpKU01hcDo6Y3JlYXRlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2bSwgbGV4aWNhbEdsb2JhbE9iamVjdC5tYXBTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIG1hcExpa2Uu
cHV0RGlyZWN0KHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
LT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0ZU5hbWUoKSwgYmFja2luZ01hcCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7Cisg
ICAgICAgIHJldHVybiB7IHRydWUsICpKU0M6OmFzT2JqZWN0KGJhY2tpbmdNYXApIH07CisgICAg
fQorICAgIHJldHVybiB7IGZhbHNlLCAqSlNDOjphc09iamVjdChiYWNraW5nTWFwKSB9OwogfQog
Ci12b2lkIGluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6Vk0mIHZtLCBKU0M6OkpTT2JqZWN0JiBt
YXBMaWtlLCBKU0M6OkpTTWFwJiBiYWNraW5nTWFwKQordm9pZCBjbGVhckJhY2tpbmdNYXAoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgYmFj
a2luZ01hcCkKIHsKLSAgICBtYXBMaWtlLnB1dERpcmVjdCh2bSwgc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZh
dGVOYW1lKCksICZiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IGJhY2tpbmdNYXAu
Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhcik7CisgICAg
QVNTRVJUKCFmdW5jdGlvbi5pc1VuZGVmaW5lZCgpKTsKKworICAgIEpTQzo6Q2FsbERhdGEgY2Fs
bERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0s
IGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IEpTQzo6Q2FsbFR5
cGU6Ok5vbmUpOworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAg
IEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgJmJhY2tpbmdNYXAsIGFyZ3VtZW50cyk7CiB9CiAKLUpTQzo6SlNNYXAmIGNyZWF0ZUJh
Y2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQordm9p
ZCBzZXRUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpKU09iamVjdCYgYmFja2luZ01hcCwgSlNDOjpKU1ZhbHVlIGtleSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQogewotICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIEpTQzo6SlNWYWx1ZSBmdW5j
dGlvbiA9IGJhY2tpbmdNYXAuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5zZXQpOworICAgIEFTU0VSVCghZnVuY3Rpb24uaXNVbmRlZmluZWQoKSk7CiAKLSAgICBB
U1NFUlQobWFwTGlrZS5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2
YXRlTmFtZSgpKS5pc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIGJhY2tpbmdNYXAgPSBKU0M6OkpT
TWFwOjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QubWFwU3Ry
dWN0dXJlKCkpOwotICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIG1h
cExpa2UucHV0RGlyZWN0KHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpLT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0ZU5hbWUoKSwgYmFja2luZ01h
cCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7Ci0gICAgcmV0dXJuICpiYWNraW5nTWFwOworICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7
CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0sIGZ1bmN0
aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IEpTQzo6Q2FsbFR5cGU6Ok5v
bmUpOworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoa2V5KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICBKU0M6
OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
ICZiYWNraW5nTWFwLCBhcmd1bWVudHMpOwogfQogCi1KU0M6OkpTVmFsdWUgZm9yd2FyZEF0dHJp
YnV0ZUdldHRlclRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGF0
dHJpYnV0ZU5hbWUpCitKU0M6OkpTVmFsdWUgZm9yd2FyZEF0dHJpYnV0ZUdldHRlclRvQmFja2lu
Z01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2Jq
ZWN0JiBiYWNraW5nTWFwLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGF0dHJpYnV0ZU5hbWUpCiB7
Ci0gICAgcmV0dXJuIGdldEJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSku
Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICByZXR1cm4gYmFj
a2luZ01hcC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1K
U0M6OkpTVmFsdWUgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBK
U0M6OkpTT2JqZWN0JiBtYXBMaWtlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGZ1bmN0aW9uTmFt
ZSkKK0pTQzo6SlNWYWx1ZSBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJh
bWUsIEpTQzo6SlNPYmplY3QmIGJhY2tpbmdNYXAsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgZnVu
Y3Rpb25OYW1lKQogewotICAgIGF1dG8mIGJhY2tpbmdNYXAgPSBnZXRCYWNraW5nTWFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIG1hcExpa2UpOwotCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0g
YmFja2luZ01hcC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZSk7CiAgICAg
QVNTRVJUKGZ1bmN0aW9uKTsKIApAQCAtNzcsMjEgKzk3LDE5IEBAIEpTQzo6SlNWYWx1ZSBmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPCiAgICAgcmV0dXJuIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJmJhY2tpbmdNYXAsIGFyZ3VtZW50cyk7CiB9CiAKLUpT
Qzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSkKK0pT
Qzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNDOjpKU09iamVj
dCYgbWFwTGlrZSkKIHsKICAgICBhdXRvKiBmdW5jdGlvbiA9IGdsb2JhbE9iamVjdC5idWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMoKS5qc0RPTUJpbmRpbmdJbnRlcm5hbHMoKS5tX21hcExpa2VGb3JF
YWNoRnVuY3Rpb24uZ2V0KCk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKIAotICAgIGdldEJhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSk7Ci0KICAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShnbG9iYWxPYmplY3Qudm0oKSwg
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSk7CiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
Zm9yIChzaXplX3QgY3B0ciA9IDA7IGNwdHIgPCBjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpOyAr
K2NwdHIpCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3Vt
ZW50KGNwdHIpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAg
IHJldHVybiBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsICZtYXBMaWtlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBKU0M6OmNhbGwo
Jmdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJm1hcExpa2UsIGFy
Z3VtZW50cyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NTWFwTGlrZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtl
LmgKaW5kZXggZThmNWUwM2Y2N2E0MjlkODgxMGQ4ZGM3Zjg1MmRjMjZmNWUwYmZhNi4uY2QxNDg2
OTZiYjY4YWE4MTgyNTcxYmU0NDIyZmIyZjIxMDcxNjdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmgKQEAgLTI3LDIwICsyNywxOCBAQAogCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSAiSlNE
T01HdWFyZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQnVpbHRpbk5hbWVz
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tbW9uSWRlbnRpZmllcnMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU01hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdF
QkNPUkVfRVhQT1JUIEpTQzo6SlNNYXAmIGNyZWF0ZUJhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7Ci1XRUJDT1JFX0VY
UE9SVCB2b2lkIGluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Jiwg
SlNDOjpKU01hcCYpOworV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8SlNDOjpKU09iamVjdD4+IGdldEJhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNPYmplY3QmIG1hcExpa2UpOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1Zh
bHVlIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVj
dCYsIEpTQzo6SlNPYmplY3QmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKIFdFQkNPUkVfRVhQ
T1JUIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIEpTQzo6SlNPYmplY3QmLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFj
aENhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwg
SlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OkpTVmFsdWUgZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNraW5nTWFwKEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0M6OkpTT2JqZWN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsZWFyQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYpOwor
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNPYmplY3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgV3JhcHBlckNsYXNzJik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkU2l6ZVRvTWFw
TGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgV3JhcHBlckNsYXNzJik7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRW50cmllc1RvTWFwTGlrZShK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRLZXlzVG9N
YXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIFdyYXBwZXJDbGFz
cyYpOwpAQCAtNTIsOTIgKzUwLDEwMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3Ms
IHR5cGVuYW1lIEl0ZW1UeXBlPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1RvTWFwTAogdGVtcGxh
dGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZSwgdHlwZW5hbWUgVmFs
dWVUeXBlPiBKU0M6OkpTVmFsdWUgZm9yd2FyZFNldFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlwZSYmLCBWYWx1ZVR5
cGUmJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBl
PiBKU0M6OkpTVmFsdWUgZm9yd2FyZERlbGV0ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNDOjpDYWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlwZSYmKTsKIAotY2xhc3Mg
RE9NTWFwTGlrZSBmaW5hbCA6IHB1YmxpYyBET01HdWFyZGVkPEpTQzo6SlNNYXA+IHsKK2NsYXNz
IERPTU1hcEFkYXB0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RE9NTWFwTGlrZT4gY3Jl
YXRlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNYXAmIG1hcCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBET01NYXBMaWtlKGdsb2JhbE9iamVjdCwgbWFwKSk7IH0KKyAg
ICBET01NYXBBZGFwdGVyKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgSURMS2V5VHlwZSwgY2xhc3MgSURMVmFsdWVUeXBlPiB2b2lkIHNl
dCh0eXBlbmFtZSBJRExLZXlUeXBlOjpQYXJhbWV0ZXJUeXBlLCB0eXBlbmFtZSBJRExWYWx1ZVR5
cGU6OlBhcmFtZXRlclR5cGUpOworICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+IHZvaWQgc2V0KHR5cGVuYW1lIEtleTo6UGFyYW1l
dGVyVHlwZSwgdHlwZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUpOworcHJpdmF0ZToKKyAgICBK
U0M6OkpTR2xvYmFsT2JqZWN0JiBtX2xleGljYWxHbG9iYWxPYmplY3Q7CisgICAgSlNDOjpKU09i
amVjdCYgbV9iYWNraW5nTWFwOworfTsKIAotICAgIEpTQzo6SlNNYXAqIGJhY2tpbmdNYXAoKSB7
IHJldHVybiBndWFyZGVkKCk7IH0KK2lubGluZSBET01NYXBBZGFwdGVyOjpET01NYXBBZGFwdGVy
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3Qm
IGJhY2tpbmdNYXApCisgICAgOiBtX2xleGljYWxHbG9iYWxPYmplY3QobGV4aWNhbEdsb2JhbE9i
amVjdCkKKyAgICAsIG1fYmFja2luZ01hcChiYWNraW5nTWFwKQoreworfQogCi1wcm90ZWN0ZWQ6
Ci0gICAgRE9NTWFwTGlrZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
TWFwJiBtYXApIDogRE9NR3VhcmRlZDxKU0M6OkpTTWFwPihnbG9iYWxPYmplY3QsIG1hcCkgeyB9
Ci19OwordGVtcGxhdGU8Y2xhc3MgSURMS2V5VHlwZSwgY2xhc3MgSURMVmFsdWVUeXBlPgoraW5s
aW5lIHZvaWQgRE9NTWFwQWRhcHRlcjo6c2V0KHR5cGVuYW1lIElETEtleVR5cGU6OlBhcmFtZXRl
clR5cGUga2V5LCB0eXBlbmFtZSBJRExWYWx1ZVR5cGU6OlBhcmFtZXRlclR5cGUgdmFsdWUpCit7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKCZtX2xleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8ganNLZXkgPSB0b0pTPElETEtleVR5cGU+KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwg
KkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJm1fbGV4aWNhbEdsb2JhbE9iamVjdCks
IHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBJRExLZXlUeXBlOjpQYXJhbWV0ZXJUeXBlPihrZXkpKTsK
KyAgICBhdXRvIGpzVmFsdWUgPSB0b0pTPElETFZhbHVlVHlwZT4obV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1lIElETFZhbHVlVHlwZTo6UGFyYW1ldGVyVHlwZT4o
dmFsdWUpKTsKKyAgICBzZXRUb0JhY2tpbmdNYXAobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2Jh
Y2tpbmdNYXAsIGpzS2V5LCBqc1ZhbHVlKTsKK30KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZT4gaW5saW5lIHZvaWQgRE9NTWFwTGlrZTo6c2V0KHR5cGVuYW1lIEtleTo6
UGFyYW1ldGVyVHlwZSBrZXksIHR5cGVuYW1lIFZhbHVlOjpQYXJhbWV0ZXJUeXBlIHZhbHVlKQor
aW5saW5lIHZvaWQgRE9NTWFwQWRhcHRlcjo6Y2xlYXIoKQogewotICAgIGlmIChpc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFs
T2JqZWN0KCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgIGJhY2tpbmdNYXAoKS0+c2V0KGxleGljYWxHbG9iYWxPYmplY3QsCi0gICAgICAg
IHRvSlM8S2V5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZv
cndhcmQ8dHlwZW5hbWUgS2V5OjpQYXJhbWV0ZXJUeXBlPihrZXkpKSwKLSAgICAgICAgdG9KUzxW
YWx1ZT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgc3RkOjpmb3J3YXJk
PHR5cGVuYW1lIFZhbHVlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpKTsKKyAgICBjbGVhckJhY2tp
bmdNYXAobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2JhY2tpbmdNYXApOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHN5bmNocm9uaXplQmFja2luZ01h
cChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0JiBnZXRBbmRJbml0aWFsaXpl
QmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXcmFw
cGVyQ2xhc3MmIG1hcExpa2UpCiB7Ci0gICAgYXV0byBiYWNraW5nTWFwID0gbWFwTGlrZS53cmFw
cGVkKCkuYmFja2luZ01hcCgpOwotICAgIGlmIChiYWNraW5nTWFwKSB7Ci0gICAgICAgIEFTU0VS
VChiYWNraW5nTWFwLT5iYWNraW5nTWFwKCkpOwotICAgICAgICBpbml0aWFsaXplQmFja2luZ01h
cChKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgbWFwTGlrZSwgKmJhY2tpbmdNYXAt
PmJhY2tpbmdNYXAoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHBhaXIgPSBnZXRCYWNr
aW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpOworICAgIGlmIChwYWlyLmZpcnN0
KSB7CisgICAgICAgIERPTU1hcEFkYXB0ZXIgYWRhcHRlciB7IGxleGljYWxHbG9iYWxPYmplY3Qs
IHBhaXIuc2Vjb25kLmdldCgpIH07CisgICAgICAgIG1hcExpa2Uud3JhcHBlZCgpLmluaXRpYWxp
emVNYXBMaWtlKGFkYXB0ZXIpOwogICAgIH0KLSAgICBhdXRvJiBtYXAgPSBjcmVhdGVCYWNraW5n
TWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWFwTGlrZSk7Ci0gICAgbWFw
TGlrZS53cmFwcGVkKCkuc3luY2hyb25pemVCYWNraW5nTWFwKERPTU1hcExpa2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QsIG1hcCkpOworICAgIHJldHVybiBwYWlyLnNlY29uZC5nZXQoKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndh
cmRTaXplVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkQXR0cmlidXRlR2V0dGVy
VG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFt
ZXMtPnNpemUpOworICAgIHJldHVybiBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxH
bG9iYWxPYmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRF
bnRyaWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKICAg
ICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50
cmllc1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkS2V5c1RvTWFwTGlr
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCiB7CiAgICAgSlNDOjpWTSYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1
bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1h
cExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkp
OworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtl
eXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlu
bGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFZhbHVlc1RvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFw
cGVyQ2xhc3MmIG1hcExpa2UpCiB7CiAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2lu
Z01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZv
cndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBM
aWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGZvcndhcmRDbGVhclRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExp
a2UpCiB7CiAgICAgbWFwTGlrZS53cmFwcGVkKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gZm9yd2Fy
ZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IG1hcExpa2UsIEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLnByb3BlcnR5TmFtZXMt
PmNsZWFyKTsKKyAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNh
bEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBDYWxsYmFjaz4gaW5saW5l
IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVy
Q2xhc3MmIG1hcExpa2UsIENhbGxiYWNrJiYpCiB7Ci0gICAgcmV0dXJuIGZvcndhcmRGb3JFYWNo
Q2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsICptYXBMaWtl
Lmdsb2JhbE9iamVjdCgpLCBtYXBMaWtlKTsKKyAgICBnZXRBbmRJbml0aWFsaXplQmFja2luZ01h
cChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKKyAgICByZXR1cm4gZm9yd2FyZEZvckVh
Y2hDYWxsVG9CYWNraW5nTWFwKCpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLCBtYXBMaWtlKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSBmb3J3YXJkR2V0VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwg
SXRlbVR5cGUmJikKIHsKICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuZ2V0UHVibGljTmFtZSgpKTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0
aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFu
ZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpLCB2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIGZvcndhcmRIYXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBt
YXBMaWtlLCBJdGVtVHlwZSYmKQogewogICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5oYXNQdWJsaWNOYW1lKCkpOworICAgIHJldHVybiBmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlr
ZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmhhc1B1YmxpY05hbWUoKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgS2V5VHlwZSwgdHlw
ZW5hbWUgVmFsdWVUeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRTZXRUb01hcExpa2Uo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBLZXlUeXBlJiYga2V5LCBWYWx1ZVR5
cGUmJiB2YWx1ZSkKIHsKKyAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIG1hcExpa2Uud3JhcHBlZCgpLnNldEZyb21NYXBMaWtlKHN0ZDo6Zm9y
d2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOwotICAg
IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBtYXBMaWtlLCBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KS5wcm9wZXJ0
eU5hbWVzLT5zZXQpOworICAgIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+c2V0KTsKICAgICBy
ZXR1cm4gJm1hcExpa2U7CiB9CiAKQEAgLTE0NSw3ICsxNTIsMTAgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBm
b3J3YXJkRGUKIHsKICAgICBhdXRvIGlzRGVsZXRlZCA9IG1hcExpa2Uud3JhcHBlZCgpLnJlbW92
ZShzdGQ6OmZvcndhcmQ8SXRlbVR5cGU+KGl0ZW0pKTsKICAgICBVTlVTRURfUEFSQU0oaXNEZWxl
dGVkKTsKLSAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtlLCBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkKTsKKworICAgIEpT
Qzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byBy
ZXN1bHQgPSBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQpOworCiAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5hc0Jvb2xlYW4oKSA9PSBpc0RlbGV0ZWQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVNldExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
ZXRMaWtlLmNwcAppbmRleCA3ZmQ1MWMxMzBiODYzN2M3MGRiODQyNDA3ZTgwNzUyYTNkMTI1MzM1
Li5mNDE2NzUxNzM1N2M0MDUyMzMwNWY1YWI4NjczNGU2NGY2ZTgzOTc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9DYXRjaFNjb3BlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZXQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVNldExpa2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlr
ZS5oCmluZGV4IDI1M2I1NzRjOWYzNTBhZWY3MTk2YjVhNmM5MTdhMzQxODI0YzBkMTAuLjg5NTRl
YzkzMGZhNGY0YjhjNzJkNTUwMmUzZjczZjVkNzlhYTc5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db21tb25JZGVudGlmaWVycy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDYsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1
ZSBmb3J3YXJkU2l6ZVRvU2V0TGlrZShKU0M6OkpTR2xvYmFsTwogdGVtcGxhdGU8dHlwZW5hbWUg
V3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb1NldExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgV3JhcHBlckNsYXNzJik7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkS2V5c1RvU2V0TGlr
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmKTsK
IHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRWYWx1
ZXNUb1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgV3JhcHBl
ckNsYXNzJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBm
b3J3YXJkRm9yRWFjaFRvU2V0TGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJh
bWUmLCBXcmFwcGVyQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlw
ZW5hbWUgQ2FsbGJhY2s+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaFRvU2V0TGlrZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmLCBDYWxsYmFj
ayYmZik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3
YXJkQ2xlYXJUb1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwg
V3JhcHBlckNsYXNzJik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5h
bWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9TZXRMaWtlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIFdyYXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYpOwpA
QCAtMTE3LDExICsxMTYsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRWYWx1ZXNUb1NldExpa2UoSlNDOjoKICAgICByZXR1cm4g
Zm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHNl
dExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1l
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpT
VmFsdWUgZm9yd2FyZEZvckVhY2hUb1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBz
ZXRMaWtlKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBDYWxsYmFj
az4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaFRvU2V0TGlrZShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1l
LCBXcmFwcGVyQ2xhc3MmIHNldExpa2UsIENhbGxiYWNrJiYpCiB7CiAgICAgZ2V0QW5kSW5pdGlh
bGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSk7Ci0gICAgZm9yd2Fy
ZEZvckVhY2hDYWxsVG9CYWNraW5nU2V0KCpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLCBzZXRMaWtlKTsKLSAgICByZXR1cm4g
SlNDOjpqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tp
bmdTZXQoKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCBjYWxsRnJhbWUsIHNldExpa2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZENsZWFyVG9TZXRMaWtlKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJh
bWUsIFdyYXBwZXJDbGFzcyYgc2V0TGlrZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZDU3ODYyNjNlMmYxMjFjZGE3NjI4
NTAzNzgwNDdmMTI3MzdjZDljMS4uMmZjNDY2ZTc3YjdmNTYxYTVlZjU5MDU2Y2MxZTQyZjRiMzFm
YjIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KQEAgLTQ0MDQsMTAgKzQ0MDQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvUHJpbWl0aXZlU3ltYm9sLCBqc1VuZGVmaW5lZCgpLCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7XG4iKTsKICAgICB9CiAKLSAg
ICBpZiAoJGludGVyZmFjZS0+bWFwTGlrZSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0
KCksICp0aGlzKTtcbiIpOwotICAgIH0KLQogICAgICMgU3VwcG9ydCBmb3IgUnVudGltZUVuYWJs
ZWQgYXR0cmlidXRlcyBvbiBpbnN0YW5jZXMuCiAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChA
eyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgIG5leHQgdW5sZXNzIE5lZWRzUnVu
dGltZUNoZWNrKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQppbmRleCA5ODY1YTJlYWRiYTQ5ZmFjYzE1ZWU0NjAz
ZTBlZjI5NDdhOGU4YmEyLi40OTRlYzc2ODhlYzNhMWY3ZjU5M2NmZTFkNTdjOTU4YTliYmE2N2Q3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAt
MjExNiw2ICsyMTE2LDExIEBAIHN1YiBwYXJzZVNldExpa2VQcm9wZXJ0aWVzCiAgICAgJGZvckVh
Y2hPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
ICAgICAkZm9yRWFjaE9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RW51bWVyYWJsZX0g
PSAxOwogICAgICRmb3JFYWNoT3BlcmF0aW9uLT50eXBlKG1ha2VTaW1wbGVUeXBlKCJhbnkiKSk7
CisgICAgbXkgJGZvckVhY2hBcmd1bWVudCA9IElETEFyZ3VtZW50LT5uZXcoKTsKKyAgICAkZm9y
RWFjaEFyZ3VtZW50LT5uYW1lKCJjYWxsYmFjayIpOworICAgICRmb3JFYWNoQXJndW1lbnQtPnR5
cGUobWFrZVNpbXBsZVR5cGUoImFueSIpKTsKKyAgICAkZm9yRWFjaEFyZ3VtZW50LT5leHRlbmRl
ZEF0dHJpYnV0ZXMoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgcHVzaChAeyRmb3JFYWNo
T3BlcmF0aW9uLT5hcmd1bWVudHN9LCAoJGZvckVhY2hBcmd1bWVudCkpOwogCiAgICAgcHVzaChA
eyRzZXRsaWtlLT5vcGVyYXRpb25zfSwgJGhhc09wZXJhdGlvbik7CiAgICAgcHVzaChAeyRzZXRs
aWtlLT5vcGVyYXRpb25zfSwgJGVudHJpZXNPcGVyYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAppbmRleCBkMTBk
MDg4YTMxOGU1ZDM2ZjljODgxYThmZTg0NDAyMTJhMjZkODAyLi5kNjhkZWFmOGYzZDQ1ZGJiOTUy
ZmE1OTYxMDJhYWE3MWU1YzU4M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcApAQCAtMTQ0LDcgKzE0NCw2IEBAIHZv
aWQgSlNNYXBMaWtlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBzdGF0aWNfYXNzZXJ0
KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBNYXBMaWtlPjo6dmFsdWUsICJJbnRl
cmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBs
ZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKIAotICAgIHN5
bmNocm9uaXplQmFja2luZ01hcCgqZ2xvYmFsT2JqZWN0KCksICpnbG9iYWxPYmplY3QoKSwgKnRo
aXMpOwogfQogCiBKU09iamVjdCogSlNNYXBMaWtlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAK
aW5kZXggM2U2NWRkNzNkOTJkNzdlNjNmMDFlY2NmMGI1OWE2YzYzMzc3YzljOS4uZThhMGRhMzUw
M2Y2OTU4MGEzOGIyNzEwYzRhMjBkMjIwNDBmYmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2Uu
Y3BwCkBAIC0xMzgsNyArMTM4LDYgQEAgdm9pZCBKU1JlYWRPbmx5TWFwTGlrZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogCiAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2
ZURPTU9iamVjdCwgUmVhZE9ubHlNYXBMaWtlPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1h
cmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFz
cyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKIAotICAgIHN5bmNocm9uaXplQmFja2lu
Z01hcCgqZ2xvYmFsT2JqZWN0KCksICpnbG9iYWxPYmplY3QoKSwgKnRoaXMpOwogfQogCiBKU09i
amVjdCogSlNSZWFkT25seU1hcExpa2U6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcAppbmRleCBh
NDAwZWY3ZmUzYzhiMWEyMGNkMGFmMGIwZDYzNjRlMmNlYzQxNWY2Li41MmU2NGRlYzU0NDYzNWFj
M2RiZTljYzA4YjQ2MDE3NTM0NDRhZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHAKQEAg
LTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNSZWFkT25seVNl
dExpa2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJlbnRyaWVzIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImtleXMiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlv
bktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25W
YWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCi0gICAgeyAiZm9yRWFjaCIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaCksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJmb3JFYWNoIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpT
UmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJSZWFkT25seVNldExpa2VQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlKSB9OwpAQCAtMjY2LDcgKzI2NiwxMSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5
cGVGdW5jdGlvbkZvckVhY2hCb2R5KAogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEZvckVhY2hUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzKSkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JFYWNoVG9TZXRMaWtlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShjYWxsYmFjaykp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNSZWFkT25seVNldExpa2VQ
cm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNwcAppbmRleCAxM2UxNTc2ZWQxZmQxZTUy
NzBlZDNkYThlNTVmZjFiNWVjY2RjOGQzLi4xODRjMjM3MjczMTM5MGU3ODA1NmY4ZTE1NmQyZjY4
NzM2NDQ2ZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNTZXRMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNTZXRMaWtlLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1NldExpa2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJl
bnRyaWVzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzU2V0TGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRW50cmllcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJrZXlzIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0
aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMp
LCAoaW50cHRyX3QpICgwKSB9IH0sCi0gICAgeyAiZm9yRWFjaCIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJh
d05hdGl2ZUZ1bmN0aW9uPihqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2gpLCAoaW50
cHRyX3QpICgwKSB9IH0sCisgICAgeyAiZm9yRWFjaCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2
ZUZ1bmN0aW9uPihqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2gpLCAoaW50cHRyX3Qp
ICgxKSB9IH0sCiAgICAgeyAiYWRkIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uQWRkKSwgKGludHB0cl90KSAoMSkgfSB9LAogICAg
IHsgImNsZWFyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzU2V0TGlrZVBy
b3RvdHlwZUZ1bmN0aW9uQ2xlYXIpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZGVsZXRl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzU2V0TGlrZVByb3RvdHlwZUZ1
bmN0aW9uRGVsZXRlKSwgKGludHB0cl90KSAoMSkgfSB9LApAQCAtMjcyLDcgKzI3MiwxMSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoQm9keShKU0M6OkpTRwogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEZvckVhY2hUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzKSkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JFYWNoVG9TZXRMaWtlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShjYWxsYmFjaykp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNTZXRMaWtlUHJvdG90eXBl
RnVuY3Rpb25Gb3JFYWNoKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExp
a2UuY3BwCmluZGV4IDc1MDgzMzUxMWYxZWEwNTk4ZDU2MmJkOTgxZTBkMjkzOTk2ZGMwY2MuLjQz
ZGZlZDQyOWRhN2Y1MzFjYTI0MDgyYjUzMGQ5MDYxNGE0OTlhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkludGVybmFsc01hcExpa2UuaCIKIAogI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVk
ZSAiSlNET01NYXBMaWtlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zNiwxMSArMzcsMTAgQEAgSW50ZXJuYWxzTWFwTGlrZTo6SW50ZXJuYWxz
TWFwTGlrZSgpCiAgICAgbV92YWx1ZXMuYWRkKCJpbml0IiwgMCk7CiB9CiAKLXZvaWQgSW50ZXJu
YWxzTWFwTGlrZTo6c3luY2hyb25pemVCYWNraW5nTWFwKFJlZjxET01NYXBMaWtlPiYmIG1hcExp
a2UpCit2b2lkIEludGVybmFsc01hcExpa2U6OmluaXRpYWxpemVNYXBMaWtlKERPTU1hcEFkYXB0
ZXImIG1hcCkKIHsKLSAgICBtX21hcExpa2UgPSBXVEZNb3ZlKG1hcExpa2UpOwogICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBtX3ZhbHVlcykKLSAgICAgICAgbV9tYXBMaWtlLT5zZXQ8SURMRE9N
U3RyaW5nLCBJRExVbnNpZ25lZExvbmc+KGtleVZhbHVlLmtleSwga2V5VmFsdWUudmFsdWUpOwor
ICAgICAgICBtYXAuc2V0PElETERPTVN0cmluZywgSURMVW5zaWduZWRMb25nPihrZXlWYWx1ZS5r
ZXksIGtleVZhbHVlLnZhbHVlKTsKIH0KIAogdm9pZCBJbnRlcm5hbHNNYXBMaWtlOjpzZXRGcm9t
TWFwTGlrZShTdHJpbmcmJiBrZXksIHVuc2lnbmVkIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFsc01hcExpa2UuaAppbmRleCBmMWE4MWFkNDBjNDE0MTZkYWZhYjUwYTY4Yjcy
OGJkM2IzMDQxY2Y0Li4xOTM3MDYyYzNiN2QyYjdkZDY4MDgzYzUyYTRiYmZmMzUxZjRlOWRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaApAQCAtMjUsNyArMjUs
NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvZm9yd2FyZC5oPgpAQCAtMzMsMjQgKzMyLDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgSW50ZXJuYWxzTWFwTGlrZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEludGVybmFsc01hcExpa2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPEludGVybmFsc01hcExpa2U+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50
ZXJuYWxzTWFwTGlrZSk7IH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRh
cHRlciYpOwogICAgIHZvaWQgc2V0RnJvbU1hcExpa2UoU3RyaW5nJiYsIHVuc2lnbmVkKTsKICAg
ICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2
b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChSZWY8RE9NTWFwTGlrZT4mJik7Ci0gICAgRE9NTWFw
TGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsgfQotCiAgICAgVmVj
dG9yPFN0cmluZz4gaW5zcGVjdEtleXMoKSBjb25zdDsKICAgICBWZWN0b3I8dW5zaWduZWQ+IGlu
c3BlY3RWYWx1ZXMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBJbnRlcm5hbHNNYXBMaWtlKCk7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBtX3ZhbHVlczsKLSAgICBSZWZQdHI8RE9N
TWFwTGlrZT4gbV9tYXBMaWtlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL21hcGxpa2UuaHRtbCBiL0xheW91dFRlc3RzL2pzL2Rv
bS9tYXBsaWtlLmh0bWwKaW5kZXggYzM2ZTUyZGJjYjE4Zjg4MDk3MjlkNDE5ZGE0NWZjMTEyOWU2
Y2I2NS4uYzczNDc2Y2Y4MjE3ZGE2ZDc1Mjk4MjQwMWM5Y2FkNzUzODhjZjIyYiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvanMvZG9tL21hcGxpa2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9qcy9k
b20vbWFwbGlrZS5odG1sCkBAIC00OSw2ICs0OSw3IEBAIHRlc3QoKCkgPT4gewogICAgIGFzc2Vy
dF9lcXVhbHMoa2V5c1Rlc3QsICJ0ZXN0QXRlc3RCIiwgImtleXMgdGVzdCIpOwogCiAgICAgbGV0
IGZvckVhY2hUZXN0ID0gIiI7CisgICAgYXNzZXJ0X2VxdWFscyhtYXBsaWtlLmZvckVhY2gubGVu
Z3RoLCAxKTsKICAgICBtYXBsaWtlLmZvckVhY2goKHZhbHVlLCBrZXksIG9iamVjdCkgPT4gewog
ICAgICAgICBmb3JFYWNoVGVzdCArPSBrZXk7CiAgICAgICAgIGZvckVhY2hUZXN0ICs9ICcsJzsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS9zZXRsaWtlLmh0bWwgYi9MYXlvdXRUZXN0
cy9qcy9kb20vc2V0bGlrZS5odG1sCmluZGV4IDI2YTEzNjRiYTJjMzMwZTcyZTUxZTkyZjgxMDA0
ZjVmZTVkNjA3M2MuLmU2YzE4MzIyNDkzMGY3NDI3OWJiM2JiMWRhOTVmMjBhN2U3MjJjY2EgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2RvbS9zZXRsaWtlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvanMvZG9tL3NldGxpa2UuaHRtbApAQCAtNDMsNiArNDMsNyBAQCB0ZXN0KCgpID0+IHsKICAg
ICBhc3NlcnRfZXF1YWxzKGtleXNUZXN0LCAidGVzdHRlc3QyIiwgImtleXMgdGVzdCIpOwogCiAg
ICAgbGV0IGZvckVhY2hUZXN0ID0gIiI7CisgICAgYXNzZXJ0X2VxdWFscyhzZXRsaWtlLmZvckVh
Y2gubGVuZ3RoLCAxKTsKICAgICBzZXRsaWtlLmZvckVhY2goKGtleSwgdmFsdWUsIG9iamVjdCkg
PT4gewogICAgICAgICBmb3JFYWNoVGVzdCArPSBrZXk7CiAgICAgICAgIGZvckVhY2hUZXN0ICs9
IHZhbHVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384992</attachid>
            <date>2019-12-06 00:22:40 -0800</date>
            <delta_ts>2019-12-06 00:35:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204879-20191206092238.patch</filename>
            <type>text/plain</type>
            <size>42743</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQ3YzJl
ZGIyZmYwZjYyZDIxNzFhNjdiOTdkNjFjNi4uMmRhNTU3MjQxMmM4NGUzYmQ1M2JiMGJiNTE3OGVi
MWUzMGExM2I4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTEyLTA2ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBEbyBub3QgdXNlIERPTUd1
YXJkZWQgZm9yIG1hcGxpa2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSBtYXBsaWtlIGFjY29yZGluZyBzZXRsaWtlIG1vZGVsIHdoZXJlIHdl
IHN1cHBvcnQgc3luY2luZyBhdCBjcmVhdGlvbiBvZiB0aGUgSlMgd3JhcHBlcgorICAgICAgICBh
bmQgc3luY2luZyB3aGVuZXZlciBzZXRsaWtlL21hcGxpa2UgbWV0aG9kcyBhcmUgY2FsbGVkLgor
ICAgICAgICBSZW1vdmluZyBET01HdWFyZGVkT2JqZWN0IG1ha2VzIGltcGxlbWVudGF0aW9uIG1v
cmUgbGlnaHR3ZWlnaHQsIHRoZXJlIGlzIGxlc3MgdGhpbmdzIHRvIGltcGxlbWVudCBvbiBET00g
c2lkZQorICAgICAgICBhbmQgaXQgYWxsb3dzIGNvbGxlY3RpbmcgdGhlIHByaXZhdGUgbWFwIHRv
IGZyZWUgbWVtb3J5IGlmIG5lZWRlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzIGFuZCByZWJhc2VkIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hs
aWdodC9IaWdobGlnaHRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0TWFwOjpp
bml0aWFsaXplTWFwTGlrZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0
TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OnN5bmNocm9uaXplQmFja2lu
Z01hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OmJhY2tpbmdN
YXApOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBv
cnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UlRDU3RhdHNSZXBvcnQ6OmluaXRpYWxpemVNYXBMaWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpSVENTdGF0c1JlcG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpSVENTdGF0c1JlcG9ydDo6c3luY2hyb25pemVCYWNraW5nTWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpiYWNraW5nTWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjphZGRTdGF0cyk6IERlbGV0ZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENNZWRpYUVuZHBvaW50OjpjcmVhdGVT
dGF0c0NvbGxlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRD
U3RhdHNDb2xsZWN0b3I6On5MaWJXZWJSVENTdGF0c0NvbGxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZlcmVkKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyQmFja2luZ01hcCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRUb0JhY2tpbmdNYXApOgorICAgICAgICAoV2ViQ29yZTo6
Zm9yd2FyZEF0dHJpYnV0ZUdldHRlclRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpm
b3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
QmFja2luZ01hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCYWNraW5nTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1hcEFkYXB0ZXI6OkRPTU1hcEFkYXB0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NTWFwQWRhcHRlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1hcEFkYXB0
ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEFuZEluaXRpYWxpemVCYWNraW5nTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRTaXplVG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRLZXlzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRWYWx1ZXNUb01hcExp
a2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZENsZWFyVG9NYXBMaWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cndhcmRHZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEhhc1RvTWFwTGlr
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkU2V0VG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmREZWxldGVUb01hcExpa2UpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRPTU1hcExpa2U6OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzeW5jaHJvbml6ZUJhY2tpbmdNYXApOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU2V0TGlrZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TZXRMaWtl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAg
ICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFwTGlrZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRP
bmx5TWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlYWRPbmx5TWFwTGlrZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjppbml0aWFsaXplTWFwTGlrZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjpzeW5jaHJvbml6ZUJhY2tpbmdNYXAp
OiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzTWFwTGlrZTo6YmFja2luZ01hcCk6IERlbGV0ZWQuCisKIDIw
MTktMTItMDUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZD
XVtJRkNdIEZpeCBjc3MxL2Jhc2ljL2NvbnRhaW5tZW50Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuY3BwCmluZGV4IGIyNDhlZjdkMmU1
NTU3OTRkNGQ3M2NkOTdhOTczN2FmOGI0ZjEzMDMuLjQzM2NkNmVkODJlMGMyYWZlY2YxOGYyNTI2
NmFiOTg3YmE4MzlhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0hpZ2hsaWdodE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGln
aHQvSGlnaGxpZ2h0TWFwLmNwcApAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkhpZ2hsaWdodE1hcC5oIgogCisjaW5jbHVkZSAiSlNET01NYXBMaWtlLmgi
CisjaW5jbHVkZSAiSlNIaWdobGlnaHRSYW5nZUdyb3VwLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBIaWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3NzU3R5
bGUsIEhpZ2hsaWdodFJhbmdlR3JvdXAgJmdyb3VwKQpAQCAtMzQsNiArMzcsMTIgQEAgdm9pZCBI
aWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3NzU3R5bGUsIEhpZ2hsaWdo
dFJhbmdlR3JvdXAgJmdyb3UKICAgICBVTlVTRURfUEFSQU0oZ3JvdXApOwogfQogCit2b2lkIEhp
Z2hsaWdodE1hcDo6aW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYgbWFwKQoreworICAg
IGZvciAoYXV0byYga2V5VmFsdWUgOiBtX21hcCkKKyAgICAgICAgbWFwLnNldDxJRExET01TdHJp
bmcsIElETEludGVyZmFjZTxIaWdobGlnaHRSYW5nZUdyb3VwPj4oa2V5VmFsdWUua2V5LCBrZXlW
YWx1ZS52YWx1ZSk7Cit9CisKIHZvaWQgSGlnaGxpZ2h0TWFwOjpzZXRGcm9tTWFwTGlrZShTdHJp
bmcmJiwgUmVmPEhpZ2hsaWdodFJhbmdlR3JvdXA+JiYpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5oCmluZGV4IDY0MWUyNGJkODBkNzVm
YjI1MTE4NjI5YjIyYzBjNDRjZjU2OTgxNGIuLjY5YTcwYjAwYzhkNmY0Yzg0NGVmNzk4ZmUzNzgz
MGMzMjQ5YmJjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0hpZ2hsaWdodE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hp
Z2hsaWdodE1hcC5oCkBAIC0yNiwyMyArMjYsMjEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSGlnaGxpZ2h0UmFuZ2VHcm91cC5oIgotI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01NYXBBZGFwdGVyOwogY2xhc3MgRE9NU3RyaW5n
OwogY2xhc3MgSGlnaGxpZ2h0UmFuZ2VHcm91cDsKIAogY2xhc3MgSGlnaGxpZ2h0TWFwIDogcHVi
bGljIFJlZkNvdW50ZWQ8SGlnaGxpZ2h0TWFwPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxI
aWdobGlnaHRNYXA+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0TWFw
KTsgfQotICAgIAorCiAgICAgdm9pZCBhZGRIaWdobGlnaHRHcm91cChTdHJpbmcmLCBIaWdobGln
aHRSYW5nZUdyb3VwJik7Ci0gICAgCi0gICAgdm9pZCBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoUmVm
PERPTU1hcExpa2U+JiYgbWFwTGlrZSkgeyBtX21hcExpa2UgPSBXVEZNb3ZlKG1hcExpa2UpOyB9
Ci0gICAgRE9NTWFwTGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsg
fQorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYpOwogCiAgICAgLy8g
QmluZGluZ3Mgc3VwcG9ydC4KICAgICBTdHJpbmcgbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpIGNvbnN0OwpAQCAtNTUsOCArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgog
ICAgIEhpZ2hsaWdodE1hcCgpID0gZGVmYXVsdDsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PEhpZ2hsaWdodFJhbmdlR3JvdXA+PiBtX21hcDsKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4gbV9t
YXBMaWtlOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8SGlnaGxpZ2h0UmFuZ2VHcm91cD4+IG1f
bWFwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTdGF0c1JlcG9ydC5oCmluZGV4IGE4YmU2MDVkMzlkODBhMjI0YzYzMTQ1NmQzNmQyOGVl
Y2NhYmE1MGYuLmFkNzMyMTlhMDBlMWY5MmE0NWRmNTBhNDFmOTg2M2RjN2Q1OGI4NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVwb3J0
LmgKQEAgLTI1LDE5ICsyNSwxOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTRE9N
TWFwTGlrZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgUlRDU3RhdHNS
ZXBvcnQgOiBwdWJsaWMgUmVmQ291bnRlZDxSVENTdGF0c1JlcG9ydD4gewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8UlRDU3RhdHNSZXBvcnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUlRDU3RhdHNSZXBvcnQpOyB9Ci0KLSAgICB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChS
ZWY8RE9NTWFwTGlrZT4mJiBtYXBMaWtlKSB7IG1fbWFwTGlrZSA9IFdURk1vdmUobWFwTGlrZSk7
IH0KLSAgICBET01NYXBMaWtlKiBiYWNraW5nTWFwKCkgeyByZXR1cm4gbV9tYXBMaWtlLmdldCgp
OyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZT4gdm9pZCBhZGRTdGF0cyh0eXBlbmFt
ZSBWYWx1ZTo6UGFyYW1ldGVyVHlwZSYmIHZhbHVlKSB7IG1fbWFwTGlrZS0+c2V0PElETERPTVN0
cmluZywgVmFsdWU+KHZhbHVlLmlkLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgVmFsdWU6OlBhcmFt
ZXRlclR5cGU+KHZhbHVlKSk7IH0KKyAgICB1c2luZyBNYXBJbml0aWFsaXplciA9IEZ1bmN0aW9u
PHZvaWQoRE9NTWFwQWRhcHRlciYpPjsKKyAgICBzdGF0aWMgUmVmPFJUQ1N0YXRzUmVwb3J0PiBj
cmVhdGUoTWFwSW5pdGlhbGl6ZXImJiBtYXBJbml0aWFsaXplcikgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSVENTdGF0c1JlcG9ydChXVEZNb3ZlKG1hcEluaXRpYWxpemVyKSkpOyB9CiAKKyAgICB2
b2lkIGluaXRpYWxpemVNYXBMaWtlKERPTU1hcEFkYXB0ZXImIGFkYXB0ZXIpIHsgbV9tYXBJbml0
aWFsaXplcihhZGFwdGVyKTsgfQogCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgQ29k
ZWMsCkBAIC0yMzYsMTAgKzIzNSwxNCBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAg
ICBSVENTdGF0c1JlcG9ydCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBSVENTdGF0c1JlcG9y
dChNYXBJbml0aWFsaXplciYmKTsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4g
bV9tYXBMaWtlOworICAgIE1hcEluaXRpYWxpemVyIG1fbWFwSW5pdGlhbGl6ZXI7CiB9OwogCitp
bmxpbmUgUlRDU3RhdHNSZXBvcnQ6OlJUQ1N0YXRzUmVwb3J0KE1hcEluaXRpYWxpemVyJiYgbWFw
SW5pdGlhbGl6ZXIpCisgICAgOiBtX21hcEluaXRpYWxpemVyKFdURk1vdmUobWFwSW5pdGlhbGl6
ZXIpKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDM4ODczMWZhNjU3OWFhMmQ1YzEwZTNlYmJj
MWIwNDU5YTA0ZWI5NjUuLjVkZWYxYzFhMzFjMjAyMzYzYWZmYjFmZWUxMjhmYTc3MDkxYTU0YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCkBAIC0yODYs
MTkgKzI4NiwxMiBAQCB2b2lkIExpYldlYlJUQ01lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2Vy
KCkKIAogcnRjOjpzY29wZWRfcmVmcHRyPExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPiBMaWJXZWJS
VENNZWRpYUVuZHBvaW50OjpjcmVhdGVTdGF0c0NvbGxlY3RvcihSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCiB7Ci0gICAgcmV0dXJuIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpjcmVh
dGUoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldKCkgbXV0YWJsZSAtPiBSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+IHsKKyAgICByZXR1cm4g
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZShbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYXV0byYmIHJlcG9ydCkgbXV0YWJs
ZSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5pc1N0b3BwZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIGF1dG8gcmVwb3J0ID0gUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZSgpOwotCi0gICAgICAgIHBy
b21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0LmNvcHlS
ZWYoKSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSB8fCAhcmVwb3J0
KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIFRoZSBwcm9taXNlIHJlc29sdXRp
b24gbWlnaHQgZmFpbCBpbiB3aGljaCBjYXNlIG5vIGJhY2tpbmcgbWFwIHdpbGwgYmUgY3JlYXRl
ZC4KLSAgICAgICAgaWYgKCFyZXBvcnQtPmJhY2tpbmdNYXAoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gcmVwb3J0OworICAgICAgICBwcm9taXNlLT5yZXNv
bHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0
b3IuY3BwCmluZGV4IDYyYWQ4MjM4MzM0NDM1MTk2MWQwOWJjZmIzMzE5NjY4MDY2OTM0ZTkuLjhh
NjdjMDc5ZWVhMGRhMzA0MGEzZTNjMDVkYmExNWVmZGI5ZmY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IFVTRShMSUJXRUJSVEMpCiAKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJK
U1JUQ1N0YXRzUmVwb3J0LmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgpAQCAtNDQsNyArNDUsNyBAQCBMaWJXZWJSVENTdGF0c0NvbGxlY3Rv
cjo6fkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fs
bE9uTWFpblRocmVhZChbY2FsbGJhY2sgPSBXVEZNb3ZlKG1fY2FsbGJhY2spXSgpIG11dGFibGUg
ewotICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKICAgICB9
KTsKIH0KIApAQCAtMzgwLDU4ICszODEsNjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENQ
ZWVyQ29ubmVjdGlvblN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXQKICAg
ICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzQ2xvc2VkID0gKnJ0Y1N0YXRzLmRhdGFfY2hhbm5lbHNf
Y2xvc2VkOwogfQogCi12b2lkIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZl
cmVkKGNvbnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxjb25zdCB3ZWJydGM6OlJUQ1N0YXRzUmVwb3J0
PiYgcnRjUmVwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVSVENTdGF0c1JlcG9y
dEJhY2tpbmdNYXAoRE9NTWFwQWRhcHRlciYgcmVwb3J0LCBjb25zdCB3ZWJydGM6OlJUQ1N0YXRz
UmVwb3J0JiBydGNSZXBvcnQpCiB7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhp
cyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJSVENTdGF0c0NvbGxlY3Rvcj4odGhpcyksIHJ0
Y1JlcG9ydF0gewotICAgICAgICBhdXRvIHJlcG9ydCA9IHByb3RlY3RlZFRoaXMtPm1fY2FsbGJh
Y2soKTsKLSAgICAgICAgaWYgKCFyZXBvcnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgQVNTRVJUKHJlcG9ydC0+YmFja2luZ01hcCgpKTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHJ0Y1N0YXRzIDogKnJ0Y1JlcG9ydCkgewotICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzLnR5
cGUoKSA9PSB3ZWJydGM6OlJUQ0luYm91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRzOwot
ICAgICAgICAgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19j
YXN0PGNvbnN0IHdlYnJ0Yzo6UlRDSW5ib3VuZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsK
LSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNS
ZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDT3V0Ym91bmRSVFBT
dHJlYW1TdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6T3V0
Ym91bmRSVFBTdHJlYW1TdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsT3V0Ym91bmRS
VFBTdHJlYW1TdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENPdXRib3Vu
ZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFk
ZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUlRQU3RyZWFtU3Rh
dHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5
cGUoKSA9PSB3ZWJydGM6OlJUQ01lZGlhU3RyZWFtVHJhY2tTdGF0czo6a1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6TWVkaWFTdHJlYW1UcmFja1N0YXRzIHN0YXRzOwot
ICAgICAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3RhdHMsIHN0YXRp
Y19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4ocnRjU3RhdHMp
KTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3Rh
dHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDRGF0YUNoYW5u
ZWxTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6RGF0YUNo
YW5uZWxTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDRGF0YUNoYW5uZWxTdGF0
cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENEYXRhQ2hhbm5lbFN0YXRzJj4o
cnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25h
cnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0ljZUNh
bmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9y
dDo6SWNlQ2FuZGlkYXRlUGFpclN0YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENJ
Y2VDYW5kaWRhdGVQYWlyU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRD
SWNlQ2FuZGlkYXRlUGFpclN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBv
cnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVBh
aXJTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocnRjU3Rh
dHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUmVtb3RlSWNlQ2FuZGlkYXRlU3RhdHM6OmtUeXBlIHx8
IHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0xvY2FsSWNlQ2FuZGlkYXRlU3RhdHM6OmtU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVN0YXRz
IHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRhdGVTdGF0cyhzdGF0cywg
c3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVTdGF0cyY+KHJ0Y1N0YXRz
KSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0
YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDQ2VydGlmaWNhdGVT
dGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q2VydGlmaWNh
dGVTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDQ2VydGlmaWNhdGVTdGF0cyhz
dGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENDZXJ0aWZpY2F0ZVN0YXRzJj4ocnRj
U3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0NvZGVjU3Rh
dHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMg
c3RhdHM7Ci0gICAgICAgICAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0YXRpY19j
YXN0PGNvbnN0IHdlYnJ0Yzo6UlRDQ29kZWNTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAg
ICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2Rl
Y1N0YXRzPj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0
cy50eXBlKCkgPT0gd2VicnRjOjpSVENUcmFuc3BvcnRTdGF0czo6a1R5cGUpIHsKLSAgICAgICAg
ICAgICAgICBSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMgc3RhdHM7Ci0gICAgICAgICAg
ICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJy
dGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBv
cnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0YXRz
Pj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBl
KCkgPT0gd2VicnRjOjpSVENQZWVyQ29ubmVjdGlvblN0YXRzOjprVHlwZSkgewotICAgICAgICAg
ICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXRzIHN0YXRzOwotICAgICAg
ICAgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxj
b25zdCB3ZWJydGM6OlJUQ1BlZXJDb25uZWN0aW9uU3RhdHMmPihydGNTdGF0cykpOwotICAgICAg
ICAgICAgICAgIHJlcG9ydC0+YWRkU3RhdHM8SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6
UGVlckNvbm5lY3Rpb25TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0KKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJ0Y1N0YXRzIDogcnRjUmVwb3J0KSB7CisgICAgICAgIGlmIChy
dGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHM6OmtUeXBl
KSB7CisgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRzIHN0
YXRzOworICAgICAgICAgICAgZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RhdGlj
X2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHMmPihydGNTdGF0cykp
OworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRD
U3RhdHNSZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0
YXRzKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRD
T3V0Ym91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVw
b3J0OjpPdXRib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbE91dGJv
dW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDT3V0
Ym91bmRSVFBTdHJlYW1TdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0
PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSVFBT
dHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzOjpr
VHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tTdGF0
cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3RhdHMs
IHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4ocnRj
U3RhdHMpKTsKKyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9u
YXJ5PFJUQ1N0YXRzUmVwb3J0OjpNZWRpYVN0cmVhbVRyYWNrU3RhdHM+PihzdGF0cy5pZCwgV1RG
TW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJy
dGM6OlJUQ0RhdGFDaGFubmVsU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0c1Jl
cG9ydDo6RGF0YUNoYW5uZWxTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENEYXRhQ2hh
bm5lbFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0RhdGFDaGFubmVs
U3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcs
IElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihzdGF0cy5p
ZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9
PSB3ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAg
IFJUQ1N0YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVQYWlyU3RhdHMgc3RhdHM7CisgICAgICAgICAg
ICBmaWxsUlRDSWNlQ2FuZGlkYXRlUGFpclN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3
ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAg
ICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6
SWNlQ2FuZGlkYXRlUGFpclN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENSZW1vdGVJY2VDYW5k
aWRhdGVTdGF0czo6a1R5cGUgfHwgcnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTG9jYWxJ
Y2VDYW5kaWRhdGVTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJ
Y2VDYW5kaWRhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRhdGVT
dGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVTdGF0
cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURM
RGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlU3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ0NlcnRpZmljYXRlU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0
c1JlcG9ydDo6Q2VydGlmaWNhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENDZXJ0
aWZpY2F0ZVN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NlcnRpZmlj
YXRlU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJp
bmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUo
KSA9PSB3ZWJydGM6OlJUQ0NvZGVjU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0
c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENDb2RlY1N0YXRz
KHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NvZGVjU3RhdHMmPihydGNTdGF0
cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ1RyYW5zcG9y
dFN0YXRzOjprVHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0
YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdGF0
aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsKKyAg
ICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRz
UmVwb3J0OjpUcmFuc3BvcnRTdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rp
b25TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVj
dGlvblN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMo
c3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rpb25TdGF0cyY+
KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGlj
dGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBX
VEZNb3ZlKHN0YXRzKSk7CiAgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3I6Ok9uU3RhdHNEZWxpdmVyZWQoY29uc3QgcnRjOjpzY29wZWRfcmVmcHRyPGNv
bnN0IHdlYnJ0Yzo6UlRDU3RhdHNSZXBvcnQ+JiBydGNSZXBvcnQpCit7CisgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvcj4odGhpcyksIHJ0Y1JlcG9ydF0oKSB7CisgICAgICAgIG1fY2FsbGJh
Y2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbcnRjUmVwb3J0XShhdXRvJiBtYXBBZGFwdGVyKSB7
CisgICAgICAgICAgICBpZiAocnRjUmVwb3J0KQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVS
VENTdGF0c1JlcG9ydEJhY2tpbmdNYXAobWFwQWRhcHRlciwgKnJ0Y1JlcG9ydCk7CisgICAgICAg
IH0pKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVj
dG9yLmgKaW5kZXggMzJhZDg3ZjQ4OTg1OWVmYjU1NDA3YjMzMTExZTJkMTdkM2Q1NTQ0OC4uZjJi
NDJjYTA1YmI2ZWIzYTZjMzMyYmQ2N2U1ZTIxM2YzMmFmODkwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oCkBAIC0zOCwxMSArMzgsMTQgQEAgQUxMT1dfVU5V
U0VEX1BBUkFNRVRFUlNfRU5ECiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFw
QWRhcHRlcjsKIGNsYXNzIFJUQ1N0YXRzUmVwb3J0OwogCit2b2lkIGluaXRpYWxpemVSVENTdGF0
c1JlcG9ydEJhY2tpbmdNYXAoUlRDU3RhdHNSZXBvcnQmKTsKKwogY2xhc3MgTGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3IgOiBwdWJsaWMgd2VicnRjOjpSVENTdGF0c0NvbGxlY3RvckNhbGxiYWNrIHsK
IHB1YmxpYzoKLSAgICB1c2luZyBDb2xsZWN0b3JDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVy
PFJlZlB0cjxSVENTdGF0c1JlcG9ydD4oKT47CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJhY2sg
PSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+OwogICAg
IHN0YXRpYyBydGM6OnNjb3BlZF9yZWZwdHI8TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I+IGNyZWF0
ZShDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBuZXcgcnRjOjpSZWZDb3Vu
dGVkT2JqZWN0PExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPihXVEZNb3ZlKGNhbGxiYWNrKSk7IH0K
IAogICAgIGV4cGxpY2l0IExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKENvbGxlY3RvckNhbGxiYWNr
JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAKaW5kZXgg
ZjdlNjFmZWJkZTJlZWFhYzA4MTNhOWRlNWUzZDYyYTI1ZDUzZjAzYS4uZjAxZTIwMTE0MmU3MmVj
YzAyZWJiMWNiOTk2N2YyZWYyMTVmMDA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTU1hcExpa2UuY3BwCkBAIC0yOCw0MiArMjgsNjIgQEAKIAogI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgaW5saW5lIEpTQzo6SlNPYmplY3QmIGdldEJhY2tpbmdNYXAoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSkK
K3N0ZDo6cGFpcjxib29sLCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEpTQzo6SlNPYmplY3Q+PiBn
ZXRCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SlNPYmplY3QmIG1hcExpa2UpCiB7CiAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CiAgICAgYXV0byBiYWNraW5nTWFwID0gbWFwTGlrZS5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpKTsKLSAgICByZXR1cm4gKkpTQzo6
YXNPYmplY3QoYmFja2luZ01hcCk7CisgICAgaWYgKGJhY2tpbmdNYXAuaXNVbmRlZmluZWQoKSkg
eworICAgICAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIGJhY2tpbmdN
YXAgPSBKU0M6OkpTTWFwOjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0Lm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tp
bmdNYXBQcml2YXRlTmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcmV0dXJuIHsgdHJ1ZSwg
KkpTQzo6YXNPYmplY3QoYmFja2luZ01hcCkgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgZmFsc2Us
ICpKU0M6OmFzT2JqZWN0KGJhY2tpbmdNYXApIH07CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUJhY2tp
bmdNYXAoSlNDOjpWTSYgdm0sIEpTQzo6SlNPYmplY3QmIG1hcExpa2UsIEpTQzo6SlNNYXAmIGJh
Y2tpbmdNYXApCit2b2lkIGNsZWFyQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNraW5nTWFwKQogewotICAgIG1hcExp
a2UucHV0RGlyZWN0KHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0ZU5hbWUoKSwgJmJhY2tpbmdNYXAs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gYmFja2luZ01hcC5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyKTsKKyAgICBBU1NFUlQoIWZ1bmN0aW9uLmlzVW5k
ZWZpbmVkKCkpOworCisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxU
eXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsK
KyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSk7CisgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmYmFja2luZ01hcCwgYXJn
dW1lbnRzKTsKIH0KIAotSlNDOjpKU01hcCYgY3JlYXRlQmFja2luZ01hcChKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNPYmplY3QmIG1hcExpa2UpCit2b2lkIHNldFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNr
aW5nTWFwLCBKU0M6OkpTVmFsdWUga2V5LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgYXV0
byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gYmFja2luZ01hcC5nZXQo
JmxleGljYWxHbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNldCk7CisgICAgQVNTRVJU
KCFmdW5jdGlvbi5pc1VuZGVmaW5lZCgpKTsKIAotICAgIEFTU0VSVChtYXBMaWtlLmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZhdGVOYW1lKCkpLmlzVW5kZWZpbmVk
KCkpOwotICAgIGF1dG8gYmFja2luZ01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmbGV4aWNhbEds
b2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgc2NvcGUu
cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygp
LmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICByZXR1cm4gKmJhY2tp
bmdNYXA7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNh
bGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBB
U1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSk7CisgICAgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChrZXkpOworICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJmJhY2tpbmdNYXAsIGFyZ3VtZW50
cyk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFw
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3Qm
IG1hcExpa2UsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgYXR0cmlidXRlTmFtZSkKK0pTQzo6SlNW
YWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIGJhY2tpbmdNYXAsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgYXR0cmlidXRlTmFtZSkKIHsKLSAgICByZXR1cm4gZ2V0QmFja2lu
Z01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKS5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGF0dHJpYnV0ZU5hbWUpOworICAgIHJldHVybiBiYWNraW5nTWFwLmdldCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIEpTQzo6SlNPYmplY3QmIG1hcExpa2Us
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKQorSlNDOjpKU1ZhbHVlIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNDOjpKU09iamVjdCYgYmFj
a2luZ01hcCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgYXV0
byYgYmFja2luZ01hcCA9IGdldEJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlr
ZSk7Ci0KICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBiYWNraW5nTWFwLmdldCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgZnVuY3Rpb25OYW1lKTsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwogCkBA
IC03NywyMSArOTcsMTkgQEAgSlNDOjpKU1ZhbHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KICAgICByZXR1cm4gSlND
OjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCAmYmFja2luZ01hcCwgYXJndW1lbnRzKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JF
YWNoQ2FsbFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JF
YWNoQ2FsbFRvQmFja2luZ01hcChKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQogewogICAgIGF1
dG8qIGZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLmpz
RE9NQmluZGluZ0ludGVybmFscygpLm1fbWFwTGlrZUZvckVhY2hGdW5jdGlvbi5nZXQoKTsKICAg
ICBBU1NFUlQoZnVuY3Rpb24pOwogCi0gICAgZ2V0QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBtYXBMaWtlKTsKLQogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEobGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpLCBmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBK
U0M6OmdldENhbGxEYXRhKGdsb2JhbE9iamVjdC52bSgpLCBmdW5jdGlvbiwgY2FsbERhdGEpOwog
ICAgIEFTU0VSVChjYWxsVHlwZSAhPSBKU0M6OkNhbGxUeXBlOjpOb25lKTsKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBmb3IgKHNpemVfdCBjcHRyID0gMDsg
Y3B0ciA8IGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCk7ICsrY3B0cikKICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQoY3B0cikpOwogICAgIEFTU0VS
VCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0dXJuIEpTQzo6Y2FsbCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJm1hcExpa2Us
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIEpTQzo6Y2FsbCgmZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmbWFwTGlrZSwgYXJndW1lbnRzKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaAppbmRleCBlOGY1ZTAzZjY3YTQy
OWQ4ODEwZDhkYzdmODUyZGMyNmY1ZTBiZmE2Li5jZDE0ODY5NmJiNjhhYTgxODI1NzFiZTQ0MjJm
YjJmMjEwNzE2N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TU1hcExpa2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2Uu
aApAQCAtMjcsMjAgKzI3LDE4IEBACiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RPTUd1YXJkZWRPYmplY3QuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db21tb25JZGVudGlmaWVycy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
TWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgSlNDOjpKU01h
cCYgY3JlYXRlQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNPYmplY3QmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZUJh
Y2tpbmdNYXAoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QmLCBKU0M6OkpTTWFwJik7CitXRUJDT1JF
X0VYUE9SVCBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxKU0M6OkpTT2Jq
ZWN0Pj4gZ2V0QmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYg
bWFwTGlrZSk7CiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgZm9yd2FyZEF0dHJpYnV0ZUdl
dHRlclRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2Fs
bEZyYW1lJiwgSlNDOjpKU09iamVjdCYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09S
RV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFj
aENhbGxUb0JhY2tpbmdNYXAoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIEpT
Qzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJCYWNraW5nTWFwKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01H
bG9iYWxPYmplY3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRTaXplVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlND
OjpKU1ZhbHVlIGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U0M6OkNhbGxGcmFtZSYsIFdyYXBwZXJDbGFzcyYpOwogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgV3JhcHBlckNsYXNzJik7CkBAIC01Miw5MiArNTAsMTAx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpT
Qzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xh
c3MsIHR5cGVuYW1lIEl0ZW1UeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IEpTQzo6SlNWYWx1ZSBm
b3J3YXJkU2V0VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYs
IFdyYXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYsIFZhbHVlVHlwZSYmKTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJk
RGVsZXRlVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIFdy
YXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYpOwogCi1jbGFzcyBET01NYXBMaWtlIGZpbmFsIDogcHVi
bGljIERPTUd1YXJkZWQ8SlNDOjpKU01hcD4geworY2xhc3MgRE9NTWFwQWRhcHRlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01NYXBMaWtlPiBjcmVhdGUoSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNDOjpKU01hcCYgbWFwKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERP
TU1hcExpa2UoZ2xvYmFsT2JqZWN0LCBtYXApKTsgfQorICAgIERPTU1hcEFkYXB0ZXIoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBJRExL
ZXlUeXBlLCBjbGFzcyBJRExWYWx1ZVR5cGU+IHZvaWQgc2V0KHR5cGVuYW1lIElETEtleVR5cGU6
OlBhcmFtZXRlclR5cGUsIHR5cGVuYW1lIElETFZhbHVlVHlwZTo6UGFyYW1ldGVyVHlwZSk7Cisg
ICAgdm9pZCBjbGVhcigpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZT4gdm9pZCBzZXQodHlwZW5hbWUgS2V5OjpQYXJhbWV0ZXJUeXBlLCB0eXBlbmFtZSBWYWx1
ZTo6UGFyYW1ldGVyVHlwZSk7Citwcml2YXRlOgorICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1f
bGV4aWNhbEdsb2JhbE9iamVjdDsKKyAgICBKU0M6OkpTT2JqZWN0JiBtX2JhY2tpbmdNYXA7Cit9
OwogCi0gICAgSlNDOjpKU01hcCogYmFja2luZ01hcCgpIHsgcmV0dXJuIGd1YXJkZWQoKTsgfQor
aW5saW5lIERPTU1hcEFkYXB0ZXI6OkRPTU1hcEFkYXB0ZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgYmFja2luZ01hcCkKKyAgICA6IG1f
bGV4aWNhbEdsb2JhbE9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgICwgbV9iYWNraW5n
TWFwKGJhY2tpbmdNYXApCit7Cit9CiAKLXByb3RlY3RlZDoKLSAgICBET01NYXBMaWtlKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNYXAmIG1hcCkgOiBET01HdWFyZGVk
PEpTQzo6SlNNYXA+KGdsb2JhbE9iamVjdCwgbWFwKSB7IH0KLX07Cit0ZW1wbGF0ZTxjbGFzcyBJ
RExLZXlUeXBlLCBjbGFzcyBJRExWYWx1ZVR5cGU+CitpbmxpbmUgdm9pZCBET01NYXBBZGFwdGVy
OjpzZXQodHlwZW5hbWUgSURMS2V5VHlwZTo6UGFyYW1ldGVyVHlwZSBrZXksIHR5cGVuYW1lIElE
TFZhbHVlVHlwZTo6UGFyYW1ldGVyVHlwZSB2YWx1ZSkKK3sKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byBqc0tleSA9IHRvSlM8
SURMS2V5VHlwZT4obV9sZXhpY2FsR2xvYmFsT2JqZWN0LCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1l
IElETEtleVR5cGU6OlBhcmFtZXRlclR5cGU+KGtleSkpOworICAgIGF1dG8ganNWYWx1ZSA9IHRv
SlM8SURMVmFsdWVUeXBlPihtX2xleGljYWxHbG9iYWxPYmplY3QsICpKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZtX2xleGljYWxHbG9iYWxPYmplY3QpLCBzdGQ6OmZvcndhcmQ8dHlw
ZW5hbWUgSURMVmFsdWVUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOworICAgIHNldFRvQmFj
a2luZ01hcChtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fYmFja2luZ01hcCwganNLZXksIGpzVmFs
dWUpOworfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUg
dm9pZCBET01NYXBMaWtlOjpzZXQodHlwZW5hbWUgS2V5OjpQYXJhbWV0ZXJUeXBlIGtleSwgdHlw
ZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUgdmFsdWUpCitpbmxpbmUgdm9pZCBET01NYXBBZGFw
dGVyOjpjbGVhcigpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8qIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYmFja2luZ01hcCgp
LT5zZXQobGV4aWNhbEdsb2JhbE9iamVjdCwKLSAgICAgICAgdG9KUzxLZXk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBLZXk6OlBh
cmFtZXRlclR5cGU+KGtleSkpLAotICAgICAgICB0b0pTPFZhbHVlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgVmFsdWU6OlBhcmFt
ZXRlclR5cGU+KHZhbHVlKSkpOworICAgIGNsZWFyQmFja2luZ01hcChtX2xleGljYWxHbG9iYWxP
YmplY3QsIG1fYmFja2luZ01hcCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgc3luY2hyb25pemVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5s
aW5lIEpTQzo6SlNPYmplY3QmIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
LSAgICBhdXRvIGJhY2tpbmdNYXAgPSBtYXBMaWtlLndyYXBwZWQoKS5iYWNraW5nTWFwKCk7Ci0g
ICAgaWYgKGJhY2tpbmdNYXApIHsKLSAgICAgICAgQVNTRVJUKGJhY2tpbmdNYXAtPmJhY2tpbmdN
YXAoKSk7Ci0gICAgICAgIGluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBtYXBMaWtlLCAqYmFja2luZ01hcC0+YmFja2luZ01hcCgpKTsKLSAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8gcGFpciA9IGdldEJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgbWFwTGlrZSk7CisgICAgaWYgKHBhaXIuZmlyc3QpIHsKKyAgICAgICAgRE9NTWFwQWRh
cHRlciBhZGFwdGVyIHsgbGV4aWNhbEdsb2JhbE9iamVjdCwgcGFpci5zZWNvbmQuZ2V0KCkgfTsK
KyAgICAgICAgbWFwTGlrZS53cmFwcGVkKCkuaW5pdGlhbGl6ZU1hcExpa2UoYWRhcHRlcik7CiAg
ICAgfQotICAgIGF1dG8mIG1hcCA9IGNyZWF0ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKLSAgICBtYXBMaWtlLndyYXBwZWQoKS5zeW5jaHJv
bml6ZUJhY2tpbmdNYXAoRE9NTWFwTGlrZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgbWFwKSk7Cisg
ICAgcmV0dXJuIHBhaXIuc2Vjb25kLmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFNpemVUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzJiBtYXBMaWtl
KQogewogICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6ZSk7CisgICAgcmV0dXJu
IGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSks
IHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxG
cmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewogICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNh
bGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtlLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpKTsKKyAg
ICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxP
YmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVz
UHVibGljTmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRLZXlzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJD
bGFzcyYgbWFwTGlrZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZvcndhcmRG
dW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBn
ZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3
YXJkVmFsdWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
ICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
dmFsdWVzUHVibGljTmFtZSgpKTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVC
YWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZENsZWFyVG9NYXBM
aWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKICAgICBtYXBMaWtlLndy
YXBwZWQoKS5jbGVhcigpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5n
TWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCkucHJvcGVydHlOYW1lcy0+Y2xlYXIpOworICAgIEpTQzo6Vk0m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtl
KSwgdm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3MsIHR5cGVuYW1lIENhbGxiYWNrPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRG
b3JFYWNoVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgQ2FsbGJh
Y2smJikKIHsKLSAgICByZXR1cm4gZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNraW5nTWFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgKm1hcExpa2UuZ2xvYmFsT2JqZWN0KCksIG1hcExp
a2UpOworICAgIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IG1hcExpa2UpOworICAgIHJldHVybiBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoKkpT
Qzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxs
RnJhbWUsIG1hcExpa2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5
cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2Uo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewogICAgIEpT
Qzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJu
IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQdWJs
aWNOYW1lKCkpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmdldFB1YmxpY05hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1Rv
TWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYpCiB7
CiAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
Lmhhc1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuaGFzUHVibGljTmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
V3JhcHBlckNsYXNzLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFNldFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UsIEtleVR5cGUmJiBrZXksIFZhbHVlVHlwZSYmIHZhbHVlKQogeworICAgIEpT
Qzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgbWFwTGlr
ZS53cmFwcGVkKCkuc2V0RnJvbU1hcExpa2Uoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0
ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7Ci0gICAgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRv
QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLnByb3BlcnR5TmFtZXMtPnNldCk7CisgICAgZm9y
d2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExp
a2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwogICAgIHJldHVybiAmbWFwTGlrZTsKIH0KIApA
QCAtMTQ1LDcgKzE1MiwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVu
YW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmREZQogewogICAgIGF1dG8g
aXNEZWxldGVkID0gbWFwTGlrZS53cmFwcGVkKCkucmVtb3ZlKHN0ZDo6Zm9yd2FyZDxJdGVtVHlw
ZT4oaXRlbSkpOwogICAgIFVOVVNFRF9QQVJBTShpc0RlbGV0ZWQpOwotICAgIGF1dG8gcmVzdWx0
ID0gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLnByb3Bl
cnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQpOworCisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRGdW5jdGlv
bkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJ
bml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJv
cGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCk7CisKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmFzQm9vbGVhbigpID09IGlzRGVsZXRlZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3BwCmluZGV4IGYxZmFi
MzFmYjQ2MWE0MjFjMDdiMWYwZjc1NTI1MDQ0YzE4ZTc2MTYuLjFkZTdhODFmNmU3OTZjNmJhNTM0
MTgwODdlOWNkNjFiYjZjZTU5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TZXRMaWtlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1NldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmgKaW5kZXggYzgxZWExZDJjNzRk
NzQ0NWI3MDU2N2Y5NGIyMzcwN2I3MmZhMTM0NS4uMTE4OGIzNjZmMGYyMTAzNzQ4ZGMxN2I3ZTg4
NzhjYTM0YmM2NjhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TZXRMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtl
LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0NvbW1vbklkZW50aWZpZXJzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGQ1Nzg2MjYzZTJmMTIxY2Rh
NzYyODUwMzc4MDQ3ZjEyNzM3Y2Q5YzEuLjJmYzQ2NmU3N2I3ZjU2MWE1ZWY1OTA1NmNjMWU0MmY0
YjMxZmIyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCkBAIC00NDA0LDEwICs0NDA0LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbCwganNVbmRlZmluZWQoKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pO1xuIik7CiAgICAgfQog
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPm1hcExpa2UpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgc3luY2hyb25pemVCYWNraW5nTWFwKCpnbG9iYWxPYmplY3QoKSwgKmdsb2JhbE9i
amVjdCgpLCAqdGhpcyk7XG4iKTsKLSAgICB9Ci0KICAgICAjIFN1cHBvcnQgZm9yIFJ1bnRpbWVF
bmFibGVkIGF0dHJpYnV0ZXMgb24gaW5zdGFuY2VzLgogICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICBuZXh0IHVubGVzcyBOZWVk
c1J1bnRpbWVDaGVjaygkaW50ZXJmYWNlLCAkYXR0cmlidXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKaW5kZXggZDEw
ZDA4OGEzMThlNWQzNmY5Yzg4MWE4ZmU4NDQwMjEyYTI2ZDgwMi4uZDY4ZGVhZjhmM2Q0NWRiYjk1
MmZhNTk2MTAyYWFhNzFlNWM1ODNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKQEAgLTE0NCw3ICsxNDQsNiBAQCB2
b2lkIEpTTWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogCiAgICAgc3RhdGljX2Fzc2Vy
dCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgTWFwTGlrZT46OnZhbHVlLCAiSW50
ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1w
bGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAgICBz
eW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCksICp0
aGlzKTsKIH0KIAogSlNPYmplY3QqIEpTTWFwTGlrZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3Bw
CmluZGV4IDNlNjVkZDczZDkyZDc3ZTYzZjAxZWNjZjBiNTlhNmM2MzM3N2M5YzkuLmU4YTBkYTM1
MDNmNjk1ODBhMzhiMjcxMGM0YTIwZDIyMDQwZmJlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtl
LmNwcApAQCAtMTM4LDcgKzEzOCw2IEBAIHZvaWQgSlNSZWFkT25seU1hcExpa2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIAogICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3Rp
dmVET01PYmplY3QsIFJlYWRPbmx5TWFwTGlrZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBt
YXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xh
c3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAgICBzeW5jaHJvbml6ZUJhY2tp
bmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCksICp0aGlzKTsKIH0KIAogSlNP
YmplY3QqIEpTUmVhZE9ubHlNYXBMaWtlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzTWFwTGlrZS5jcHAKaW5kZXggZjFmOGUzZDIwMDJiYzFkNjJkNDU3YWU1MjUxYjVkZTc5ZTA2
MjA0OC4uYWEzZWI5ODY0NTZhZjk2MzhjZDQ0OGY3ODg1NDYyOTc0NGMyNTgxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiSW50ZXJuYWxzTWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
KyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTM4LDExICszOSwxMCBAQCBJbnRlcm5hbHNNYXBMaWtlOjpJbnRlcm5hbHNNYXBMaWtlKCkKICAg
ICBtX3ZhbHVlcy5hZGQoImluaXQiLCAwKTsKIH0KIAotdm9pZCBJbnRlcm5hbHNNYXBMaWtlOjpz
eW5jaHJvbml6ZUJhY2tpbmdNYXAoUmVmPERPTU1hcExpa2U+JiYgbWFwTGlrZSkKK3ZvaWQgSW50
ZXJuYWxzTWFwTGlrZTo6aW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYgbWFwKQogewot
ICAgIG1fbWFwTGlrZSA9IFdURk1vdmUobWFwTGlrZSk7CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1
ZSA6IG1fdmFsdWVzKQotICAgICAgICBtX21hcExpa2UtPnNldDxJRExET01TdHJpbmcsIElETFVu
c2lnbmVkTG9uZz4oa2V5VmFsdWUua2V5LCBrZXlWYWx1ZS52YWx1ZSk7CisgICAgICAgIG1hcC5z
ZXQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZExvbmc+KGtleVZhbHVlLmtleSwga2V5VmFsdWUu
dmFsdWUpOwogfQogCiB2b2lkIEludGVybmFsc01hcExpa2U6OnNldEZyb21NYXBMaWtlKFN0cmlu
ZyYmIGtleSwgdW5zaWduZWQgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFsc01hcExpa2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
TWFwTGlrZS5oCmluZGV4IGI3MzNmNWMzMmViZjdhODM2NjFhNmE0MjBiNTgzZmRkMjQ0NzI0MTEu
LjgxMjI5NTkyMGZlNzVjN2Y3N2IwZTNmMGE2YTAzMWE5ODhmMTAyNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5oCkBAIC0yNSwzMCArMjUsMjggQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgSW50ZXJuYWxzTWFwTGlrZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEludGVybmFsc01hcExpa2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPEludGVybmFsc01hcExpa2U+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50
ZXJuYWxzTWFwTGlrZSk7IH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRh
cHRlciYpOwogICAgIHZvaWQgc2V0RnJvbU1hcExpa2UoU3RyaW5nJiYsIHVuc2lnbmVkKTsKICAg
ICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2
b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChSZWY8RE9NTWFwTGlrZT4mJik7Ci0gICAgRE9NTWFw
TGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsgfQotCiAgICAgVmVj
dG9yPFN0cmluZz4gaW5zcGVjdEtleXMoKSBjb25zdDsKICAgICBWZWN0b3I8dW5zaWduZWQ+IGlu
c3BlY3RWYWx1ZXMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBJbnRlcm5hbHNNYXBMaWtlKCk7
CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBtX3ZhbHVlczsKLSAgICBSZWZQdHI8RE9N
TWFwTGlrZT4gbV9tYXBMaWtlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384995</attachid>
            <date>2019-12-06 00:35:46 -0800</date>
            <delta_ts>2019-12-08 08:05:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204879-20191206093545.patch</filename>
            <type>text/plain</type>
            <size>42827</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQ3YzJl
ZGIyZmYwZjYyZDIxNzFhNjdiOTdkNjFjNi4uMmRhNTU3MjQxMmM4NGUzYmQ1M2JiMGJiNTE3OGVi
MWUzMGExM2I4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTEyLTA2ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBEbyBub3QgdXNlIERPTUd1
YXJkZWQgZm9yIG1hcGxpa2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVwZGF0ZSBtYXBsaWtlIGFjY29yZGluZyBzZXRsaWtlIG1vZGVsIHdoZXJlIHdl
IHN1cHBvcnQgc3luY2luZyBhdCBjcmVhdGlvbiBvZiB0aGUgSlMgd3JhcHBlcgorICAgICAgICBh
bmQgc3luY2luZyB3aGVuZXZlciBzZXRsaWtlL21hcGxpa2UgbWV0aG9kcyBhcmUgY2FsbGVkLgor
ICAgICAgICBSZW1vdmluZyBET01HdWFyZGVkT2JqZWN0IG1ha2VzIGltcGxlbWVudGF0aW9uIG1v
cmUgbGlnaHR3ZWlnaHQsIHRoZXJlIGlzIGxlc3MgdGhpbmdzIHRvIGltcGxlbWVudCBvbiBET00g
c2lkZQorICAgICAgICBhbmQgaXQgYWxsb3dzIGNvbGxlY3RpbmcgdGhlIHByaXZhdGUgbWFwIHRv
IGZyZWUgbWVtb3J5IGlmIG5lZWRlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzIGFuZCByZWJhc2VkIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hs
aWdodC9IaWdobGlnaHRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0TWFwOjpp
bml0aWFsaXplTWFwTGlrZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0
TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OnN5bmNocm9uaXplQmFja2lu
Z01hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OmJhY2tpbmdN
YXApOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBv
cnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UlRDU3RhdHNSZXBvcnQ6OmluaXRpYWxpemVNYXBMaWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpSVENTdGF0c1JlcG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpSVENTdGF0c1JlcG9ydDo6c3luY2hyb25pemVCYWNraW5nTWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpiYWNraW5nTWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjphZGRTdGF0cyk6IERlbGV0ZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2lu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENNZWRpYUVuZHBvaW50OjpjcmVhdGVT
dGF0c0NvbGxlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRD
U3RhdHNDb2xsZWN0b3I6On5MaWJXZWJSVENTdGF0c0NvbGxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZlcmVkKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5o
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyQmFja2luZ01hcCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRUb0JhY2tpbmdNYXApOgorICAgICAgICAoV2ViQ29yZTo6
Zm9yd2FyZEF0dHJpYnV0ZUdldHRlclRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpm
b3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
QmFja2luZ01hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCYWNraW5nTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1hcEFkYXB0ZXI6OkRPTU1hcEFkYXB0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NTWFwQWRhcHRlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1hcEFkYXB0
ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEFuZEluaXRpYWxpemVCYWNraW5nTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRTaXplVG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRLZXlzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRWYWx1ZXNUb01hcExp
a2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZENsZWFyVG9NYXBMaWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cndhcmRHZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEhhc1RvTWFwTGlr
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkU2V0VG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmREZWxldGVUb01hcExpa2UpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRPTU1hcExpa2U6OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzeW5jaHJvbml6ZUJhY2tpbmdNYXApOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NU2V0TGlrZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TZXRMaWtl
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAg
ICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFwTGlrZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRP
bmx5TWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlYWRPbmx5TWFwTGlrZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjppbml0aWFsaXplTWFwTGlrZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjpzeW5jaHJvbml6ZUJhY2tpbmdNYXAp
OiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzTWFwTGlrZTo6YmFja2luZ01hcCk6IERlbGV0ZWQuCisKIDIw
MTktMTItMDUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZD
XVtJRkNdIEZpeCBjc3MxL2Jhc2ljL2NvbnRhaW5tZW50Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuY3BwCmluZGV4IGIyNDhlZjdkMmU1
NTU3OTRkNGQ3M2NkOTdhOTczN2FmOGI0ZjEzMDMuLjQzM2NkNmVkODJlMGMyYWZlY2YxOGYyNTI2
NmFiOTg3YmE4MzlhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0hpZ2hsaWdodE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdobGln
aHQvSGlnaGxpZ2h0TWFwLmNwcApAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkhpZ2hsaWdodE1hcC5oIgogCisjaW5jbHVkZSAiSlNET01NYXBMaWtlLmgi
CisjaW5jbHVkZSAiSlNIaWdobGlnaHRSYW5nZUdyb3VwLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBIaWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3NzU3R5
bGUsIEhpZ2hsaWdodFJhbmdlR3JvdXAgJmdyb3VwKQpAQCAtMzQsNiArMzcsMTIgQEAgdm9pZCBI
aWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3NzU3R5bGUsIEhpZ2hsaWdo
dFJhbmdlR3JvdXAgJmdyb3UKICAgICBVTlVTRURfUEFSQU0oZ3JvdXApOwogfQogCit2b2lkIEhp
Z2hsaWdodE1hcDo6aW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYgbWFwKQoreworICAg
IGZvciAoYXV0byYga2V5VmFsdWUgOiBtX21hcCkKKyAgICAgICAgbWFwLnNldDxJRExET01TdHJp
bmcsIElETEludGVyZmFjZTxIaWdobGlnaHRSYW5nZUdyb3VwPj4oa2V5VmFsdWUua2V5LCBrZXlW
YWx1ZS52YWx1ZSk7Cit9CisKIHZvaWQgSGlnaGxpZ2h0TWFwOjpzZXRGcm9tTWFwTGlrZShTdHJp
bmcmJiwgUmVmPEhpZ2hsaWdodFJhbmdlR3JvdXA+JiYpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5oCmluZGV4IDY0MWUyNGJkODBkNzVm
YjI1MTE4NjI5YjIyYzBjNDRjZjU2OTgxNGIuLjY5YTcwYjAwYzhkNmY0Yzg0NGVmNzk4ZmUzNzgz
MGMzMjQ5YmJjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0hpZ2hsaWdodE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hp
Z2hsaWdodE1hcC5oCkBAIC0yNiwyMyArMjYsMjEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSGlnaGxpZ2h0UmFuZ2VHcm91cC5oIgotI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01NYXBBZGFwdGVyOwogY2xhc3MgRE9NU3RyaW5n
OwogY2xhc3MgSGlnaGxpZ2h0UmFuZ2VHcm91cDsKIAogY2xhc3MgSGlnaGxpZ2h0TWFwIDogcHVi
bGljIFJlZkNvdW50ZWQ8SGlnaGxpZ2h0TWFwPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxI
aWdobGlnaHRNYXA+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0TWFw
KTsgfQotICAgIAorCiAgICAgdm9pZCBhZGRIaWdobGlnaHRHcm91cChTdHJpbmcmLCBIaWdobGln
aHRSYW5nZUdyb3VwJik7Ci0gICAgCi0gICAgdm9pZCBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoUmVm
PERPTU1hcExpa2U+JiYgbWFwTGlrZSkgeyBtX21hcExpa2UgPSBXVEZNb3ZlKG1hcExpa2UpOyB9
Ci0gICAgRE9NTWFwTGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsg
fQorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYpOwogCiAgICAgLy8g
QmluZGluZ3Mgc3VwcG9ydC4KICAgICBTdHJpbmcgbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpIGNvbnN0OwpAQCAtNTUsOCArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgog
ICAgIEhpZ2hsaWdodE1hcCgpID0gZGVmYXVsdDsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PEhpZ2hsaWdodFJhbmdlR3JvdXA+PiBtX21hcDsKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4gbV9t
YXBMaWtlOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8SGlnaGxpZ2h0UmFuZ2VHcm91cD4+IG1f
bWFwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTdGF0c1JlcG9ydC5oCmluZGV4IGE4YmU2MDVkMzlkODBhMjI0YzYzMTQ1NmQzNmQyOGVl
Y2NhYmE1MGYuLmFkNzMyMTlhMDBlMWY5MmE0NWRmNTBhNDFmOTg2M2RjN2Q1OGI4NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVwb3J0
LmgKQEAgLTI1LDE5ICsyNSwxOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpTRE9N
TWFwTGlrZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgUlRDU3RhdHNS
ZXBvcnQgOiBwdWJsaWMgUmVmQ291bnRlZDxSVENTdGF0c1JlcG9ydD4gewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8UlRDU3RhdHNSZXBvcnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUlRDU3RhdHNSZXBvcnQpOyB9Ci0KLSAgICB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChS
ZWY8RE9NTWFwTGlrZT4mJiBtYXBMaWtlKSB7IG1fbWFwTGlrZSA9IFdURk1vdmUobWFwTGlrZSk7
IH0KLSAgICBET01NYXBMaWtlKiBiYWNraW5nTWFwKCkgeyByZXR1cm4gbV9tYXBMaWtlLmdldCgp
OyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZT4gdm9pZCBhZGRTdGF0cyh0eXBlbmFt
ZSBWYWx1ZTo6UGFyYW1ldGVyVHlwZSYmIHZhbHVlKSB7IG1fbWFwTGlrZS0+c2V0PElETERPTVN0
cmluZywgVmFsdWU+KHZhbHVlLmlkLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgVmFsdWU6OlBhcmFt
ZXRlclR5cGU+KHZhbHVlKSk7IH0KKyAgICB1c2luZyBNYXBJbml0aWFsaXplciA9IEZ1bmN0aW9u
PHZvaWQoRE9NTWFwQWRhcHRlciYpPjsKKyAgICBzdGF0aWMgUmVmPFJUQ1N0YXRzUmVwb3J0PiBj
cmVhdGUoTWFwSW5pdGlhbGl6ZXImJiBtYXBJbml0aWFsaXplcikgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSVENTdGF0c1JlcG9ydChXVEZNb3ZlKG1hcEluaXRpYWxpemVyKSkpOyB9CiAKKyAgICB2
b2lkIGluaXRpYWxpemVNYXBMaWtlKERPTU1hcEFkYXB0ZXImIGFkYXB0ZXIpIHsgbV9tYXBJbml0
aWFsaXplcihhZGFwdGVyKTsgfQogCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgQ29k
ZWMsCkBAIC0yMzYsMTAgKzIzNSwxNCBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAg
ICBSVENTdGF0c1JlcG9ydCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBSVENTdGF0c1JlcG9y
dChNYXBJbml0aWFsaXplciYmKTsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4g
bV9tYXBMaWtlOworICAgIE1hcEluaXRpYWxpemVyIG1fbWFwSW5pdGlhbGl6ZXI7CiB9OwogCitp
bmxpbmUgUlRDU3RhdHNSZXBvcnQ6OlJUQ1N0YXRzUmVwb3J0KE1hcEluaXRpYWxpemVyJiYgbWFw
SW5pdGlhbGl6ZXIpCisgICAgOiBtX21hcEluaXRpYWxpemVyKFdURk1vdmUobWFwSW5pdGlhbGl6
ZXIpKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVuZHBv
aW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDM4ODczMWZhNjU3OWFhMmQ1YzEwZTNlYmJj
MWIwNDU5YTA0ZWI5NjUuLjVkZWYxYzFhMzFjMjAyMzYzYWZmYjFmZWUxMjhmYTc3MDkxYTU0YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCkBAIC0yODYs
MTkgKzI4NiwxMiBAQCB2b2lkIExpYldlYlJUQ01lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2Vy
KCkKIAogcnRjOjpzY29wZWRfcmVmcHRyPExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPiBMaWJXZWJS
VENNZWRpYUVuZHBvaW50OjpjcmVhdGVTdGF0c0NvbGxlY3RvcihSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCiB7Ci0gICAgcmV0dXJuIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpjcmVh
dGUoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldKCkgbXV0YWJsZSAtPiBSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+IHsKKyAgICByZXR1cm4g
TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZShbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYXV0byYmIHJlcG9ydCkgbXV0YWJs
ZSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5pc1N0b3BwZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIGF1dG8gcmVwb3J0ID0gUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZSgpOwotCi0gICAgICAgIHBy
b21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0LmNvcHlS
ZWYoKSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSB8fCAhcmVwb3J0
KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIFRoZSBwcm9taXNlIHJlc29sdXRp
b24gbWlnaHQgZmFpbCBpbiB3aGljaCBjYXNlIG5vIGJhY2tpbmcgbWFwIHdpbGwgYmUgY3JlYXRl
ZC4KLSAgICAgICAgaWYgKCFyZXBvcnQtPmJhY2tpbmdNYXAoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gcmVwb3J0OworICAgICAgICBwcm9taXNlLT5yZXNv
bHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0
b3IuY3BwCmluZGV4IDYyYWQ4MjM4MzM0NDM1MTk2MWQwOWJjZmIzMzE5NjY4MDY2OTM0ZTkuLjhh
NjdjMDc5ZWVhMGRhMzA0MGEzZTNjMDVkYmExNWVmZGI5ZmY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IFVTRShMSUJXRUJSVEMpCiAKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJK
U1JUQ1N0YXRzUmVwb3J0LmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgpAQCAtNDQsNyArNDUsNyBAQCBMaWJXZWJSVENTdGF0c0NvbGxlY3Rv
cjo6fkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fs
bE9uTWFpblRocmVhZChbY2FsbGJhY2sgPSBXVEZNb3ZlKG1fY2FsbGJhY2spXSgpIG11dGFibGUg
ewotICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKICAgICB9
KTsKIH0KIApAQCAtMzgwLDU4ICszODEsNjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENQ
ZWVyQ29ubmVjdGlvblN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXQKICAg
ICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzQ2xvc2VkID0gKnJ0Y1N0YXRzLmRhdGFfY2hhbm5lbHNf
Y2xvc2VkOwogfQogCi12b2lkIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZl
cmVkKGNvbnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxjb25zdCB3ZWJydGM6OlJUQ1N0YXRzUmVwb3J0
PiYgcnRjUmVwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVSVENTdGF0c1JlcG9y
dEJhY2tpbmdNYXAoRE9NTWFwQWRhcHRlciYgcmVwb3J0LCBjb25zdCB3ZWJydGM6OlJUQ1N0YXRz
UmVwb3J0JiBydGNSZXBvcnQpCiB7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhp
cyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJSVENTdGF0c0NvbGxlY3Rvcj4odGhpcyksIHJ0
Y1JlcG9ydF0gewotICAgICAgICBhdXRvIHJlcG9ydCA9IHByb3RlY3RlZFRoaXMtPm1fY2FsbGJh
Y2soKTsKLSAgICAgICAgaWYgKCFyZXBvcnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgQVNTRVJUKHJlcG9ydC0+YmFja2luZ01hcCgpKTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHJ0Y1N0YXRzIDogKnJ0Y1JlcG9ydCkgewotICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzLnR5
cGUoKSA9PSB3ZWJydGM6OlJUQ0luYm91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRzOwot
ICAgICAgICAgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19j
YXN0PGNvbnN0IHdlYnJ0Yzo6UlRDSW5ib3VuZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsK
LSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNS
ZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDT3V0Ym91bmRSVFBT
dHJlYW1TdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6T3V0
Ym91bmRSVFBTdHJlYW1TdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsT3V0Ym91bmRS
VFBTdHJlYW1TdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENPdXRib3Vu
ZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFk
ZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUlRQU3RyZWFtU3Rh
dHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5
cGUoKSA9PSB3ZWJydGM6OlJUQ01lZGlhU3RyZWFtVHJhY2tTdGF0czo6a1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6TWVkaWFTdHJlYW1UcmFja1N0YXRzIHN0YXRzOwot
ICAgICAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3RhdHMsIHN0YXRp
Y19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4ocnRjU3RhdHMp
KTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3Rh
dHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDRGF0YUNoYW5u
ZWxTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6RGF0YUNo
YW5uZWxTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDRGF0YUNoYW5uZWxTdGF0
cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENEYXRhQ2hhbm5lbFN0YXRzJj4o
cnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25h
cnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0ljZUNh
bmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9y
dDo6SWNlQ2FuZGlkYXRlUGFpclN0YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENJ
Y2VDYW5kaWRhdGVQYWlyU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRD
SWNlQ2FuZGlkYXRlUGFpclN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBv
cnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVBh
aXJTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocnRjU3Rh
dHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUmVtb3RlSWNlQ2FuZGlkYXRlU3RhdHM6OmtUeXBlIHx8
IHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0xvY2FsSWNlQ2FuZGlkYXRlU3RhdHM6OmtU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVN0YXRz
IHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRhdGVTdGF0cyhzdGF0cywg
c3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVTdGF0cyY+KHJ0Y1N0YXRz
KSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0
YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDQ2VydGlmaWNhdGVT
dGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q2VydGlmaWNh
dGVTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDQ2VydGlmaWNhdGVTdGF0cyhz
dGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENDZXJ0aWZpY2F0ZVN0YXRzJj4ocnRj
U3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0NvZGVjU3Rh
dHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMg
c3RhdHM7Ci0gICAgICAgICAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0YXRpY19j
YXN0PGNvbnN0IHdlYnJ0Yzo6UlRDQ29kZWNTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAgICAg
ICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2Rl
Y1N0YXRzPj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0
cy50eXBlKCkgPT0gd2VicnRjOjpSVENUcmFuc3BvcnRTdGF0czo6a1R5cGUpIHsKLSAgICAgICAg
ICAgICAgICBSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMgc3RhdHM7Ci0gICAgICAgICAg
ICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJy
dGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBv
cnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0YXRz
Pj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBl
KCkgPT0gd2VicnRjOjpSVENQZWVyQ29ubmVjdGlvblN0YXRzOjprVHlwZSkgewotICAgICAgICAg
ICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXRzIHN0YXRzOwotICAgICAg
ICAgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxj
b25zdCB3ZWJydGM6OlJUQ1BlZXJDb25uZWN0aW9uU3RhdHMmPihydGNTdGF0cykpOwotICAgICAg
ICAgICAgICAgIHJlcG9ydC0+YWRkU3RhdHM8SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6
UGVlckNvbm5lY3Rpb25TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0KKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJ0Y1N0YXRzIDogcnRjUmVwb3J0KSB7CisgICAgICAgIGlmIChy
dGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHM6OmtUeXBl
KSB7CisgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRzIHN0
YXRzOworICAgICAgICAgICAgZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RhdGlj
X2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHMmPihydGNTdGF0cykp
OworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRD
U3RhdHNSZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0
YXRzKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRD
T3V0Ym91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVw
b3J0OjpPdXRib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbE91dGJv
dW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDT3V0
Ym91bmRSVFBTdHJlYW1TdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0
PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSVFBT
dHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzOjpr
VHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tTdGF0
cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3RhdHMs
IHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4ocnRj
U3RhdHMpKTsKKyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9u
YXJ5PFJUQ1N0YXRzUmVwb3J0OjpNZWRpYVN0cmVhbVRyYWNrU3RhdHM+PihzdGF0cy5pZCwgV1RG
TW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJy
dGM6OlJUQ0RhdGFDaGFubmVsU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0c1Jl
cG9ydDo6RGF0YUNoYW5uZWxTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENEYXRhQ2hh
bm5lbFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0RhdGFDaGFubmVs
U3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcs
IElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihzdGF0cy5p
ZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9
PSB3ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAg
IFJUQ1N0YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVQYWlyU3RhdHMgc3RhdHM7CisgICAgICAgICAg
ICBmaWxsUlRDSWNlQ2FuZGlkYXRlUGFpclN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3
ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAg
ICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6
SWNlQ2FuZGlkYXRlUGFpclN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENSZW1vdGVJY2VDYW5k
aWRhdGVTdGF0czo6a1R5cGUgfHwgcnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTG9jYWxJ
Y2VDYW5kaWRhdGVTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJ
Y2VDYW5kaWRhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRhdGVT
dGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVTdGF0
cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURM
RGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlU3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ0NlcnRpZmljYXRlU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0
c1JlcG9ydDo6Q2VydGlmaWNhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENDZXJ0
aWZpY2F0ZVN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NlcnRpZmlj
YXRlU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJp
bmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUo
KSA9PSB3ZWJydGM6OlJUQ0NvZGVjU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0
c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENDb2RlY1N0YXRz
KHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NvZGVjU3RhdHMmPihydGNTdGF0
cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ1RyYW5zcG9y
dFN0YXRzOjprVHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0
YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdGF0
aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsKKyAg
ICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRz
UmVwb3J0OjpUcmFuc3BvcnRTdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rp
b25TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVj
dGlvblN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMo
c3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rpb25TdGF0cyY+
KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGlj
dGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBX
VEZNb3ZlKHN0YXRzKSk7CiAgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3I6Ok9uU3RhdHNEZWxpdmVyZWQoY29uc3QgcnRjOjpzY29wZWRfcmVmcHRyPGNv
bnN0IHdlYnJ0Yzo6UlRDU3RhdHNSZXBvcnQ+JiBydGNSZXBvcnQpCit7CisgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvcj4odGhpcyksIHJ0Y1JlcG9ydF0oKSB7CisgICAgICAgIG1fY2FsbGJh
Y2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbcnRjUmVwb3J0XShhdXRvJiBtYXBBZGFwdGVyKSB7
CisgICAgICAgICAgICBpZiAocnRjUmVwb3J0KQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVS
VENTdGF0c1JlcG9ydEJhY2tpbmdNYXAobWFwQWRhcHRlciwgKnJ0Y1JlcG9ydCk7CisgICAgICAg
IH0pKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVj
dG9yLmgKaW5kZXggMzJhZDg3ZjQ4OTg1OWVmYjU1NDA3YjMzMTExZTJkMTdkM2Q1NTQ0OC4uZjJi
NDJjYTA1YmI2ZWIzYTZjMzMyYmQ2N2U1ZTIxM2YzMmFmODkwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oCkBAIC0zOCwxMSArMzgsMTQgQEAgQUxMT1dfVU5V
U0VEX1BBUkFNRVRFUlNfRU5ECiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFw
QWRhcHRlcjsKIGNsYXNzIFJUQ1N0YXRzUmVwb3J0OwogCit2b2lkIGluaXRpYWxpemVSVENTdGF0
c1JlcG9ydEJhY2tpbmdNYXAoUlRDU3RhdHNSZXBvcnQmKTsKKwogY2xhc3MgTGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3IgOiBwdWJsaWMgd2VicnRjOjpSVENTdGF0c0NvbGxlY3RvckNhbGxiYWNrIHsK
IHB1YmxpYzoKLSAgICB1c2luZyBDb2xsZWN0b3JDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVy
PFJlZlB0cjxSVENTdGF0c1JlcG9ydD4oKT47CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJhY2sg
PSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+OwogICAg
IHN0YXRpYyBydGM6OnNjb3BlZF9yZWZwdHI8TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I+IGNyZWF0
ZShDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBuZXcgcnRjOjpSZWZDb3Vu
dGVkT2JqZWN0PExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPihXVEZNb3ZlKGNhbGxiYWNrKSk7IH0K
IAogICAgIGV4cGxpY2l0IExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKENvbGxlY3RvckNhbGxiYWNr
JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAKaW5kZXgg
ZjdlNjFmZWJkZTJlZWFhYzA4MTNhOWRlNWUzZDYyYTI1ZDUzZjAzYS4uZjAxZTIwMTE0MmU3MmVj
YzAyZWJiMWNiOTk2N2YyZWYyMTVmMDA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTU1hcExpa2UuY3BwCkBAIC0yOCw0MiArMjgsNjIgQEAKIAogI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgaW5saW5lIEpTQzo6SlNPYmplY3QmIGdldEJhY2tpbmdNYXAoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSkK
K3N0ZDo6cGFpcjxib29sLCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEpTQzo6SlNPYmplY3Q+PiBn
ZXRCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SlNPYmplY3QmIG1hcExpa2UpCiB7CiAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CiAgICAgYXV0byBiYWNraW5nTWFwID0gbWFwTGlrZS5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpKTsKLSAgICByZXR1cm4gKkpTQzo6
YXNPYmplY3QoYmFja2luZ01hcCk7CisgICAgaWYgKGJhY2tpbmdNYXAuaXNVbmRlZmluZWQoKSkg
eworICAgICAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIGJhY2tpbmdN
YXAgPSBKU0M6OkpTTWFwOjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCBsZXhpY2Fs
R2xvYmFsT2JqZWN0Lm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tp
bmdNYXBQcml2YXRlTmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICAgICAgcmV0dXJuIHsgdHJ1ZSwg
KkpTQzo6YXNPYmplY3QoYmFja2luZ01hcCkgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgZmFsc2Us
ICpKU0M6OmFzT2JqZWN0KGJhY2tpbmdNYXApIH07CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUJhY2tp
bmdNYXAoSlNDOjpWTSYgdm0sIEpTQzo6SlNPYmplY3QmIG1hcExpa2UsIEpTQzo6SlNNYXAmIGJh
Y2tpbmdNYXApCit2b2lkIGNsZWFyQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNraW5nTWFwKQogewotICAgIG1hcExp
a2UucHV0RGlyZWN0KHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpLT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0ZU5hbWUoKSwgJmJhY2tpbmdNYXAs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gYmFja2luZ01hcC5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyKTsKKyAgICBBU1NFUlQoIWZ1bmN0aW9uLmlzVW5k
ZWZpbmVkKCkpOworCisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxU
eXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsK
KyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSk7CisgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmYmFja2luZ01hcCwgYXJn
dW1lbnRzKTsKIH0KIAotSlNDOjpKU01hcCYgY3JlYXRlQmFja2luZ01hcChKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNPYmplY3QmIG1hcExpa2UpCit2b2lkIHNldFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNr
aW5nTWFwLCBKU0M6OkpTVmFsdWUga2V5LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgYXV0
byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gYmFja2luZ01hcC5nZXQo
JmxleGljYWxHbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNldCk7CisgICAgQVNTRVJU
KCFmdW5jdGlvbi5pc1VuZGVmaW5lZCgpKTsKIAotICAgIEFTU0VSVChtYXBMaWtlLmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZhdGVOYW1lKCkpLmlzVW5kZWZpbmVk
KCkpOwotICAgIGF1dG8gYmFja2luZ01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmbGV4aWNhbEds
b2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgc2NvcGUu
cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygp
LmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKLSAgICByZXR1cm4gKmJhY2tp
bmdNYXA7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNh
bGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBB
U1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSk7CisgICAgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChrZXkpOworICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJmJhY2tpbmdNYXAsIGFyZ3VtZW50
cyk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFw
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3Qm
IG1hcExpa2UsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgYXR0cmlidXRlTmFtZSkKK0pTQzo6SlNW
YWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIGJhY2tpbmdNYXAsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgYXR0cmlidXRlTmFtZSkKIHsKLSAgICByZXR1cm4gZ2V0QmFja2lu
Z01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKS5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGF0dHJpYnV0ZU5hbWUpOworICAgIHJldHVybiBiYWNraW5nTWFwLmdldCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIEpTQzo6SlNPYmplY3QmIG1hcExpa2Us
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKQorSlNDOjpKU1ZhbHVlIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNDOjpKU09iamVjdCYgYmFj
a2luZ01hcCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgYXV0
byYgYmFja2luZ01hcCA9IGdldEJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlr
ZSk7Ci0KICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBiYWNraW5nTWFwLmdldCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgZnVuY3Rpb25OYW1lKTsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwogCkBA
IC03NywyMSArOTcsMTkgQEAgSlNDOjpKU1ZhbHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KICAgICByZXR1cm4gSlND
OjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCAmYmFja2luZ01hcCwgYXJndW1lbnRzKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JF
YWNoQ2FsbFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JF
YWNoQ2FsbFRvQmFja2luZ01hcChKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQogewogICAgIGF1
dG8qIGZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLmpz
RE9NQmluZGluZ0ludGVybmFscygpLm1fbWFwTGlrZUZvckVhY2hGdW5jdGlvbi5nZXQoKTsKICAg
ICBBU1NFUlQoZnVuY3Rpb24pOwogCi0gICAgZ2V0QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBtYXBMaWtlKTsKLQogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEobGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpLCBmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBK
U0M6OmdldENhbGxEYXRhKGdsb2JhbE9iamVjdC52bSgpLCBmdW5jdGlvbiwgY2FsbERhdGEpOwog
ICAgIEFTU0VSVChjYWxsVHlwZSAhPSBKU0M6OkNhbGxUeXBlOjpOb25lKTsKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBmb3IgKHNpemVfdCBjcHRyID0gMDsg
Y3B0ciA8IGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCk7ICsrY3B0cikKICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQoY3B0cikpOwogICAgIEFTU0VS
VCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0dXJuIEpTQzo6Y2FsbCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJm1hcExpa2Us
IGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIEpTQzo6Y2FsbCgmZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmbWFwTGlrZSwgYXJndW1lbnRzKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaAppbmRleCBlOGY1ZTAzZjY3YTQy
OWQ4ODEwZDhkYzdmODUyZGMyNmY1ZTBiZmE2Li5jZDE0ODY5NmJiNjhhYTgxODI1NzFiZTQ0MjJm
YjJmMjEwNzE2N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TU1hcExpa2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2Uu
aApAQCAtMjcsMjAgKzI3LDE4IEBACiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RPTUd1YXJkZWRPYmplY3QuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db21tb25JZGVudGlmaWVycy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
TWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgSlNDOjpKU01h
cCYgY3JlYXRlQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNPYmplY3QmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZUJh
Y2tpbmdNYXAoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QmLCBKU0M6OkpTTWFwJik7CitXRUJDT1JF
X0VYUE9SVCBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxKU0M6OkpTT2Jq
ZWN0Pj4gZ2V0QmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYg
bWFwTGlrZSk7CiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgZm9yd2FyZEF0dHJpYnV0ZUdl
dHRlclRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2Fs
bEZyYW1lJiwgSlNDOjpKU09iamVjdCYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09S
RV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFj
aENhbGxUb0JhY2tpbmdNYXAoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIEpT
Qzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJCYWNraW5nTWFwKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01H
bG9iYWxPYmplY3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRTaXplVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlND
OjpKU1ZhbHVlIGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U0M6OkNhbGxGcmFtZSYsIFdyYXBwZXJDbGFzcyYpOwogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgV3JhcHBlckNsYXNzJik7CkBAIC01Miw5MiArNTAsMTAx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpT
Qzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xh
c3MsIHR5cGVuYW1lIEl0ZW1UeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IEpTQzo6SlNWYWx1ZSBm
b3J3YXJkU2V0VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYs
IFdyYXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYsIFZhbHVlVHlwZSYmKTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJk
RGVsZXRlVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIFdy
YXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYpOwogCi1jbGFzcyBET01NYXBMaWtlIGZpbmFsIDogcHVi
bGljIERPTUd1YXJkZWQ8SlNDOjpKU01hcD4geworY2xhc3MgRE9NTWFwQWRhcHRlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxET01NYXBMaWtlPiBjcmVhdGUoSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNDOjpKU01hcCYgbWFwKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERP
TU1hcExpa2UoZ2xvYmFsT2JqZWN0LCBtYXApKTsgfQorICAgIERPTU1hcEFkYXB0ZXIoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBJRExL
ZXlUeXBlLCBjbGFzcyBJRExWYWx1ZVR5cGU+IHZvaWQgc2V0KHR5cGVuYW1lIElETEtleVR5cGU6
OlBhcmFtZXRlclR5cGUsIHR5cGVuYW1lIElETFZhbHVlVHlwZTo6UGFyYW1ldGVyVHlwZSk7Cisg
ICAgdm9pZCBjbGVhcigpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZT4gdm9pZCBzZXQodHlwZW5hbWUgS2V5OjpQYXJhbWV0ZXJUeXBlLCB0eXBlbmFtZSBWYWx1
ZTo6UGFyYW1ldGVyVHlwZSk7Citwcml2YXRlOgorICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1f
bGV4aWNhbEdsb2JhbE9iamVjdDsKKyAgICBKU0M6OkpTT2JqZWN0JiBtX2JhY2tpbmdNYXA7Cit9
OwogCi0gICAgSlNDOjpKU01hcCogYmFja2luZ01hcCgpIHsgcmV0dXJuIGd1YXJkZWQoKTsgfQor
aW5saW5lIERPTU1hcEFkYXB0ZXI6OkRPTU1hcEFkYXB0ZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgYmFja2luZ01hcCkKKyAgICA6IG1f
bGV4aWNhbEdsb2JhbE9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgICwgbV9iYWNraW5n
TWFwKGJhY2tpbmdNYXApCit7Cit9CiAKLXByb3RlY3RlZDoKLSAgICBET01NYXBMaWtlKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNYXAmIG1hcCkgOiBET01HdWFyZGVk
PEpTQzo6SlNNYXA+KGdsb2JhbE9iamVjdCwgbWFwKSB7IH0KLX07Cit0ZW1wbGF0ZTxjbGFzcyBJ
RExLZXlUeXBlLCBjbGFzcyBJRExWYWx1ZVR5cGU+CitpbmxpbmUgdm9pZCBET01NYXBBZGFwdGVy
OjpzZXQodHlwZW5hbWUgSURMS2V5VHlwZTo6UGFyYW1ldGVyVHlwZSBrZXksIHR5cGVuYW1lIElE
TFZhbHVlVHlwZTo6UGFyYW1ldGVyVHlwZSB2YWx1ZSkKK3sKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byBqc0tleSA9IHRvSlM8
SURMS2V5VHlwZT4obV9sZXhpY2FsR2xvYmFsT2JqZWN0LCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1l
IElETEtleVR5cGU6OlBhcmFtZXRlclR5cGU+KGtleSkpOworICAgIGF1dG8ganNWYWx1ZSA9IHRv
SlM8SURMVmFsdWVUeXBlPihtX2xleGljYWxHbG9iYWxPYmplY3QsICpKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZtX2xleGljYWxHbG9iYWxPYmplY3QpLCBzdGQ6OmZvcndhcmQ8dHlw
ZW5hbWUgSURMVmFsdWVUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOworICAgIHNldFRvQmFj
a2luZ01hcChtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fYmFja2luZ01hcCwganNLZXksIGpzVmFs
dWUpOworfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUg
dm9pZCBET01NYXBMaWtlOjpzZXQodHlwZW5hbWUgS2V5OjpQYXJhbWV0ZXJUeXBlIGtleSwgdHlw
ZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUgdmFsdWUpCitpbmxpbmUgdm9pZCBET01NYXBBZGFw
dGVyOjpjbGVhcigpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8qIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgYmFja2luZ01hcCgp
LT5zZXQobGV4aWNhbEdsb2JhbE9iamVjdCwKLSAgICAgICAgdG9KUzxLZXk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBLZXk6OlBh
cmFtZXRlclR5cGU+KGtleSkpLAotICAgICAgICB0b0pTPFZhbHVlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgVmFsdWU6OlBhcmFt
ZXRlclR5cGU+KHZhbHVlKSkpOworICAgIGNsZWFyQmFja2luZ01hcChtX2xleGljYWxHbG9iYWxP
YmplY3QsIG1fYmFja2luZ01hcCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgc3luY2hyb25pemVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5s
aW5lIEpTQzo6SlNPYmplY3QmIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
LSAgICBhdXRvIGJhY2tpbmdNYXAgPSBtYXBMaWtlLndyYXBwZWQoKS5iYWNraW5nTWFwKCk7Ci0g
ICAgaWYgKGJhY2tpbmdNYXApIHsKLSAgICAgICAgQVNTRVJUKGJhY2tpbmdNYXAtPmJhY2tpbmdN
YXAoKSk7Ci0gICAgICAgIGluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBtYXBMaWtlLCAqYmFja2luZ01hcC0+YmFja2luZ01hcCgpKTsKLSAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8gcGFpciA9IGdldEJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgbWFwTGlrZSk7CisgICAgaWYgKHBhaXIuZmlyc3QpIHsKKyAgICAgICAgRE9NTWFwQWRh
cHRlciBhZGFwdGVyIHsgbGV4aWNhbEdsb2JhbE9iamVjdCwgcGFpci5zZWNvbmQuZ2V0KCkgfTsK
KyAgICAgICAgbWFwTGlrZS53cmFwcGVkKCkuaW5pdGlhbGl6ZU1hcExpa2UoYWRhcHRlcik7CiAg
ICAgfQotICAgIGF1dG8mIG1hcCA9IGNyZWF0ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKLSAgICBtYXBMaWtlLndyYXBwZWQoKS5zeW5jaHJv
bml6ZUJhY2tpbmdNYXAoRE9NTWFwTGlrZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgbWFwKSk7Cisg
ICAgcmV0dXJuIHBhaXIuc2Vjb25kLmdldCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFNpemVUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzJiBtYXBMaWtl
KQogewogICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6ZSk7CisgICAgcmV0dXJu
IGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSks
IHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxG
cmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewogICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNh
bGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtlLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpKTsKKyAg
ICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxP
YmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVz
UHVibGljTmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRLZXlzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJD
bGFzcyYgbWFwTGlrZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZvcndhcmRG
dW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBn
ZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3
YXJkVmFsdWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
ICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
dmFsdWVzUHVibGljTmFtZSgpKTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVC
YWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZENsZWFyVG9NYXBM
aWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKICAgICBtYXBMaWtlLndy
YXBwZWQoKS5jbGVhcigpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5n
TWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCkucHJvcGVydHlOYW1lcy0+Y2xlYXIpOworICAgIEpTQzo6Vk0m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGZvcndh
cmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtl
KSwgdm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3MsIHR5cGVuYW1lIENhbGxiYWNrPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRG
b3JFYWNoVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgQ2FsbGJh
Y2smJikKIHsKLSAgICByZXR1cm4gZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNraW5nTWFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgKm1hcExpa2UuZ2xvYmFsT2JqZWN0KCksIG1hcExp
a2UpOworICAgIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IG1hcExpa2UpOworICAgIHJldHVybiBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoKkpT
Qzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxs
RnJhbWUsIG1hcExpa2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5
cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2Uo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewogICAgIEpT
Qzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJu
IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQdWJs
aWNOYW1lKCkpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmdldFB1YmxpY05hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1Rv
TWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYpCiB7
CiAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
Lmhhc1B1YmxpY05hbWUoKSk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuaGFzUHVibGljTmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
V3JhcHBlckNsYXNzLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFNldFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UsIEtleVR5cGUmJiBrZXksIFZhbHVlVHlwZSYmIHZhbHVlKQogeworICAgIEpT
Qzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgbWFwTGlr
ZS53cmFwcGVkKCkuc2V0RnJvbU1hcExpa2Uoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0
ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7Ci0gICAgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRv
QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLnByb3BlcnR5TmFtZXMtPnNldCk7CisgICAgZm9y
d2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExp
a2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwogICAgIHJldHVybiAmbWFwTGlrZTsKIH0KIApA
QCAtMTQ1LDcgKzE1MiwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVu
YW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmREZQogewogICAgIGF1dG8g
aXNEZWxldGVkID0gbWFwTGlrZS53cmFwcGVkKCkucmVtb3ZlKHN0ZDo6Zm9yd2FyZDxJdGVtVHlw
ZT4oaXRlbSkpOwogICAgIFVOVVNFRF9QQVJBTShpc0RlbGV0ZWQpOwotICAgIGF1dG8gcmVzdWx0
ID0gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLnByb3Bl
cnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQpOworCisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRGdW5jdGlv
bkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJ
bml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJv
cGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCk7CisKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmFzQm9vbGVhbigpID09IGlzRGVsZXRlZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3BwCmluZGV4IGYxZmFi
MzFmYjQ2MWE0MjFjMDdiMWYwZjc1NTI1MDQ0YzE4ZTc2MTYuLjFkZTdhODFmNmU3OTZjNmJhNTM0
MTgwODdlOWNkNjFiYjZjZTU5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TZXRMaWtlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1NldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmgKaW5kZXggYzgxZWExZDJjNzRk
NzQ0NWI3MDU2N2Y5NGIyMzcwN2I3MmZhMTM0NS4uMTE4OGIzNjZmMGYyMTAzNzQ4ZGMxN2I3ZTg4
NzhjYTM0YmM2NjhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TZXRMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtl
LmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0NvbW1vbklkZW50aWZpZXJzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGQ1Nzg2MjYzZTJmMTIxY2Rh
NzYyODUwMzc4MDQ3ZjEyNzM3Y2Q5YzEuLjJmYzQ2NmU3N2I3ZjU2MWE1ZWY1OTA1NmNjMWU0MmY0
YjMxZmIyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCkBAIC00NDA0LDEwICs0NDA0LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbCwganNVbmRlZmluZWQoKSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pO1xuIik7CiAgICAgfQog
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPm1hcExpa2UpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgc3luY2hyb25pemVCYWNraW5nTWFwKCpnbG9iYWxPYmplY3QoKSwgKmdsb2JhbE9i
amVjdCgpLCAqdGhpcyk7XG4iKTsKLSAgICB9Ci0KICAgICAjIFN1cHBvcnQgZm9yIFJ1bnRpbWVF
bmFibGVkIGF0dHJpYnV0ZXMgb24gaW5zdGFuY2VzLgogICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAgICBuZXh0IHVubGVzcyBOZWVk
c1J1bnRpbWVDaGVjaygkaW50ZXJmYWNlLCAkYXR0cmlidXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKaW5kZXggZDEw
ZDA4OGEzMThlNWQzNmY5Yzg4MWE4ZmU4NDQwMjEyYTI2ZDgwMi4uZDY4ZGVhZjhmM2Q0NWRiYjk1
MmZhNTk2MTAyYWFhNzFlNWM1ODNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKQEAgLTE0NCw3ICsxNDQsNiBAQCB2
b2lkIEpTTWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogCiAgICAgc3RhdGljX2Fzc2Vy
dCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgTWFwTGlrZT46OnZhbHVlLCAiSW50
ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1w
bGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAgICBz
eW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCksICp0
aGlzKTsKIH0KIAogSlNPYmplY3QqIEpTTWFwTGlrZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3Bw
CmluZGV4IDNlNjVkZDczZDkyZDc3ZTYzZjAxZWNjZjBiNTlhNmM2MzM3N2M5YzkuLmU4YTBkYTM1
MDNmNjk1ODBhMzhiMjcxMGM0YTIwZDIyMDQwZmJlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtl
LmNwcApAQCAtMTM4LDcgKzEzOCw2IEBAIHZvaWQgSlNSZWFkT25seU1hcExpa2U6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIAogICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3Rp
dmVET01PYmplY3QsIFJlYWRPbmx5TWFwTGlrZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBt
YXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xh
c3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAgICBzeW5jaHJvbml6ZUJhY2tp
bmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCksICp0aGlzKTsKIH0KIAogSlNP
YmplY3QqIEpTUmVhZE9ubHlNYXBMaWtlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzTWFwTGlrZS5jcHAKaW5kZXggZjFmOGUzZDIwMDJiYzFkNjJkNDU3YWU1MjUxYjVkZTc5ZTA2
MjA0OC4uNDNkZmVkNDI5ZGE3ZjUzMWNhMjQwODJiNTMwZDkwNjE0YTQ5OWE3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuY3BwCkBAIC0yNyw5ICsyNyw4IEBA
CiAjaW5jbHVkZSAiSW50ZXJuYWxzTWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwxMSArMzcsMTAgQEAgSW50ZXJuYWxzTWFwTGlr
ZTo6SW50ZXJuYWxzTWFwTGlrZSgpCiAgICAgbV92YWx1ZXMuYWRkKCJpbml0IiwgMCk7CiB9CiAK
LXZvaWQgSW50ZXJuYWxzTWFwTGlrZTo6c3luY2hyb25pemVCYWNraW5nTWFwKFJlZjxET01NYXBM
aWtlPiYmIG1hcExpa2UpCit2b2lkIEludGVybmFsc01hcExpa2U6OmluaXRpYWxpemVNYXBMaWtl
KERPTU1hcEFkYXB0ZXImIG1hcCkKIHsKLSAgICBtX21hcExpa2UgPSBXVEZNb3ZlKG1hcExpa2Up
OwogICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3ZhbHVlcykKLSAgICAgICAgbV9tYXBMaWtl
LT5zZXQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZExvbmc+KGtleVZhbHVlLmtleSwga2V5VmFs
dWUudmFsdWUpOworICAgICAgICBtYXAuc2V0PElETERPTVN0cmluZywgSURMVW5zaWduZWRMb25n
PihrZXlWYWx1ZS5rZXksIGtleVZhbHVlLnZhbHVlKTsKIH0KIAogdm9pZCBJbnRlcm5hbHNNYXBM
aWtlOjpzZXRGcm9tTWFwTGlrZShTdHJpbmcmJiBrZXksIHVuc2lnbmVkIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmggYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaAppbmRleCBiNzMzZjVjMzJlYmY3YTgz
NjYxYTZhNDIwYjU4M2ZkZDI0NDcyNDExLi4xMTcyZWU0NzZlY2U5MzgwNmZhOTFhZDc4ZmI0Njlm
YWQyNzJmMzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01h
cExpa2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaApA
QCAtMjUsMzAgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSlNET01NYXBM
aWtlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwog
Y2xhc3MgSW50ZXJuYWxzTWFwTGlrZSA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVybmFsc01hcExp
a2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEludGVybmFsc01hcExpa2U+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50ZXJuYWxzTWFwTGlrZSk7IH0KIAorICAgIHZvaWQg
aW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYpOwogICAgIHZvaWQgc2V0RnJvbU1hcExp
a2UoU3RyaW5nJiYsIHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCByZW1v
dmUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChSZWY8
RE9NTWFwTGlrZT4mJik7Ci0gICAgRE9NTWFwTGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1f
bWFwTGlrZS5nZXQoKTsgfQotCiAgICAgVmVjdG9yPFN0cmluZz4gaW5zcGVjdEtleXMoKSBjb25z
dDsKICAgICBWZWN0b3I8dW5zaWduZWQ+IGluc3BlY3RWYWx1ZXMoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBJbnRlcm5hbHNNYXBMaWtlKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVk
PiBtX3ZhbHVlczsKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4gbV9tYXBMaWtlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385121</attachid>
            <date>2019-12-08 08:05:40 -0800</date>
            <delta_ts>2019-12-08 11:10:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204879-20191208170537.patch</filename>
            <type>text/plain</type>
            <size>45410</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEzODI2MmYxMzcxNTJh
NTQ1ZDQ1ZWM1MmY2MzE4OTRiZjQ3NzYwYS4uYTlhMjI1OTY4ODQ0YTMzMGQzOWIzMzljZWQ3ZTFj
YWJmZWQ1YjRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE5LTEyLTA4ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBEbyBub3QgdXNlIERPTUd1
YXJkZWQgZm9yIG1hcGxpa2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDg3OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIFVwZGF0ZSBtYXBsaWtlIGFjY29yZGluZyBzZXRsaWtlIG1vZGVsIHdoZXJlIHdlIHN1
cHBvcnQgc3luY2luZyBhdCBjcmVhdGlvbiBvZiB0aGUgSlMgd3JhcHBlcgorICAgICAgICBhbmQg
c3luY2luZyB3aGVuZXZlciBzZXRsaWtlL21hcGxpa2UgbWV0aG9kcyBhcmUgY2FsbGVkLgorICAg
ICAgICBSZW1vdmluZyBET01HdWFyZGVkT2JqZWN0IG1ha2VzIGltcGxlbWVudGF0aW9uIG1vcmUg
bGlnaHR3ZWlnaHQsIHRoZXJlIGlzIGxlc3MgdGhpbmdzIHRvIGltcGxlbWVudCBvbiBET00gc2lk
ZQorICAgICAgICBhbmQgaXQgYWxsb3dzIGNvbGxlY3RpbmcgdGhlIHByaXZhdGUgbWFwIHRvIGZy
ZWUgbWVtb3J5IGlmIG5lZWRlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
IGFuZCByZWJhc2VkIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL2hpZ2hsaWdo
dC9IaWdobGlnaHRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0TWFwOjppbml0
aWFsaXplTWFwTGlrZSk6CisgICAgICAgICogTW9kdWxlcy9oaWdobGlnaHQvSGlnaGxpZ2h0TWFw
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OnN5bmNocm9uaXplQmFja2luZ01h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRNYXA6OmJhY2tpbmdNYXAp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UlRDU3RhdHNSZXBvcnQ6OmluaXRpYWxpemVNYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpSVENTdGF0c1JlcG9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpSVENTdGF0c1JlcG9ydDo6c3luY2hyb25pemVCYWNraW5nTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjpiYWNraW5nTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJUQ1N0YXRzUmVwb3J0OjphZGRTdGF0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDTWVkaWFFbmRwb2ludC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENNZWRpYUVuZHBvaW50OjpjcmVhdGVTdGF0
c0NvbGxlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGli
V2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3I6On5MaWJXZWJSVENTdGF0c0NvbGxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojppbml0aWFsaXplUlRDU3RhdHNSZXBvcnRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVsaXZlcmVkKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyQmFja2luZ01hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRUb0JhY2tpbmdNYXApOgorICAgICAgICAoV2ViQ29yZTo6Zm9y
d2FyZEF0dHJpYnV0ZUdldHRlclRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRG
b3JFYWNoQ2FsbFRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplQmFj
a2luZ01hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCYWNraW5nTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTU1hcEFkYXB0ZXI6OkRPTU1hcEFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NTWFwQWRhcHRlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1hcEFkYXB0ZXI6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRTaXplVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRL
ZXlzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRWYWx1ZXNUb01hcExpa2Up
OgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZENsZWFyVG9NYXBMaWtlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndh
cmRHZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEhhc1RvTWFwTGlrZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkU2V0VG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZvcndhcmREZWxldGVUb01hcExpa2UpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1hcExpa2U6OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzeW5jaHJvbml6ZUJhY2tpbmdNYXApOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NU2V0TGlrZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFwTGlrZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5
TWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlYWRPbmx5TWFwTGlrZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjppbml0aWFsaXplTWFwTGlrZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHNNYXBMaWtlOjpzeW5jaHJvbml6ZUJhY2tpbmdNYXApOiBE
ZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzTWFwTGlrZTo6YmFja2luZ01hcCk6IERlbGV0ZWQuCisKIDIwMTkt
MTItMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNd
W0ludGVncmF0aW9uXSBDb2xsZWN0IG92ZXJmbG93IGZyb20gbGluZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuY3BwCmluZGV4IGIyNDhlZjdk
MmU1NTU3OTRkNGQ3M2NkOTdhOTczN2FmOGI0ZjEzMDMuLjQzM2NkNmVkODJlMGMyYWZlY2YxOGYy
NTI2NmFiOTg3YmE4MzlhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGln
aGxpZ2h0L0hpZ2hsaWdodE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9oaWdo
bGlnaHQvSGlnaGxpZ2h0TWFwLmNwcApAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhpZ2hsaWdodE1hcC5oIgogCisjaW5jbHVkZSAiSlNET01NYXBMaWtl
LmgiCisjaW5jbHVkZSAiSlNIaWdobGlnaHRSYW5nZUdyb3VwLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBIaWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3Nz
U3R5bGUsIEhpZ2hsaWdodFJhbmdlR3JvdXAgJmdyb3VwKQpAQCAtMzQsNiArMzcsMTIgQEAgdm9p
ZCBIaWdobGlnaHRNYXA6OmFkZEhpZ2hsaWdodEdyb3VwKFN0cmluZyYgY3NzU3R5bGUsIEhpZ2hs
aWdodFJhbmdlR3JvdXAgJmdyb3UKICAgICBVTlVTRURfUEFSQU0oZ3JvdXApOwogfQogCit2b2lk
IEhpZ2hsaWdodE1hcDo6aW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYgbWFwKQorewor
ICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX21hcCkKKyAgICAgICAgbWFwLnNldDxJRExET01T
dHJpbmcsIElETEludGVyZmFjZTxIaWdobGlnaHRSYW5nZUdyb3VwPj4oa2V5VmFsdWUua2V5LCBr
ZXlWYWx1ZS52YWx1ZSk7Cit9CisKIHZvaWQgSGlnaGxpZ2h0TWFwOjpzZXRGcm9tTWFwTGlrZShT
dHJpbmcmJiwgUmVmPEhpZ2hsaWdodFJhbmdlR3JvdXA+JiYpCiB7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2hpZ2hsaWdodC9IaWdobGlnaHRNYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0L0hpZ2hsaWdodE1hcC5oCmluZGV4IDY0MWUyNGJkODBk
NzVmYjI1MTE4NjI5YjIyYzBjNDRjZjU2OTgxNGIuLjY5YTcwYjAwYzhkNmY0Yzg0NGVmNzk4ZmUz
NzgzMGMzMjQ5YmJjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxp
Z2h0L0hpZ2hsaWdodE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaGlnaGxpZ2h0
L0hpZ2hsaWdodE1hcC5oCkBAIC0yNiwyMyArMjYsMjEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiSGlnaGxpZ2h0UmFuZ2VHcm91cC5oIgotI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01NYXBBZGFwdGVyOwogY2xhc3MgRE9NU3Ry
aW5nOwogY2xhc3MgSGlnaGxpZ2h0UmFuZ2VHcm91cDsKIAogY2xhc3MgSGlnaGxpZ2h0TWFwIDog
cHVibGljIFJlZkNvdW50ZWQ8SGlnaGxpZ2h0TWFwPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxIaWdobGlnaHRNYXA+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0
TWFwKTsgfQotICAgIAorCiAgICAgdm9pZCBhZGRIaWdobGlnaHRHcm91cChTdHJpbmcmLCBIaWdo
bGlnaHRSYW5nZUdyb3VwJik7Ci0gICAgCi0gICAgdm9pZCBzeW5jaHJvbml6ZUJhY2tpbmdNYXAo
UmVmPERPTU1hcExpa2U+JiYgbWFwTGlrZSkgeyBtX21hcExpa2UgPSBXVEZNb3ZlKG1hcExpa2Up
OyB9Ci0gICAgRE9NTWFwTGlrZSogYmFja2luZ01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQo
KTsgfQorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYpOwogCiAgICAg
Ly8gQmluZGluZ3Mgc3VwcG9ydC4KICAgICBTdHJpbmcgbmFtZWRJdGVtKGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpIGNvbnN0OwpAQCAtNTUsOCArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRl
OgogICAgIEhpZ2hsaWdodE1hcCgpID0gZGVmYXVsdDsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPEhpZ2hsaWdodFJhbmdlR3JvdXA+PiBtX21hcDsKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4g
bV9tYXBMaWtlOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8SGlnaGxpZ2h0UmFuZ2VHcm91cD4+
IG1fbWFwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTdGF0c1JlcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5oCmluZGV4IGE4YmU2MDVkMzlkODBhMjI0YzYzMTQ1NmQzNmQy
OGVlY2NhYmE1MGYuLmFkNzMyMTlhMDBlMWY5MmE0NWRmNTBhNDFmOTg2M2RjN2Q1OGI4NGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBv
cnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVw
b3J0LmgKQEAgLTI1LDE5ICsyNSwxOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkpT
RE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgUlRDU3Rh
dHNSZXBvcnQgOiBwdWJsaWMgUmVmQ291bnRlZDxSVENTdGF0c1JlcG9ydD4gewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8UlRDU3RhdHNSZXBvcnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUlRDU3RhdHNSZXBvcnQpOyB9Ci0KLSAgICB2b2lkIHN5bmNocm9uaXplQmFja2luZ01h
cChSZWY8RE9NTWFwTGlrZT4mJiBtYXBMaWtlKSB7IG1fbWFwTGlrZSA9IFdURk1vdmUobWFwTGlr
ZSk7IH0KLSAgICBET01NYXBMaWtlKiBiYWNraW5nTWFwKCkgeyByZXR1cm4gbV9tYXBMaWtlLmdl
dCgpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZT4gdm9pZCBhZGRTdGF0cyh0eXBl
bmFtZSBWYWx1ZTo6UGFyYW1ldGVyVHlwZSYmIHZhbHVlKSB7IG1fbWFwTGlrZS0+c2V0PElETERP
TVN0cmluZywgVmFsdWU+KHZhbHVlLmlkLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgVmFsdWU6OlBh
cmFtZXRlclR5cGU+KHZhbHVlKSk7IH0KKyAgICB1c2luZyBNYXBJbml0aWFsaXplciA9IEZ1bmN0
aW9uPHZvaWQoRE9NTWFwQWRhcHRlciYpPjsKKyAgICBzdGF0aWMgUmVmPFJUQ1N0YXRzUmVwb3J0
PiBjcmVhdGUoTWFwSW5pdGlhbGl6ZXImJiBtYXBJbml0aWFsaXplcikgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSVENTdGF0c1JlcG9ydChXVEZNb3ZlKG1hcEluaXRpYWxpemVyKSkpOyB9CiAKKyAg
ICB2b2lkIGluaXRpYWxpemVNYXBMaWtlKERPTU1hcEFkYXB0ZXImIGFkYXB0ZXIpIHsgbV9tYXBJ
bml0aWFsaXplcihhZGFwdGVyKTsgfQogCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAg
Q29kZWMsCkBAIC0yMzYsMTAgKzIzNSwxNCBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToK
LSAgICBSVENTdGF0c1JlcG9ydCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBSVENTdGF0c1Jl
cG9ydChNYXBJbml0aWFsaXplciYmKTsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8RE9NTWFwTGlr
ZT4gbV9tYXBMaWtlOworICAgIE1hcEluaXRpYWxpemVyIG1fbWFwSW5pdGlhbGl6ZXI7CiB9Owog
CitpbmxpbmUgUlRDU3RhdHNSZXBvcnQ6OlJUQ1N0YXRzUmVwb3J0KE1hcEluaXRpYWxpemVyJiYg
bWFwSW5pdGlhbGl6ZXIpCisgICAgOiBtX21hcEluaXRpYWxpemVyKFdURk1vdmUobWFwSW5pdGlh
bGl6ZXIpKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENNZWRpYUVu
ZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRj
L0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDM4ODczMWZhNjU3OWFhMmQ1YzEwZTNl
YmJjMWIwNDU5YTA0ZWI5NjUuLjVkZWYxYzFhMzFjMjAyMzYzYWZmYjFmZWUxMjhmYTc3MDkxYTU0
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ01lZGlhRW5kcG9pbnQuY3BwCkBAIC0y
ODYsMTkgKzI4NiwxMiBAQCB2b2lkIExpYldlYlJUQ01lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5z
d2VyKCkKIAogcnRjOjpzY29wZWRfcmVmcHRyPExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPiBMaWJX
ZWJSVENNZWRpYUVuZHBvaW50OjpjcmVhdGVTdGF0c0NvbGxlY3RvcihSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmIHByb21pc2UpCiB7Ci0gICAgcmV0dXJuIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpj
cmVhdGUoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldKCkgbXV0YWJsZSAtPiBSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+IHsKKyAgICByZXR1
cm4gTGliV2ViUlRDU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZShbcHJvbWlzZSA9IFdURk1vdmUocHJv
bWlzZSksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oYXV0byYmIHJlcG9ydCkgbXV0
YWJsZSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIGF1dG8gcmVwb3J0ID0gUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZSgpOwotCi0gICAgICAg
IHByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0LmNv
cHlSZWYoKSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSB8fCAhcmVw
b3J0KQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIFRoZSBwcm9taXNlIHJlc29s
dXRpb24gbWlnaHQgZmFpbCBpbiB3aGljaCBjYXNlIG5vIGJhY2tpbmcgbWFwIHdpbGwgYmUgY3Jl
YXRlZC4KLSAgICAgICAgaWYgKCFyZXBvcnQtPmJhY2tpbmdNYXAoKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gcmVwb3J0OworICAgICAgICBwcm9taXNlLT5y
ZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xs
ZWN0b3IuY3BwCmluZGV4IDYyYWQ4MjM4MzM0NDM1MTk2MWQwOWJjZmIzMzE5NjY4MDY2OTM0ZTku
LjhhNjdjMDc5ZWVhMGRhMzA0MGEzZTNjMDVkYmExNWVmZGI5ZmY4Y2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRz
Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIFVTRShMSUJXRUJSVEMpCiAKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRl
ICJKU1JUQ1N0YXRzUmVwb3J0LmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNDQsNyArNDUsNyBAQCBMaWJXZWJSVENTdGF0c0NvbGxl
Y3Rvcjo6fkxpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y2FsbE9uTWFpblRocmVhZChbY2FsbGJhY2sgPSBXVEZNb3ZlKG1fY2FsbGJhY2spXSgpIG11dGFi
bGUgewotICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKICAg
ICB9KTsKIH0KIApAQCAtMzgwLDU4ICszODEsNjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbGxS
VENQZWVyQ29ubmVjdGlvblN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXQK
ICAgICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzQ2xvc2VkID0gKnJ0Y1N0YXRzLmRhdGFfY2hhbm5l
bHNfY2xvc2VkOwogfQogCi12b2lkIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yOjpPblN0YXRzRGVs
aXZlcmVkKGNvbnN0IHJ0Yzo6c2NvcGVkX3JlZnB0cjxjb25zdCB3ZWJydGM6OlJUQ1N0YXRzUmVw
b3J0PiYgcnRjUmVwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpemVSVENTdGF0c1Jl
cG9ydEJhY2tpbmdNYXAoRE9NTWFwQWRhcHRlciYgcmVwb3J0LCBjb25zdCB3ZWJydGM6OlJUQ1N0
YXRzUmVwb3J0JiBydGNSZXBvcnQpCiB7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJXZWJSVENTdGF0c0NvbGxlY3Rvcj4odGhpcyks
IHJ0Y1JlcG9ydF0gewotICAgICAgICBhdXRvIHJlcG9ydCA9IHByb3RlY3RlZFRoaXMtPm1fY2Fs
bGJhY2soKTsKLSAgICAgICAgaWYgKCFyZXBvcnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgQVNTRVJUKHJlcG9ydC0+YmFja2luZ01hcCgpKTsKLQotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHJ0Y1N0YXRzIDogKnJ0Y1JlcG9ydCkgewotICAgICAgICAgICAgaWYgKHJ0Y1N0YXRz
LnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0luYm91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKLSAg
ICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRz
OwotICAgICAgICAgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRp
Y19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDSW5ib3VuZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMp
KTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3Rh
dHNSZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDT3V0Ym91bmRS
VFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6
T3V0Ym91bmRSVFBTdHJlYW1TdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsT3V0Ym91
bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENPdXRi
b3VuZFJUUFN0cmVhbVN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQt
PmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUlRQU3RyZWFt
U3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRz
LnR5cGUoKSA9PSB3ZWJydGM6OlJUQ01lZGlhU3RyZWFtVHJhY2tTdGF0czo6a1R5cGUpIHsKLSAg
ICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6TWVkaWFTdHJlYW1UcmFja1N0YXRzIHN0YXRz
OwotICAgICAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3RhdHMsIHN0
YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4ocnRjU3Rh
dHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRD
U3RhdHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDRGF0YUNo
YW5uZWxTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6RGF0
YUNoYW5uZWxTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDRGF0YUNoYW5uZWxT
dGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENEYXRhQ2hhbm5lbFN0YXRz
Jj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rp
b25hcnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0lj
ZUNhbmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1Jl
cG9ydDo6SWNlQ2FuZGlkYXRlUGFpclN0YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxS
VENJY2VDYW5kaWRhdGVQYWlyU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6
UlRDSWNlQ2FuZGlkYXRlUGFpclN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICBy
ZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0
ZVBhaXJTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocnRj
U3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUmVtb3RlSWNlQ2FuZGlkYXRlU3RhdHM6OmtUeXBl
IHx8IHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0xvY2FsSWNlQ2FuZGlkYXRlU3RhdHM6
OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkljZUNhbmRpZGF0ZVN0
YXRzIHN0YXRzOwotICAgICAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRhdGVTdGF0cyhzdGF0
cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVTdGF0cyY+KHJ0Y1N0
YXRzKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJU
Q1N0YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVTdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDQ2VydGlmaWNh
dGVTdGF0czo6a1R5cGUpIHsKLSAgICAgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q2VydGlm
aWNhdGVTdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICBmaWxsUlRDQ2VydGlmaWNhdGVTdGF0
cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENDZXJ0aWZpY2F0ZVN0YXRzJj4o
cnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICByZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25h
cnk8UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+PihXVEZNb3ZlKHN0YXRzKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ0NvZGVj
U3RhdHM6OmtUeXBlKSB7Ci0gICAgICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3Rh
dHMgc3RhdHM7Ci0gICAgICAgICAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0YXRp
Y19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDQ29kZWNTdGF0cyY+KHJ0Y1N0YXRzKSk7Ci0gICAgICAg
ICAgICAgICAgcmVwb3J0LT5hZGRTdGF0czxJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpD
b2RlY1N0YXRzPj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNT
dGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENUcmFuc3BvcnRTdGF0czo6a1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMgc3RhdHM7Ci0gICAgICAg
ICAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3
ZWJydGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsKLSAgICAgICAgICAgICAgICBy
ZXBvcnQtPmFkZFN0YXRzPElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0
YXRzPj4oV1RGTW92ZShzdGF0cykpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50
eXBlKCkgPT0gd2VicnRjOjpSVENQZWVyQ29ubmVjdGlvblN0YXRzOjprVHlwZSkgewotICAgICAg
ICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXRzIHN0YXRzOwotICAg
ICAgICAgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdGF0aWNfY2Fz
dDxjb25zdCB3ZWJydGM6OlJUQ1BlZXJDb25uZWN0aW9uU3RhdHMmPihydGNTdGF0cykpOwotICAg
ICAgICAgICAgICAgIHJlcG9ydC0+YWRkU3RhdHM8SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KFdURk1vdmUoc3RhdHMpKTsKLSAgICAgICAgICAgIH0K
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHJ0Y1N0YXRzIDogcnRjUmVwb3J0KSB7CisgICAgICAgIGlm
IChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHM6OmtU
eXBlKSB7CisgICAgICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJUUFN0cmVhbVN0YXRz
IHN0YXRzOworICAgICAgICAgICAgZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3Rh
dGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJbmJvdW5kUlRQU3RyZWFtU3RhdHMmPihydGNTdGF0
cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSVFBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3Zl
KHN0YXRzKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6
UlRDT3V0Ym91bmRSVFBTdHJlYW1TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRz
UmVwb3J0OjpPdXRib3VuZFJUUFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbE91
dGJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRD
T3V0Ym91bmRSVFBTdHJlYW1TdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRS
VFBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRz
OjprVHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok1lZGlhU3RyZWFtVHJhY2tT
dGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENNZWRpYVN0cmVhbVRyYWNrU3RhdHMoc3Rh
dHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzJj4o
cnRjU3RhdHMpKTsKKyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0
aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpNZWRpYVN0cmVhbVRyYWNrU3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3
ZWJydGM6OlJUQ0RhdGFDaGFubmVsU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENTdGF0
c1JlcG9ydDo6RGF0YUNoYW5uZWxTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENEYXRh
Q2hhbm5lbFN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0RhdGFDaGFu
bmVsU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJp
bmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkRhdGFDaGFubmVsU3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUo
KSA9PSB3ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0czo6a1R5cGUpIHsKKyAgICAgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpJY2VDYW5kaWRhdGVQYWlyU3RhdHMgc3RhdHM7CisgICAgICAg
ICAgICBmaWxsUlRDSWNlQ2FuZGlkYXRlUGFpclN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25z
dCB3ZWJydGM6OlJUQ0ljZUNhbmRpZGF0ZVBhaXJTdGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6SWNlQ2FuZGlkYXRlUGFpclN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChydGNTdGF0cy50eXBlKCkgPT0gd2VicnRjOjpSVENSZW1vdGVJY2VD
YW5kaWRhdGVTdGF0czo6a1R5cGUgfHwgcnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDTG9j
YWxJY2VDYW5kaWRhdGVTdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0
OjpJY2VDYW5kaWRhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENJY2VDYW5kaWRh
dGVTdGF0cyhzdGF0cywgc3RhdGljX2Nhc3Q8Y29uc3Qgd2VicnRjOjpSVENJY2VDYW5kaWRhdGVT
dGF0cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywg
SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SWNlQ2FuZGlkYXRlU3RhdHM+PihzdGF0cy5p
ZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9
PSB3ZWJydGM6OlJUQ0NlcnRpZmljYXRlU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENT
dGF0c1JlcG9ydDo6Q2VydGlmaWNhdGVTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVEND
ZXJ0aWZpY2F0ZVN0YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NlcnRp
ZmljYXRlU3RhdHMmPihydGNTdGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01T
dHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkNlcnRpZmljYXRlU3RhdHM+Pihz
dGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5
cGUoKSA9PSB3ZWJydGM6OlJUQ0NvZGVjU3RhdHM6OmtUeXBlKSB7CisgICAgICAgICAgICBSVENT
dGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgICAgIGZpbGxSVENDb2RlY1N0
YXRzKHN0YXRzLCBzdGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ0NvZGVjU3RhdHMmPihydGNT
dGF0cykpOworICAgICAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25h
cnk8UlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykp
OworICAgICAgICB9IGVsc2UgaWYgKHJ0Y1N0YXRzLnR5cGUoKSA9PSB3ZWJydGM6OlJUQ1RyYW5z
cG9ydFN0YXRzOjprVHlwZSkgeworICAgICAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9y
dFN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBz
dGF0aWNfY2FzdDxjb25zdCB3ZWJydGM6OlJUQ1RyYW5zcG9ydFN0YXRzJj4ocnRjU3RhdHMpKTsK
KyAgICAgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0
YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocnRjU3RhdHMudHlwZSgpID09IHdlYnJ0Yzo6UlRDUGVlckNvbm5l
Y3Rpb25TdGF0czo6a1R5cGUpIHsKKyAgICAgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29u
bmVjdGlvblN0YXRzIHN0YXRzOworICAgICAgICAgICAgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3Rh
dHMoc3RhdHMsIHN0YXRpY19jYXN0PGNvbnN0IHdlYnJ0Yzo6UlRDUGVlckNvbm5lY3Rpb25TdGF0
cyY+KHJ0Y1N0YXRzKSk7CisgICAgICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURM
RGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlk
LCBXVEZNb3ZlKHN0YXRzKSk7CiAgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGliV2ViUlRD
U3RhdHNDb2xsZWN0b3I6Ok9uU3RhdHNEZWxpdmVyZWQoY29uc3QgcnRjOjpzY29wZWRfcmVmcHRy
PGNvbnN0IHdlYnJ0Yzo6UlRDU3RhdHNSZXBvcnQ+JiBydGNSZXBvcnQpCit7CisgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHJ0Yzo6c2NvcGVkX3JlZnB0cjxMaWJX
ZWJSVENTdGF0c0NvbGxlY3Rvcj4odGhpcyksIHJ0Y1JlcG9ydF0oKSB7CisgICAgICAgIG1fY2Fs
bGJhY2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbcnRjUmVwb3J0XShhdXRvJiBtYXBBZGFwdGVy
KSB7CisgICAgICAgICAgICBpZiAocnRjUmVwb3J0KQorICAgICAgICAgICAgICAgIGluaXRpYWxp
emVSVENTdGF0c1JlcG9ydEJhY2tpbmdNYXAobWFwQWRhcHRlciwgKnJ0Y1JlcG9ydCk7CisgICAg
ICAgIH0pKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmgKaW5kZXggMzJhZDg3ZjQ4OTg1OWVmYjU1NDA3YjMzMTExZTJkMTdkM2Q1NTQ0OC4u
ZjJiNDJjYTA1YmI2ZWIzYTZjMzMyYmQ2N2U1ZTIxM2YzMmFmODkwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDU3RhdHND
b2xsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oCkBAIC0zOCwxMSArMzgsMTQgQEAgQUxMT1df
VU5VU0VEX1BBUkFNRVRFUlNfRU5ECiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9N
TWFwQWRhcHRlcjsKIGNsYXNzIFJUQ1N0YXRzUmVwb3J0OwogCit2b2lkIGluaXRpYWxpemVSVENT
dGF0c1JlcG9ydEJhY2tpbmdNYXAoUlRDU3RhdHNSZXBvcnQmKTsKKwogY2xhc3MgTGliV2ViUlRD
U3RhdHNDb2xsZWN0b3IgOiBwdWJsaWMgd2VicnRjOjpSVENTdGF0c0NvbGxlY3RvckNhbGxiYWNr
IHsKIHB1YmxpYzoKLSAgICB1c2luZyBDb2xsZWN0b3JDYWxsYmFjayA9IENvbXBsZXRpb25IYW5k
bGVyPFJlZlB0cjxSVENTdGF0c1JlcG9ydD4oKT47CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+Owog
ICAgIHN0YXRpYyBydGM6OnNjb3BlZF9yZWZwdHI8TGliV2ViUlRDU3RhdHNDb2xsZWN0b3I+IGNy
ZWF0ZShDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBuZXcgcnRjOjpSZWZD
b3VudGVkT2JqZWN0PExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yPihXVEZNb3ZlKGNhbGxiYWNrKSk7
IH0KIAogICAgIGV4cGxpY2l0IExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yKENvbGxlY3RvckNhbGxi
YWNrJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBM
aWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAKaW5k
ZXggZjdlNjFmZWJkZTJlZWFhYzA4MTNhOWRlNWUzZDYyYTI1ZDUzZjAzYS4uZWIwOWZlN2FlZjc2
YmRmYzA5YTYwNzM4NGRhZTM2MWIyODRmZWU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTU1hcExpa2UuY3BwCkBAIC0yOCw0OCArMjgsNzAgQEAKIAogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3Bl
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgaW5saW5lIEpTQzo6SlNPYmplY3QmIGdldEJhY2tpbmdNYXAoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgbWFwTGlr
ZSkKK3N0ZDo6cGFpcjxib29sLCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEpTQzo6SlNPYmplY3Q+
PiBnZXRCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6SlNPYmplY3QmIG1hcExpa2UpCiB7CiAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCk7CiAgICAgYXV0byBiYWNraW5nTWFwID0gbWFwTGlrZS5nZXQoJmxleGljYWxH
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSkt
PmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpKTsKLSAgICByZXR1cm4gKkpT
Qzo6YXNPYmplY3QoYmFja2luZ01hcCk7CisgICAgaWYgKCFiYWNraW5nTWFwLmlzVW5kZWZpbmVk
KCkpCisgICAgICAgIHJldHVybiB7IGZhbHNlLCAqSlNDOjphc09iamVjdChiYWNraW5nTWFwKSB9
OworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgYmFj
a2luZ01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0sIGxl
eGljYWxHbG9iYWxPYmplY3QubWFwU3RydWN0dXJlKCkpOworICAgIHNjb3BlLnJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOworCisgICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdN
YXBQcml2YXRlTmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICByZXR1cm4geyB0cnVlLCAqSlNDOjph
c09iamVjdChiYWNraW5nTWFwKSB9OwogfQogCi12b2lkIGluaXRpYWxpemVCYWNraW5nTWFwKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlLCBKU0M6OkpTTWFwJiBiYWNraW5nTWFw
KQordm9pZCBjbGVhckJhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpKU09iamVjdCYgYmFja2luZ01hcCkKIHsKLSAgICBtYXBMaWtlLnB1dERp
cmVjdCh2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVp
bHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZhdGVOYW1lKCksICZiYWNraW5nTWFwLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gZnVu
Y3Rpb24gPSBiYWNraW5nTWFwLmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlO
YW1lcy0+Y2xlYXIpOworCisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBhdXRvIGNh
bGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBp
ZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgSlNDOjpjYWxsKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmYmFja2lu
Z01hcCwgYXJndW1lbnRzKTsKIH0KIAotSlNDOjpKU01hcCYgY3JlYXRlQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIG1hcExpa2UpCit2b2lkIHNldFRvQmFja2lu
Z01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2Jq
ZWN0JiBiYWNraW5nTWFwLCBKU0M6OkpTVmFsdWUga2V5LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byBmdW5jdGlvbiA9IGJhY2tpbmdNYXAuZ2V0
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwogCi0gICAgQVNT
RVJUKG1hcExpa2UuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5iYWNraW5nTWFwUHJpdmF0
ZU5hbWUoKSkuaXNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBiYWNraW5nTWFwID0gSlNDOjpKU01h
cDo6Y3JlYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0Lm1hcFN0cnVj
dHVyZSgpKTsKLSAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBtYXBM
aWtlLnB1dERpcmVjdCh2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZhdGVOYW1lKCksIGJhY2tpbmdNYXAs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OwotICAgIHJldHVybiAqYmFja2luZ01hcDsKKyAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwor
ICAgIGF1dG8gY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERh
dGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKGtleSk7CisgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAg
SlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCAmYmFja2luZ01hcCwgYXJndW1lbnRzKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGZvcndhcmRB
dHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBhdHRyaWJ1dGVOYW1lKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0Jh
Y2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U09iamVjdCYgYmFja2luZ01hcCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBhdHRyaWJ1dGVOYW1l
KQogewotICAgIHJldHVybiBnZXRCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExp
a2UpLmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgYXR0cmlidXRlTmFtZSk7CisgICAgcmV0dXJu
IGJhY2tpbmdNYXAuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBhdHRyaWJ1dGVOYW1lKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFt
ZSwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBmdW5jdGlv
bk5hbWUpCitKU0M6OkpTVmFsdWUgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2Fs
bEZyYW1lLCBKU0M6OkpTT2JqZWN0JiBiYWNraW5nTWFwLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGZ1bmN0aW9uTmFtZSkKIHsKLSAgICBhdXRvJiBiYWNraW5nTWFwID0gZ2V0QmFja2luZ01hcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKLQotICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
biA9IGJhY2tpbmdNYXAuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUpOwot
ICAgIEFTU0VSVChmdW5jdGlvbik7CisgICAgYXV0byBmdW5jdGlvbiA9IGJhY2tpbmdNYXAuZ2V0
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUpOwogCiAgICAgSlNDOjpDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0
YShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIGZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgQVNT
RVJUKGNhbGxUeXBlICE9IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpOworICAgIGF1dG8gY2FsbFR5cGUg
PSBKU0M6OmdldENhbGxEYXRhKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgZnVuY3Rpb24sIGNh
bGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKKwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOwogICAgIGZvciAoc2l6ZV90IGNwdHIgPSAwOyBjcHRyIDwgY2FsbEZy
YW1lLmFyZ3VtZW50Q291bnQoKTsgKytjcHRyKQogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNh
bGxGcmFtZS51bmNoZWNrZWRBcmd1bWVudChjcHRyKSk7CkBAIC03NywyMSArOTksMjQgQEAgSlND
OjpKU1ZhbHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE8KICAgICByZXR1cm4gSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmYmFja2luZ01hcCwgYXJndW1l
bnRzKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYg
Y2FsbEZyYW1lLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0
JiBtYXBMaWtlKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcChK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1l
LCBKU0M6OkpTT2JqZWN0JiBtYXBMaWtlKQogewogICAgIGF1dG8qIGZ1bmN0aW9uID0gZ2xvYmFs
T2JqZWN0LmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLmpzRE9NQmluZGluZ0ludGVybmFscygp
Lm1fbWFwTGlrZUZvckVhY2hGdW5jdGlvbi5nZXQoKTsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwog
Ci0gICAgZ2V0QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKLQogICAg
IEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpT
Qzo6Z2V0Q2FsbERhdGEobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBmdW5jdGlvbiwgY2FsbERh
dGEpOworICAgIGF1dG8gY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKGdsb2JhbE9iamVjdC52
bSgpLCBmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBKU0M6OkNh
bGxUeXBlOjpOb25lKTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
ICAgICBmb3IgKHNpemVfdCBjcHRyID0gMDsgY3B0ciA8IGNhbGxGcmFtZS5hcmd1bWVudENvdW50
KCk7ICsrY3B0cikKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsRnJhbWUudW5jaGVja2Vk
QXJndW1lbnQoY3B0cikpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7
Ci0gICAgcmV0dXJuIEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgJm1hcExpa2UsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIEpTQzo6
Y2FsbCgmZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmbWFwTGlr
ZSwgYXJndW1lbnRzKTsKK30KKwordm9pZCBET01NYXBBZGFwdGVyOjpjbGVhcigpCit7CisgICAg
Y2xlYXJCYWNraW5nTWFwKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9iYWNraW5nTWFwKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaAppbmRleCBlOGY1
ZTAzZjY3YTQyOWQ4ODEwZDhkYzdmODUyZGMyNmY1ZTBiZmE2Li4wOTUzYTA0YTYyYWViM2FiZmE3
N2I2OWMyODM4OTg4MjA5MmZkNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTU1hcExpa2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TU1hcExpa2UuaApAQCAtMjcsMjAgKzI3LDE4IEBACiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RPTUd1YXJkZWRPYmpl
Y3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9Db21tb25JZGVudGlmaWVycy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQg
SlNDOjpKU01hcCYgY3JlYXRlQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgaW5p
dGlhbGl6ZUJhY2tpbmdNYXAoSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QmLCBKU0M6OkpTTWFwJik7
CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxK
U0M6OkpTT2JqZWN0Pj4gZ2V0QmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U09iamVjdCYgbWFwTGlrZSk7CiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgZm9yd2FyZEF0
dHJpYnV0ZUdldHRlclRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09i
amVjdCYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1Zh
bHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6Q2FsbEZyYW1lJiwgSlNDOjpKU09iamVjdCYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
OwotV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2lu
Z01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBmb3J3
YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxG
cmFtZSYsIEpTQzo6SlNPYmplY3QmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJCYWNraW5n
TWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7CitXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFRvQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVj
dCYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNET01HbG9iYWxPYmplY3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRTaXplVG9NYXBMaWtlKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBXcmFwcGVyQ2xhc3MmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gSlNDOjpKU1ZhbHVlIGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIFdyYXBwZXJDbGFzcyYpOwogdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgV3JhcHBlckNsYXNzJik7CkBAIC01Miwx
MDAgKzUwLDEwNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0
ZW1UeXBlPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1RvTWFwTAogdGVtcGxhdGU8dHlwZW5hbWUg
V3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBKU0M6
OkpTVmFsdWUgZm9yd2FyZFNldFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpD
YWxsRnJhbWUmLCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlwZSYmLCBWYWx1ZVR5cGUmJik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBKU0M6OkpTVmFs
dWUgZm9yd2FyZERlbGV0ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxs
RnJhbWUmLCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlwZSYmKTsKIAotY2xhc3MgRE9NTWFwTGlrZSBm
aW5hbCA6IHB1YmxpYyBET01HdWFyZGVkPEpTQzo6SlNNYXA+IHsKK2NsYXNzIERPTU1hcEFkYXB0
ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RE9NTWFwTGlrZT4gY3JlYXRlKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNYXAmIG1hcCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01NYXBMaWtlKGdsb2JhbE9iamVjdCwgbWFwKSk7IH0KKyAgICBET01NYXBBZGFw
dGVyKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0Jik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMS2V5VHlwZSwgdHlwZW5hbWUgSURMVmFsdWVUeXBlPiB2b2lkIHNldCh0eXBl
bmFtZSBJRExLZXlUeXBlOjpQYXJhbWV0ZXJUeXBlLCB0eXBlbmFtZSBJRExWYWx1ZVR5cGU6OlBh
cmFtZXRlclR5cGUpOworICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWU+IHZvaWQgc2V0KHR5cGVuYW1lIEtleTo6UGFyYW1ldGVyVHlw
ZSwgdHlwZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUpOwotCi0gICAgSlNDOjpKU01hcCogYmFj
a2luZ01hcCgpIHsgcmV0dXJuIGd1YXJkZWQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NTWFw
TGlrZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTTWFwJiBtYXApIDog
RE9NR3VhcmRlZDxKU0M6OkpTTWFwPihnbG9iYWxPYmplY3QsIG1hcCkgeyB9Citwcml2YXRlOgor
ICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1fbGV4aWNhbEdsb2JhbE9iamVjdDsKKyAgICBKU0M6
OkpTT2JqZWN0JiBtX2JhY2tpbmdNYXA7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlPiBpbmxpbmUgdm9pZCBET01NYXBMaWtlOjpzZXQodHlwZW5hbWUgS2V5OjpQ
YXJhbWV0ZXJUeXBlIGtleSwgdHlwZW5hbWUgVmFsdWU6OlBhcmFtZXRlclR5cGUgdmFsdWUpCitp
bmxpbmUgRE9NTWFwQWRhcHRlcjo6RE9NTWFwQWRhcHRlcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNraW5nTWFwKQorICAgIDogbV9s
ZXhpY2FsR2xvYmFsT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpCisgICAgLCBtX2JhY2tpbmdN
YXAoYmFja2luZ01hcCkKIHsKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdCgpOwotICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBiYWNraW5nTWFw
KCktPnNldChsZXhpY2FsR2xvYmFsT2JqZWN0LAotICAgICAgICB0b0pTPEtleT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1lIEtleTo6
UGFyYW1ldGVyVHlwZT4oa2V5KSksCi0gICAgICAgIHRvSlM8VmFsdWU+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBWYWx1ZTo6UGFy
YW1ldGVyVHlwZT4odmFsdWUpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgc3luY2hyb25pemVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSkKK3RlbXBsYXRlPHR5cGVuYW1lIElETEtleVR5cGUsIHR5cGVu
YW1lIElETFZhbHVlVHlwZT4KK3ZvaWQgRE9NTWFwQWRhcHRlcjo6c2V0KHR5cGVuYW1lIElETEtl
eVR5cGU6OlBhcmFtZXRlclR5cGUga2V5LCB0eXBlbmFtZSBJRExWYWx1ZVR5cGU6OlBhcmFtZXRl
clR5cGUgdmFsdWUpCiB7Ci0gICAgYXV0byBiYWNraW5nTWFwID0gbWFwTGlrZS53cmFwcGVkKCku
YmFja2luZ01hcCgpOwotICAgIGlmIChiYWNraW5nTWFwKSB7Ci0gICAgICAgIEFTU0VSVChiYWNr
aW5nTWFwLT5iYWNraW5nTWFwKCkpOwotICAgICAgICBpbml0aWFsaXplQmFja2luZ01hcChKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgbWFwTGlrZSwgKmJhY2tpbmdNYXAtPmJhY2tp
bmdNYXAoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
Jm1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byBqc0tleSA9IHRvSlM8SURMS2V5VHlw
ZT4obV9sZXhpY2FsR2xvYmFsT2JqZWN0LCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1lIElETEtleVR5
cGU6OlBhcmFtZXRlclR5cGU+KGtleSkpOworICAgIGF1dG8ganNWYWx1ZSA9IHRvSlM8SURMVmFs
dWVUeXBlPihtX2xleGljYWxHbG9iYWxPYmplY3QsICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZtX2xleGljYWxHbG9iYWxPYmplY3QpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgSURM
VmFsdWVUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOworICAgIHNldFRvQmFja2luZ01hcCht
X2xleGljYWxHbG9iYWxPYmplY3QsIG1fYmFja2luZ01hcCwganNLZXksIGpzVmFsdWUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QmIGdldEFuZElu
aXRpYWxpemVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKK3sKKyAgICBhdXRvIHBhaXIgPSBnZXRCYWNraW5n
TWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpOworICAgIGlmIChwYWlyLmZpcnN0KSB7
CisgICAgICAgIERPTU1hcEFkYXB0ZXIgYWRhcHRlciB7IGxleGljYWxHbG9iYWxPYmplY3QsIHBh
aXIuc2Vjb25kLmdldCgpIH07CisgICAgICAgIG1hcExpa2Uud3JhcHBlZCgpLmluaXRpYWxpemVN
YXBMaWtlKGFkYXB0ZXIpOwogICAgIH0KLSAgICBhdXRvJiBtYXAgPSBjcmVhdGVCYWNraW5nTWFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWFwTGlrZSk7Ci0gICAgbWFwTGlr
ZS53cmFwcGVkKCkuc3luY2hyb25pemVCYWNraW5nTWFwKERPTU1hcExpa2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QsIG1hcCkpOworICAgIHJldHVybiBwYWlyLnNlY29uZC5nZXQoKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRT
aXplVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlND
OjpKU1ZhbHVlIGZvcndhcmRTaXplVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKLSAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJk
QXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2Us
IHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0Jh
Y2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUg
Zm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtl
KQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEVu
dHJpZXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewotICAg
IEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRy
aWVzUHVibGljTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxG
cmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBl
ckNsYXNzJiBtYXBMaWtlKQogewotICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdN
YXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rp
b25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5k
SW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFZh
bHVlc1RvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkVmFsdWVzVG9NYXBM
aWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKLSAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJk
RnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
bWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFt
ZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2Jh
bE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVl
c1B1YmxpY05hbWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xlYXJUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBl
ckNsYXNzJiBtYXBMaWtlKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpT
VmFsdWUgZm9yd2FyZENsZWFyVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFw
TGlrZSkKIHsKICAgICBtYXBMaWtlLndyYXBwZWQoKS5jbGVhcigpOwotICAgIHJldHVybiBmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgbWFwTGlrZSwgSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCkucHJvcGVydHlOYW1l
cy0+Y2xlYXIpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIENhbGxiYWNrPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJD
bGFzcyYgbWFwTGlrZSwgQ2FsbGJhY2smJikKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cywgdHlwZW5hbWUgQ2FsbGJhY2s+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaFRvTWFwTGlr
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UsIENhbGxiYWNrJiYpCiB7Ci0gICAg
cmV0dXJuIGZvcndhcmRGb3JFYWNoQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsICptYXBMaWtlLmdsb2JhbE9iamVjdCgpLCBtYXBMaWtlKTsKKyAgICBnZXRB
bmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKKyAg
ICByZXR1cm4gZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNraW5nTWFwKCpKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLCBtYXBMaWtl
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlw
ZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkR2V0VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJikKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkR2V0VG9NYXBM
aWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJikKIHsKLSAg
ICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0
UHVibGljTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4
aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLmdldFB1YmxpY05hbWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1RvTWFw
TGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBKU0M6OkpTVmFs
dWUgZm9yd2FyZEhhc1RvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2Us
IEl0ZW1UeXBlJiYpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmhhc1B1YmxpY05hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2Fs
bFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRp
YWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5oYXNQdWJsaWNOYW1lKCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlw
ZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkU2V0VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdy
YXBwZXJDbGFzcyYgbWFwTGlrZSwgS2V5VHlwZSYmIGtleSwgVmFsdWVUeXBlJiYgdmFsdWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1l
IFZhbHVlVHlwZT4gSlNDOjpKU1ZhbHVlIGZvcndhcmRTZXRUb01hcExpa2UoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwg
V3JhcHBlckNsYXNzJiBtYXBMaWtlLCBLZXlUeXBlJiYga2V5LCBWYWx1ZVR5cGUmJiB2YWx1ZSkK
IHsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IG1hcExpa2Uud3JhcHBlZCgpLnNldEZyb21NYXBMaWtlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihr
ZXkpLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOwotICAgIGZvcndhcmRGdW5jdGlv
bkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtYXBMaWtl
LCBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwor
ICAgIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+c2V0KTsKICAgICByZXR1cm4gJm1hcExpa2U7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+
IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZERlbGV0ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBX
cmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYgaXRlbSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRGVs
ZXRlVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUm
JiBpdGVtKQogewogICAgIGF1dG8gaXNEZWxldGVkID0gbWFwTGlrZS53cmFwcGVkKCkucmVtb3Zl
KHN0ZDo6Zm9yd2FyZDxJdGVtVHlwZT4oaXRlbSkpOwogICAgIFVOVVNFRF9QQVJBTShpc0RlbGV0
ZWQpOwotICAgIGF1dG8gcmVzdWx0ID0gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQpOworCisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCk7CisKICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmFzQm9vbGVhbigpID09IGlzRGVsZXRlZCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NU2V0TGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExp
a2UuY3BwCmluZGV4IGYxZmFiMzFmYjQ2MWE0MjFjMDdiMWYwZjc1NTI1MDQ0YzE4ZTc2MTYuLjFk
ZTdhODFmNmU3OTZjNmJhNTM0MTgwODdlOWNkNjFiYjZjZTU5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nh
dGNoU2NvcGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1NldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NU2V0TGlrZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmgK
aW5kZXggYzgxZWExZDJjNzRkNzQ0NWI3MDU2N2Y5NGIyMzcwN2I3MmZhMTM0NS4uMTE4OGIzNjZm
MGYyMTAzNzQ4ZGMxN2I3ZTg4NzhjYTM0YmM2NjhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TZXRMaWtlLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbW1vbklkZW50aWZpZXJzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4
IGQ1Nzg2MjYzZTJmMTIxY2RhNzYyODUwMzc4MDQ3ZjEyNzM3Y2Q5YzEuLjJmYzQ2NmU3N2I3ZjU2
MWE1ZWY1OTA1NmNjMWU0MmY0YjMxZmIyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC00NDA0LDEwICs0NDA0LDYgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbCwganNV
bmRlZmluZWQoKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZhY2UtPm1hcExpa2UpIHsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3luY2hyb25pemVCYWNraW5nTWFwKCpnbG9iYWxP
YmplY3QoKSwgKmdsb2JhbE9iamVjdCgpLCAqdGhpcyk7XG4iKTsKLSAgICB9Ci0KICAgICAjIFN1
cHBvcnQgZm9yIFJ1bnRpbWVFbmFibGVkIGF0dHJpYnV0ZXMgb24gaW5zdGFuY2VzLgogICAgIGZv
cmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewogICAgICAg
ICBuZXh0IHVubGVzcyBOZWVkc1J1bnRpbWVDaGVjaygkaW50ZXJmYWNlLCAkYXR0cmlidXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01h
cExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHAKaW5kZXggZDEwZDA4OGEzMThlNWQzNmY5Yzg4MWE4ZmU4NDQwMjEyYTI2ZDgwMi4u
ZDY4ZGVhZjhmM2Q0NWRiYjk1MmZhNTk2MTAyYWFhNzFlNWM1ODNkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKQEAg
LTE0NCw3ICsxNDQsNiBAQCB2b2lkIEpTTWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
CiAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgTWFw
TGlrZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVj
dF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01P
YmplY3QuIik7CiAKLSAgICBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAq
Z2xvYmFsT2JqZWN0KCksICp0aGlzKTsKIH0KIAogSlNPYmplY3QqIEpTTWFwTGlrZTo6Y3JlYXRl
UHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5
TWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNS
ZWFkT25seU1hcExpa2UuY3BwCmluZGV4IDNlNjVkZDczZDkyZDc3ZTYzZjAxZWNjZjBiNTlhNmM2
MzM3N2M5YzkuLmU4YTBkYTM1MDNmNjk1ODBhMzhiMjcxMGM0YTIwZDIyMDQwZmJlZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5
TWFwTGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTUmVhZE9ubHlNYXBMaWtlLmNwcApAQCAtMTM4LDcgKzEzOCw2IEBAIHZvaWQgSlNSZWFkT25s
eU1hcExpa2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIAogICAgIHN0YXRpY19hc3NlcnQoIXN0
ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFJlYWRPbmx5TWFwTGlrZT46OnZhbHVlLCAi
SW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2gg
aW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAg
ICBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCks
ICp0aGlzKTsKIH0KIAogSlNPYmplY3QqIEpTUmVhZE9ubHlNYXBMaWtlOjpjcmVhdGVQcm90b3R5
cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBMaWtlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzTWFwTGlrZS5jcHAKaW5kZXggZjFmOGUzZDIwMDJiYzFkNjJk
NDU3YWU1MjUxYjVkZTc5ZTA2MjA0OC4uNDNkZmVkNDI5ZGE3ZjUzMWNhMjQwODJiNTMwZDkwNjE0
YTQ5OWE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNNYXBM
aWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuY3Bw
CkBAIC0yNyw5ICsyNyw4IEBACiAjaW5jbHVkZSAiSW50ZXJuYWxzTWFwTGlrZS5oIgogCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgIkpT
RE9NTWFwTGlrZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwxMSArMzcsMTAg
QEAgSW50ZXJuYWxzTWFwTGlrZTo6SW50ZXJuYWxzTWFwTGlrZSgpCiAgICAgbV92YWx1ZXMuYWRk
KCJpbml0IiwgMCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzTWFwTGlrZTo6c3luY2hyb25pemVCYWNr
aW5nTWFwKFJlZjxET01NYXBMaWtlPiYmIG1hcExpa2UpCit2b2lkIEludGVybmFsc01hcExpa2U6
OmluaXRpYWxpemVNYXBMaWtlKERPTU1hcEFkYXB0ZXImIG1hcCkKIHsKLSAgICBtX21hcExpa2Ug
PSBXVEZNb3ZlKG1hcExpa2UpOwogICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3ZhbHVlcykK
LSAgICAgICAgbV9tYXBMaWtlLT5zZXQ8SURMRE9NU3RyaW5nLCBJRExVbnNpZ25lZExvbmc+KGtl
eVZhbHVlLmtleSwga2V5VmFsdWUudmFsdWUpOworICAgICAgICBtYXAuc2V0PElETERPTVN0cmlu
ZywgSURMVW5zaWduZWRMb25nPihrZXlWYWx1ZS5rZXksIGtleVZhbHVlLnZhbHVlKTsKIH0KIAog
dm9pZCBJbnRlcm5hbHNNYXBMaWtlOjpzZXRGcm9tTWFwTGlrZShTdHJpbmcmJiBrZXksIHVuc2ln
bmVkIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNN
YXBMaWtlLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaAppbmRl
eCBiNzMzZjVjMzJlYmY3YTgzNjYxYTZhNDIwYjU4M2ZkZDI0NDcyNDExLi4xMTcyZWU0NzZlY2U5
MzgwNmZhOTFhZDc4ZmI0NjlmYWQyNzJmMzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFsc01hcExpa2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsc01hcExpa2UuaApAQCAtMjUsMzAgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiSlNET01NYXBMaWtlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
RE9NTWFwQWRhcHRlcjsKKwogY2xhc3MgSW50ZXJuYWxzTWFwTGlrZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEludGVybmFsc01hcExpa2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEludGVybmFs
c01hcExpa2U+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50ZXJuYWxzTWFwTGlr
ZSk7IH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZU1hcExpa2UoRE9NTWFwQWRhcHRlciYpOwogICAg
IHZvaWQgc2V0RnJvbU1hcExpa2UoU3RyaW5nJiYsIHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFy
KCk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIHN5bmNocm9u
aXplQmFja2luZ01hcChSZWY8RE9NTWFwTGlrZT4mJik7Ci0gICAgRE9NTWFwTGlrZSogYmFja2lu
Z01hcCgpIHsgcmV0dXJuIG1fbWFwTGlrZS5nZXQoKTsgfQotCiAgICAgVmVjdG9yPFN0cmluZz4g
aW5zcGVjdEtleXMoKSBjb25zdDsKICAgICBWZWN0b3I8dW5zaWduZWQ+IGluc3BlY3RWYWx1ZXMo
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBJbnRlcm5hbHNNYXBMaWtlKCk7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIHVuc2lnbmVkPiBtX3ZhbHVlczsKLSAgICBSZWZQdHI8RE9NTWFwTGlrZT4gbV9t
YXBMaWtlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>