<?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>206433</bug_id>
          
          <creation_ts>2020-01-17 11:38:03 -0800</creation_ts>
          <short_desc>Minor improvements to StorageAreaMap</short_desc>
          <delta_ts>2020-05-21 15:04:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>
          <dependson>211503</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1608116</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-17 11:38:03 -0800</bug_when>
    <thetext>Minor improvements to StorageAreaMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608119</commentid>
    <comment_count>1</comment_count>
      <attachid>388071</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-17 11:46:08 -0800</bug_when>
    <thetext>Created attachment 388071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608826</commentid>
    <comment_count>2</comment_count>
      <attachid>388071</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 12:28:20 -0800</bug_when>
    <thetext>Comment on attachment 388071
Patch

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

&gt; Source/WebCore/storage/StorageMap.h:65
&gt; +    unsigned m_iteratorIndex { UINT_MAX };

We’re typically writing this as std::numeric_limits&lt;unsigned&gt;::max() instead of UINT_MAX.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:84
&gt; +    ASSERT(storageMap.hasOneRef());

I would really like to understand this assertion. Why is it important? Would it be bad if the map has more references? What’s the relevance to the code below?

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:119
&gt; +        RELEASE_LOG_ERROR(Storage, &quot;StorageAreaMap::removeItem fails because storage map ID is invalid&quot;);

The use of &quot;fails&quot; here is strange grammar. It should be &quot;failed&quot;.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:134
&gt; +        RELEASE_LOG_ERROR(Storage, &quot;StorageAreaMap::clear fails because storage map ID is invalid&quot;);

The use of &quot;fails&quot; here is strange grammar. It should be &quot;failed&quot;.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:159
&gt; +            // The StorageManagerSet::GetValues() IPC may be very slow because it may need to fetch the values from disk and there may be a lot of data.

Would be a better comment if it said &quot;need to use unbounded IPC scope because&quot;. Otherwise the comment seems oblique. Saying something may be &quot;very slow&quot; but not why that matters to the code below. Maybe to someone more expert it’s more obvious.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:232
&gt; +        for (auto&amp; change : m_pendingValueChanges) {
&gt; +            auto&amp; key = change.key;

We have another idiom for this in HashMap, I think:

    for (auto&amp; key : m_pendingValueChanges.keys()) {

That should work.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:292
&gt; +    for (auto* frame = &amp;page-&gt;mainFrame(); frame; frame = frame-&gt;tree().traverseNext()) {
&gt; +        auto* document = frame-&gt;document();

Consider using Page::forEachDocument instead?

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:322
&gt; +    for (auto* page : pageGroup.pages()) {
&gt; +        for (auto* frame = &amp;page-&gt;mainFrame(); frame; frame = frame-&gt;tree().traverseNext()) {
&gt; +            auto* document = frame-&gt;document();

Consider using Page::forEachDocument instead?

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h:49
&gt; +class StorageAreaMap final : private IPC::MessageReceiver, public CanMakeWeakPtr&lt;StorageAreaMap&gt; {

Various members of this class seem to repeat the word &quot;storage&quot;. I would consider making them shorter by leaving that word out since in the context of a &quot;storage area map&quot;, you would think &quot;storage&quot; would be implicit context.

&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h:66
&gt;      // IPC::MessageReceiver
&gt; -    void didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) override;
&gt; +    void didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) final;

Make this private?

&gt; Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h:37
&gt; +#include &lt;wtf/UniqueRef.h&gt;

Should not add this. It must have been from an earlier refactoring step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609037</commentid>
    <comment_count>3</comment_count>
      <attachid>388071</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-21 08:05:12 -0800</bug_when>
    <thetext>Comment on attachment 388071
Patch

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

&gt;&gt; Source/WebCore/storage/StorageMap.h:65
&gt;&gt; +    unsigned m_iteratorIndex { UINT_MAX };
&gt; 
&gt; We’re typically writing this as std::numeric_limits&lt;unsigned&gt;::max() instead of UINT_MAX.

Will fix.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:84
&gt;&gt; +    ASSERT(storageMap.hasOneRef());
&gt; 
&gt; I would really like to understand this assertion. Why is it important? Would it be bad if the map has more references? What’s the relevance to the code below?

I believe it is important because StorageMap uses copy-on-write pattern. If we&apos;re not the only ones holding a ref to the StorageMap, then the call to setItem() below would create a new StorageMap and return it. The current code does not deal with this and never updates m_storageMap after calling setItem() on it.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:119
&gt;&gt; +        RELEASE_LOG_ERROR(Storage, &quot;StorageAreaMap::removeItem fails because storage map ID is invalid&quot;);
&gt; 
&gt; The use of &quot;fails&quot; here is strange grammar. It should be &quot;failed&quot;.

Will fix.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:134
&gt;&gt; +        RELEASE_LOG_ERROR(Storage, &quot;StorageAreaMap::clear fails because storage map ID is invalid&quot;);
&gt; 
&gt; The use of &quot;fails&quot; here is strange grammar. It should be &quot;failed&quot;.

Will fix.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:159
&gt;&gt; +            // The StorageManagerSet::GetValues() IPC may be very slow because it may need to fetch the values from disk and there may be a lot of data.
&gt; 
&gt; Would be a better comment if it said &quot;need to use unbounded IPC scope because&quot;. Otherwise the comment seems oblique. Saying something may be &quot;very slow&quot; but not why that matters to the code below. Maybe to someone more expert it’s more obvious.

Ok, will fix.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:232
&gt;&gt; +            auto&amp; key = change.key;
&gt; 
&gt; We have another idiom for this in HashMap, I think:
&gt; 
&gt;     for (auto&amp; key : m_pendingValueChanges.keys()) {
&gt; 
&gt; That should work.

I had tried that but it did not work. m_pendingValueChanges is a HashCountedSet, not a HashMap.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:292
&gt;&gt; +        auto* document = frame-&gt;document();
&gt; 
&gt; Consider using Page::forEachDocument instead?

Oh, I was not familiar with this one, I will look into using it.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp:322
&gt;&gt; +            auto* document = frame-&gt;document();
&gt; 
&gt; Consider using Page::forEachDocument instead?

Ok

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h:49
&gt;&gt; +class StorageAreaMap final : private IPC::MessageReceiver, public CanMakeWeakPtr&lt;StorageAreaMap&gt; {
&gt; 
&gt; Various members of this class seem to repeat the word &quot;storage&quot;. I would consider making them shorter by leaving that word out since in the context of a &quot;storage area map&quot;, you would think &quot;storage&quot; would be implicit context.

Ok.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h:66
&gt;&gt; +    void didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) final;
&gt; 
&gt; Make this private?

iirc, I could not make that change because there is a call site calling didReceiveMessage() on a StorageAreaMap instance. I did not want to add a cast to base class at call site.

&gt;&gt; Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h:37
&gt;&gt; +#include &lt;wtf/UniqueRef.h&gt;
&gt; 
&gt; Should not add this. It must have been from an earlier refactoring step.

Indeed, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609077</commentid>
    <comment_count>4</comment_count>
      <attachid>388306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-21 09:16:23 -0800</bug_when>
    <thetext>Created attachment 388306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609105</commentid>
    <comment_count>5</comment_count>
      <attachid>388306</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-21 09:57:43 -0800</bug_when>
    <thetext>Comment on attachment 388306
Patch

Clearing flags on attachment: 388306

Committed r254859: &lt;https://trac.webkit.org/changeset/254859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609107</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-21 09:57:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609109</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-21 09:58:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/58762680&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388071</attachid>
            <date>2020-01-17 11:46:08 -0800</date>
            <delta_ts>2020-01-21 09:16:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206433-20200117114607.patch</filename>
            <type>text/plain</type>
            <size>29005</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJmNDk0NTY5ZmQzMzdk
OGFjYjlhNGNmY2NkOTMxZTA3NWI5YWQxZi4uYTUyOTEyMDA2YjkwZDM1ZmJlNGE1Yjg1ZjJiYWU4
MDNjNWFmOTI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgaW1wcm92ZW1lbnRz
IHRvIFN0b3JhZ2VBcmVhTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDY0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVc2UgaW5saW5lIGluaXRpYWxpemF0aW9uIGZvciBzb21lIG9mIFN0b3JhZ2VN
YXAncyBkYXRhIG1lbWJlci4KKyAgICAgICAgQWxzbyBzcGVjaWZ5IHVpbnQ4X3QgYXMgdW5kZXJs
eWluZyB0eXBlIG9mIFN0b3JhZ2VUeXBlIGVudW0gY2xhc3MgZm9yIGJldHRlciBwYWNraW5nLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6U3RvcmFnZU1hcCk6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlTWFwLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHlwZS5o
OgorCiAyMDIwLTAxLTE3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0xGQ11bSUZDXSBPcHRpbWl6ZSBuZXh0V3JhcE9wcG9ydHVuaXR5L2lzQXRTb2Z0V3JhcE9w
cG9ydHVuaXR5IGZvciB0aGUgbW9zdCBjb21tb24gaW5saW5lIGNvbnRlbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MWFiY2ZiYTUwZjkxYmU3ZjdmMGY4ODMxYmI2Yjc2ZjE1YWFjZTI2YS4uZDEyNTE3Y2RlMzk1ZDU0
OWZjZjVhZDY3NzgyMjQ0ZmUxZTBlOTliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAy
MC0wMS0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1pbm9y
IGltcHJvdmVtZW50cyB0byBTdG9yYWdlQXJlYU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWlub3IgaW1wcm92ZW1lbnRzIHRvIFN0b3JhZ2VBcmVh
TWFwOgorICAgICAgICAxLiBUaGUgY2xhc3MgZG9lcyBub3QgbmVlZCB0byBiZSBSZWZDb3VudGVk
LCBhcyBpdCBpcyBzb2xlbHkgb3duZWQgYnkgU3RvcmFnZU5hbWVzcGFjZUltcGwuIEhhdmluZyBp
dAorICAgICAgICAgICBSZWZDb3VudGVkIHdhcyBhY3R1YWxseSBkYW5nZXJvdXMgYmVjYXVzZSBT
dG9yYWdlQXJlYU1hcCBoYWQgYSByYXcgcG9pbnRlciBkYXRhIG1lbWJlciB0byBpdHMgb3duZXI6
CisgICAgICAgICAgIG1fc3RvcmFnZU5hbWVzcGFjZS4gVGhpcyByYXcgcG9pbnRlciBjb3VsZCBi
ZWNvbWUgc3RhbGUgaWYgeW91IGV4dGVuZCB0aGUgbGlmZXRpbWUgb2YgdGhlIFN0b3JhZ2VBcmVh
TWFwCisgICAgICAgICAgIG9iamVjdCB0byBvdXRsaXZlIGl0cyBTdG9yYWdlTmFtZXNwYWNlSW1w
bC4KKyAgICAgICAgMi4gTWFrZSBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpIHByaXZhdGUgYXMg
aXQgaXMgbmV2ZXIgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY2xhc3MKKyAgICAgICAgMy4gUmVv
cmRlciBkYXRhIG1lbWJlcnMgZm9yIGJldHRlciBwYWNraW5nCisgICAgICAgIDQuIFVzZSBtb2Rl
cm4gbG9vcHMgaW4gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIDUuIFJlbmFtZSBsb2FkVmFs
dWVzSWZOZWVkZWQoKSB0byBlbnN1cmVTdG9yYWdlTWFwKCkgYW5kIGhhdmUgaXQgcmV0dXJuIHRo
ZSBTdG9yYWdlTWFwIG9iamVjdC4gVGhpcyBtYWtlcworICAgICAgICAgICBjYWxscyBzaXRlIG1v
cmUgY29uY2lzZSBhbmQgaXQgbWFrZXMgaXQgY2xlYXJlciB3aGVuIHRoaXMgbWV0aG9kIG5lZWRz
IHRvIGJlIGNhbGxlZC4KKyAgICAgICAgNi4gTWFyayBjbGFzcyBhcyBmaW5hbAorICAgICAgICA3
LiBSZXBsYWNlIExPR19FUlJPUigpIHdpdGggUkVMRUFTRV9MT0dfRVJST1IoKSBzbyB0aGF0IHdl
IGNhbiBzZWUgZXJyb3IgbG9nZ2luZyBpbiBzeXNkaWFnbm9zZXMKKyAgICAgICAgOC4gVXNlIG1v
cmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHJhdyBwb2ludGVycyB0byBtYWtlIGl0IGNsZWFyIHdo
ZW4gbnVsbCBjaGVja3MgYXJlIG5vdCBuZWVkZWQKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFn
ZUFyZWFJbXBsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJ
bXBsLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OlN0b3JhZ2VBcmVhTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6Omxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhTWFwOjprZXkpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
aXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1h
cDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6cmVzZXRWYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlU3RvcmFnZU1hcCk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjphcHBseUNoYW5nZSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorCiAyMDIwLTAxLTE3ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSVBDIGhhcmRlbmluZyBmb3IgV2Vi
UGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSBtZXNzYWdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgK
aW5kZXggZGJmODIyMDVkYjViY2NiZTE2OWVkMGU5NDdkMWFkODNkZDg1MGZkNi4uZTc4MTgzNjQw
YTI5OWFlNDEwNzI4NWVmNGMyOGFjODFkOTQwYTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTA4LDcgKzEwOCw3
IEBAIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKICNlbmRpZgog
Ci1lbnVtIGNsYXNzIFN0b3JhZ2VUeXBlOworZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4
X3Q7CiAKIHN0cnVjdCBDb21wdXRlZEVmZmVjdFRpbWluZzsKIHN0cnVjdCBXZWJTb2NrZXRGcmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCA1YTlmZmZmOWE2MjYwODc4
NTA3ZWQ5MWQ3MjUyZjY0ZmUxZmI0YjNlLi4yNTFiZDQyOWQ2MjA2Mjk5N2Y3MjhkYzBkYzY2MjVm
MTRmMWI1Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCkBAIC0zNSw3ICsz
NSw3IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTdG9yYWdl
U3luY01hbmFnZXI7CiAKLWVudW0gY2xhc3MgU3RvcmFnZVR5cGU7CitlbnVtIGNsYXNzIFN0b3Jh
Z2VUeXBlIDogdWludDhfdDsKIAogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggZWE1MTk4ZGU0YWUzYjE3ZDA1MDlhOTFk
OWZjYWJiODBmMzJiMzE3Mi4uZDQ3YzcyYjA2ZWZmYWU0YzI3NjliNzYyNzZiMzE0MWZiZDZmZGI3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC0zNyw5ICszNyw3IEBA
IFJlZjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpjcmVhdGUodW5zaWduZWQgcXVvdGEpCiAKIFN0
b3JhZ2VNYXA6OlN0b3JhZ2VNYXAodW5zaWduZWQgcXVvdGEpCiAgICAgOiBtX2l0ZXJhdG9yKG1f
bWFwLmVuZCgpKQotICAgICwgbV9pdGVyYXRvckluZGV4KFVJTlRfTUFYKQogICAgICwgbV9xdW90
YVNpemUocXVvdGEpICAvLyBxdW90YSBtZWFzdXJlZCBpbiBieXRlcwotICAgICwgbV9jdXJyZW50
TGVuZ3RoKDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKaW5kZXggM2Ey
OTVlZTUxMmIyMTJjODAwNjkyMTBjMjRhODQ5ZTIzZmNkNDVkYi4uYWRhMzUzMGI4MGMxYTc3MmJh
YTlmZDc5NWEyZjRhYjVjYWU0ZjUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgK
QEAgLTYyLDEwICs2MiwxMCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9tYXA7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIG1faXRlcmF0
b3I7Ci0gICAgdW5zaWduZWQgbV9pdGVyYXRvckluZGV4OworICAgIHVuc2lnbmVkIG1faXRlcmF0
b3JJbmRleCB7IFVJTlRfTUFYIH07CiAKICAgICB1bnNpZ25lZCBtX3F1b3RhU2l6ZTsgLy8gTWVh
c3VyZWQgaW4gYnl0ZXMuCi0gICAgdW5zaWduZWQgbV9jdXJyZW50TGVuZ3RoOyAvLyBNZWFzdXJl
ZCBpbiBVQ2hhcnMuCisgICAgdW5zaWduZWQgbV9jdXJyZW50TGVuZ3RoIHsgMCB9OyAvLyBNZWFz
dXJlZCBpbiBVQ2hhcnMuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUeXBlLmgKaW5kZXggZmU3MDAyNTdiYWNiNDlhZmRkZmY0NTY0MmE2M2Q0
MjhkNzQwZjg5Yy4uMjIwNTg3ZWM4NmJhNWM1MTcxYjY3M2IxNzdhNDY2MWEyMmNmMzEzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVR5cGUuaApAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gY2xhc3MgU3RvcmFnZVR5cGUgeworZW51bSBjbGFzcyBT
dG9yYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIFNlc3Npb24sCiAgICAgTG9jYWwsCiAgICAgVHJh
bnNpZW50TG9jYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAppbmRleCBiZDNhMTNiNGJiODFiMzMwNDA5ZDc3MGRm
MTdkZDI5ZWM1NDI5YTQ3Li4wNWNjMWMxNWM3NTdjMWIzZWY5NTI2Yjg4NmZhZjQwODFiMzdkZWM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTM3LDE0ICszNywxNCBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUmVmPFN0b3JhZ2VBcmVhSW1wbD4gU3RvcmFn
ZUFyZWFJbXBsOjpjcmVhdGUoUmVmPFN0b3JhZ2VBcmVhTWFwPiYmIHN0b3JhZ2VBcmVhTWFwKQor
UmVmPFN0b3JhZ2VBcmVhSW1wbD4gU3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUoU3RvcmFnZUFyZWFN
YXAmIHN0b3JhZ2VBcmVhTWFwKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VB
cmVhSW1wbChXVEZNb3ZlKHN0b3JhZ2VBcmVhTWFwKSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFN0b3JhZ2VBcmVhSW1wbChzdG9yYWdlQXJlYU1hcCkpOwogfQogCi1TdG9yYWdlQXJlYUlt
cGw6OlN0b3JhZ2VBcmVhSW1wbChSZWY8U3RvcmFnZUFyZWFNYXA+JiYgc3RvcmFnZUFyZWFNYXAp
CitTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYU1hcCYgc3RvcmFn
ZUFyZWFNYXApCiAgICAgOiBtX2lkZW50aWZpZXIoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKLSAg
ICAsIG1fc3RvcmFnZUFyZWFNYXAobWFrZVdlYWtQdHIoc3RvcmFnZUFyZWFNYXAuZ2V0KCkpKQor
ICAgICwgbV9zdG9yYWdlQXJlYU1hcChtYWtlV2Vha1B0cihzdG9yYWdlQXJlYU1hcCkpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmgKaW5kZXggMGYwNWRmNzViNTdmMzQyZjFjYTlhOTZjYTc0MDg1ZDM3NzM4YWY2
NC4uNzllMTRiOTFmOGFjNmQ4MmZlNzkyYWMwNmQzOTRlZDc2NTg0MmE2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgK
QEAgLTQzLDEzICs0MywxMyBAQCBjbGFzcyBTdG9yYWdlQXJlYUltcGwgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6U3RvcmFnZUFyZWEgewogcHVibGljOgogICAgIHVzaW5nIElkZW50aWZpZXIgPSBT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyOwogCi0gICAgc3RhdGljIFJlZjxTdG9yYWdlQXJlYUlt
cGw+IGNyZWF0ZShSZWY8U3RvcmFnZUFyZWFNYXA+JiYpOworICAgIHN0YXRpYyBSZWY8U3RvcmFn
ZUFyZWFJbXBsPiBjcmVhdGUoU3RvcmFnZUFyZWFNYXAmKTsKICAgICB2aXJ0dWFsIH5TdG9yYWdl
QXJlYUltcGwoKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQogCiBwcml2YXRlOgotICAgIFN0b3JhZ2VBcmVhSW1wbChSZWY8U3Rv
cmFnZUFyZWFNYXA+JiYpOworICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJlYU1hcCYpOwog
CiAgICAgLy8gV2ViQ29yZTo6U3RvcmFnZUFyZWEuCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYU1hcC5jcHAKaW5kZXggNTAyODFhMTllNzJiMDc3Nzg1MzZlNTdkNWQ4YzJkMzY0
YzVmZDM1NS4uM2QyYmFkNDQ0YmY4NGRjZjgxMGRjYzQ5MzNjYmQ4YjY2N2U4MjJjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVh
TWFwLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFNYXAuaCIKIAorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNs
dWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCkBAIC00OCwxOCArNDksMTEgQEAKIG5hbWVz
cGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVJlZjxTdG9yYWdlQXJl
YU1hcD4gU3RvcmFnZUFyZWFNYXA6OmNyZWF0ZShTdG9yYWdlTmFtZXNwYWNlSW1wbCogc3RvcmFn
ZU5hbWVzcGFjZSwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHNlY3VyaXR5T3JpZ2lu
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VBcmVhTWFwKHN0b3JhZ2VOYW1l
c3BhY2UsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pKSk7Ci19Ci0KLVN0b3JhZ2VBcmVhTWFwOjpT
dG9yYWdlQXJlYU1hcChTdG9yYWdlTmFtZXNwYWNlSW1wbCogc3RvcmFnZU5hbWVzcGFjZSwgUmVm
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmIHNlY3VyaXR5T3JpZ2luKQorU3RvcmFnZUFyZWFN
YXA6OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VOYW1lc3BhY2VJbXBsJiBzdG9yYWdlTmFtZXNwYWNl
LCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgc2VjdXJpdHlPcmlnaW4pCiAgICAgOiBt
X3N0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZSkKLSAgICAsIG1fc3RvcmFnZVR5cGUo
c3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZVR5cGUoKSkKLSAgICAsIG1fcXVvdGFJbkJ5dGVzKHN0
b3JhZ2VOYW1lc3BhY2UtPnF1b3RhSW5CeXRlcygpKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihX
VEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSkKLSAgICAsIG1fY3VycmVudFNlZWQoMCkKLSAgICAsIG1f
aGFzUGVuZGluZ0NsZWFyKGZhbHNlKQorICAgICwgbV9xdW90YUluQnl0ZXMoc3RvcmFnZU5hbWVz
cGFjZS5xdW90YUluQnl0ZXMoKSkKKyAgICAsIG1fc3RvcmFnZVR5cGUoc3RvcmFnZU5hbWVzcGFj
ZS5zdG9yYWdlVHlwZSgpKQogewogICAgIGNvbm5lY3QoKTsKIH0KQEAgLTcxLDM0ICs2NSwyNyBA
QCBTdG9yYWdlQXJlYU1hcDo6flN0b3JhZ2VBcmVhTWFwKCkKIAogdW5zaWduZWQgU3RvcmFnZUFy
ZWFNYXA6Omxlbmd0aCgpCiB7Ci0gICAgbG9hZFZhbHVlc0lmTmVlZGVkKCk7Ci0KLSAgICByZXR1
cm4gbV9zdG9yYWdlTWFwLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gZW5zdXJlU3RvcmFnZU1hcCgp
Lmxlbmd0aCgpOwogfQogCiBTdHJpbmcgU3RvcmFnZUFyZWFNYXA6OmtleSh1bnNpZ25lZCBpbmRl
eCkKIHsKLSAgICBsb2FkVmFsdWVzSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VN
YXAtPmtleShpbmRleCk7CisgICAgcmV0dXJuIGVuc3VyZVN0b3JhZ2VNYXAoKS5rZXkoaW5kZXgp
OwogfQogCiBTdHJpbmcgU3RvcmFnZUFyZWFNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCiB7
Ci0gICAgbG9hZFZhbHVlc0lmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5n
ZXRJdGVtKGtleSk7CisgICAgcmV0dXJuIGVuc3VyZVN0b3JhZ2VNYXAoKS5nZXRJdGVtKGtleSk7
CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBT
dG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKIHsKLSAgICBsb2FkVmFsdWVzSWZOZWVk
ZWQoKTsKLQotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXAtPmhhc09uZVJlZigpKTsKKyAgICBhdXRv
JiBzdG9yYWdlTWFwID0gZW5zdXJlU3RvcmFnZU1hcCgpOworICAgIEFTU0VSVChzdG9yYWdlTWFw
Lmhhc09uZVJlZigpKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKICAgICBxdW90YUV4Y2VwdGlv
biA9IGZhbHNlOwotICAgIG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1
ZSwgcXVvdGFFeGNlcHRpb24pOworICAgIHN0b3JhZ2VNYXAuc2V0SXRlbShrZXksIHZhbHVlLCBv
bGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xMTAsMTYgKzk3LDE2IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNl
dEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNv
CiAgICAgaWYgKG1fc3RvcmFnZU1hcElEKQogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OlNldEl0ZW0oKm1fc3RvcmFnZU1hcElELCBzb3VyY2VB
cmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSksIDApOwogICAgIGVsc2UKLSAgICAgICAgTE9HX0VSUk9SKCJT
dG9yYWdlQXJlYU1hcDo6c2V0SXRlbSBmYWlscyBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGlu
dmFsaWQiKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVh
TWFwOjpzZXRJdGVtIGZhaWxzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwog
fQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3Vy
Y2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSkK
IHsKLSAgICBsb2FkVmFsdWVzSWZOZWVkZWQoKTsKLSAgICBBU1NFUlQobV9zdG9yYWdlTWFwLT5o
YXNPbmVSZWYoKSk7CisgICAgYXV0byYgc3RvcmFnZU1hcCA9IGVuc3VyZVN0b3JhZ2VNYXAoKTsK
KyAgICBBU1NFUlQoc3RvcmFnZU1hcC5oYXNPbmVSZWYoKSk7CiAKICAgICBTdHJpbmcgb2xkVmFs
dWU7Ci0gICAgbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIHN0
b3JhZ2VNYXAucmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKIAogICAgIGlmIChvbGRWYWx1ZS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI5LDcgKzExNiw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFNYXA6OnJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdl
QXJlYUltcGwqIHNvCiAgICAgaWYgKG1fc3RvcmFnZU1hcElEKQogICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OlJlbW92ZUl0ZW0oKm1fc3RvcmFn
ZU1hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiAgICAgZWxzZQotICAgICAgICBMT0df
RVJST1IoIlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtIGZhaWxzIGJlY2F1c2Ugc3RvcmFnZSBt
YXAgSUQgaXMgaW52YWxpZCIpOworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAi
U3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0gZmFpbHMgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBp
cyBpbnZhbGlkIik7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdlYkNvcmU6OkZy
YW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhKQpAQCAtMTQ0LDE0
ICsxMzEsMTIgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNv
dXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBpZiAobV9zdG9yYWdlTWFw
SUQpCiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q2xlYXIoKm1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3Vy
cmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIDApOwogICAgIGVsc2UK
LSAgICAgICAgTE9HX0VSUk9SKCJTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSBmYWlscyBiZWNh
dXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlscyBiZWNhdXNlIHN0b3JhZ2Ug
bWFwIElEIGlzIGludmFsaWQiKTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYU1hcDo6Y29udGFpbnMo
Y29uc3QgU3RyaW5nJiBrZXkpCiB7Ci0gICAgbG9hZFZhbHVlc0lmTmVlZGVkKCk7Ci0KLSAgICBy
ZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOworICAgIHJldHVybiBlbnN1cmVTdG9y
YWdlTWFwKCkuY29udGFpbnMoa2V5KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVzZXRW
YWx1ZXMoKQpAQCAtMTYwLDI4ICsxNDUsMjYgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVzZXRW
YWx1ZXMoKQogCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmNsZWFyKCk7CiAgICAgbV9oYXNQ
ZW5kaW5nQ2xlYXIgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRTZWVkKys7CisgICAgKyttX2N1cnJl
bnRTZWVkOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhTWFwOjpsb2FkVmFsdWVzSWZOZWVkZWQoKQor
U3RvcmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3VyZVN0b3JhZ2VNYXAoKQogewogICAgIGNv
bm5lY3QoKTsKIAotICAgIGlmIChtX3N0b3JhZ2VNYXApCi0gICAgICAgIHJldHVybjsKLQotICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlczsKLQotICAgIGlmIChtX3N0b3JhZ2VNYXBJ
RCkgewotICAgICAgICAvLyBUaGUgU3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygpIElQQyBt
YXkgYmUgdmVyeSBzbG93IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBm
cm9tIGRpc2sgYW5kIHRoZXJlIG1heSBiZSBhIGxvdAotICAgICAgICAvLyBvZiBkYXRhLgotICAg
ICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25v
dXNJUENTY29wZTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlclNldDo6R2V0VmFsdWVzKCptX3N0b3JhZ2VNYXBJRCksIE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgTE9HX0VSUk9SKCJTdG9yYWdlQXJlYU1hcDo6bG9hZFZhbHVlc0lmTmVlZGVkIGZh
aWxzIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBp
cyBpbnZhbGlkIik7Ci0KLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9x
dW90YUluQnl0ZXMpOwotICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbXMoV1RGTW92ZSh2YWx1
ZXMpKTsKKyAgICBpZiAoIW1fc3RvcmFnZU1hcCkgeworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBT
dG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOworCisgICAgICAgIGlmIChtX3N0b3Jh
Z2VNYXBJRCkgeworICAgICAgICAgICAgLy8gVGhlIFN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1
ZXMoKSBJUEMgbWF5IGJlIHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNoIHRo
ZSB2YWx1ZXMgZnJvbSBkaXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgZGF0YS4KKyAgICAg
ICAgICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJv
bm91c0lQQ1Njb3BlOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFsdWVz
OworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlclNldDo6R2V0VmFsdWVzKCptX3N0b3JhZ2VNYXBJRCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICAgICAgICAgIG1fc3Rv
cmFnZU1hcC0+aW1wb3J0SXRlbXMoV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmVu
c3VyZVN0b3JhZ2VNYXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVz
ZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CisgICAgfQorICAgIHJldHVybiAqbV9zdG9y
YWdlTWFwOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaWRTZXRJdGVtKHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgYm9vbCBxdW90YUVycm9yKQpAQCAtMjQ1
LDkgKzIyOCw4IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmFwcGx5Q2hhbmdlKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlKQogICAgICAgICBhdXRvIG5ld1N0b3JhZ2VN
YXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwogCiAgICAgICAgIC8vIEFu
eSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGxvY2FsbHkgYWZ0ZXIgdGhlIGNsZWFyIG11c3Qgc3Rp
bGwgYmUga2VwdCBhcm91bmQgaW4gdGhlIG5ldyBtYXAuCi0gICAgICAgIGZvciAoYXV0byBpdCA9
IG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5iZWdpbigpLmtleXMoKSwgZW5kID0gbV9wZW5kaW5nVmFs
dWVDaGFuZ2VzLmVuZCgpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGtleSA9ICppdDsKLQorICAgICAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1f
cGVuZGluZ1ZhbHVlQ2hhbmdlcykgeworICAgICAgICAgICAgYXV0byYga2V5ID0gY2hhbmdlLmtl
eTsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkp
OwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hh
bmdlIG11c3QgaGF2ZSBiZWVuIGEgcGVuZGluZyByZW1vdmUsIGlnbm9yZSBpdC4KQEAgLTI5Nywy
MyArMjc5LDI1IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VF
dmVudChjb25zdCBPcHRpb25hbDxTdG9yYWdlQXJlYUltcGxJCiB7CiAgICAgLy8gTmFtZXNwYWNl
IElEcyBmb3Igc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2Vi
IHBhZ2UgSURzCiAgICAgLy8gc28gd2UgY2FuIGdldCB0aGUgcmlnaHQgcGFnZSBoZXJlLgotICAg
IFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKG1fc3Rv
cmFnZU5hbWVzcGFjZS0+c2Vzc2lvblN0b3JhZ2VQYWdlSUQoKSk7CisgICAgYXV0byogd2ViUGFn
ZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UobV9zdG9yYWdlTmFtZXNwYWNlLnNl
c3Npb25TdG9yYWdlUGFnZUlEKCkpOwogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKKyAgICBhdXRvKiBwYWdlID0g
d2ViUGFnZS0+Y29yZVBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKIAot
ICAgIFBhZ2UqIHBhZ2UgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpOwotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLmVxdWFsKG1f
c2VjdXJpdHlPcmlnaW4ucHRyKCkpKQorICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+PiBmcmFtZXM7
CisgICAgZm9yIChhdXRvKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBhdXRvKiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKS5lcXVhbChtX3NlY3VyaXR5T3JpZ2luLnB0cigpKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBkb2N1bWVudC0+
ZG9tV2luZG93KCktPm9wdGlvbmFsU2Vzc2lvblN0b3JhZ2UoKTsKKyAgICAgICAgYXV0byogc3Rv
cmFnZSA9IGRvY3VtZW50LT5kb21XaW5kb3coKSA/IGRvY3VtZW50LT5kb21XaW5kb3coKS0+b3B0
aW9uYWxTZXNzaW9uU3RvcmFnZSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFzdG9yYWdlKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3RvcmFnZUFyZWFJbXBsJiBzdG9yYWdl
QXJlYSA9IHN0YXRpY19jYXN0PFN0b3JhZ2VBcmVhSW1wbCY+KHN0b3JhZ2UtPmFyZWEoKSk7Cisg
ICAgICAgIGF1dG8mIHN0b3JhZ2VBcmVhID0gc3RhdGljX2Nhc3Q8U3RvcmFnZUFyZWFJbXBsJj4o
c3RvcmFnZS0+YXJlYSgpKTsKICAgICAgICAgaWYgKHN0b3JhZ2VBcmVhLmlkZW50aWZpZXIoKSA9
PSBzdG9yYWdlQXJlYUltcGxJRCkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RvcmFn
ZSBhcmVhIHRoYXQgY2F1c2VkIHRoZSBldmVudCB0byBiZSBkaXNwYXRjaGVkLgogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0zMzIsMTkgKzMxNiwxOCBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpk
aXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50KGNvbnN0IE9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1wbElk
ZQogICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+PiBmcmFtZXM7CiAKICAgICAvLyBOYW1lc3BhY2Ug
SURzIGZvciBsb2NhbCBzdG9yYWdlIG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBh
Z2UgZ3JvdXAgSURzLgotICAgIFBhZ2VHcm91cCYgcGFnZUdyb3VwID0gKldlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLndlYlBhZ2VHcm91cChtX3N0b3JhZ2VOYW1lc3BhY2UtPnBhZ2VHcm91cElEKCkp
LT5jb3JlUGFnZUdyb3VwKCk7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFn
ZUdyb3VwLnBhZ2VzKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwYWdlcy5iZWdpbigpLCBlbmQgPSBwYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAoIWRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLmVxdWFsKG1fc2VjdXJpdHlPcmlnaW4ucHRyKCkpKQor
ICAgIGF1dG8mIHBhZ2VHcm91cCA9ICpXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlR3Jv
dXAobV9zdG9yYWdlTmFtZXNwYWNlLnBhZ2VHcm91cElEKCkpLT5jb3JlUGFnZUdyb3VwKCk7Cisg
ICAgZm9yIChhdXRvKiBwYWdlIDogcGFnZUdyb3VwLnBhZ2VzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLmVxdWFsKG1fc2VjdXJpdHlPcmlnaW4ucHRyKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZG9jdW1l
bnQtPmRvbVdpbmRvdygpLT5vcHRpb25hbExvY2FsU3RvcmFnZSgpOworICAgICAgICAgICAgYXV0
byogc3RvcmFnZSA9IGRvY3VtZW50LT5kb21XaW5kb3coKSA/IGRvY3VtZW50LT5kb21XaW5kb3co
KS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoIXN0
b3JhZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0b3JhZ2VB
cmVhSW1wbCYgc3RvcmFnZUFyZWEgPSBzdGF0aWNfY2FzdDxTdG9yYWdlQXJlYUltcGwmPihzdG9y
YWdlLT5hcmVhKCkpOworICAgICAgICAgICAgYXV0byYgc3RvcmFnZUFyZWEgPSBzdGF0aWNfY2Fz
dDxTdG9yYWdlQXJlYUltcGwmPihzdG9yYWdlLT5hcmVhKCkpOwogICAgICAgICAgICAgaWYgKHN0
b3JhZ2VBcmVhLmlkZW50aWZpZXIoKSA9PSBzdG9yYWdlQXJlYUltcGxJRCkgewogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0b3JhZ2UgYXJlYSB0aGF0IGNhdXNlZCB0aGUgZXZlbnQg
dG8gYmUgZGlzcGF0Y2hlZC4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM2NSwxMyAr
MzQ4LDEzIEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QoKQogICAgIHN3aXRjaCAobV9z
dG9yYWdlVHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgogICAgIGNhc2UgU3Rv
cmFnZVR5cGU6OlRyYW5zaWVudExvY2FsOgotICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRv
cExldmVsT3JpZ2luID0gbV9zdG9yYWdlTmFtZXNwYWNlLT50b3BMZXZlbE9yaWdpbigpKQotICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQo
KSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VB
cmVhOjpSZXBseShtX3N0b3JhZ2VNYXBJRCksIDApOworICAgICAgICBpZiAoU2VjdXJpdHlPcmln
aW4qIHRvcExldmVsT3JpZ2luID0gbV9zdG9yYWdlTmFtZXNwYWNlLnRvcExldmVsT3JpZ2luKCkp
CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX3N0b3JhZ2VOYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFj
ZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSks
IE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9y
YWdlQXJlYTo6UmVwbHkobV9zdG9yYWdlTWFwSUQpLCAwKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9u
SUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0
eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9M
b2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX3N0b3JhZ2VNYXBJRCksIDApOworICAgICAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVj
dFRvTG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwg
bV9zdG9yYWdlTmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2lu
LT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3Rv
cmFnZUFyZWE6OlJlcGx5KG1fc3RvcmFnZU1hcElEKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb246Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3lu
YyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJl
YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNl
LT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6OlJlcGx5
KG1fc3RvcmFnZU1hcElEKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlLnN0b3Jh
Z2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHkobV9zdG9y
YWdlTWFwSUQpLCAwKTsKICAgICB9CiAKICAgICBpZiAobV9zdG9yYWdlTWFwSUQpCkBAIC0zODYs
NyArMzY5LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgcmVzZXRW
YWx1ZXMoKTsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyU3RvcmFnZUFy
ZWFNYXAoKnRoaXMpOwogCi0gICAgaWYgKGF1dG8gbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
KSkKKyAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKICAgICAgICAg
bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fc3RvcmFnZU1hcElE
KSwgMCk7CiAKICAgICBtX3N0b3JhZ2VNYXBJRCA9IHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oCmluZGV4IDY2NTUxMTNj
MTdmMjQ5ZjhjMDA3YzQ2YzNlMjc2MzRmM2EyY2FjZTAuLjcxZjA5ZDAyZThmYzUzYzJhZjBiNWRj
YmFhYzEwMDE1MWFlMWM1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw5ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIFN0b3JhZ2VBcmVhSW1wbDsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OwogCi1jbGFzcyBTdG9yYWdlQXJlYU1hcCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VBcmVh
TWFwPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIENhbk1ha2VXZWFrUHRy
PFN0b3JhZ2VBcmVhTWFwPiB7CitjbGFzcyBTdG9yYWdlQXJlYU1hcCBmaW5hbCA6IHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlQXJlYU1h
cD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8U3RvcmFnZUFyZWFNYXA+IGNyZWF0ZShTdG9yYWdlTmFtZXNwYWNlSW1wbCosIFJlZjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbj4mJik7CisgICAgU3RvcmFnZUFyZWFNYXAoU3RvcmFnZU5hbWVz
cGFjZUltcGwmLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYpOwogICAgIH5TdG9yYWdl
QXJlYU1hcCgpOwogCiAgICAgV2ViQ29yZTo6U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9CkBAIC02MiwxNyArNjMsMTQgQEAgcHVibGljOgog
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpOwogCiAgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAKICAgICBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3Vy
aXR5T3JpZ2luLmdldCgpOyB9CisgICAgY29uc3QgT3B0aW9uYWw8U3RvcmFnZUFyZWFJZGVudGlm
aWVyPiYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZU1hcElEOyB9CiAKLSAg
ICB2b2lkIGNvbm5lY3QoKTsKICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKLSAgICBjb25zdCBPcHRp
b25hbDxTdG9yYWdlQXJlYUlkZW50aWZpZXI+JiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9zdG9yYWdlTWFwSUQ7IH0KIAogcHJpdmF0ZToKLSAgICBTdG9yYWdlQXJlYU1hcChTdG9yYWdl
TmFtZXNwYWNlSW1wbCosIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJik7Ci0KICAgICB2
b2lkIGRpZFNldEl0ZW0odWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5
LCBib29sIHF1b3RhRXJyb3IpOwogICAgIHZvaWQgZGlkUmVtb3ZlSXRlbSh1aW50NjRfdCBzdG9y
YWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIHZvaWQgZGlkQ2xlYXIodWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQpOwpAQCAtODEsNyArNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2xlYXJDYWNoZSgpOwogCiAgICAgdm9pZCByZXNldFZhbHVlcygpOwotICAgIHZvaWQgbG9hZFZh
bHVlc0lmTmVlZGVkKCk7CisgICAgV2ViQ29yZTo6U3RvcmFnZU1hcCYgZW5zdXJlU3RvcmFnZU1h
cCgpOwogCiAgICAgYm9vbCBzaG91bGRBcHBseUNoYW5nZUZvcktleShjb25zdCBTdHJpbmcmIGtl
eSkgY29uc3Q7CiAgICAgdm9pZCBhcHBseUNoYW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBuZXdWYWx1ZSk7CkBAIC04OSwxOSArODcsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudChjb25zdCBPcHRpb25hbDxTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyPiYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAg
dm9pZCBkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50KGNvbnN0IE9wdGlvbmFsPFN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXI+JiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKIAot
ICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiBtX3N0b3JhZ2VOYW1lc3BhY2U7Ci0KLSAgICBPcHRp
b25hbDxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IG1fc3RvcmFnZU1hcElEOworICAgIHZvaWQgY29u
bmVjdCgpOwogCi0gICAgV2ViQ29yZTo6U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLSAgICB1
bnNpZ25lZCBtX3F1b3RhSW5CeXRlczsKKyAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbCYgbV9zdG9y
YWdlTmFtZXNwYWNlOwogICAgIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0
eU9yaWdpbjsKLQogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7
Ci0KLSAgICB1aW50NjRfdCBtX2N1cnJlbnRTZWVkOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ2xl
YXI7CisgICAgT3B0aW9uYWw8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBtX3N0b3JhZ2VNYXBJRDsK
ICAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IG1fcGVuZGluZ1ZhbHVlQ2hhbmdlczsKKyAgICB1
aW50NjRfdCBtX2N1cnJlbnRTZWVkIHsgMCB9OworICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVz
OworICAgIFdlYkNvcmU6OlN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7CisgICAgYm9vbCBtX2hh
c1BlbmRpbmdDbGVhciB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVh
TWFwLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZUFyZWFNYXAubWVzc2FnZXMuaW4KaW5kZXggZGRjYjg1NTQ2NmZmNWY3MmM3YTYwMmY3YmUy
YWU1MWFkNGQ5NzU4MS4uM2I1MzAzYzA5NDU0NDUyOWM5YWY1ZjQ0MTQxZjc0YjEzMTE1ZjQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZUFyZWFNYXAubWVzc2FnZXMuaW4KQEAgLTIwLDcgKzIwLDcgQEAKICMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotbWVzc2FnZXMgLT4gU3RvcmFnZUFyZWFN
YXAgeworbWVzc2FnZXMgLT4gU3RvcmFnZUFyZWFNYXAgTm90UmVmQ291bnRlZCB7CiAgICAgRGlk
U2V0SXRlbSh1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwgYm9vbCBxdW90YUV4
Y2VwdGlvbikKICAgICBEaWRSZW1vdmVJdGVtKHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJp
bmcga2V5KQogICAgIERpZENsZWFyKHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuY3BwCmluZGV4IGMzMWExOGUwYzM4YmVkZDQwZjM4YzgyZDMyYjJiYWM3MmE4Njhj
YzkuLmZkMGYxMjJjMjczMThjMTVmZTNmNTI5NzkzMGM3OWJiZTdmMzhlNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAKQEAgLTEwMiwxNyArMTAyLDEwIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmRpZERlc3Ryb3lTdG9yYWdlQXJlYU1hcChTdG9yYWdlQXJlYU1hcCYgbWFwKQogCiBS
ZWY8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYShjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luRGF0YSkKIHsKLSAgICBSZWZQdHI8U3Rv
cmFnZUFyZWFNYXA+IG1hcDsKLQotICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9y
aWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKTsKLSAgICBhdXRvJiBzbG90ID0gbV9zdG9yYWdlQXJl
YU1hcHMuYWRkKHNlY3VyaXR5T3JpZ2luLT5kYXRhKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICBpZiAoIXNsb3QpIHsKLSAgICAgICAgbWFwID0gU3RvcmFnZUFyZWFNYXA6OmNyZWF0
ZSh0aGlzLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSk7Ci0gICAgICAgIHNsb3QgPSBtYXAuZ2V0
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1hcCA9IHNsb3Q7Ci0KLSAgICByZXR1cm4gU3RvcmFn
ZUFyZWFJbXBsOjpjcmVhdGUobWFwLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGF1dG8mIG1hcCA9
IG1fc3RvcmFnZUFyZWFNYXBzLmVuc3VyZShzZWN1cml0eU9yaWdpbkRhdGEsIFsmXSB7CisgICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFN0b3JhZ2VBcmVhTWFwPigqdGhpcywgc2VjdXJpdHlPcmln
aW5EYXRhLnNlY3VyaXR5T3JpZ2luKCkpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBy
ZXR1cm4gU3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUoKm1hcCk7CiB9CiAKIFJlZjxTdG9yYWdlTmFt
ZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weShQYWdlJiBuZXdQYWdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmgKaW5kZXggOGJlODk3NzM3Y2ZkMWM4NDk2NmIyYWRiZTcyMDMyYTliZWY2MzY5
OS4uZGY3NjRmMzNmZjgxM2M3NjY1ZTY4NjY5MTg0Y2JhNTk3ZTE4MDY2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTmFt
ZXNwYWNlLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtNzksNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgdW5zaWduZWQgbV9xdW90
YUluQnl0ZXM7CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVm
UHRyPFN0b3JhZ2VBcmVhTWFwPj4gbV9zdG9yYWdlQXJlYU1hcHM7CisgICAgSGFzaE1hcDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYU1hcD4+
IG1fc3RvcmFnZUFyZWFNYXBzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388306</attachid>
            <date>2020-01-21 09:16:23 -0800</date>
            <delta_ts>2020-01-21 09:57:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206433-20200121091622.patch</filename>
            <type>text/plain</type>
            <size>35996</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODY1YWNhNzRjNjc4NDAw
YWEyODAyMGY3ZDdhNDQ4NTBmMTk2NDZjZC4uMGRmZDcxODQ2NzBjNDJkNDE1NmRjMDJhYzVlMTVl
MWRiODFmN2I4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgaW1wcm92ZW1lbnRz
IHRvIFN0b3JhZ2VBcmVhTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDY0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBVc2UgaW5saW5lIGluaXRpYWxpemF0aW9uIGZvciBzb21lIG9mIFN0b3JhZ2VNYXAn
cyBkYXRhIG1lbWJlci4KKyAgICAgICAgQWxzbyBzcGVjaWZ5IHVpbnQ4X3QgYXMgdW5kZXJseWlu
ZyB0eXBlIG9mIFN0b3JhZ2VUeXBlIGVudW0gY2xhc3MgZm9yIGJldHRlciBwYWNraW5nLgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6U3RvcmFnZU1hcCk6CisgICAgICAgICog
c3RvcmFnZS9TdG9yYWdlTWFwLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlVHlwZS5oOgor
CiAyMDIwLTAxLTIxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJbnRlZ3JhdGlvbl0gVXNlIElubGluZUZvcm1hdHRpbmdDb250ZXh0IGRpcmVjdGx5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IGFmMjllOTQ3MjQxODFkY2U3M2VlMWQ4ZDJkNDA5ZDljZDUwMTcwYTguLjhm
NzExNGQ0NmEwNzQwMGJkMjNiMWM4NjA4ZWVkNWM2NWU1NjVmNWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTAgQEAKKzIwMjAtMDEtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBNaW5vciBpbXByb3ZlbWVudHMgdG8gU3RvcmFnZUFyZWFNYXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjQzMworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIE1pbm9yIGltcHJvdmVtZW50cyB0byBT
dG9yYWdlQXJlYU1hcDoKKyAgICAgICAgMS4gVGhlIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUg
UmVmQ291bnRlZCwgYXMgaXQgaXMgc29sZWx5IG93bmVkIGJ5IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
LiBIYXZpbmcgaXQKKyAgICAgICAgICAgUmVmQ291bnRlZCB3YXMgYWN0dWFsbHkgZGFuZ2Vyb3Vz
IGJlY2F1c2UgU3RvcmFnZUFyZWFNYXAgaGFkIGEgcmF3IHBvaW50ZXIgZGF0YSBtZW1iZXIgdG8g
aXRzIG93bmVyOgorICAgICAgICAgICBtX3N0b3JhZ2VOYW1lc3BhY2UuIFRoaXMgcmF3IHBvaW50
ZXIgY291bGQgYmVjb21lIHN0YWxlIGlmIHlvdSBleHRlbmQgdGhlIGxpZmV0aW1lIG9mIHRoZSBT
dG9yYWdlQXJlYU1hcAorICAgICAgICAgICBvYmplY3QgdG8gb3V0bGl2ZSBpdHMgU3RvcmFnZU5h
bWVzcGFjZUltcGwuCisgICAgICAgIDIuIE1ha2UgU3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QoKSBw
cml2YXRlIGFzIGl0IGlzIG5ldmVyIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGNsYXNzCisgICAg
ICAgIDMuIFJlb3JkZXIgZGF0YSBtZW1iZXJzIGZvciBiZXR0ZXIgcGFja2luZworICAgICAgICA0
LiBVc2UgbW9kZXJuIGxvb3BzIGluIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICA1LiBSZW5h
bWUgbG9hZFZhbHVlc0lmTmVlZGVkKCkgdG8gZW5zdXJlU3RvcmFnZU1hcCgpIGFuZCBoYXZlIGl0
IHJldHVybiB0aGUgU3RvcmFnZU1hcCBvYmplY3QuIFRoaXMgbWFrZXMKKyAgICAgICAgICAgY2Fs
bHMgc2l0ZSBtb3JlIGNvbmNpc2UgYW5kIGl0IG1ha2VzIGl0IGNsZWFyZXIgd2hlbiB0aGlzIG1l
dGhvZCBuZWVkcyB0byBiZSBjYWxsZWQuCisgICAgICAgIDYuIE1hcmsgY2xhc3MgYXMgZmluYWwK
KyAgICAgICAgNy4gUmVwbGFjZSBMT0dfRVJST1IoKSB3aXRoIFJFTEVBU0VfTE9HX0VSUk9SKCkg
c28gdGhhdCB3ZSBjYW4gc2VlIGVycm9yIGxvZ2dpbmcgaW4gc3lzZGlhZ25vc2VzCisgICAgICAg
IDguIFVzZSBtb3JlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiByYXcgcG9pbnRlcnMgdG8gbWFrZSBp
dCBjbGVhciB3aGVuIG51bGwgY2hlY2tzIGFyZSBub3QgbmVlZGVkCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUlt
cGw6OlN0b3JhZ2VBcmVhSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpTdG9yYWdlQXJl
YU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpsZW5ndGgpOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6a2V5KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWFNYXA6Oml0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6c2V0SXRl
bSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZUFyZWFNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6
OnJlc2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmVuc3VyZVN0
b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6YXBwbHlDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFn
ZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoTG9jYWxT
dG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAyMC0wMS0y
MSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XVtXUEVdIFRlc3RXZWJLaXRVc2VyQ29udGVudEZpbHRlclN0b3JlIGlzIGNyYXNoaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgK
aW5kZXggZGJmODIyMDVkYjViY2NiZTE2OWVkMGU5NDdkMWFkODNkZDg1MGZkNi4uZTc4MTgzNjQw
YTI5OWFlNDEwNzI4NWVmNGMyOGFjODFkOTQwYTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTA4LDcgKzEwOCw3
IEBAIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKICNlbmRpZgog
Ci1lbnVtIGNsYXNzIFN0b3JhZ2VUeXBlOworZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4
X3Q7CiAKIHN0cnVjdCBDb21wdXRlZEVmZmVjdFRpbWluZzsKIHN0cnVjdCBXZWJTb2NrZXRGcmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKaW5kZXggYWMzMzBiZjE0ZmJjN2MyMWU3M2ZkYTNiNTljZDIwYWYxMzdi
NzkxYy4uYjc5MDFlYjZlNmRhZmFjYWI2ZDhmYmQ5MDA1ODM0ZDBhYTFmMWRhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKQEAgLTcxNiw3ICs3MTYsNyBAQCBwdWJsaWM6CiAgICAgRGV2aWNlT3JpZW50YXRpb25V
cGRhdGVQcm92aWRlciogZGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5nZXQoKTsgfQogI2VuZGlm
CiAKLSAgICB2b2lkIGZvckVhY2hEb2N1bWVudChjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9j
dW1lbnQmKT4mKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZvckVhY2hEb2N1bWVu
dChjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mKSBjb25zdDsKICAgICB2b2lk
IGZvckVhY2hNZWRpYUVsZW1lbnQoY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKEhUTUxNZWRpYUVs
ZW1lbnQmKT4mKTsKIAogICAgIGJvb2wgc2hvdWxkRGlzYWJsZUNvcnNGb3JSZXF1ZXN0VG8oY29u
c3QgVVJMJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggNWE5
ZmZmZjlhNjI2MDg3ODUwN2VkOTFkNzI1MmY2NGZlMWZiNGIzZS4uMjUxYmQ0MjlkNjIwNjI5OTdm
NzI4ZGMwZGM2NjI1ZjE0ZjFiNWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEu
aApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwog
Y2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogCi1lbnVtIGNsYXNzIFN0b3JhZ2VUeXBlOworZW51
bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4X3Q7CiAKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRh
dGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCmluZGV4IGVhNTE5OGRlNGFl
M2IxN2QwNTA5YTkxZDlmY2FiYjgwZjMyYjMxNzIuLmQ0N2M3MmIwNmVmZmFlNGMyNzY5Yjc2Mjc2
YjMxNDFmYmQ2ZmRiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcApAQCAt
MzcsOSArMzcsNyBAQCBSZWY8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6Y3JlYXRlKHVuc2lnbmVk
IHF1b3RhKQogCiBTdG9yYWdlTWFwOjpTdG9yYWdlTWFwKHVuc2lnbmVkIHF1b3RhKQogICAgIDog
bV9pdGVyYXRvcihtX21hcC5lbmQoKSkKLSAgICAsIG1faXRlcmF0b3JJbmRleChVSU5UX01BWCkK
ICAgICAsIG1fcXVvdGFTaXplKHF1b3RhKSAgLy8gcXVvdGEgbWVhc3VyZWQgaW4gYnl0ZXMKLSAg
ICAsIG1fY3VycmVudExlbmd0aCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1h
cC5oCmluZGV4IDNhMjk1ZWU1MTJiMjEyYzgwMDY5MjEwYzI0YTg0OWUyM2ZjZDQ1ZGIuLjRlYTll
Nzg5NmNhZmE3Njk5MGU1OTBjOGI5NWQzNzE0NzMyMGIxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5oCkBAIC02MiwxMCArNjIsMTAgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG1fbWFwOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVy
YXRvciBtX2l0ZXJhdG9yOwotICAgIHVuc2lnbmVkIG1faXRlcmF0b3JJbmRleDsKKyAgICB1bnNp
Z25lZCBtX2l0ZXJhdG9ySW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgfTsKIAogICAgIHVuc2lnbmVkIG1fcXVvdGFTaXplOyAvLyBNZWFzdXJlZCBpbiBieXRlcy4K
LSAgICB1bnNpZ25lZCBtX2N1cnJlbnRMZW5ndGg7IC8vIE1lYXN1cmVkIGluIFVDaGFycy4KKyAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRMZW5ndGggeyAwIH07IC8vIE1lYXN1cmVkIGluIFVDaGFycy4K
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVR5
cGUuaAppbmRleCBmZTcwMDI1N2JhY2I0OWFmZGRmZjQ1NjQyYTYzZDQyOGQ3NDBmODljLi4yMjA1
ODdlYzg2YmE1YzUxNzFiNjczYjE3N2E0NjYxYTIyY2YzMTNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVHlwZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotZW51bSBjbGFzcyBTdG9yYWdlVHlwZSB7CitlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogdWlu
dDhfdCB7CiAgICAgU2Vzc2lvbiwKICAgICBMb2NhbCwKICAgICBUcmFuc2llbnRMb2NhbCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuY3BwCmluZGV4IGJkM2ExM2I0YmI4MWIzMzA0MDlkNzcwZGYxN2RkMjllYzU0MjlhNDcu
Ljk1NWQ1NjJiNzM3YjhiNzNkYTA4MjVmNjdhNGI5OGZhODAzYWU3ZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cApAQCAtMzcsMTQgKzM3LDE0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1SZWY8U3RvcmFnZUFyZWFJbXBsPiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0
ZShSZWY8U3RvcmFnZUFyZWFNYXA+JiYgc3RvcmFnZUFyZWFNYXApCitSZWY8U3RvcmFnZUFyZWFJ
bXBsPiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShTdG9yYWdlQXJlYU1hcCYgc3RvcmFnZUFyZWFN
YXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZUFyZWFJbXBsKFdURk1vdmUo
c3RvcmFnZUFyZWFNYXApKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZUFyZWFJ
bXBsKHN0b3JhZ2VBcmVhTWFwKSk7CiB9CiAKLVN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJ
bXBsKFJlZjxTdG9yYWdlQXJlYU1hcD4mJiBzdG9yYWdlQXJlYU1hcCkKK1N0b3JhZ2VBcmVhSW1w
bDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhTWFwJiBzdG9yYWdlQXJlYU1hcCkKICAgICA6
IG1faWRlbnRpZmllcihJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQotICAgICwgbV9zdG9yYWdlQXJl
YU1hcChtYWtlV2Vha1B0cihzdG9yYWdlQXJlYU1hcC5nZXQoKSkpCisgICAgLCBtX3N0b3JhZ2VB
cmVhTWFwKG1ha2VXZWFrUHRyKHN0b3JhZ2VBcmVhTWFwKSkKIHsKIH0KIApAQCAtOTgsNyArOTgs
NyBAQCBib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpCiBT
dG9yYWdlVHlwZSBTdG9yYWdlQXJlYUltcGw6OnN0b3JhZ2VUeXBlKCkgY29uc3QKIHsKICAgICBp
ZiAobV9zdG9yYWdlQXJlYU1hcCkKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWFNYXAtPnN0
b3JhZ2VUeXBlKCk7CisgICAgICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhTWFwLT50eXBlKCk7CiAK
ICAgICAvLyBXZSBwcm9iYWJseSBuZWVkIGFuIEludmFsaWQgdHlwZS4KICAgICByZXR1cm4gU3Rv
cmFnZVR5cGU6OkxvY2FsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAppbmRleCAwZjA1ZGY3NWI1N2YzNDJmMWNhOWE5NmNh
NzQwODVkMzc3MzhhZjY0Li43OWUxNGI5MWY4YWM2ZDgyZmU3OTJhYzA2ZDM5NGVkNzY1ODQyYTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuaApAQCAtNDMsMTMgKzQzLDEzIEBAIGNsYXNzIFN0b3JhZ2VBcmVhSW1wbCBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlQXJlYSB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
SWRlbnRpZmllciA9IFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXI7CiAKLSAgICBzdGF0aWMgUmVm
PFN0b3JhZ2VBcmVhSW1wbD4gY3JlYXRlKFJlZjxTdG9yYWdlQXJlYU1hcD4mJik7CisgICAgc3Rh
dGljIFJlZjxTdG9yYWdlQXJlYUltcGw+IGNyZWF0ZShTdG9yYWdlQXJlYU1hcCYpOwogICAgIHZp
cnR1YWwgflN0b3JhZ2VBcmVhSW1wbCgpOwogCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6Ci0gICAgU3RvcmFnZUFy
ZWFJbXBsKFJlZjxTdG9yYWdlQXJlYU1hcD4mJik7CisgICAgU3RvcmFnZUFyZWFJbXBsKFN0b3Jh
Z2VBcmVhTWFwJik7CiAKICAgICAvLyBXZWJDb3JlOjpTdG9yYWdlQXJlYS4KICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAppbmRleCA1MDI4MWExOWU3MmIwNzc3ODUz
NmU1N2Q1ZDhjMmQzNjRjNWZkMzU1Li5iZGFjYjNhM2FjNDBlOWEzMWIyYmU4ODI1YjBiNWQwMDFi
YzU3ZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZUFyZWFNYXAuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcC5oIgogCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
SW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKQEAgLTQ4LDE4ICs0
OSwxMSBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UmVmPFN0b3JhZ2VBcmVhTWFwPiBTdG9yYWdlQXJlYU1hcDo6Y3JlYXRlKFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsKiBzdG9yYWdlTmFtZXNwYWNlLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYg
c2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZUFyZWFN
YXAoc3RvcmFnZU5hbWVzcGFjZSwgV1RGTW92ZShzZWN1cml0eU9yaWdpbikpKTsKLX0KLQotU3Rv
cmFnZUFyZWFNYXA6OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiBzdG9yYWdl
TmFtZXNwYWNlLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgc2VjdXJpdHlPcmlnaW4p
Ci0gICAgOiBtX3N0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZSkKLSAgICAsIG1fc3Rv
cmFnZVR5cGUoc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZVR5cGUoKSkKLSAgICAsIG1fcXVvdGFJ
bkJ5dGVzKHN0b3JhZ2VOYW1lc3BhY2UtPnF1b3RhSW5CeXRlcygpKQorU3RvcmFnZUFyZWFNYXA6
OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VOYW1lc3BhY2VJbXBsJiBzdG9yYWdlTmFtZXNwYWNlLCBS
ZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYgc2VjdXJpdHlPcmlnaW4pCisgICAgOiBtX25h
bWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihXVEZNb3Zl
KHNlY3VyaXR5T3JpZ2luKSkKLSAgICAsIG1fY3VycmVudFNlZWQoMCkKLSAgICAsIG1faGFzUGVu
ZGluZ0NsZWFyKGZhbHNlKQorICAgICwgbV9xdW90YUluQnl0ZXMoc3RvcmFnZU5hbWVzcGFjZS5x
dW90YUluQnl0ZXMoKSkKKyAgICAsIG1fdHlwZShzdG9yYWdlTmFtZXNwYWNlLnN0b3JhZ2VUeXBl
KCkpCiB7CiAgICAgY29ubmVjdCgpOwogfQpAQCAtNzEsMzQgKzY1LDI3IEBAIFN0b3JhZ2VBcmVh
TWFwOjp+U3RvcmFnZUFyZWFNYXAoKQogCiB1bnNpZ25lZCBTdG9yYWdlQXJlYU1hcDo6bGVuZ3Ro
KCkKIHsKLSAgICBsb2FkVmFsdWVzSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VN
YXAtPmxlbmd0aCgpOworICAgIHJldHVybiBlbnN1cmVNYXAoKS5sZW5ndGgoKTsKIH0KIAogU3Ry
aW5nIFN0b3JhZ2VBcmVhTWFwOjprZXkodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgbG9hZFZhbHVl
c0lmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgpOworICAg
IHJldHVybiBlbnN1cmVNYXAoKS5rZXkoaW5kZXgpOwogfQogCiBTdHJpbmcgU3RvcmFnZUFyZWFN
YXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCiB7Ci0gICAgbG9hZFZhbHVlc0lmTmVlZGVkKCk7
Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5nZXRJdGVtKGtleSk7CisgICAgcmV0dXJuIGVu
c3VyZU1hcCgpLmdldEl0ZW0oa2V5KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRl
bShGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQog
ewotICAgIGxvYWRWYWx1ZXNJZk5lZWRlZCgpOwotCi0gICAgQVNTRVJUKG1fc3RvcmFnZU1hcC0+
aGFzT25lUmVmKCkpOworICAgIGF1dG8mIG1hcCA9IGVuc3VyZU1hcCgpOworICAgIEFTU0VSVCht
YXAuaGFzT25lUmVmKCkpOwogCiAgICAgU3RyaW5nIG9sZFZhbHVlOwogICAgIHF1b3RhRXhjZXB0
aW9uID0gZmFsc2U7Ci0gICAgbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZh
bHVlLCBxdW90YUV4Y2VwdGlvbik7CisgICAgbWFwLnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFs
dWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTA3LDI5ICs5NCwyOSBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVt
KEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjbwogCiAg
ICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCi0gICAgaWYgKG1fc3RvcmFnZU1h
cElEKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OlNldEl0ZW0oKm1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1f
Y3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSks
IDApOworICAgIGlmIChtX21hcElEKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXJTZXQ6OlNldEl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50
aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50
KCktPnVybCgpKSwgMCk7CiAgICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlN0b3JhZ2VBcmVh
TWFwOjpzZXRJdGVtIGZhaWxzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OnNldEl0
ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQogCiB2b2lk
IFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwg
U3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBs
b2FkVmFsdWVzSWZOZWVkZWQoKTsKLSAgICBBU1NFUlQobV9zdG9yYWdlTWFwLT5oYXNPbmVSZWYo
KSk7CisgICAgYXV0byYgbWFwID0gZW5zdXJlTWFwKCk7CisgICAgQVNTRVJUKG1hcC5oYXNPbmVS
ZWYoKSk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgbV9zdG9yYWdlTWFwLT5yZW1vdmVJ
dGVtKGtleSwgb2xkVmFsdWUpOworICAgIG1hcC5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwog
CiAgICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Bl
bmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKLSAgICBpZiAobV9zdG9yYWdlTWFwSUQpCi0g
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6UmVt
b3ZlSXRlbSgqbV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJy
ZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAgICBp
ZiAobV9tYXBJRCkKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCks
IG1fY3VycmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7
CiAgICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVt
IGZhaWxzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0gZmFpbGVk
IGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQogCiB2b2lkIFN0b3JhZ2VB
cmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1w
bCogc291cmNlQXJlYSkKQEAgLTEzOSw1NCArMTI2LDUxIEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6
OmNsZWFyKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3Vy
Y2VBCiAgICAgcmVzZXRWYWx1ZXMoKTsKIAogICAgIG1faGFzUGVuZGluZ0NsZWFyID0gdHJ1ZTsK
LSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwor
ICAgIG1fbWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKIAotICAgIGlm
IChtX3N0b3JhZ2VNYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJl
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VNYW5hZ2VyU2V0OjpDbGVhcigqbV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50
aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwg
MCk7CisgICAgaWYgKG1fbWFwSUQpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2Vz
OjpTdG9yYWdlTWFuYWdlclNldDo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZp
ZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7
CiAgICAgZWxzZQotICAgICAgICBMT0dfRVJST1IoIlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVt
IGZhaWxzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmNsZWFyIGZhaWxlZCBiZWNh
dXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYU1h
cDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpCiB7Ci0gICAgbG9hZFZhbHVlc0lmTmVlZGVk
KCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOworICAgIHJldHVy
biBlbnN1cmVNYXAoKS5jb250YWlucyhrZXkpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpy
ZXNldFZhbHVlcygpCiB7Ci0gICAgbV9zdG9yYWdlTWFwID0gbnVsbHB0cjsKKyAgICBtX21hcCA9
IG51bGxwdHI7CiAKICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuY2xlYXIoKTsKICAgICBtX2hh
c1BlbmRpbmdDbGVhciA9IGZhbHNlOwotICAgIG1fY3VycmVudFNlZWQrKzsKKyAgICArK21fY3Vy
cmVudFNlZWQ7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCgp
CitTdG9yYWdlTWFwJiBTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKCkKIHsKICAgICBjb25uZWN0
KCk7CiAKLSAgICBpZiAobV9zdG9yYWdlTWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0KLSAgICBpZiAobV9zdG9yYWdlTWFwSUQpIHsK
LSAgICAgICAgLy8gVGhlIFN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKSBJUEMgbWF5IGJl
IHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNoIHRoZSB2YWx1ZXMgZnJvbSBk
aXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3QKLSAgICAgICAgLy8gb2YgZGF0YS4KLSAgICAgICAg
SVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBD
U2NvcGU7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkdldFZhbHVlcygqbV9zdG9yYWdlTWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIExPR19FUlJPUigiU3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCBmYWlscyB0
byBsb2FkIGZyb20gbmV0d29yayBwcm9jZXNzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52
YWxpZCIpOwotCi0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJ
bkJ5dGVzKTsKLSAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7
CisgICAgaWYgKCFtX21hcCkgeworICAgICAgICBtX21hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSht
X3F1b3RhSW5CeXRlcyk7CisKKyAgICAgICAgaWYgKG1fbWFwSUQpIHsKKyAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gdXNlIGEgSVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHRvIHBy
ZXZlbnQgVUlQcm9jZXNzIGhhbmdzIGluIGNhc2Ugd2UgcmVjZWl2ZSBhIHN5bmNocm9ub3VzIElQ
QyBmcm9tIHRoZSBVSVByb2Nlc3Mgd2hpbGUgd2UncmUgd2FpdGluZyBmb3IgYSByZXNwb25zZQor
ICAgICAgICAgICAgLy8gZnJvbSBvdXIgU3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygpIElQ
Qy4gVGhpcyBJUEMgbWF5IGJlIHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNo
IHRoZSB2YWx1ZXMgZnJvbSBkaXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgZGF0YS4KKyAg
ICAgICAgICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5j
aHJvbm91c0lQQ1Njb3BlOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFs
dWVzOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdl
TWFuYWdlclNldDo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOworICAgICAgICAgICAgbV9tYXAtPmlt
cG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAgZmFp
bGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBp
cyBpbnZhbGlkIik7CisgICAgfQorICAgIHJldHVybiAqbV9tYXA7CiB9CiAKLXZvaWQgU3RvcmFn
ZUFyZWFNYXA6OmRpZFNldEl0ZW0odWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBib29sIHF1b3RhRXJyb3IpCit2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaWRTZXRJdGVt
KHVpbnQ2NF90IG1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sIHF1b3RhRXJyb3IpCiB7
Ci0gICAgaWYgKG1fY3VycmVudFNlZWQgIT0gc3RvcmFnZU1hcFNlZWQpCisgICAgaWYgKG1fY3Vy
cmVudFNlZWQgIT0gbWFwU2VlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fcGVu
ZGluZ1ZhbHVlQ2hhbmdlcy5jb250YWlucyhrZXkpKTsKQEAgLTE5OSwxOCArMTgzLDE4IEBAIHZv
aWQgU3RvcmFnZUFyZWFNYXA6OmRpZFNldEl0ZW0odWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNv
bnN0IFN0cmluZyYga2V5LCBib29sCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLnJlbW92ZShr
ZXkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaWRSZW1vdmVJdGVtKHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgU3RvcmFnZUFyZWFNYXA6OmRp
ZFJlbW92ZUl0ZW0odWludDY0X3QgbWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7Ci0gICAg
aWYgKG1fY3VycmVudFNlZWQgIT0gc3RvcmFnZU1hcFNlZWQpCisgICAgaWYgKG1fY3VycmVudFNl
ZWQgIT0gbWFwU2VlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fcGVuZGluZ1Zh
bHVlQ2hhbmdlcy5jb250YWlucyhrZXkpKTsKICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMucmVt
b3ZlKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpZENsZWFyKHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkKQordm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlkQ2xlYXIodWludDY0X3QgbWFw
U2VlZCkKIHsKLSAgICBpZiAobV9jdXJyZW50U2VlZCAhPSBzdG9yYWdlTWFwU2VlZCkKKyAgICBp
ZiAobV9jdXJyZW50U2VlZCAhPSBtYXBTZWVkKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQobV9oYXNQZW5kaW5nQ2xlYXIpOwpAQCAtMjIwLDcgKzIwNCw3IEBAIHZvaWQgU3RvcmFnZUFy
ZWFNYXA6OmRpZENsZWFyKHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkKQogYm9vbCBTdG9yYWdlQXJl
YU1hcDo6c2hvdWxkQXBwbHlDaGFuZ2VGb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7
CiAgICAgLy8gV2UgaGF2ZSBub3QgeWV0IGxvYWRlZCBhbnl0aGluZyBmcm9tIHRoaXMgc3RvcmFn
ZSBtYXAuCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXApCisgICAgaWYgKCFtX21hcCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBzdG9yYWdlIGFyZWEgaXMgY3Vy
cmVudGx5IHdhaXRpbmcgZm9yIHRoZSBzdG9yYWdlIG1hbmFnZXIgdG8gdXBkYXRlIHRoZSBnaXZl
biBrZXkuCkBAIC0yMzQsNyArMjE4LDcgQEAgYm9vbCBTdG9yYWdlQXJlYU1hcDo6c2hvdWxkQXBw
bHlDaGFuZ2VGb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAKIHZvaWQgU3RvcmFnZUFy
ZWFNYXA6OmFwcGx5Q2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlKQogewotICAgIEFTU0VSVCghbV9zdG9yYWdlTWFwIHx8IG1fc3RvcmFnZU1hcC0+aGFzT25l
UmVmKCkpOworICAgIEFTU0VSVCghbV9tYXAgfHwgbV9tYXAtPmhhc09uZVJlZigpKTsKIAogICAg
IC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbGVhciBwZW5kaW5nIHdlIGRvbid0IHdhbnQgdG8g
YXBwbHkgYW55IGNoYW5nZXMgdW50aWwgd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIERpZENsZWFy
IG1lc3NhZ2VzLgogICAgIGlmIChtX2hhc1BlbmRpbmdDbGVhcikKQEAgLTI0MiwyMyArMjI2LDIy
IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmFwcGx5Q2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlKQogCiAgICAgaWYgKCFrZXkpIHsKICAgICAgICAgLy8gQSBu
dWxsIGtleSBtZWFucyBjbGVhci4KLSAgICAgICAgYXV0byBuZXdTdG9yYWdlTWFwID0gU3RvcmFn
ZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKKyAgICAgICAgYXV0byBuZXdNYXAgPSBTdG9y
YWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwogCiAgICAgICAgIC8vIEFueSBjaGFuZ2Vz
IHRoYXQgd2VyZSBtYWRlIGxvY2FsbHkgYWZ0ZXIgdGhlIGNsZWFyIG11c3Qgc3RpbGwgYmUga2Vw
dCBhcm91bmQgaW4gdGhlIG5ldyBtYXAuCi0gICAgICAgIGZvciAoYXV0byBpdCA9IG1fcGVuZGlu
Z1ZhbHVlQ2hhbmdlcy5iZWdpbigpLmtleXMoKSwgZW5kID0gbV9wZW5kaW5nVmFsdWVDaGFuZ2Vz
LmVuZCgpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGtleSA9ICppdDsKLQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gbV9zdG9yYWdlTWFw
LT5nZXRJdGVtKGtleSk7CisgICAgICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9wZW5kaW5nVmFs
dWVDaGFuZ2VzKSB7CisgICAgICAgICAgICBhdXRvJiBrZXkgPSBjaGFuZ2Uua2V5OworICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlID0gbV9tYXAtPmdldEl0ZW0oa2V5KTsKICAgICAgICAgICAgIGlm
ICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoYW5nZSBtdXN0IGhhdmUgYmVl
biBhIHBlbmRpbmcgcmVtb3ZlLCBpZ25vcmUgaXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAg
ICAgIG5ld1N0b3JhZ2VNYXAtPnNldEl0ZW1JZ25vcmluZ1F1b3RhKGtleSwgb2xkVmFsdWUpOwor
ICAgICAgICAgICAgbmV3TWFwLT5zZXRJdGVtSWdub3JpbmdRdW90YShrZXksIG9sZFZhbHVlKTsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1h
cCk7CisgICAgICAgIG1fbWFwID0gV1RGTW92ZShuZXdNYXApOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0yNjgsMTEgKzI1MSwxMSBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjphcHBseUNo
YW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSkKICAgICBpZiAo
IW5ld1ZhbHVlKSB7CiAgICAgICAgIC8vIEEgbnVsbCBuZXcgdmFsdWUgbWVhbnMgdGhhdCB0aGUg
aXRlbSBzaG91bGQgYmUgcmVtb3ZlZC4KICAgICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAgICAg
ICBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgICAgIG1fbWFw
LT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9zdG9yYWdlTWFwLT5zZXRJdGVtSWdub3JpbmdRdW90YShrZXksIG5ld1ZhbHVlKTsKKyAg
ICBtX21hcC0+c2V0SXRlbUlnbm9yaW5nUXVvdGEoa2V5LCBuZXdWYWx1ZSk7CiB9CiAKIHZvaWQg
U3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IE9wdGlvbmFsPFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXI+JiBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtMjgyLDcgKzI2NSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFN
YXA6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IE9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1wbElk
ZW50aWZpCiAgICAgICAgIGFwcGx5Q2hhbmdlKGtleSwgbmV3VmFsdWUpOwogICAgIH0KIAotICAg
IGlmIChzdG9yYWdlVHlwZSgpID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKQorICAgIGlmICh0eXBl
KCkgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24pCiAgICAgICAgIGRpc3BhdGNoU2Vzc2lvblN0b3Jh
Z2VFdmVudChzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0
cmluZyk7CiAgICAgZWxzZQogICAgICAgICBkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50KHN0b3Jh
Z2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKTsKQEAgLTI5
MywxMDMgKzI3Niw5MiBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhckNhY2hlKCkKICAgICBy
ZXNldFZhbHVlcygpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFNlc3Npb25T
dG9yYWdlRXZlbnQoY29uc3QgT3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcj4mIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCitzdGF0
aWMgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lc0ZvckV2ZW50RGlzcGF0Y2hpbmcoUGFnZSYg
cGFnZSwgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgY29uc3QgT3B0aW9uYWw8U3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllcj4mIHN0b3JhZ2VBcmVhSW1wbElEKQogewotICAgIC8vIE5hbWVzcGFjZSBJ
RHMgZm9yIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVpdmFsZW50IHRvIHdlYiBw
YWdlIElEcwotICAgIC8vIHNvIHdlIGNhbiBnZXQgdGhlIHJpZ2h0IHBhZ2UgaGVyZS4KLSAgICBX
ZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShtX3N0b3Jh
Z2VOYW1lc3BhY2UtPnNlc3Npb25TdG9yYWdlUGFnZUlEKCkpOwotICAgIGlmICghd2ViUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKLQot
ICAgIFBhZ2UqIHBhZ2UgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpOwotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLmVxdWFsKG1f
c2VjdXJpdHlPcmlnaW4ucHRyKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
U3RvcmFnZSogc3RvcmFnZSA9IGRvY3VtZW50LT5kb21XaW5kb3coKS0+b3B0aW9uYWxTZXNzaW9u
U3RvcmFnZSgpOworICAgIHBhZ2UuZm9yRWFjaERvY3VtZW50KFsmXShhdXRvJiBkb2N1bWVudCkg
eworICAgICAgICBpZiAoIWRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuZXF1YWwoJm9yaWdpbikp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBhdXRvKiBzdG9yYWdlID0g
ZG9jdW1lbnQuZG9tV2luZG93KCkgPyBkb2N1bWVudC5kb21XaW5kb3coKS0+b3B0aW9uYWxTZXNz
aW9uU3RvcmFnZSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKCFzdG9yYWdlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgU3RvcmFnZUFyZWFJbXBsJiBzdG9yYWdlQXJlYSA9IHN0
YXRpY19jYXN0PFN0b3JhZ2VBcmVhSW1wbCY+KHN0b3JhZ2UtPmFyZWEoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBhdXRvJiBzdG9yYWdlQXJlYSA9IHN0YXRpY19j
YXN0PFN0b3JhZ2VBcmVhSW1wbCY+KHN0b3JhZ2UtPmFyZWEoKSk7CiAgICAgICAgIGlmIChzdG9y
YWdlQXJlYS5pZGVudGlmaWVyKCkgPT0gc3RvcmFnZUFyZWFJbXBsSUQpIHsKICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIHN0b3JhZ2UgYXJlYSB0aGF0IGNhdXNlZCB0aGUgZXZlbnQgdG8gYmUg
ZGlzcGF0Y2hlZC4KLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisgICAgICAgCisgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZy
YW1lKCkpIAorICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgfSk7CisgICAg
cmV0dXJuIGZyYW1lczsKK30KIAotICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICB9
Cit2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQoY29uc3Qg
T3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcj4mIHN0b3JhZ2VBcmVhSW1wbElELCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgLy8gTmFtZXNwYWNlIElE
cyBmb3Igc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBh
Z2UgSURzCisgICAgLy8gc28gd2UgY2FuIGdldCB0aGUgcmlnaHQgcGFnZSBoZXJlLgorICAgIGF1
dG8qIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKG1fbmFtZXNwYWNl
LnNlc3Npb25TdG9yYWdlUGFnZUlEKCkpOworICAgIGlmICghd2ViUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byogcGFnZSA9IHdlYlBhZ2UtPmNvcmVQYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGZyYW1lcyA9IGZyYW1lc0ZvckV2ZW50
RGlzcGF0Y2hpbmcoKnBhZ2UsIG1fc2VjdXJpdHlPcmlnaW4sIHN0b3JhZ2VBcmVhSW1wbElEKTsK
ICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRz
VG9GcmFtZXMoKnBhZ2UsIGZyYW1lcywga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0cmlu
ZywgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6
ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudChjb25zdCBPcHRpb25hbDxTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyPiYgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKIHsKLSAgICBBU1NFUlQoaXNMb2NhbFN0b3JhZ2Uoc3RvcmFnZVR5cGUoKSkpOwor
ICAgIEFTU0VSVChpc0xvY2FsU3RvcmFnZSh0eXBlKCkpKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8
RnJhbWU+PiBmcmFtZXM7CiAKICAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBsb2NhbCBzdG9yYWdl
IG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBhZ2UgZ3JvdXAgSURzLgotICAgIFBh
Z2VHcm91cCYgcGFnZUdyb3VwID0gKldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2VHcm91
cChtX3N0b3JhZ2VOYW1lc3BhY2UtPnBhZ2VHcm91cElEKCkpLT5jb3JlUGFnZUdyb3VwKCk7Ci0g
ICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZUdyb3VwLnBhZ2VzKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpLCBl
bmQgPSBwYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAoIWRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLmVxdWFsKG1fc2VjdXJpdHlPcmlnaW4ucHRyKCkpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZG9jdW1lbnQtPmRvbVdpbmRv
dygpLT5vcHRpb25hbExvY2FsU3RvcmFnZSgpOwotICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdG9yYWdlQXJlYUltcGwm
IHN0b3JhZ2VBcmVhID0gc3RhdGljX2Nhc3Q8U3RvcmFnZUFyZWFJbXBsJj4oc3RvcmFnZS0+YXJl
YSgpKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlQXJlYS5pZGVudGlmaWVyKCkgPT0gc3RvcmFn
ZUFyZWFJbXBsSUQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdG9yYWdlIGFy
ZWEgdGhhdCBjYXVzZWQgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQo
ZnJhbWUpOwotICAgICAgICB9Ci0gICAgfQorICAgIGF1dG8mIHBhZ2VHcm91cCA9ICpXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlR3JvdXAobV9uYW1lc3BhY2UucGFnZUdyb3VwSUQoKSkt
PmNvcmVQYWdlR3JvdXAoKTsKKyAgICBmb3IgKGF1dG8qIHBhZ2UgOiBwYWdlR3JvdXAucGFnZXMo
KSkKKyAgICAgICAgZnJhbWVzLmFwcGVuZFZlY3RvcihmcmFtZXNGb3JFdmVudERpc3BhdGNoaW5n
KCpwYWdlLCBtX3NlY3VyaXR5T3JpZ2luLCBzdG9yYWdlQXJlYUltcGxJRCkpOwogCiAgICAgU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lcyhw
YWdlR3JvdXAsIGZyYW1lcywga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0cmluZywgbV9z
ZWN1cml0eU9yaWdpbi0+ZGF0YSgpKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVj
dCgpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1hcElEKQorICAgIGlmIChtX21hcElEKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKG1fc3RvcmFnZVR5cGUpIHsKKyAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgogICAgIGNhc2UgU3RvcmFnZVR5
cGU6OlRyYW5zaWVudExvY2FsOgotICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRvcExldmVs
T3JpZ2luID0gbV9zdG9yYWdlTmFtZXNwYWNlLT50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29u
bmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5z
ZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgdG9w
TGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpS
ZXBseShtX3N0b3JhZ2VNYXBJRCksIDApOworICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRv
cExldmVsT3JpZ2luID0gbV9uYW1lc3BhY2UudG9wTGV2ZWxPcmlnaW4oKSkKKyAgICAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5l
Y3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vz
c2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdp
bi0+ZGF0YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFw
SUQpLCAwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5j
KE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX3N0
b3JhZ2VNYXBJRCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFj
ZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdl
clNldDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9T
ZXNzaW9uU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1f
c3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4t
PmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvU2Vzc2lvblN0
b3JhZ2VBcmVhOjpSZXBseShtX3N0b3JhZ2VNYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9u
U3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNw
YWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVw
bHkobV9tYXBJRCksIDApOwogICAgIH0KIAotICAgIGlmIChtX3N0b3JhZ2VNYXBJRCkKKyAgICBp
ZiAobV9tYXBJRCkKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVnaXN0ZXJTdG9y
YWdlQXJlYU1hcCgqdGhpcyk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3Qo
KQogewotICAgIGlmICghbV9zdG9yYWdlTWFwSUQpCisgICAgaWYgKCFtX21hcElEKQogICAgICAg
ICByZXR1cm47CiAKICAgICByZXNldFZhbHVlcygpOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7CiAKLSAgICBpZiAoYXV0byBuZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6RGlzY29u
bmVjdEZyb21TdG9yYWdlQXJlYSgqbV9zdG9yYWdlTWFwSUQpLCAwKTsKKyAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZXhpc3Rp
bmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkRp
c2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsKIAotICAgIG1fc3RvcmFnZU1h
cElEID0geyB9OworICAgIG1fbWFwSUQgPSB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZUFyZWFNYXAuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VB
cmVhTWFwLmgKaW5kZXggNjY1NTExM2MxN2YyNDlmOGMwMDdjNDZjM2UyNzYzNGYzYTJjYWNlMC4u
N2M4MTIxOWZmZTg1YWM3ZTc1NTVjODYwMTc0MTJlOGUwZmFhY2U5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDEy
ICs0NiwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFN0b3JhZ2VBcmVhSW1wbDsKIGNs
YXNzIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOwogCi1jbGFzcyBTdG9yYWdlQXJlYU1hcCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFN0b3JhZ2VBcmVhTWFwPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVhTWFwPiB7CitjbGFzcyBTdG9yYWdl
QXJlYU1hcCBmaW5hbCA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxTdG9yYWdlQXJlYU1hcD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3RvcmFnZUFyZWFNYXA+IGNyZWF0ZShTdG9yYWdl
TmFtZXNwYWNlSW1wbCosIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJik7CisgICAgU3Rv
cmFnZUFyZWFNYXAoU3RvcmFnZU5hbWVzcGFjZUltcGwmLCBSZWY8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+JiYpOwogICAgIH5TdG9yYWdlQXJlYU1hcCgpOwogCi0gICAgV2ViQ29yZTo6U3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9CisgICAg
V2ViQ29yZTo6U3RvcmFnZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCk7CiAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCk7CkBA
IC02MiwyNiArNjMsMjMgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXkpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
ZmluYWw7CiAKICAgICBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CisgICAgY29uc3Qg
T3B0aW9uYWw8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwSUQ7IH0KIAotICAgIHZvaWQgY29ubmVjdCgpOwogICAgIHZvaWQgZGlzY29ubmVj
dCgpOwotICAgIGNvbnN0IE9wdGlvbmFsPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4mIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VNYXBJRDsgfQogCiBwcml2YXRlOgotICAgIFN0
b3JhZ2VBcmVhTWFwKFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiwgUmVmPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiYmKTsKLQotICAgIHZvaWQgZGlkU2V0SXRlbSh1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgcXVvdGFFcnJvcik7Ci0gICAgdm9pZCBkaWRSZW1v
dmVJdGVtKHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSk7Ci0gICAg
dm9pZCBkaWRDbGVhcih1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCk7CisgICAgdm9pZCBkaWRTZXRJ
dGVtKHVpbnQ2NF90IG1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBib29sIHF1b3RhRXJyb3Ip
OworICAgIHZvaWQgZGlkUmVtb3ZlSXRlbSh1aW50NjRfdCBtYXBTZWVkLCBjb25zdCBTdHJpbmcm
IGtleSk7CisgICAgdm9pZCBkaWRDbGVhcih1aW50NjRfdCBtYXBTZWVkKTsKIAogICAgIHZvaWQg
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgT3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRlbnRp
Zmllcj4mIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZyk7CiAgICAgdm9pZCBjbGVhckNhY2hlKCk7CiAKICAgICB2b2lkIHJlc2V0VmFsdWVzKCk7
Ci0gICAgdm9pZCBsb2FkVmFsdWVzSWZOZWVkZWQoKTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlTWFw
JiBlbnN1cmVNYXAoKTsKIAogICAgIGJvb2wgc2hvdWxkQXBwbHlDaGFuZ2VGb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXkpIGNvbnN0OwogICAgIHZvaWQgYXBwbHlDaGFuZ2UoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUpOwpAQCAtODksMTkgKzg3LDE3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQoY29uc3QgT3B0aW9uYWw8U3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllcj4mLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpOwogICAgIHZvaWQgZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudChjb25zdCBPcHRpb25hbDxT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyPiYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZyk7CiAKLSAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbCogbV9zdG9yYWdlTmFtZXNwYWNlOwot
Ci0gICAgT3B0aW9uYWw8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBtX3N0b3JhZ2VNYXBJRDsKKyAg
ICB2b2lkIGNvbm5lY3QoKTsKIAotICAgIFdlYkNvcmU6OlN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5
cGU7Ci0gICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7CisgICAgU3RvcmFnZU5hbWVzcGFjZUlt
cGwmIG1fbmFtZXNwYWNlOwogICAgIFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gbV9zZWN1
cml0eU9yaWdpbjsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTWFwPiBtX3N0b3JhZ2VN
YXA7Ci0KLSAgICB1aW50NjRfdCBtX2N1cnJlbnRTZWVkOwotICAgIGJvb2wgbV9oYXNQZW5kaW5n
Q2xlYXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fbWFwOworICAgIE9wdGlv
bmFsPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gbV9tYXBJRDsKICAgICBIYXNoQ291bnRlZFNldDxT
dHJpbmc+IG1fcGVuZGluZ1ZhbHVlQ2hhbmdlczsKKyAgICB1aW50NjRfdCBtX2N1cnJlbnRTZWVk
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOworICAgIFdlYkNvcmU6OlN0b3Jh
Z2VUeXBlIG1fdHlwZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0NsZWFyIHsgZmFsc2UgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgppbmRl
eCBkZGNiODU1NDY2ZmY1ZjcyYzdhNjAyZjdiZTJhZTUxYWQ0ZDk3NTgxLi4zYjUzMDNjMDk0NTQ0
NTI5YzlhZjVmNDQxNDFmNzRiMTMxMTVmNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5p
bgpAQCAtMjAsNyArMjAsNyBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogCi1tZXNzYWdlcyAtPiBTdG9yYWdlQXJlYU1hcCB7CittZXNzYWdlcyAtPiBTdG9yYWdlQXJl
YU1hcCBOb3RSZWZDb3VudGVkIHsKICAgICBEaWRTZXRJdGVtKHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBTdHJpbmcga2V5LCBib29sIHF1b3RhRXhjZXB0aW9uKQogICAgIERpZFJlbW92ZUl0ZW0o
dWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXkpCiAgICAgRGlkQ2xlYXIodWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggYzMxYTE4ZTBj
MzhiZWRkNDBmMzhjODJkMzJiMmJhYzcyYTg2OGNjOS4uZmQwZjEyMmMyNzMxOGMxNWZlM2Y1Mjk3
OTMwYzc5YmJlN2YzOGU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMTAyLDE3ICsx
MDIsMTAgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6ZGlkRGVzdHJveVN0b3JhZ2VBcmVh
TWFwKFN0b3JhZ2VBcmVhTWFwJiBtYXApCiAKIFJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVz
cGFjZUltcGw6OnN0b3JhZ2VBcmVhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlP
cmlnaW5EYXRhKQogewotICAgIFJlZlB0cjxTdG9yYWdlQXJlYU1hcD4gbWFwOwotCi0gICAgYXV0
byBzZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luRGF0YS5zZWN1cml0eU9yaWdpbigpOwot
ICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhTWFwcy5hZGQoc2VjdXJpdHlPcmlnaW4tPmRh
dGEoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghc2xvdCkgewotICAgICAg
ICBtYXAgPSBTdG9yYWdlQXJlYU1hcDo6Y3JlYXRlKHRoaXMsIFdURk1vdmUoc2VjdXJpdHlPcmln
aW4pKTsKLSAgICAgICAgc2xvdCA9IG1hcC5nZXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbWFw
ID0gc2xvdDsKLQotICAgIHJldHVybiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShtYXAucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgYXV0byYgbWFwID0gbV9zdG9yYWdlQXJlYU1hcHMuZW5zdXJlKHNl
Y3VyaXR5T3JpZ2luRGF0YSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFn
ZUFyZWFNYXA+KCp0aGlzLCBzZWN1cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7Cisg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHJldHVybiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0
ZSgqbWFwKTsKIH0KIAogUmVmPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
Ojpjb3B5KFBhZ2UmIG5ld1BhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAppbmRleCA4YmU4OTc3Mzdj
ZmQxYzg0OTY2YjJhZGJlNzIwMzJhOWJlZjYzNjk5Li43ZmIwMGQyM2NiNzhhZDdhNDE4NjRhY2Y4
MDc0NTIzNmM5N2RkYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKQEAgLTc5LDcgKzc5LDcgQEAg
cHJpdmF0ZToKIAogICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOwogCi0gICAgSGFz
aE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYU1hcD4+
IG1fc3RvcmFnZUFyZWFNYXBzOworICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhLCBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFNYXA+PiBtX3N0b3JhZ2VBcmVhTWFwczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>