<?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>152966</bug_id>
          
          <creation_ts>2016-01-10 15:10:08 -0800</creation_ts>
          <short_desc>Modern IDB: Make MemoryIndex and MemoryObjectStore RefCounted</short_desc>
          <delta_ts>2016-01-11 13:23:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Other</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>150882</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154280</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-10 15:10:08 -0800</bug_when>
    <thetext>Modern IDB: Make MemoryIndex and MemoryObjectStore RefCounted

Some of the remaining layout tests crash/asserts are due to very subtle mismanagement of unique_ptrs vs raw pointers. Fixing them reliably will be difficult and fragile unless we make these objects RefCounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154281</commentid>
    <comment_count>1</comment_count>
      <attachid>268665</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-10 15:11:26 -0800</bug_when>
    <thetext>Created attachment 268665
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154329</commentid>
    <comment_count>2</comment_count>
      <attachid>268665</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-01-11 00:16:11 -0800</bug_when>
    <thetext>Comment on attachment 268665
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:224
&gt;      for (auto&amp; index : m_deletedIndexes.values()) {
&gt;          MemoryObjectStore&amp; objectStore = index-&gt;objectStore();
&gt; -        objectStore.maybeRestoreDeletedIndex(WTFMove(index));
&gt; +        objectStore.maybeRestoreDeletedIndex(*index);
&gt;      }

I think we should null-check index.  There are values in m_deletedIndexes that are nullptr.  All other pointer dereferences in this patch are null checked.
Also, probably no need for a local variable for objectStore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154381</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-11 08:56:16 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 268665 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268665&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:224
&gt; &gt;      for (auto&amp; index : m_deletedIndexes.values()) {
&gt; &gt;          MemoryObjectStore&amp; objectStore = index-&gt;objectStore();
&gt; &gt; -        objectStore.maybeRestoreDeletedIndex(WTFMove(index));
&gt; &gt; +        objectStore.maybeRestoreDeletedIndex(*index);
&gt; &gt;      }
&gt; 
&gt; I think we should null-check index.  There are values in m_deletedIndexes
&gt; that are nullptr.  

I don&apos;t think you&apos;re right on this.

The only place a value is added to m_deletedIndexes is in MemoryBackingStoreTransaction::indexDeleted which takes a Ref&lt;&gt; as its argument.

i.e. - The index being added to m_deletedIndexes is non-null

It would definitely be a bug anytime we put a null value in any of these sets/maps.

&gt; All other pointer dereferences in this patch are null checked.

I actually see very few (just 1?) null checks in this patch. And we definitely don&apos;t null check the values in any of the sets/maps of RefPtrs.

&gt; Also, probably no need for a local variable for objectStore.

Indeed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154385</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-11 09:15:27 -0800</bug_when>
    <thetext>Fixing the local variable, but I&apos;m going to land without the null check.

If we dig deeper and find a reason it needs to be there, I will followup promptly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154390</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-11 09:40:01 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/194857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154442</commentid>
    <comment_count>6</comment_count>
      <attachid>268665</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-01-11 12:19:52 -0800</bug_when>
    <thetext>Comment on attachment 268665
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:93
&gt;      auto addResult = m_deletedIndexes.add(index-&gt;info().name(), nullptr);

Right here.  We add an entry in m_deletedIndexes with a value of nullptr.  Please add the null check.

&gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:152
&gt; +    transaction.indexDeleted(*index);

I was talking about pointer dereferences like this one.  Earlier in this function (although not in this patch) we do check if index is null before dereferencing it.  This is safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154468</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-11 13:23:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 268665 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268665&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:93
&gt; &gt;      auto addResult = m_deletedIndexes.add(index-&gt;info().name(), nullptr);
&gt; 
&gt; Right here.  We add an entry in m_deletedIndexes with a value of nullptr. 
&gt; Please add the null check.

As I mentioned on IRC, line 93 is meaningless without the context of lines 94 and 95. In fact, the whole method as checked in:

void MemoryBackingStoreTransaction::indexDeleted(Ref&lt;MemoryIndex&gt;&amp;&amp; index)
{
    m_indexes.remove(&amp;index.get());

    auto addResult = m_deletedIndexes.add(index-&gt;info().name(), nullptr);
    if (addResult.isNewEntry)
        addResult.iterator-&gt;value = WTFMove(index);
}

The index passed in to the function is a Ref - it&apos;s never null.

Lines 93/94/95 are the typical &quot;only set this value in the map if it&apos;s the first value&quot; pattern.

After ::indexDeleted returns, the value in the map cannot ever be null.


&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:152
&gt; &gt; +    transaction.indexDeleted(*index);
&gt; 
&gt; I was talking about pointer dereferences like this one.  Earlier in this
&gt; function (although not in this patch) we do check if index is null before
&gt; dereferencing it.  This is safe.

That&apos;s because we get index earlier in the function like this:
    auto index = takeIndexByName(indexName);
... and not by directly looking it up in a map.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268665</attachid>
            <date>2016-01-10 15:11:26 -0800</date>
            <delta_ts>2016-01-11 00:16:11 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22666</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMWVlY2JjLi5jNjdmOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTYtMDEtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREI6IE1ha2UgTWVtb3J5SW5kZXggYW5kIE1lbW9yeU9iamVjdFN0b3JlIFJl
ZkNvdW50ZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTI5NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKFJlZmFjdG9yLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IpCisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbjo6aW5kZXhEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjph
Ym9ydCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uLmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6cmVzdG9yZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZWdpc3Rlck9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0
b3JlOjp0YWtlT2JqZWN0U3RvcmVCeU5hbWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SW5kZXg6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUluZGV4Lmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6bWF5YmVSZXN0b3JlRGVsZXRl
ZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6
OnRha2VJbmRleEJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9i
amVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1l
bW9yeU9iamVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yRGVsZXRlUmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OnVwZGF0ZUluZGV4ZXNGb3JQ
dXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9y
ZTo6cmVnaXN0ZXJJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeU9iamVjdFN0b3JlLmg6CisKIDIwMTYtMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIERpc3BsYXlMaXN0IGhvb2tzIGludG8gR3Jh
cGhpY3NDb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LmNwcAppbmRleCA4ZTBjNzY3Li44NTU1NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTg2LDEwICs4Niw5IEBAIHZvaWQgTWVtb3J5QmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb246OmFkZEV4aXN0aW5nSW5kZXgoTWVtb3J5SW5kZXgmIGluZGV4
KQogICAgIG1faW5kZXhlcy5hZGQoJmluZGV4KTsKIH0KIAotdm9pZCBNZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbjo6aW5kZXhEZWxldGVkKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4g
aW5kZXgpCit2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjppbmRleERlbGV0ZWQo
UmVmPE1lbW9yeUluZGV4PiYmIGluZGV4KQogewotICAgIEFTU0VSVChpbmRleCk7Ci0gICAgbV9p
bmRleGVzLnJlbW92ZShpbmRleC5nZXQoKSk7CisgICAgbV9pbmRleGVzLnJlbW92ZSgmaW5kZXgu
Z2V0KCkpOwogCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlbGV0ZWRJbmRleGVzLmFkZChpbmRl
eC0+aW5mbygpLm5hbWUoKSwgbnVsbHB0cik7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQpAQCAtMTEwLDExICsxMDksMTAgQEAgdm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bjo6YWRkRXhpc3RpbmdPYmplY3RTdG9yZShNZW1vcnlPYmplY3RTdG9yZSYgb2IKICAgICBtX29y
aWdpbmFsS2V5R2VuZXJhdG9ycy5hZGQoJm9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS5jdXJyZW50
S2V5R2VuZXJhdG9yVmFsdWUoKSk7CiB9CiAKLXZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5T2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlKQordm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6b2Jq
ZWN0U3RvcmVEZWxldGVkKFJlZjxNZW1vcnlPYmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKIHsK
LSAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250
YWlucyhvYmplY3RTdG9yZS5nZXQoKSkpOwotICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmpl
Y3RTdG9yZS5nZXQoKSk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKCZvYmpl
Y3RTdG9yZS5nZXQoKSkpOworICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZSgmb2JqZWN0U3RvcmUu
Z2V0KCkpOwogCiAgICAgb2JqZWN0U3RvcmUtPmRlbGV0ZUFsbEluZGV4ZXMoKnRoaXMpOwogCkBA
IC0xODIsMTcgKzE4MCwxMSBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjph
Ym9ydCgpCiAKICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faXNBYm9ydGluZywg
dHJ1ZSk7CiAKLSAgICAvLyBUaGlzIGxvb3AgbW92ZXMgdGhlIHVuZGVybHlpbmcgdW5pcXVlX3B0
cnMgZnJvbSBvdXQgb2YgdGhlIG1fZGVsZXRlZE9iamVjdFN0b3JlcyBtYXAsCi0gICAgLy8gYnV0
IHRoZSBlbnRyaWVzIGluIHRoZSBtYXAgc3RpbGwgcmVtYWluLgogICAgIGZvciAoYXV0byYgb2Jq
ZWN0U3RvcmUgOiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpIHsKLSAgICAgICAgTWVt
b3J5T2JqZWN0U3RvcmUqIHJhd09iamVjdFN0b3JlID0gb2JqZWN0U3RvcmUuZ2V0KCk7Ci0gICAg
ICAgIG1fYmFja2luZ1N0b3JlLnJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9y
dChXVEZNb3ZlKG9iamVjdFN0b3JlKSk7Ci0KLSAgICAgICAgQVNTRVJUKCFtX29iamVjdFN0b3Jl
cy5jb250YWlucyhyYXdPYmplY3RTdG9yZSkpOwotICAgICAgICBtX29iamVjdFN0b3Jlcy5hZGQo
cmF3T2JqZWN0U3RvcmUpOworICAgICAgICBtX2JhY2tpbmdTdG9yZS5yZXN0b3JlT2JqZWN0U3Rv
cmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKm9iamVjdFN0b3JlKTsKKyAgICAgICAgQVNTRVJUKCFt
X29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5nZXQoKSkpOworICAgICAgICBtX29i
amVjdFN0b3Jlcy5hZGQob2JqZWN0U3RvcmUpOwogICAgIH0KLQotICAgIC8vIFRoaXMgY2xlYXJz
IHRoZSBlbnRyaWVzIGZyb20gdGhlIG1hcC4KICAgICBtX2RlbGV0ZWRPYmplY3RTdG9yZXMuY2xl
YXIoKTsKIAogICAgIGlmIChtX29yaWdpbmFsRGF0YWJhc2VJbmZvKSB7CkBAIC0yMDYsMTcgKzE5
OCwxNyBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAg
ICAgIGl0ZXJhdG9yLmtleS0+cmVwbGFjZUluZGV4VmFsdWVTdG9yZShXVEZNb3ZlKGl0ZXJhdG9y
LnZhbHVlKSk7CiAgICAgbV9jbGVhcmVkSW5kZXhWYWx1ZVN0b3Jlcy5jbGVhcigpOwogICAgIAot
ICAgIGZvciAoYXV0byBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVzKSB7Ci0gICAgICAgIEFT
U0VSVChtX29yaWdpbmFsS2V5R2VuZXJhdG9ycy5jb250YWlucyhvYmplY3RTdG9yZSkpOwotICAg
ICAgICBvYmplY3RTdG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobV9vcmlnaW5hbEtleUdlbmVy
YXRvcnMuZ2V0KG9iamVjdFN0b3JlKSk7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1f
b2JqZWN0U3RvcmVzKSB7CisgICAgICAgIEFTU0VSVChtX29yaWdpbmFsS2V5R2VuZXJhdG9ycy5j
b250YWlucyhvYmplY3RTdG9yZS5nZXQoKSkpOworICAgICAgICBvYmplY3RTdG9yZS0+c2V0S2V5
R2VuZXJhdG9yVmFsdWUobV9vcmlnaW5hbEtleUdlbmVyYXRvcnMuZ2V0KG9iamVjdFN0b3JlLmdl
dCgpKSk7CiAKLSAgICAgICAgYXV0byBjbGVhcmVkS2V5VmFsdWVNYXAgPSBtX2NsZWFyZWRLZXlW
YWx1ZU1hcHMudGFrZShvYmplY3RTdG9yZSk7CisgICAgICAgIGF1dG8gY2xlYXJlZEtleVZhbHVl
TWFwID0gbV9jbGVhcmVkS2V5VmFsdWVNYXBzLnRha2Uob2JqZWN0U3RvcmUuZ2V0KCkpOwogICAg
ICAgICBpZiAoY2xlYXJlZEtleVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jbGVh
cmVkT3JkZXJlZEtleXMuY29udGFpbnMob2JqZWN0U3RvcmUpKTsKLSAgICAgICAgICAgIG9iamVj
dFN0b3JlLT5yZXBsYWNlS2V5VmFsdWVTdG9yZShXVEZNb3ZlKGNsZWFyZWRLZXlWYWx1ZU1hcCks
IG1fY2xlYXJlZE9yZGVyZWRLZXlzLnRha2Uob2JqZWN0U3RvcmUpKTsKKyAgICAgICAgICAgIEFT
U0VSVChtX2NsZWFyZWRPcmRlcmVkS2V5cy5jb250YWlucyhvYmplY3RTdG9yZS5nZXQoKSkpOwor
ICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlcGxhY2VLZXlWYWx1ZVN0b3JlKFdURk1vdmUoY2xl
YXJlZEtleVZhbHVlTWFwKSwgbV9jbGVhcmVkT3JkZXJlZEtleXMudGFrZShvYmplY3RTdG9yZS5n
ZXQoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBrZXlWYWx1ZU1hcCA9IG1fb3JpZ2lu
YWxWYWx1ZXMudGFrZShvYmplY3RTdG9yZSk7CisgICAgICAgIGF1dG8ga2V5VmFsdWVNYXAgPSBt
X29yaWdpbmFsVmFsdWVzLnRha2Uob2JqZWN0U3RvcmUuZ2V0KCkpOwogICAgICAgICBpZiAoIWtl
eVZhbHVlTWFwKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTIyNiwxNCArMjE4LDEwIEBA
IHZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkKICAgICAgICAgfQog
ICAgIH0KIAotICAgIC8vIFRoaXMgbG9vcCBtb3ZlcyB0aGUgdW5kZXJseWluZyB1bmlxdWVfcHRy
cyBmcm9tIG91dCBvZiB0aGUgbV9kZWxldGVkSW5kZXhlcyBtYXAsCi0gICAgLy8gYnV0IHRoZSBl
bnRyaWVzIGluIHRoZSBtYXAgc3RpbGwgcmVtYWluLgogICAgIGZvciAoYXV0byYgaW5kZXggOiBt
X2RlbGV0ZWRJbmRleGVzLnZhbHVlcygpKSB7CiAgICAgICAgIE1lbW9yeU9iamVjdFN0b3JlJiBv
YmplY3RTdG9yZSA9IGluZGV4LT5vYmplY3RTdG9yZSgpOwotICAgICAgICBvYmplY3RTdG9yZS5t
YXliZVJlc3RvcmVEZWxldGVkSW5kZXgoV1RGTW92ZShpbmRleCkpOworICAgICAgICBvYmplY3RT
dG9yZS5tYXliZVJlc3RvcmVEZWxldGVkSW5kZXgoKmluZGV4KTsKICAgICB9Ci0KLSAgICAvLyBU
aGlzIGNsZWFycyB0aGUgZW50cmllcyBmcm9tIHRoZSBtYXAuCiAgICAgbV9kZWxldGVkSW5kZXhl
cy5jbGVhcigpOwogCiAgICAgZmluaXNoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi5oCmluZGV4IDRjMmNmN2UuLjIxYzk3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oCkBAIC02MiwxMyArNjIsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkRXhpc3RpbmdPYmplY3RTdG9yZShNZW1vcnlPYmplY3RTdG9yZSYpOwog
ICAgIAogICAgIHZvaWQgcmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3JlJiwgY29u
c3QgSURCS2V5RGF0YSYsIFRocmVhZFNhZmVEYXRhQnVmZmVyKik7Ci0gICAgdm9pZCBvYmplY3RT
dG9yZURlbGV0ZWQoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeU9iamVjdFN0b3JlPik7CisgICAgdm9p
ZCBvYmplY3RTdG9yZURlbGV0ZWQoUmVmPE1lbW9yeU9iamVjdFN0b3JlPiYmKTsKICAgICB2b2lk
IG9iamVjdFN0b3JlQ2xlYXJlZChNZW1vcnlPYmplY3RTdG9yZSYsIHN0ZDo6dW5pcXVlX3B0cjxL
ZXlWYWx1ZU1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6c2V0PElEQktleURhdGE+PiYmKTsK
ICAgICB2b2lkIGluZGV4Q2xlYXJlZChNZW1vcnlJbmRleCYsIHN0ZDo6dW5pcXVlX3B0cjxJbmRl
eFZhbHVlU3RvcmU+JiYpOwogCiAgICAgdm9pZCBhZGROZXdJbmRleChNZW1vcnlJbmRleCYpOwog
ICAgIHZvaWQgYWRkRXhpc3RpbmdJbmRleChNZW1vcnlJbmRleCYpOwotICAgIHZvaWQgaW5kZXhE
ZWxldGVkKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4pOworICAgIHZvaWQgaW5kZXhEZWxl
dGVkKFJlZjxNZW1vcnlJbmRleD4mJik7CiAKICAgICB2b2lkIGFib3J0KCk7CiAgICAgdm9pZCBj
b21taXQoKTsKQEAgLTg2LDE0ICs4NiwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pblByb2dy
ZXNzIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9pc0Fib3J0aW5nIHsgZmFsc2UgfTsKIAotICAgIEhh
c2hTZXQ8TWVtb3J5T2JqZWN0U3RvcmUqPiBtX29iamVjdFN0b3JlczsKLSAgICBIYXNoU2V0PE1l
bW9yeU9iamVjdFN0b3JlKj4gbV92ZXJzaW9uQ2hhbmdlQWRkZWRPYmplY3RTdG9yZXM7Ci0gICAg
SGFzaFNldDxNZW1vcnlJbmRleCo+IG1faW5kZXhlczsKLSAgICBIYXNoU2V0PE1lbW9yeUluZGV4
Kj4gbV92ZXJzaW9uQ2hhbmdlQWRkZWRJbmRleGVzOworICAgIEhhc2hTZXQ8UmVmUHRyPE1lbW9y
eU9iamVjdFN0b3JlPj4gbV9vYmplY3RTdG9yZXM7CisgICAgSGFzaFNldDxSZWZQdHI8TWVtb3J5
T2JqZWN0U3RvcmU+PiBtX3ZlcnNpb25DaGFuZ2VBZGRlZE9iamVjdFN0b3JlczsKKyAgICBIYXNo
U2V0PFJlZlB0cjxNZW1vcnlJbmRleD4+IG1faW5kZXhlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxN
ZW1vcnlJbmRleD4+IG1fdmVyc2lvbkNoYW5nZUFkZGVkSW5kZXhlczsKIAogICAgIEhhc2hNYXA8
TWVtb3J5T2JqZWN0U3RvcmUqLCB1aW50NjRfdD4gbV9vcmlnaW5hbEtleUdlbmVyYXRvcnM7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlPYmplY3RTdG9yZT4+IG1f
ZGVsZXRlZE9iamVjdFN0b3JlczsKLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeUluZGV4Pj4gbV9kZWxldGVkSW5kZXhlczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPE1lbW9yeU9iamVjdFN0b3JlPj4gbV9kZWxldGVkT2JqZWN0U3RvcmVzOworICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8TWVtb3J5SW5kZXg+PiBtX2RlbGV0ZWRJbmRleGVzOwogICAgIEhh
c2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+PiBt
X29yaWdpbmFsVmFsdWVzOwogICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8S2V5VmFsdWVNYXA+PiBtX2NsZWFyZWRLZXlWYWx1ZU1hcHM7CiAgICAgSGFzaE1h
cDxNZW1vcnlPYmplY3RTdG9yZSosIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnNldDxJREJLZXlEYXRh
Pj4+IG1fY2xlYXJlZE9yZGVyZWRLZXlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCAxOTk5NzA5Li40YTA5MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgQVNT
RVJUKHJhd1RyYW5zYWN0aW9uKTsKICAgICBBU1NFUlQocmF3VHJhbnNhY3Rpb24tPmlzVmVyc2lv
bkNoYW5nZSgpKTsKIAotICAgIHJhd1RyYW5zYWN0aW9uLT5hZGROZXdPYmplY3RTdG9yZSgqb2Jq
ZWN0U3RvcmUpOworICAgIHJhd1RyYW5zYWN0aW9uLT5hZGROZXdPYmplY3RTdG9yZShvYmplY3RT
dG9yZS5nZXQoKSk7CiAgICAgcmVnaXN0ZXJPYmplY3RTdG9yZShXVEZNb3ZlKG9iamVjdFN0b3Jl
KSk7CiAKICAgICByZXR1cm4gSURCRXJyb3IoKTsKQEAgLTE2MCw3ICsxNjAsNyBAQCBJREJFcnJv
ciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdAogICAgICAgICByZXR1cm4gSURCRXJyb3IoSURCRGF0YWJhc2VFeGNl
cHRpb246OkNvbnN0cmFpbnRFcnJvcik7CiAKICAgICBtX2RhdGFiYXNlSW5mby0+ZGVsZXRlT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKLSAgICB0cmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVE
ZWxldGVkKFdURk1vdmUob2JqZWN0U3RvcmUpKTsKKyAgICB0cmFuc2FjdGlvbi0+b2JqZWN0U3Rv
cmVEZWxldGVkKCpvYmplY3RTdG9yZSk7CiAKICAgICByZXR1cm4gSURCRXJyb3IoKTsKIH0KQEAg
LTIyNiw3ICsyMjYsNyBAQCB2b2lkIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVtb3ZlT2JqZWN0
U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0UwogICAgIHVucmVnaXN0ZXJP
YmplY3RTdG9yZShvYmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpyZXN0b3JlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeU9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3JlKQordm9pZCBNZW1vcnlJREJCYWNraW5n
U3RvcmU6OnJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChSZWY8TWVtb3J5
T2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCiB7CiAgICAgcmVnaXN0ZXJPYmplY3RTdG9yZShX
VEZNb3ZlKG9iamVjdFN0b3JlKSk7CiB9CkBAIC00MjgsMTMgKzQyOCwxMiBAQCBJREJFcnJvciBN
ZW1vcnlJREJCYWNraW5nU3RvcmU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFucwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpyZWdpc3Rlck9iamVjdFN0b3JlKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlPYmplY3RT
dG9yZT4mJiBvYmplY3RTdG9yZSkKK3ZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZWdpc3Rl
ck9iamVjdFN0b3JlKFJlZjxNZW1vcnlPYmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKIHsKLSAg
ICBBU1NFUlQob2JqZWN0U3RvcmUpOwogICAgIEFTU0VSVCghbV9vYmplY3RTdG9yZXNCeUlkZW50
aWZpZXIuY29udGFpbnMob2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCkpKTsKICAgICBB
U1NFUlQoIW1fb2JqZWN0U3RvcmVzQnlOYW1lLmNvbnRhaW5zKG9iamVjdFN0b3JlLT5pbmZvKCku
bmFtZSgpKSk7CiAKLSAgICBtX29iamVjdFN0b3Jlc0J5TmFtZS5zZXQob2JqZWN0U3RvcmUtPmlu
Zm8oKS5uYW1lKCksIG9iamVjdFN0b3JlLmdldCgpKTsKKyAgICBtX29iamVjdFN0b3Jlc0J5TmFt
ZS5zZXQob2JqZWN0U3RvcmUtPmluZm8oKS5uYW1lKCksICZvYmplY3RTdG9yZS5nZXQoKSk7CiAg
ICAgbV9vYmplY3RTdG9yZXNCeUlkZW50aWZpZXIuc2V0KG9iamVjdFN0b3JlLT5pbmZvKCkuaWRl
bnRpZmllcigpLCBXVEZNb3ZlKG9iamVjdFN0b3JlKSk7CiB9CiAKQEAgLTQ0NywxMyArNDQ2LDEz
IEBAIHZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjp1bnJlZ2lzdGVyT2JqZWN0U3RvcmUoTWVt
b3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlCiAgICAgbV9vYmplY3RTdG9yZXNCeUlkZW50aWZp
ZXIucmVtb3ZlKG9iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCkpOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8TWVtb3J5T2JqZWN0U3RvcmU+IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6dGFrZU9i
amVjdFN0b3JlQnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK1JlZlB0cjxNZW1vcnlPYmplY3RT
dG9yZT4gTWVtb3J5SURCQmFja2luZ1N0b3JlOjp0YWtlT2JqZWN0U3RvcmVCeU5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQogewotICAgIGF1dG8gcmF3T2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jl
c0J5TmFtZS50YWtlKG5hbWUpOwotICAgIGlmICghcmF3T2JqZWN0U3RvcmUpCisgICAgYXV0byBv
YmplY3RTdG9yZUJ5TmFtZSA9IG1fb2JqZWN0U3RvcmVzQnlOYW1lLnRha2UobmFtZSk7CisgICAg
aWYgKCFvYmplY3RTdG9yZUJ5TmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXNCeUlkZW50aWZpZXIudGFrZShyYXdPYmpl
Y3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKSk7CisgICAgYXV0byBvYmplY3RTdG9yZSA9IG1f
b2JqZWN0U3RvcmVzQnlJZGVudGlmaWVyLnRha2Uob2JqZWN0U3RvcmVCeU5hbWUtPmluZm8oKS5p
ZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAKICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKaW5kZXggYjE0YmU0Zi4uM2Nj
MjM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApAQCAtNzEsMjEgKzcxLDIxIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKCkgb3ZlcnJpZGUg
ZmluYWw7CiAKICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0
KE1lbW9yeU9iamVjdFN0b3JlJik7Ci0gICAgdm9pZCByZXN0b3JlT2JqZWN0U3RvcmVGb3JWZXJz
aW9uQ2hhbmdlQWJvcnQoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeU9iamVjdFN0b3JlPiYmKTsKKyAg
ICB2b2lkIHJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChSZWY8TWVtb3J5
T2JqZWN0U3RvcmU+JiYpOwogCiBwcml2YXRlOgogICAgIE1lbW9yeUlEQkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnlPYmplY3RTdG9yZT4gdGFrZU9iamVjdFN0b3JlQnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgUmVmUHRyPE1lbW9yeU9iamVjdFN0b3JlPiB0YWtlT2JqZWN0U3RvcmVCeU5hbWUoY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87
CiAKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uPj4gbV90cmFuc2FjdGlvbnM7CiAKLSAgICB2b2lk
IHJlZ2lzdGVyT2JqZWN0U3RvcmUoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeU9iamVjdFN0b3JlPiYm
KTsKKyAgICB2b2lkIHJlZ2lzdGVyT2JqZWN0U3RvcmUoUmVmPE1lbW9yeU9iamVjdFN0b3JlPiYm
KTsKICAgICB2b2lkIHVucmVnaXN0ZXJPYmplY3RTdG9yZShNZW1vcnlPYmplY3RTdG9yZSYpOwot
ICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlPYmplY3RTdG9yZT4+
IG1fb2JqZWN0U3RvcmVzQnlJZGVudGlmaWVyOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0
cjxNZW1vcnlPYmplY3RTdG9yZT4+IG1fb2JqZWN0U3RvcmVzQnlJZGVudGlmaWVyOwogICAgIEhh
c2hNYXA8U3RyaW5nLCBNZW1vcnlPYmplY3RTdG9yZSo+IG1fb2JqZWN0U3RvcmVzQnlOYW1lOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlJbmRleC5jcHAKaW5kZXggOWYyNmRmOC4uY2Y3OTFjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguY3Bw
CkBAIC00MCw5ICs0MCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2Vy
dmVyIHsKIAotc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4PiBNZW1vcnlJbmRleDo6Y3JlYXRl
KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3Jl
KQorUmVmPE1lbW9yeUluZGV4PiBNZW1vcnlJbmRleDo6Y3JlYXRlKGNvbnN0IElEQkluZGV4SW5m
byYgaW5mbywgTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQogewotICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPE1lbW9yeUluZGV4PihpbmZvLCBvYmplY3RTdG9yZSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVtb3J5SW5kZXgoaW5mbywgb2JqZWN0U3RvcmUpKTsKIH0KIAog
TWVtb3J5SW5kZXg6Ok1lbW9yeUluZGV4KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgTWVtb3J5
T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SW5kZXguaAppbmRleCBmMDQ1YmNjLi43OTc5ZjIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SW5kZXguaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIk1lbW9yeUluZGV4Q3Vy
c29yLmgiCiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MywxMCAr
NTQsOSBAQCBuYW1lc3BhY2UgSURCU2VydmVyIHsKIGNsYXNzIE1lbW9yeUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uOwogY2xhc3MgTWVtb3J5T2JqZWN0U3RvcmU7CiAKLWNsYXNzIE1lbW9yeUluZGV4
IHsKLSAgICBmcmllbmQgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4PiBzdGQ6Om1ha2VfdW5p
cXVlPE1lbW9yeUluZGV4Pihjb25zdCBXZWJDb3JlOjpJREJJbmRleEluZm8mLCBXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlJik7CitjbGFzcyBNZW1vcnlJbmRleCA6IHB1Ymxp
YyBSZWZDb3VudGVkPE1lbW9yeUluZGV4PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZW1vcnlJbmRleD4gY3JlYXRlKGNvbnN0IElEQkluZGV4SW5mbyYsIE1lbW9yeU9i
amVjdFN0b3JlJik7CisgICAgc3RhdGljIFJlZjxNZW1vcnlJbmRleD4gY3JlYXRlKGNvbnN0IElE
QkluZGV4SW5mbyYsIE1lbW9yeU9iamVjdFN0b3JlJik7CiAKICAgICB+TWVtb3J5SW5kZXgoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeU9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKaW5kZXggMzhlYTU3OC4uMDAwMjE2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVj
dFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5T2JqZWN0U3RvcmUuY3BwCkBAIC00NCw5ICs0NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotc3RkOjp1
bmlxdWVfcHRyPE1lbW9yeU9iamVjdFN0b3JlPiBNZW1vcnlPYmplY3RTdG9yZTo6Y3JlYXRlKGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK1JlZjxNZW1vcnlPYmplY3RTdG9yZT4gTWVt
b3J5T2JqZWN0U3RvcmU6OmNyZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5T2JqZWN0U3RvcmU+KGluZm8pOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lbW9yeU9iamVjdFN0b3JlKGluZm8pKTsKIH0KIAog
TWVtb3J5T2JqZWN0U3RvcmU6Ok1lbW9yeU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3Jl
SW5mbyYgaW5mbykKQEAgLTkyLDIzICs5MiwyMSBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9y
ZTo6Y3JlYXRlSW5kZXgoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQog
ICAgIGF1dG8gaW5kZXggPSBNZW1vcnlJbmRleDo6Y3JlYXRlKGluZm8sICp0aGlzKTsKIAogICAg
IC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBwb3B1bGF0aW5nIHRoZSBuZXcgaW5kZXgsIHRoZW4g
dGhlIGN1cnJlbnQgcmVjb3JkcyBpbiB0aGUgb2JqZWN0IHN0b3JlIHZpb2xhdGUgaXRzIGNvbnRy
YWludHMKLSAgICBhdXRvIGVycm9yID0gcG9wdWxhdGVJbmRleFdpdGhFeGlzdGluZ1JlY29yZHMo
KmluZGV4KTsKKyAgICBhdXRvIGVycm9yID0gcG9wdWxhdGVJbmRleFdpdGhFeGlzdGluZ1JlY29y
ZHMoaW5kZXguZ2V0KCkpOwogICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBlcnJvcjsKIAogICAgIG1faW5mby5hZGRFeGlzdGluZ0luZGV4KGluZm8pOwotICAgIHRyYW5z
YWN0aW9uLmFkZE5ld0luZGV4KCppbmRleCk7CisgICAgdHJhbnNhY3Rpb24uYWRkTmV3SW5kZXgo
aW5kZXguZ2V0KCkpOwogICAgIHJlZ2lzdGVySW5kZXgoV1RGTW92ZShpbmRleCkpOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6bWF5YmVSZXN0b3JlRGVs
ZXRlZEluZGV4KHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlJbmRleD4gaW5kZXgpCit2b2lkIE1lbW9y
eU9iamVjdFN0b3JlOjptYXliZVJlc3RvcmVEZWxldGVkSW5kZXgoUmVmPE1lbW9yeUluZGV4PiYm
IGluZGV4KQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6bWF5YmVS
ZXN0b3JlRGVsZXRlZEluZGV4Iik7CiAKLSAgICBBU1NFUlQoaW5kZXgpOwotCiAgICAgaWYgKG1f
aW5mby5oYXNJbmRleChpbmRleC0+aW5mbygpLm5hbWUoKSkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTE2LDcgKzExNCw3IEBAIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6Om1heWJlUmVzdG9yZURl
bGV0ZWRJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+IGluCiAKICAgICBBU1NFUlQo
IW1faW5kZXhlc0J5SWRlbnRpZmllci5jb250YWlucyhpbmRleC0+aW5mbygpLmlkZW50aWZpZXIo
KSkpOwogICAgIGluZGV4LT5jbGVhckluZGV4VmFsdWVTdG9yZSgpOwotICAgIGF1dG8gZXJyb3Ig
PSBwb3B1bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcygqaW5kZXgpOworICAgIGF1dG8gZXJy
b3IgPSBwb3B1bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcyhpbmRleC5nZXQoKSk7CiAKICAg
ICAvLyBTaW5jZSB0aGlzIGluZGV4IHdhcyBpbnN0YWxsZWQgaW4gdGhlIG9iamVjdCBzdG9yZSBi
ZWZvcmUgdGhpcyB0cmFuc2FjdGlvbiBzdGFydGVkLAogICAgIC8vIGFzc3VtaW5nIHRoaW5ncyB3
ZXJlIGluIGEgdmFsaWQgc3RhdGUgdGhlbiwgd2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgYWJsZSB0
byBzdWNjZXNzZnVsbHkKQEAgLTEyNiwxMyArMTI0LDEzIEBAIHZvaWQgTWVtb3J5T2JqZWN0U3Rv
cmU6Om1heWJlUmVzdG9yZURlbGV0ZWRJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+
IGluCiAgICAgcmVnaXN0ZXJJbmRleChXVEZNb3ZlKGluZGV4KSk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxNZW1vcnlJbmRleD4gTWVtb3J5T2JqZWN0U3RvcmU6OnRha2VJbmRleEJ5TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpCitSZWZQdHI8TWVtb3J5SW5kZXg+IE1lbW9yeU9iamVjdFN0b3JlOjp0
YWtlSW5kZXhCeU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGF1dG8gcmF3SW5kZXgg
PSBtX2luZGV4ZXNCeU5hbWUudGFrZShuYW1lKTsKLSAgICBpZiAoIXJhd0luZGV4KQorICAgIGF1
dG8gaW5kZXhCeU5hbWUgPSBtX2luZGV4ZXNCeU5hbWUudGFrZShuYW1lKTsKKyAgICBpZiAoIWlu
ZGV4QnlOYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW5kZXggPSBt
X2luZGV4ZXNCeUlkZW50aWZpZXIudGFrZShyYXdJbmRleC0+aW5mbygpLmlkZW50aWZpZXIoKSk7
CisgICAgYXV0byBpbmRleCA9IG1faW5kZXhlc0J5SWRlbnRpZmllci50YWtlKGluZGV4QnlOYW1l
LT5pbmZvKCkuaWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQoaW5kZXgpOwogCiAgICAgcmV0dXJu
IGluZGV4OwpAQCAtMTUxLDcgKzE0OSw3IEBAIElEQkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjpk
ZWxldGVJbmRleChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAgICAg
ICAgIHJldHVybiBJREJFcnJvcihJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9y
KTsKIAogICAgIG1faW5mby5kZWxldGVJbmRleChpbmRleE5hbWUpOwotICAgIHRyYW5zYWN0aW9u
LmluZGV4RGVsZXRlZChXVEZNb3ZlKGluZGV4KSk7CisgICAgdHJhbnNhY3Rpb24uaW5kZXhEZWxl
dGVkKCppbmRleCk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMjk0LDcgKzI5Miw3IEBAIHZv
aWQgTWVtb3J5T2JqZWN0U3RvcmU6OnVwZGF0ZUN1cnNvcnNGb3JEZWxldGVSZWNvcmQoY29uc3Qg
SURCS2V5RGF0YSYga2V5KQogCiB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjp1cGRhdGVJbmRleGVz
Rm9yRGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURhdGEmIHZhbHVlKQogewotICAgIGZvciAoYXV0
byogaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVzKCkpCisgICAgZm9yIChhdXRvJiBpbmRl
eCA6IG1faW5kZXhlc0J5TmFtZS52YWx1ZXMoKSkKICAgICAgICAgaW5kZXgtPnJlbW92ZUVudHJp
ZXNXaXRoVmFsdWVLZXkodmFsdWUpOwogfQogCkBAIC0zMDksNyArMzA3LDcgQEAgSURCRXJyb3Ig
TWVtb3J5T2JqZWN0U3RvcmU6OnVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5
RGF0YSYga2V5LCBjb24KICAgICBJREJFcnJvciBlcnJvcjsKICAgICBWZWN0b3I8c3RkOjpwYWly
PE1lbW9yeUluZGV4KiwgSW5kZXhLZXk+PiBjaGFuZ2VkSW5kZXhSZWNvcmRzOwogCi0gICAgZm9y
IChhdXRvKiBpbmRleCA6IG1faW5kZXhlc0J5TmFtZS52YWx1ZXMoKSkgeworICAgIGZvciAoYXV0
byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVzKCkpIHsKICAgICAgICAgSW5kZXhLZXkg
aW5kZXhLZXk7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShVbmlxdWVJREJEYXRh
YmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaW5kZXgtPmluZm8oKSwganNWYWx1ZSwg
aW5kZXhLZXkpOwogCkBAIC0zMjAsNyArMzE4LDcgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3Rv
cmU6OnVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb24K
ICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIGNoYW5nZWRJbmRleFJlY29yZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGluZGV4LCBpbmRl
eEtleSkpOworICAgICAgICBjaGFuZ2VkSW5kZXhSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihpbmRleC5nZXQoKSwgaW5kZXhLZXkpKTsKICAgICB9CiAKICAgICAvLyBJZiBhbnkgb2YgdGhl
IGluZGV4IHB1dHMgZmFpbGVkLCByZXZlcnQgYWxsIG9mIHRoZSBvbmVzIHRoYXQgd2VudCB0aHJv
dWdoLgpAQCAtNDQ2LDEzICs0NDQsMTIgQEAgSURCS2V5RGF0YSBNZW1vcnlPYmplY3RTdG9yZTo6
bG93ZXN0S2V5V2l0aFJlY29yZEluUmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJgogICAgIHJl
dHVybiAqbG93ZXN0SW5SYW5nZTsKIH0KIAotdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6cmVnaXN0
ZXJJbmRleChzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+JiYgaW5kZXgpCit2b2lkIE1lbW9y
eU9iamVjdFN0b3JlOjpyZWdpc3RlckluZGV4KFJlZjxNZW1vcnlJbmRleD4mJiBpbmRleCkKIHsK
LSAgICBBU1NFUlQoaW5kZXgpOwogICAgIEFTU0VSVCghbV9pbmRleGVzQnlJZGVudGlmaWVyLmNv
bnRhaW5zKGluZGV4LT5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiAgICAgQVNTRVJUKCFtX2luZGV4
ZXNCeU5hbWUuY29udGFpbnMoaW5kZXgtPmluZm8oKS5uYW1lKCkpKTsKIAotICAgIG1faW5kZXhl
c0J5TmFtZS5zZXQoaW5kZXgtPmluZm8oKS5uYW1lKCksIGluZGV4LmdldCgpKTsKKyAgICBtX2lu
ZGV4ZXNCeU5hbWUuc2V0KGluZGV4LT5pbmZvKCkubmFtZSgpLCAmaW5kZXguZ2V0KCkpOwogICAg
IG1faW5kZXhlc0J5SWRlbnRpZmllci5zZXQoaW5kZXgtPmluZm8oKS5pZGVudGlmaWVyKCksIFdU
Rk1vdmUoaW5kZXgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAppbmRleCA4YjZlMWFiLi5l
ODA2NjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01NCwxMCArNTUsOSBAQCBjbGFzcyBNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbjsKIAogdHlwZWRlZiBIYXNoTWFwPElEQktleURhdGEsIFRocmVhZFNhZmVEYXRhQnVm
ZmVyLCBJREJLZXlEYXRhSGFzaCwgSURCS2V5RGF0YUhhc2hUcmFpdHM+IEtleVZhbHVlTWFwOwog
Ci1jbGFzcyBNZW1vcnlPYmplY3RTdG9yZSB7Ci0gICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxN
ZW1vcnlPYmplY3RTdG9yZT4gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnlPYmplY3RTdG9yZT4oY29u
c3QgV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvJik7CitjbGFzcyBNZW1vcnlPYmplY3RTdG9y
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeU9iamVjdFN0b3JlPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElE
Qk9iamVjdFN0b3JlSW5mbyYpOworICAgIHN0YXRpYyBSZWY8TWVtb3J5T2JqZWN0U3RvcmU+IGNy
ZWF0ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKIAogICAgIH5NZW1vcnlPYmplY3RTdG9y
ZSgpOwogCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBJREJFcnJvciBjcmVhdGVJbmRl
eChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4SW5mbyYpOwog
ICAgIElEQkVycm9yIGRlbGV0ZUluZGV4KE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiwg
Y29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZvaWQgZGVsZXRlQWxsSW5kZXhlcyhNZW1v
cnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYpOwotICAgIHZvaWQgcmVnaXN0ZXJJbmRleChzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+JiYpOworICAgIHZvaWQgcmVnaXN0ZXJJbmRleChSZWY8
TWVtb3J5SW5kZXg+JiYpOwogCiAgICAgYm9vbCBjb250YWluc1JlY29yZChjb25zdCBJREJLZXlE
YXRhJik7CiAgICAgdm9pZCBkZWxldGVSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYpOwpAQCAtOTQs
NyArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBNZW1vcnlJbmRleCogaW5kZXhGb3JJZGVudGlmaWVy
KHVpbnQ2NF90KTsKIAotICAgIHZvaWQgbWF5YmVSZXN0b3JlRGVsZXRlZEluZGV4KHN0ZDo6dW5p
cXVlX3B0cjxNZW1vcnlJbmRleD4pOworICAgIHZvaWQgbWF5YmVSZXN0b3JlRGVsZXRlZEluZGV4
KFJlZjxNZW1vcnlJbmRleD4mJik7CiAKIHByaXZhdGU6CiAgICAgTWVtb3J5T2JqZWN0U3RvcmUo
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZUN1cnNvcnNGb3JQdXRSZWNvcmQoc3RkOjpzZXQ8SURCS2V5RGF0YT46
Oml0ZXJhdG9yKTsKICAgICB2b2lkIHVwZGF0ZUN1cnNvcnNGb3JEZWxldGVSZWNvcmQoY29uc3Qg
SURCS2V5RGF0YSYpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUluZGV4PiB0YWtlSW5k
ZXhCeU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBSZWZQdHI8TWVtb3J5SW5kZXg+IHRh
a2VJbmRleEJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgSURCT2JqZWN0U3RvcmVJ
bmZvIG1faW5mbzsKIApAQCAtMTE5LDggKzExOSw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPHN0ZDo6c2V0PElEQktleURhdGE+PiBtX29yZGVyZWRLZXlzOwogCiAgICAgdm9pZCB1
bnJlZ2lzdGVySW5kZXgoTWVtb3J5SW5kZXgmKTsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5SW5kZXg+PiBtX2luZGV4ZXNCeUlkZW50aWZpZXI7Ci0gICAgSGFz
aE1hcDxTdHJpbmcsIE1lbW9yeUluZGV4Kj4gbV9pbmRleGVzQnlOYW1lOworICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxNZW1vcnlJbmRleD4+IG1faW5kZXhlc0J5SWRlbnRpZmllcjsKKyAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lbW9yeUluZGV4Pj4gbV9pbmRleGVzQnlOYW1lOwog
ICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5
T2JqZWN0U3RvcmVDdXJzb3I+PiBtX2N1cnNvcnM7CiB9OwogCg==
</data>
<flag name="review"
          id="293646"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="293647"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>