<?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>207972</bug_id>
          
          <creation_ts>2020-02-19 15:40:49 -0800</creation_ts>
          <short_desc>Make support for bytecode caching more robust against file corruption.</short_desc>
          <delta_ts>2020-02-21 08:21:57 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>justin_michaud</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1620916</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-19 15:40:49 -0800</bug_when>
    <thetext>Details to follow in the ChangeLog.

&lt;rdar://problem/59260595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620927</commentid>
    <comment_count>1</comment_count>
      <attachid>391216</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-19 16:16:54 -0800</bug_when>
    <thetext>Created attachment 391216
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620932</commentid>
    <comment_count>2</comment_count>
      <attachid>391216</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-19 16:19:30 -0800</bug_when>
    <thetext>Comment on attachment 391216
proposed patch.

Need build fixes after merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620958</commentid>
    <comment_count>3</comment_count>
      <attachid>391224</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-19 17:09:53 -0800</bug_when>
    <thetext>Created attachment 391224
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621001</commentid>
    <comment_count>4</comment_count>
      <attachid>391224</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-02-19 18:39:26 -0800</bug_when>
    <thetext>Comment on attachment 391224
proposed patch.

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

Overall I am very happy with changes 1 and 2, but am a lot less convinced by change 3: either the cache can be freely corrupted by attackers and we need some more fancy checksum, or it cannot and then it is a bit of complexity for little benefit. I&apos;d love to see this part of the patch separated from the parts 1 and 2, to at least make it easier to roll-out if we later find bugs in it.

&gt; Source/JavaScriptCore/ChangeLog:33
&gt; +           header current only contains a fileSize value.

nit: current -&gt; currently

&gt; Source/JavaScriptCore/API/JSScript.mm:153
&gt; +    uint32_t unusedReservedForFutureUse[3];

Do we actually need this? And if we need this to be able to add things at the beginning of the cache file, why can we add things in this patch?
If it is purely for alignment purposes, I would maybe change the name/type to something like uint8_t paddingForAlignment[12];

&gt; Source/JavaScriptCore/API/JSScript.mm:282
&gt; +    int fd = open(tokenFileName, O_CREAT | O_NONBLOCK, 0666);

What is the minimum permission required for checking if a file exist and deleting it?
Allowing anyone to write to this file is probably not too bad (since no-one looks at it), but it feels unnecessary, and might maybe be useful for an attacker trying to persist information across reboots.

&gt; Source/JavaScriptCore/API/JSScript.mm:337
&gt; +    const char* tempFileName = [cachePathString stringByAppendingString:@&quot;.tmp&quot;].UTF8String;

Nit: discrepancy between tempFileName and cacheFilename.
Suggested name change: cacheFilename =&gt; cacheFileName

&gt; Source/JavaScriptCore/API/JSScript.mm:338
&gt; +    int fd = open(cacheFilename, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666);

666 seems excessive, see above
Also, we seem not to ever use fd? Since we just rename tempFileName to cacheFilename

&gt; Source/JavaScriptCore/API/JSScript.mm:344
&gt; +    int tempFD = open(tempFileName, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666);

666 seems excessive, see above
Also, do we need O_RDWR, or just O_WRONLY ?

&gt; Source/JavaScriptCore/runtime/CodeCache.h:158
&gt; +        sourceProvider.notifyBeforeReadingCachedBytecode();

Should this not be before &quot;sourceProvider.cachedBytecode()&quot;, to also catch crashes in that code?
Also I am a bit surprised that this pattern of notifyBeforeReadingCachedBytecode() -&gt; do stuff -&gt; notifyAfterReadingCachedBytecode() happens twice in this patch, I would have expected reading the cache to be done in a single place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621446</commentid>
    <comment_count>5</comment_count>
      <attachid>391224</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-20 15:30:42 -0800</bug_when>
    <thetext>Comment on attachment 391224
proposed patch.

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

Thanks for the feedback.  After thinking about this more, I decided to drop (3) since its benefit to risk ratio is low.

&gt;&gt; Source/JavaScriptCore/ChangeLog:33
&gt;&gt; +           header current only contains a fileSize value.
&gt; 
&gt; nit: current -&gt; currently

Removed with (3).

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:153
&gt;&gt; +    uint32_t unusedReservedForFutureUse[3];
&gt; 
&gt; Do we actually need this? And if we need this to be able to add things at the beginning of the cache file, why can we add things in this patch?
&gt; If it is purely for alignment purposes, I would maybe change the name/type to something like uint8_t paddingForAlignment[12];

Removed with (3).

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:282
&gt;&gt; +    int fd = open(tokenFileName, O_CREAT | O_NONBLOCK, 0666);
&gt; 
&gt; What is the minimum permission required for checking if a file exist and deleting it?
&gt; Allowing anyone to write to this file is probably not too bad (since no-one looks at it), but it feels unnecessary, and might maybe be useful for an attacker trying to persist information across reboots.

I&apos;ve change the 0666 to 0.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:337
&gt;&gt; +    const char* tempFileName = [cachePathString stringByAppendingString:@&quot;.tmp&quot;].UTF8String;
&gt; 
&gt; Nit: discrepancy between tempFileName and cacheFilename.
&gt; Suggested name change: cacheFilename =&gt; cacheFileName

Fixed.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:338
&gt;&gt; +    int fd = open(cacheFilename, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666);
&gt; 
&gt; 666 seems excessive, see above
&gt; Also, we seem not to ever use fd? Since we just rename tempFileName to cacheFilename

Changed to O_WRONLY with 0600.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:344
&gt;&gt; +    int tempFD = open(tempFileName, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666);
&gt; 
&gt; 666 seems excessive, see above
&gt; Also, do we need O_RDWR, or just O_WRONLY ?

Changed to O_RDWR and 0600.  O_RDWR is actually needed.  The renaming of the temp file to cache file fails without it.

&gt;&gt; Source/JavaScriptCore/runtime/CodeCache.h:158
&gt;&gt; +        sourceProvider.notifyBeforeReadingCachedBytecode();
&gt; 
&gt; Should this not be before &quot;sourceProvider.cachedBytecode()&quot;, to also catch crashes in that code?
&gt; Also I am a bit surprised that this pattern of notifyBeforeReadingCachedBytecode() -&gt; do stuff -&gt; notifyAfterReadingCachedBytecode() happens twice in this patch, I would have expected reading the cache to be done in a single place.

Not really.  The cachedBytecode() method only returns a RefPtr&lt;CachedBytecode&gt; which is a container object that will point to the mapped file buffer.  It does not read anything from the file itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621458</commentid>
    <comment_count>6</comment_count>
      <attachid>391347</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-20 15:46:04 -0800</bug_when>
    <thetext>Created attachment 391347
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621503</commentid>
    <comment_count>7</comment_count>
      <attachid>391347</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-20 17:33:12 -0800</bug_when>
    <thetext>Comment on attachment 391347
proposed patch.

We&apos;re going to drop the &quot;reading&quot; token solution because it can be racy, and just validate the cache file with a hash at initialization instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621551</commentid>
    <comment_count>8</comment_count>
      <attachid>391377</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-20 20:58:49 -0800</bug_when>
    <thetext>Created attachment 391377
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621558</commentid>
    <comment_count>9</comment_count>
      <attachid>391377</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-20 22:20:32 -0800</bug_when>
    <thetext>Comment on attachment 391377
proposed patch.

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

r=me with sync fix.

&gt; Source/JavaScriptCore/ChangeLog:28
&gt; +        Manually tested with the following scenarios and ensuring that the client recovers
&gt; +        with no crashes:

Can you also ensure that we are successfully using bytecode cache if it is correct?

&gt; Source/JavaScriptCore/API/JSScript.mm:184
&gt; +    SHA1::Digest fileHash;
&gt; +    memcpy(&amp;fileHash, fileData + fileDataSize, sizeof(SHA1::Digest));

Maybe, doing this after calculating the hash is better (at that time, page should be populated), but it is a small nit.

&gt; Source/JavaScriptCore/API/JSScript.mm:312
&gt; +        close(fd);

I think writing makeScopeExit twice is cleaner and non-error-prone.

auto closeFD = makeScopeExit([&amp;] {
    close(fd);
});

int tempFD = ...
if (tempFD == -1) {
    ...
}

auto closeTempFD = makeScopeExit([&amp;] {
    close(tempFD);
});

&gt; Source/JavaScriptCore/API/JSScript.mm:346
&gt; +    rename(tempFileName, cacheFileName);

Before renaming, let&apos;s do fsync to ensure the content is in disk.

&gt; Source/JavaScriptCore/API/JSScript.mm:347
&gt;      return YES;

To make this actually sync, we need to emit fsync onto the directory of this to make &quot;renaming&quot; in directory-entry sync in the disk. But since this is cache, we don&apos;t need to ensure it, I think.
If directory misses the rename operation, it is still fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621566</commentid>
    <comment_count>10</comment_count>
      <attachid>391377</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-20 22:46:23 -0800</bug_when>
    <thetext>Comment on attachment 391377
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:346
&gt;&gt; +    rename(tempFileName, cacheFileName);
&gt; 
&gt; Before renaming, let&apos;s do fsync to ensure the content is in disk.

Maybe, we should F_FULLFSYNC + fcntl on macOS. Let&apos;s add something like, FileSystem::sync and implement it for macOS by using fcntl + F_FULLFSYNC. (for other platforms using UNIX, fsync is OK I think.).
http://shaver.off.net/diary/2008/05/25/fsyncers-and-curveballs/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621567</commentid>
    <comment_count>11</comment_count>
      <attachid>391377</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-20 22:50:08 -0800</bug_when>
    <thetext>Comment on attachment 391377
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:346
&gt;&gt;&gt; +    rename(tempFileName, cacheFileName);
&gt;&gt; 
&gt;&gt; Before renaming, let&apos;s do fsync to ensure the content is in disk.
&gt; 
&gt; Maybe, we should F_FULLFSYNC + fcntl on macOS. Let&apos;s add something like, FileSystem::sync and implement it for macOS by using fcntl + F_FULLFSYNC. (for other platforms using UNIX, fsync is OK I think.).
&gt; http://shaver.off.net/diary/2008/05/25/fsyncers-and-curveballs/

But because of SHA1 checksum, maybe, fsync is enough, because we do not require consistency of files strongly. If it is corrupted, then we just detect it via SHA1 and discard it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621568</commentid>
    <comment_count>12</comment_count>
      <attachid>391377</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-20 22:55:55 -0800</bug_when>
    <thetext>Comment on attachment 391377
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/ChangeLog:28
&gt;&gt; +        with no crashes:
&gt; 
&gt; Can you also ensure that we are successfully using bytecode cache if it is correct?

Yes, I did already.  That is the 5 case below: an uncorrupted cache file on disk.

Hmmm, the sentence below should appear below the 5 cases.  I&apos;ll fix the ChangeLog before landing.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:184
&gt;&gt; +    memcpy(&amp;fileHash, fileData + fileDataSize, sizeof(SHA1::Digest));
&gt; 
&gt; Maybe, doing this after calculating the hash is better (at that time, page should be populated), but it is a small nit.

Good point.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:312
&gt;&gt; +        close(fd);
&gt; 
&gt; I think writing makeScopeExit twice is cleaner and non-error-prone.
&gt; 
&gt; auto closeFD = makeScopeExit([&amp;] {
&gt;     close(fd);
&gt; });
&gt; 
&gt; int tempFD = ...
&gt; if (tempFD == -1) {
&gt;     ...
&gt; }
&gt; 
&gt; auto closeTempFD = makeScopeExit([&amp;] {
&gt;     close(tempFD);
&gt; });

Will apply.

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:347
&gt;&gt;      return YES;
&gt; 
&gt; To make this actually sync, we need to emit fsync onto the directory of this to make &quot;renaming&quot; in directory-entry sync in the disk. But since this is cache, we don&apos;t need to ensure it, I think.
&gt; If directory misses the rename operation, it is still fine.

I&apos;ll add the fsync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621585</commentid>
    <comment_count>13</comment_count>
      <attachid>391384</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-21 00:12:18 -0800</bug_when>
    <thetext>Created attachment 391384
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621654</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-21 08:21:57 -0800</bug_when>
    <thetext>Landed in r257134: &lt;http://trac.webkit.org/r257134&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391216</attachid>
            <date>2020-02-19 16:16:54 -0800</date>
            <delta_ts>2020-02-19 16:54:31 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-207972.patch</filename>
            <type>text/plain</type>
            <size>23432</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU2OTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIwLTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2RlIGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxl
IGNvcnJ1cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDc5NzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MjYwNTk1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgYnl0ZWNvZGUgY2Fj
aGUgZmlsZSBpcyBjb3JydXB0ZWQsIHdlIGN1cnJlbnRseSB3aWxsIGFsd2F5cyBjcmFzaCBldmVy
eSB0aW1lCisgICAgICAgIHdlIHRyeSB0byByZWFkIGl0IChpbiBwZXJwZXR1aXR5IGFzIGxvbmcg
YXMgdGhlIGNvcnJ1cHRlZCBjYWNoZSBmaWxlIGNvbnRpbnVlcyB0bworICAgICAgICBleGlzdCBv
biBkaXNrKS4gIFRvIGd1YXJkIGFnYWluc3QgdGhpcywgd2UnbGwgaGFyZGVuIHRoZSBieXRlY29k
ZSBjYWNoaW5nIG1lY2hhbmlzbQorICAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgIDEuIE1v
ZGlmeSB0aGUgcmVhZENhY2hlIG9wZXJhdGlvbiB0byBmaXJzdCBkcm9wIGEgLnJlYWRpbmctaW4t
cHJvZ3Jlc3MgdG9rZW4gZmlsZQorICAgICAgICAgICBvbiBkaXNrIGJlZm9yZSBhdHRlbXB0aW5n
IHRvIHJlYWQgdGhlIGNhY2hlIGZpbGUsIGFuZCB0byBkZWxldGUgdGhlIHRva2VuIGZpbGUKKyAg
ICAgICAgICAgYWZ0ZXIgd2UncmUgZG9uZSBkZWNvZGluZyBmcm9tIHRoZSBjYWNoZS4KKworICAg
ICAgICAgICBCZWZvcmUgY29tbWVuY2luZyB3aXRoIHJlYWRpbmcgdGhlIGNhY2hlIGZpbGUsIHdl
J2xsIGFsc28gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2UKKyAgICAgICAgICAgb2YgdGhlIHRva2Vu
IGZpbGUgb24gZGlzay4gIElmIGZvdW5kLCB0aGlzIGlzIGFuIGluZGljYXRvciB0aGF0IHdlIHdl
cmUgdW5hYmxlCisgICAgICAgICAgIHRvIGNvbXBsZXRlIHRoZSBsYXN0IHJlYWQgLyBkZWNvZGUg
b2YgdGhlIGNhY2hlIGZpbGUuICBJbiB0aGlzIGNhc2UsIHdlJ2xsCisgICAgICAgICAgIGRlbGV0
ZSBib3RoIHRoZSBjYWNoZSBhbmQgdG9rZW4gZmlsZXMsIGFuZCBwcm9jZWVkIGFzIGlmIG5vIGNh
Y2hlIGZpbGUgaXMgZm91bmQuCisKKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29u
J3QgYmUgY3Jhc2hpbmcgaW4gcGVycGV0dWl0eSwgYW5kIHRoYXQgdGhlIHN5c3RlbSBzZWxmCisg
ICAgICAgICAgIGhlYWxzIGlmIHRoZSBjYWNoZSBmaWxlIGdvdCBjb3JydXB0ZWQgc29tZWhvdy4K
KworICAgICAgICAyLiBNb2RpZnkgdGhlIHdyaXRlQ2FjaGUgb3BlcmF0aW9uIHRvIGFsd2F5cyB3
cml0ZSB0aGUgY2FjaGUgZmlsZSBpbiBhIHRyYW5zYWN0aW9uYWwKKyAgICAgICAgICAgbWFubmVy
IGkuZS4gd2UnbGwgZmlyc3Qgd3JpdGUgdG8gYSAudG1wIGZpbGUsIGFuZCB0aGVuIHJlbmFtZSB0
aGUgLnRtcCBmaWxlIHRvCisgICAgICAgICAgIHRoZSBjYWNoZSBmaWxlIG9ubHkgaWYgdGhlIGVu
dGlyZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gaW4gY29tcGxldGVuZXNzLgorCisgICAgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0IGdldCBjb3JydXB0ZWQgY2FjaGUgZmlsZXMgZHVl
IHRvIGludGVycnVwdGVkIHdyaXRlcy4KKworICAgICAgICAzLiBNb2RpZnkgdGhlIGNhY2hlIGZp
bGUgZm9ybWF0IHRvIGFsd2F5cyBjb250YWluIGEgaGVhZGVyIGF0IHRoZSBzdGFydC4gIFRoZQor
ICAgICAgICAgICBoZWFkZXIgY3VycmVudCBvbmx5IGNvbnRhaW5zIGEgZmlsZVNpemUgdmFsdWUu
CisKKyAgICAgICAgICAgV2hlbiByZWFkaW5nIHRoZSBjYWNoZSBmaWxlLCB3ZSBub3cgZmlyc3Qg
Y2hlY2sgaWYgdGhlIGNhY2hlIGZpbGUgaXMgYXQgbGVhc3QKKyAgICAgICAgICAgbGFyZ2UgZW5v
dWdoIHRvIGhvbGQgdGhpcyBoZWFkZXIuICBJZiBub3QsIGRlbGV0ZSB0aGUgY2FjaGUgZmlsZSBh
bmQgcHJvY2VlZAorICAgICAgICAgICBhcyBubyBjYWNoZSBmaWxlIGlzIGZvdW5kLgorCisgICAg
ICAgICAgIE5leHQsIHdlIGNoZWNrIGlmIHRoZSBoZWFkZXIncyByZWNvcmRlZCBmaWxlU2l6ZSBt
YXRjaGVzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgY2FjaGUgZmlsZS4gIElm
IG5vdCwgZGVsZXRlIHRoZSBjYWNoZSBmaWxlIGFuZCBwcm9jZWVkIGFzIG5vIGNhY2hlIGZpbGUg
aXMgZm91bmQuCisKKyAgICAgICAgICAgV2l0aCB0aGlzIGNoYW5nZSwgd2Ugbm93IGhhdmUgc29t
ZSBwcm90ZWN0aW9uIGFnYWluc3QgY29ycnVwdGlvbiB3aGVyZSB0aGUKKyAgICAgICAgICAgZmls
ZSBnZXRzIG1vZGlmaWVkIChlaXRoZXIgdHJ1bmNhdGVkIG9yIGFwcGVuZGVkIHRvKS4gIFRoaXMg
aXMgbm90IGEgZ3VhcmFudGVlCisgICAgICAgICAgIHRoYXQgdGhlIGZpbGUgY29udGVudCB3b24n
dCBiZSBjb3JydXB0ZWQgaW4gc29tZSBvdGhlciB3YXkuICBIb3dldmVyLCBpZiB3ZQorICAgICAg
ICAgICBjcmFzaCBmcm9tIHRoYXQsIHdlJ2xsIGJlIGFibGUgdG8gcmVjb3ZlciB3aXRoIG1pdGln
YXRpb24gKDEpIGFib3ZlLgorCisgICAgICAgICAgIEluIHRoZSBmdXR1cmUsIHdlIGNhbiBjb25z
aWRlciBoYXNoaW5nIHRoZSBjYWNoZSBmaWxlIGFuZCBzdG9yaW5nIHRoZSBoYXNoIGluCisgICAg
ICAgICAgIHRoZSBoZWFkZXIgZm9yIHZlcmlmaWNhdGlvbiBiZWZvcmUgYWxsb3dpbmcgdGhlIGZp
bGUgdG8gYmUgcmVhZC4gIFdlIGRvbid0CisgICAgICAgICAgIGN1cnJlbnRseSBkbyB0aGlzIGJl
Y2F1c2Ugd2UgYWxyZWFkeSBleHBlY3QgdGhlIGNsaWVudCB0byBrZWVwIHRoZSBjYWNoZSBmaWxl
CisgICAgICAgICAgIGluIGEgc2VjdXJlIGVudmlyb25tZW50IHRoYXQgaXMgbm90IHN1YmplY3Qg
dG8gZXh0ZXJuYWwgY29ycnVwdGlvbi4gIEFsbCB3ZSdyZQorICAgICAgICAgICBkb2luZyBoZXJl
IGlzIG1pdGlnYXRpbmcgYWdhaW5zdCBjYXRhc3Ryb3BoaWMgZmFpbHVyZSBkdWUgdG8gdW5mb3Jl
c2VlbiBidWdzCisgICAgICAgICAgIGluIG91ciBjb2RlIG9yIHRoZSBjbGllbnQncyBjb2RlLgor
CisgICAgICAgIFRvIHN1cHBvcnQgKDMpLCB3ZSBhbHNvIG1vZGlmeSB0aGUgQ2FjaGVkQnl0ZWNv
ZGUgYW5kIEVuY29kZXIgY2xhc3NlcyB0byBzdXBwb3J0CisgICAgICAgIHNraXBwaW5nIHNvbWUg
bnVtYmVyIG9mIGhlYWRlciBieXRlcywgYW5kIG5vdCBhc3N1bWUgdGhhdCB0aGV5IGFyZSBhbHdh
eXMgcmVhZGluZworICAgICAgICAvIHdyaXRpbmcgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUu
CisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIHdpdGggdGhlIGZvbGxvd2luZyBzY2VuYXJpb3Mg
YW5kIGVuc3VyaW5nIHRoYXQgdGhlIGNsaWVudCByZWNvdmVycworICAgICAgICB3aXRoIG5vIGNy
YXNoZXM6CisKKyAgICAgICAgMS4gbm8gY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICAyLiBh
IDAtc2l6ZWQgY2FjaGUgZmlsZSBvbiBhIGRpc2suCisgICAgICAgIDMuIGEgZnVsbCBzaXplZCBj
YWNoZSBmaWxlIG9uIGRpc2ssIHdpdGggdGhlIGhlYWRlciBmaWxlU2l6ZSBmaWVsZCBzZXQgdG8g
MC4KKyAgICAgICAgNC4gYSB0cnVuY2F0ZWQgY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICA1
LiBhbiB1bmNvcnJ1cHRlZCBjYWNoZSBmaWxlIG9uIGRpc2suCisKKyAgICAgICAgQWxzbyBtYW51
YWxseSB0ZXN0ZWQgYnkgY29tbWVudGVkIG91dCBzb21lIGNoZWNrcyBhbmQgYWxsb3dpbmcgdGhl
IGNsaWVudCB0bworICAgICAgICBjcmFzaCBvbiBhIHRydW5jYXRlZCBjYWNoZSBmaWxlLCBhbmQg
ZW5zdXJpbmcgdGhhdCB0aGUgY2xpZW50IHJlY292ZXJzIGFuZCBkb2VzCisgICAgICAgIG5vdCBj
cmFzaCBhIHNlY29uZCB0aW1lLgorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAgICAg
ICAoLVtKU1NjcmlwdCByZWFkQ2FjaGVdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgbm90aWZ5QmVm
b3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IG5vdGlmeUFm
dGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2Fj
aGU6XSk6CisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkv
SlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFNvdXJjZVBy
b3ZpZGVyLm1tOgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QmVmb3Jl
UmVhZGluZ0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKEpTU2NyaXB0U291cmNlUHJvdmlkZXI6
Om5vdGlmeUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvU291
cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6Om5vdGlmeUJlZm9y
ZVJlYWRpbmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpu
b3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRCeXRlY29kZS5oOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRCeXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpT
Qzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2VNYXBw
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorCiAyMDIwLTAyLTE5ICBLZWl0aCBNaWxsZXIg
IDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgV2FzbSByZWZlcmVu
Y2UgdHlwZXMgYnkgZGVmYXVsdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
Lm1tCShyZXZpc2lvbiAyNTY5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCwxMiArMTQ4LDMxIEBAICsgKGluc3RhbmNldHlwZSlz
Y3JpcHRPZlR5cGU6KEpTU2NyaXB0VHkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdHJ1Y3Qg
Q2FjaGVGaWxlSGVhZGVyIHsKKyAgICB1aW50MzJfdCBmaWxlU2l6ZTsKKyAgICB1aW50MzJfdCB1
bnVzZWRSZXNlcnZlZEZvckZ1dHVyZVVzZTsKK307CitzdGF0aWNfYXNzZXJ0KHNpemVvZihDYWNo
ZUZpbGVIZWFkZXIpID09IHJvdW5kVXBUb011bHRpcGxlT2Y8YWxpZ25vZihzdGQ6Om1heF9hbGln
bl90KT4oc2l6ZW9mKENhY2hlRmlsZUhlYWRlcikpKTsKKwogLSAodm9pZClyZWFkQ2FjaGUKIHsK
ICAgICBpZiAoIW1fY2FjaGVQYXRoKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGZkID0g
RmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5n
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIHtGaWxlU3lzdGVtOjpGaWxlTG9ja01v
ZGU6OkV4Y2x1c2l2ZSwgRmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpOb25ibG9ja2luZ30pOwor
ICAgIE5TU3RyaW5nICpjYWNoZVBhdGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAg
Y29uc3QgY2hhciogY2FjaGVGaWxlbmFtZSA9IGNhY2hlUGF0aFN0cmluZy5VVEY4U3RyaW5nOwor
ICAgIGNvbnN0IGNoYXIqIHRva2VuRmlsZU5hbWUgPSBbY2FjaGVQYXRoU3RyaW5nIHN0cmluZ0J5
QXBwZW5kaW5nU3RyaW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jlc3MiXS5VVEY4U3RyaW5nOworCisg
ICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModG9rZW5GaWxlTmFtZSkpIHsKKyAgICAgICAg
Ly8gV2UgbXVzdCBoYXZlIGNyYXNoZWQgd2hpbGUgdHJ5aW5nIHRvIGRlY29kZSB0aGUgY2FjaGUg
ZmlsZSBiZWZvcmUuCisgICAgICAgIC8vIExldCdzIHB1cmdlIHRva2VuRmlsZU5hbWUgYW5kIHN0
YXJ0IG92ZXIuCisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoY2FjaGVGaWxlbmFtZSk7
CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodG9rZW5GaWxlTmFtZSk7CisgICAgICAg
IEFTU0VSVCghbV9jYWNoZWRCeXRlY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gZmQgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUoY2FjaGVGaWxl
bmFtZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCB7RmlsZVN5c3RlbTo6RmlsZUxv
Y2tNb2RlOjpFeGNsdXNpdmUsIEZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6Tm9uYmxvY2tpbmd9
KTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogICAgICAgICByZXR1
cm47CiAgICAgYXV0byBjbG9zZUZEID0gbWFrZVNjb3BlRXhpdChbJl0gewpAQCAtMTY1LDE1ICsx
ODQsMzcgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZjxKU0M6OkNhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRlY29kZSA9IEpT
Qzo6Q2FjaGVkQnl0ZWNvZGU6OmNyZWF0ZShXVEZNb3ZlKG1hcHBlZEZpbGUpKTsKKyAgICAvLyBF
bnN1cmUgd2UgaGF2ZSBhIGhlYWRlciB0byByZWFkLgorICAgIGlmIChtYXBwZWRGaWxlLnNpemUo
KSA8IHNpemVvZihDYWNoZUZpbGVIZWFkZXIpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUoY2FjaGVGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBF
bnN1cmUgdGhlIGNhY2hlIGZpbGUgd3JpdGUgaXMgbm90IGNvcnJ1cHRlZC4gV2Ugb25seSB3cml0
ZSB0aGUgZmlsZQorICAgIC8vIHNpemUgdG8gdGhlIGhlYWRlciBhZnRlciB0aGUgY29udGVudCBv
ZiB0aGUgZW50aXJlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi4KKyAgICAvLyBUaGUgY2FjaGUgZmls
ZSBpcyBhbHNvIHdyaXR0ZW4gdG8gYXMgYSB0cmFuc2FjdGlvbiAoc2VlIHdyaXRlQ2FjaGUpLgor
ICAgIC8vIE90aGVyIHRoYW4gc29tZSBjb3JydXB0aW9uIGR1ZSB0byBleHRlcm5hbCBmYWN0b3Jz
LCB3ZSBkb24ndCBleHBlY3QgYQorICAgIC8vIHBhcnRpYWxseSB3cml0dGVuIGZpbGUuCisgICAg
Ly8gV2UgYWxzbyBleHBsaWNpdGx5IGNoZWNrIGZvciBleGFjdCBmaWxlIHNpemUgdG8gY2F0Y2gg
Y2FzZXMgd2hlcmUgdGhlCisgICAgLy8gZmlsZSBnZXRzIHRhbXBlcmVkIHdpdGggKHZpYSBzb21l
b25lIGFwcGVuZGluZyBzb21ldGhpbmcgb3IgdHJ1bmNhdGluZyBpdCkuCisgICAgY29uc3QgQ2Fj
aGVGaWxlSGVhZGVyJiBoZWFkZXIgPSAqYml0d2lzZV9jYXN0PGNvbnN0IENhY2hlRmlsZUhlYWRl
cio+KG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBpZiAoaGVhZGVyLmZpbGVTaXplICE9IG1hcHBl
ZEZpbGUuc2l6ZSgpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoY2FjaGVGaWxl
bmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8SlNDOjpDYWNoZWRCeXRl
Y29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OkNhY2hlZEJ5dGVjb2RlOjpjcmVhdGUoV1RGTW92
ZShtYXBwZWRGaWxlKSwgc2l6ZW9mKENhY2hlRmlsZUhlYWRlcikpOwogCiAgICAgSlNDOjpWTSYg
dm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRleHRHcm91cFJlZl0pOwogICAgIEpT
Qzo6U291cmNlQ29kZSBzb3VyY2VDb2RlID0gW3NlbGYgc291cmNlQ29kZV07CiAgICAgSlNDOjpT
b3VyY2VDb2RlS2V5IGtleSA9IG1fdHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSA/IHNvdXJj
ZUNvZGVLZXlGb3JTZXJpYWxpemVkUHJvZ3JhbSh2bSwgc291cmNlQ29kZSkgOiBzb3VyY2VDb2Rl
S2V5Rm9yU2VyaWFsaXplZE1vZHVsZSh2bSwgc291cmNlQ29kZSk7CisKKyAgICBbc2VsZiBub3Rp
ZnlCZWZvcmVSZWFkaW5nQ2FjaGVkQnl0ZWNvZGVdOwogICAgIGlmIChpc0NhY2hlZEJ5dGVjb2Rl
U3RpbGxWYWxpZCh2bSwgY2FjaGVkQnl0ZWNvZGUuY29weVJlZigpLCBrZXksIG1fdHlwZSA9PSBr
SlNTY3JpcHRUeXBlUHJvZ3JhbSA/IEpTQzo6U291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBlIDog
SlNDOjpTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSkpCiAgICAgICAgIG1fY2FjaGVkQnl0ZWNv
ZGUgPSBXVEZNb3ZlKGNhY2hlZEJ5dGVjb2RlKTsKICAgICBlbHNlCiAgICAgICAgIGZ0cnVuY2F0
ZShmZCwgMCk7CisgICAgW3NlbGYgbm90aWZ5QWZ0ZXJSZWFkaW5nQ2FjaGVkQnl0ZWNvZGVdOwog
fQogCiAtIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKQEAg
LTIzMyw2ICsyNzQsMjcgQEAgLSAoUmVmUHRyPEpTQzo6Q2FjaGVkQnl0ZWNvZGU+KWNhY2hlZEJ5
dAogICAgIHJldHVybiBtX2NhY2hlZEJ5dGVjb2RlOwogfQogCistICh2b2lkKW5vdGlmeUJlZm9y
ZVJlYWRpbmdDYWNoZWRCeXRlY29kZQoreworICAgIEFTU0VSVChtX2NhY2hlUGF0aCAmJiBtX2Nh
Y2hlZEJ5dGVjb2RlKTsKKyAgICBOU1N0cmluZyAqY2FjaGVQYXRoU3RyaW5nID0gW21fY2FjaGVQ
YXRoIHBhdGhdOworICAgIGNvbnN0IGNoYXIqIHRva2VuRmlsZU5hbWUgPSBbY2FjaGVQYXRoU3Ry
aW5nIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jlc3MiXS5VVEY4
U3RyaW5nOworICAgIGludCBmZCA9IG9wZW4odG9rZW5GaWxlTmFtZSwgT19DUkVBVCB8IE9fTk9O
QkxPQ0ssIDA2NjYpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworICAgIGNs
b3NlKGZkKTsKK30KKworLSAodm9pZClub3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZQor
eworICAgIEFTU0VSVChtX2NhY2hlUGF0aCAmJiBtX2NhY2hlZEJ5dGVjb2RlKTsKKyAgICBOU1N0
cmluZyAqY2FjaGVQYXRoU3RyaW5nID0gW21fY2FjaGVQYXRoIHBhdGhdOworICAgIGNvbnN0IGNo
YXIqIHRva2VuRmlsZU5hbWUgPSBbY2FjaGVQYXRoU3RyaW5nIHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jlc3MiXS5VVEY4U3RyaW5nOworICAgIGludCBmZCA9IEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUodG9rZW5GaWxlTmFtZSk7CisgICAgaWYgKGZkID09IC0xKQor
ICAgICAgICByZXR1cm47Cit9CisKIC0gKEpTQzo6U291cmNlQ29kZSlzb3VyY2VDb2RlCiB7CiAg
ICAgSlNDOjpWTSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRleHRHcm91cFJl
Zl0pOwpAQCAtMjY2LDI0ICszMjgsNDMgQEAgLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVy
cm9yCiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKLSAgICBpbnQgZmQgPSBvcGVuKFttX2Nh
Y2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19SRFdSIHwgT19FWExPQ0sgfCBP
X05PTkJMT0NLLCAwNjY2KTsKKyAgICAvLyBXZSB3YW50IHRvIGRvIHRoZSB3cml0ZSBhcyBhIHRy
YW5zYWN0aW9uIChpLmUuIHdlIGd1YXJhbnRlZSB0aGF0IGl0J3MgYWxsCisgICAgLy8gb3Igbm90
aGluZykuIFNvLCB3ZSdsbCB3cml0ZSB0byBhIHRlbXAgZmlsZSBmaXJzdCwgYW5kIHJlbmFtZSB0
aGUgdGVtcAorICAgIC8vIGZpbGUgdG8gdGhlIGNhY2hlIGZpbGUgb25seSBhZnRlciB3ZSd2ZSBm
aW5pc2hlZCB3cml0aW5nIHRoZSB3aG9sZSB0aGluZy4KKworICAgIE5TU3RyaW5nICpjYWNoZVBh
dGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciogY2FjaGVGaWxl
bmFtZSA9IGNhY2hlUGF0aFN0cmluZy5VVEY4U3RyaW5nOworICAgIGNvbnN0IGNoYXIqIHRlbXBG
aWxlTmFtZSA9IFtjYWNoZVBhdGhTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIudG1w
Il0uVVRGOFN0cmluZzsKKyAgICBpbnQgZmQgPSBvcGVuKGNhY2hlRmlsZW5hbWUsIE9fQ1JFQVQg
fCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9fTk9OQkxPQ0ssIDA2NjYpOwogICAgIGlmIChmZCA9PSAt
MSkgewogICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVuIG9yIGxvY2sg
dGhlIGJ5dGVjb2RlIGNhY2hlIGZpbGUuIEl0J3MgbGlrZWx5IGFub3RoZXIgVk0gb3IgcHJvY2Vz
cyBpcyBhbHJlYWR5IHVzaW5nIGl0LiBFcnJvcjogIiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAg
ICAgcmV0dXJuIE5POwogICAgIH0KKworICAgIGludCB0ZW1wRkQgPSBvcGVuKHRlbXBGaWxlTmFt
ZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fRVhMT0NLIHwgT19OT05CTE9DSywgMDY2Nik7CisgICAg
aWYgKHRlbXBGRCA9PSAtMSkgeworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIkNvdWxkIG5v
dCBvcGVuIG9yIGxvY2sgdGhlIGJ5dGVjb2RlIGNhY2hlIHRlbXAgZmlsZS4gRXJyb3I6ICIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIE5POwor
ICAgIH0KKwogICAgIGF1dG8gY2xvc2VGRCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAg
Y2xvc2UodGVtcEZEKTsKICAgICAgICAgY2xvc2UoZmQpOwogICAgIH0pOwogCisgICAgQ2FjaGVG
aWxlSGVhZGVyIGhlYWRlciB7IDAsIDAgfTsKKyAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSh0
ZW1wRkQsIGJpdHdpc2VfY2FzdDxjb25zdCBjaGFyKj4oJmhlYWRlciksIHNpemVvZihoZWFkZXIp
KTsKKwogICAgIEpTQzo6Qnl0ZWNvZGVDYWNoZUVycm9yIGNhY2hlRXJyb3I7CiAgICAgSlNDOjpT
b3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBbc2VsZiBzb3VyY2VDb2RlXTsKICAgICBKU0M6OlZNJiB2
bSA9ICp0b0pTKFttX3ZpcnR1YWxNYWNoaW5lIEpTQ29udGV4dEdyb3VwUmVmXSk7CiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIGtKU1NjcmlwdFR5cGVNb2R1bGU6Ci0gICAgICAgIG1f
Y2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUodm0sIHNvdXJjZUNv
ZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVNb2R1bGVCeXRlY29kZSh2bSwgc291cmNlQ29kZSwgdGVtcEZELCBjYWNoZUVycm9yKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrSlNTY3JpcHRUeXBlUHJvZ3JhbToKLSAgICAgICAg
bV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUodm0sIHNvdXJj
ZUNvZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIHRlbXBGRCwgY2FjaGVFcnJv
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjk0LDYgKzM3NSwxMyBAQCAtIChCT09M
KXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAor
ICAgIHNpemVfdCBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OnNlZWtGaWxlKHRlbXBGRCwgMCwgRmls
ZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkVuZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZmlsZVNp
emUgPD0gVUlOVF9NQVgpOworICAgIGhlYWRlci5maWxlU2l6ZSA9IGZpbGVTaXplOworICAgIEZp
bGVTeXN0ZW06OnNlZWtGaWxlKHRlbXBGRCwgMCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46
OkJlZ2lubmluZyk7CisgICAgd3JpdGUodGVtcEZELCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7
CisKKyAgICByZW5hbWUodGVtcEZpbGVOYW1lLCBjYWNoZUZpbGVuYW1lKTsKICAgICByZXR1cm4g
WUVTOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50
ZXJuYWwuaAkocmV2aXNpb24gMjU2OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNiArNTIsOCBAQCBjbGFzcyBTdHJp
bmc7CiAtIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOwogLSAoSlNDOjpTb3VyY2VD
b2RlKXNvdXJjZUNvZGU7CiAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3I7CistICh2
b2lkKW5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRlY29kZTsKKy0gKHZvaWQpbm90aWZ5QWZ0
ZXJSZWFkaW5nQ2FjaGVkQnl0ZWNvZGU7CiAKIEBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDI1
Njk2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdCBvdmVycmlkZTsKICAgICBTdHJpbmdWaWV3IHNvdXJjZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFJlZlB0cjxKU0M6OkNhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRlY29kZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2Rl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSgp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVBy
b3ZpZGVyLm1tCShyZXZpc2lvbiAyNTY5NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNCArNDUsMTQgQEAg
UmVmUHRyPEpTQzo6Q2FjaGVkQnl0ZWNvZGU+IEpTU2NyaXB0U291cgogICAgIHJldHVybiBbbV9z
Y3JpcHQuZ2V0KCkgY2FjaGVkQnl0ZWNvZGVdOwogfQogCit2b2lkIEpTU2NyaXB0U291cmNlUHJv
dmlkZXI6Om5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRlY29kZSgpCit7CisgICAgW21fc2Ny
aXB0LmdldCgpIG5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRlY29kZV07Cit9CisKK3ZvaWQg
SlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QWZ0ZXJSZWFkaW5nQ2FjaGVkQnl0ZWNvZGUo
KQoreworICAgIFttX3NjcmlwdC5nZXQoKSBub3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29k
ZV07Cit9CisKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gMjU2OTY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjQsNiArNjQsOCBAQCBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVCeXRlY29kZShjb25zdCBCeXRlY29kZUNh
Y2hlR2VuZXJhdG9yJikgY29uc3QgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNo
ZShjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKikg
Y29uc3QgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRDYWNoZWRCeXRlY29kZSgpIGNv
bnN0IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hlZEJ5
dGVjb2RlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBZnRlclJlYWRpbmdDYWNo
ZWRCeXRlY29kZSgpIHsgfQogCiAgICAgICAgIFN0cmluZ1ZpZXcgZ2V0UmFuZ2UoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdAogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZEJ5dGVjb2RlLmgJKHJldmlzaW9uIDI1Njk2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZEJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2Fj
aGVkQnl0ZWNvZGUoQ2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQYXlsb2FkKCkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUmVmPENhY2hlZEJ5dGVjb2RlPiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGEmJiBkYXRhLCBMZWFmRXhlY3V0YWJsZU1hcCYmIGxlYWZFeGVjdXRhYmxlcyA9IHsg
fSkKKyAgICBzdGF0aWMgUmVmPENhY2hlZEJ5dGVjb2RlPiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEmJiBkYXRhLCB1aW50MzJfdCBoZWFkZXJCeXRlc1RvU2tpcCA9IDAsIExlYWZF
eGVjdXRhYmxlTWFwJiYgbGVhZkV4ZWN1dGFibGVzID0geyB9KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVkQnl0ZWNvZGUoQ2FjaGVQYXlsb2FkOjptYWtlTWFwcGVk
UGF5bG9hZChXVEZNb3ZlKGRhdGEpKSwgV1RGTW92ZShsZWFmRXhlY3V0YWJsZXMpKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZEJ5dGVjb2RlKENhY2hlUGF5bG9hZDo6bWFr
ZU1hcHBlZFBheWxvYWQoV1RGTW92ZShkYXRhKSksIGhlYWRlckJ5dGVzVG9Ta2lwLCBXVEZNb3Zl
KGxlYWZFeGVjdXRhYmxlcykpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUmVmPENhY2hlZEJ5dGVj
b2RlPiBjcmVhdGUoTWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiYmIGRhdGEsIHNpemVfdCBz
aXplLCBMZWFmRXhlY3V0YWJsZU1hcCYmIGxlYWZFeGVjdXRhYmxlcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZEJ5dGVjb2RlKENhY2hlUGF5bG9hZDo6bWFrZU1h
bGxvY1BheWxvYWQoV1RGTW92ZShkYXRhKSwgc2l6ZSksIFdURk1vdmUobGVhZkV4ZWN1dGFibGVz
KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNoZWRCeXRlY29kZShDYWNoZVBh
eWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKFdURk1vdmUoZGF0YSksIHNpemUpLCAwLCBXVEZNb3Zl
KGxlYWZFeGVjdXRhYmxlcykpKTsKICAgICB9CiAKICAgICBMZWFmRXhlY3V0YWJsZU1hcCYgbGVh
ZkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9sZWFmRXhlY3V0YWJsZXM7IH0KQEAgLTY0LDE0ICs2
NCwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRm9yRWFjaFVwZGF0ZUNhbGxiYWNrID0gRnVuY3Rp
b248dm9pZChvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk+OwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY29tbWl0VXBkYXRlcyhjb25zdCBGb3JFYWNoVXBkYXRlQ2FsbGJhY2smKSBjb25z
dDsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWQu
ZGF0YSgpOyB9CisgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5
bG9hZC5kYXRhKCkgKyBtX2hlYWRlckJ5dGVzVG9Ta2lwOyB9CiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3BheWxvYWQuc2l6ZSgpOyB9CiAgICAgYm9vbCBoYXNVcGRhdGVzKCkg
Y29uc3QgeyByZXR1cm4gIW1fdXBkYXRlcy5pc0VtcHR5KCk7IH0KICAgICBzaXplX3Qgc2l6ZUZv
clVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiBwcml2YXRlOgotICAgIENhY2hl
ZEJ5dGVjb2RlKENhY2hlUGF5bG9hZCYmIHBheWxvYWQsIExlYWZFeGVjdXRhYmxlTWFwJiYgbGVh
ZkV4ZWN1dGFibGVzID0geyB9KQotICAgICAgICA6IG1fc2l6ZShwYXlsb2FkLnNpemUoKSkKKyAg
ICBDYWNoZWRCeXRlY29kZShDYWNoZVBheWxvYWQmJiBwYXlsb2FkLCB1aW50MzJfdCBoZWFkZXJC
eXRlc1RvU2tpcCA9IDAsIExlYWZFeGVjdXRhYmxlTWFwJiYgbGVhZkV4ZWN1dGFibGVzID0geyB9
KQorICAgICAgICA6IG1faGVhZGVyQnl0ZXNUb1NraXAoaGVhZGVyQnl0ZXNUb1NraXApCisgICAg
ICAgICwgbV9zaXplKHBheWxvYWQuc2l6ZSgpKQogICAgICAgICAsIG1fcGF5bG9hZChXVEZNb3Zl
KHBheWxvYWQpKQogICAgICAgICAsIG1fbGVhZkV4ZWN1dGFibGVzKFdURk1vdmUobGVhZkV4ZWN1
dGFibGVzKSkKICAgICB7CkBAIC03OSw2ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNv
cHlMZWFmRXhlY3V0YWJsZXMoY29uc3QgQ2FjaGVkQnl0ZWNvZGUmKTsKIAorICAgIHVpbnQzMl90
IG1faGVhZGVyQnl0ZXNUb1NraXA7CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKICAgICBDYWNo
ZVBheWxvYWQgbV9wYXlsb2FkOwogICAgIExlYWZFeGVjdXRhYmxlTWFwIG1fbGVhZkV4ZWN1dGFi
bGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVz
LmNwcAkocmV2aXNpb24gMjU2OTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9iYXNlT2Zmc2V0KDApCiAgICAgICAgICwgbV9jdXJyZW50UGFnZShudWxscHRy
KQogICAgIHsKKyAgICAgICAgaWYgKGZkICE9IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGUpCisgICAgICAgICAgICBtX2hlYWRlckJ5dGVzVG9Ta2lwID0gRmlsZVN5c3RlbTo6
c2Vla0ZpbGUoZmQsIDAsIEZpbGVTeXN0ZW06OkZpbGVTZWVrT3JpZ2luOjpDdXJyZW50KTsKICAg
ICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7CiAgICAgfQogCkBAIC0xNjIsNiArMTY0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2VNYXBwZWQoZXJyb3IpOwogICAgICAgICB9
CiAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGVhZGVyQnl0ZXNUb1NraXApOwogICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fYmFzZU9mZnNldCArIG1fY3VycmVudFBhZ2UtPnNpemUoKTsKICAg
ICAgICAgTWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiBidWZmZXIgPSBNYWxsb2NQdHI8dWlu
dDhfdCwgVk1NYWxsb2M+OjptYWxsb2Moc2l6ZSk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IDA7CkBAIC0xNzYsMTIgKzE3OSwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlZlB0cjxD
YWNoZWRCeXRlY29kZT4gcmVsZWFzZU1hcHBlZChCeXRlY29kZUNhY2hlRXJyb3ImIGVycm9yKQog
ICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Jhc2VPZmZzZXQgKyBtX2N1cnJlbnRQYWdl
LT5zaXplKCk7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9oZWFkZXJCeXRlc1RvU2tpcCArIG1f
YmFzZU9mZnNldCArIG1fY3VycmVudFBhZ2UtPnNpemUoKTsKICAgICAgICAgaWYgKCFGaWxlU3lz
dGVtOjp0cnVuY2F0ZUZpbGUobV9mZCwgc2l6ZSkpIHsKICAgICAgICAgICAgIGVycm9yID0gQnl0
ZWNvZGVDYWNoZUVycm9yOjpTdGFuZGFyZEVycm9yKGVycm5vKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAgICAgRmlsZVN5c3RlbTo6c2Vla0ZpbGUobV9m
ZCwgbV9oZWFkZXJCeXRlc1RvU2tpcCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lu
bmluZyk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFnZXMpIHsKICAgICAg
ICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShtX2ZkLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihwYWdlLmJ1ZmZlcigpKSwgcGFnZS5zaXplKCkpOwogICAg
ICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgewpAQCAtMjAyLDcgKzIwNiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAg
IHJldHVybiBDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKFdURk1vdmUobWFwcGVkRmlsZURhdGEpLCBX
VEZNb3ZlKG1fbGVhZkV4ZWN1dGFibGVzKSk7CisgICAgICAgIHJldHVybiBDYWNoZWRCeXRlY29k
ZTo6Y3JlYXRlKFdURk1vdmUobWFwcGVkRmlsZURhdGEpLCBtX2hlYWRlckJ5dGVzVG9Ta2lwLCBX
VEZNb3ZlKG1fbGVhZkV4ZWN1dGFibGVzKSk7CiAgICAgfQogCiAgICAgY2xhc3MgUGFnZSB7CkBA
IC0yNzEsNiArMjc1LDcgQEAgcHJpdmF0ZToKIAogICAgIFZNJiBtX3ZtOwogICAgIEZpbGVTeXN0
ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZkOworICAgIHVpbnQzMl90IG1faGVhZGVyQnl0ZXNU
b1NraXAgeyAwIH07CiAgICAgcHRyZGlmZl90IG1fYmFzZU9mZnNldDsKICAgICBQYWdlKiBtX2N1
cnJlbnRQYWdlOwogICAgIFZlY3RvcjxQYWdlPiBtX3BhZ2VzOwpAQCAtMjMxOCw2ICsyMzIzLDgg
QEAgcHJpdmF0ZToKICAgICBDYWNoZWRDb2RlQmxvY2tUYWcgbV90YWc7CiB9OwogCitzdGF0aWNf
YXNzZXJ0KGFsaWdub2YoR2VuZXJpY0NhY2hlRW50cnkpIDw9IGFsaWdub2Yoc3RkOjptYXhfYWxp
Z25fdCkpOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CiBjbGFz
cyBDYWNoZUVudHJ5IDogcHVibGljIEdlbmVyaWNDYWNoZUVudHJ5IHsKIHB1YmxpYzoKQEAgLTIz
NTUsNiArMjM2Miw5IEBAIHByaXZhdGU6CiAgICAgQ2FjaGVkUHRyPENhY2hlZENvZGVCbG9ja1R5
cGU8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4gbV9jb2RlQmxvY2s7CiB9OwogCitzdGF0aWNfYXNz
ZXJ0KGFsaWdub2YoQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KSA8PSBhbGln
bm9mKHN0ZDo6bWF4X2FsaWduX3QpKTsKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihDYWNoZUVudHJ5
PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4pIDw9IGFsaWdub2Yoc3RkOjptYXhfYWxp
Z25fdCkpOworCiBib29sIEdlbmVyaWNDYWNoZUVudHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4mIHJlc3VsdCkg
Y29uc3QKIHsKICAgICBpZiAoIWlzVXBUb0RhdGUoZGVjb2RlcikpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMjU2OTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xNTEsMTAgKzE1MSwxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURp
c2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKLSAgICAgICAg
UmVmUHRyPENhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRlY29kZSA9IGtleS5zb3VyY2UoKS5wcm92
aWRlcigpLmNhY2hlZEJ5dGVjb2RlKCk7CisgICAgICAgIFNvdXJjZVByb3ZpZGVyJiBzb3VyY2VQ
cm92aWRlciA9IGtleS5zb3VyY2UoKS5wcm92aWRlcigpOworICAgICAgICBSZWZQdHI8Q2FjaGVk
Qnl0ZWNvZGU+IGNhY2hlZEJ5dGVjb2RlID0gc291cmNlUHJvdmlkZXIuY2FjaGVkQnl0ZWNvZGUo
KTsKICAgICAgICAgaWYgKCFjYWNoZWRCeXRlY29kZSB8fCAhY2FjaGVkQnl0ZWNvZGUtPnNpemUo
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gZGVjb2RlQ29k
ZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgKmNhY2hlZEJ5dGVjb2RlKTsK
KyAgICAgICAgc291cmNlUHJvdmlkZXIubm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2Rl
KCk7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+KHZtLCBrZXksICpjYWNoZWRCeXRlY29kZSk7CisgICAgICAgIHNvdXJjZVByb3Zp
ZGVyLm5vdGlmeUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tU
eXBlPgo=
</data>
<flag name="review"
          id="406785"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391224</attachid>
            <date>2020-02-19 17:09:53 -0800</date>
            <delta_ts>2020-02-20 15:46:04 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-207972.patch</filename>
            <type>text/plain</type>
            <size>23612</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIwLTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2RlIGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxl
IGNvcnJ1cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDc5NzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MjYwNTk1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgYnl0ZWNvZGUgY2Fj
aGUgZmlsZSBpcyBjb3JydXB0ZWQsIHdlIGN1cnJlbnRseSB3aWxsIGFsd2F5cyBjcmFzaCBldmVy
eSB0aW1lCisgICAgICAgIHdlIHRyeSB0byByZWFkIGl0IChpbiBwZXJwZXR1aXR5IGFzIGxvbmcg
YXMgdGhlIGNvcnJ1cHRlZCBjYWNoZSBmaWxlIGNvbnRpbnVlcyB0bworICAgICAgICBleGlzdCBv
biBkaXNrKS4gIFRvIGd1YXJkIGFnYWluc3QgdGhpcywgd2UnbGwgaGFyZGVuIHRoZSBieXRlY29k
ZSBjYWNoaW5nIG1lY2hhbmlzbQorICAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgIDEuIE1v
ZGlmeSB0aGUgcmVhZENhY2hlIG9wZXJhdGlvbiB0byBmaXJzdCBkcm9wIGEgLnJlYWRpbmctaW4t
cHJvZ3Jlc3MgdG9rZW4gZmlsZQorICAgICAgICAgICBvbiBkaXNrIGJlZm9yZSBhdHRlbXB0aW5n
IHRvIHJlYWQgdGhlIGNhY2hlIGZpbGUsIGFuZCB0byBkZWxldGUgdGhlIHRva2VuIGZpbGUKKyAg
ICAgICAgICAgYWZ0ZXIgd2UncmUgZG9uZSBkZWNvZGluZyBmcm9tIHRoZSBjYWNoZS4KKworICAg
ICAgICAgICBCZWZvcmUgY29tbWVuY2luZyB3aXRoIHJlYWRpbmcgdGhlIGNhY2hlIGZpbGUsIHdl
J2xsIGFsc28gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2UKKyAgICAgICAgICAgb2YgdGhlIHRva2Vu
IGZpbGUgb24gZGlzay4gIElmIGZvdW5kLCB0aGlzIGlzIGFuIGluZGljYXRvciB0aGF0IHdlIHdl
cmUgdW5hYmxlCisgICAgICAgICAgIHRvIGNvbXBsZXRlIHRoZSBsYXN0IHJlYWQgLyBkZWNvZGUg
b2YgdGhlIGNhY2hlIGZpbGUuICBJbiB0aGlzIGNhc2UsIHdlJ2xsCisgICAgICAgICAgIGRlbGV0
ZSBib3RoIHRoZSBjYWNoZSBhbmQgdG9rZW4gZmlsZXMsIGFuZCBwcm9jZWVkIGFzIGlmIG5vIGNh
Y2hlIGZpbGUgaXMgZm91bmQuCisKKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29u
J3QgYmUgY3Jhc2hpbmcgaW4gcGVycGV0dWl0eSwgYW5kIHRoYXQgdGhlIHN5c3RlbSBzZWxmCisg
ICAgICAgICAgIGhlYWxzIGlmIHRoZSBjYWNoZSBmaWxlIGdvdCBjb3JydXB0ZWQgc29tZWhvdy4K
KworICAgICAgICAyLiBNb2RpZnkgdGhlIHdyaXRlQ2FjaGUgb3BlcmF0aW9uIHRvIGFsd2F5cyB3
cml0ZSB0aGUgY2FjaGUgZmlsZSBpbiBhIHRyYW5zYWN0aW9uYWwKKyAgICAgICAgICAgbWFubmVy
IGkuZS4gd2UnbGwgZmlyc3Qgd3JpdGUgdG8gYSAudG1wIGZpbGUsIGFuZCB0aGVuIHJlbmFtZSB0
aGUgLnRtcCBmaWxlIHRvCisgICAgICAgICAgIHRoZSBjYWNoZSBmaWxlIG9ubHkgaWYgdGhlIGVu
dGlyZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gaW4gY29tcGxldGVuZXNzLgorCisgICAgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0IGdldCBjb3JydXB0ZWQgY2FjaGUgZmlsZXMgZHVl
IHRvIGludGVycnVwdGVkIHdyaXRlcy4KKworICAgICAgICAzLiBNb2RpZnkgdGhlIGNhY2hlIGZp
bGUgZm9ybWF0IHRvIGFsd2F5cyBjb250YWluIGEgaGVhZGVyIGF0IHRoZSBzdGFydC4gIFRoZQor
ICAgICAgICAgICBoZWFkZXIgY3VycmVudCBvbmx5IGNvbnRhaW5zIGEgZmlsZVNpemUgdmFsdWUu
CisKKyAgICAgICAgICAgV2hlbiByZWFkaW5nIHRoZSBjYWNoZSBmaWxlLCB3ZSBub3cgZmlyc3Qg
Y2hlY2sgaWYgdGhlIGNhY2hlIGZpbGUgaXMgYXQgbGVhc3QKKyAgICAgICAgICAgbGFyZ2UgZW5v
dWdoIHRvIGhvbGQgdGhpcyBoZWFkZXIuICBJZiBub3QsIGRlbGV0ZSB0aGUgY2FjaGUgZmlsZSBh
bmQgcHJvY2VlZAorICAgICAgICAgICBhcyBubyBjYWNoZSBmaWxlIGlzIGZvdW5kLgorCisgICAg
ICAgICAgIE5leHQsIHdlIGNoZWNrIGlmIHRoZSBoZWFkZXIncyByZWNvcmRlZCBmaWxlU2l6ZSBt
YXRjaGVzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgY2FjaGUgZmlsZS4gIElm
IG5vdCwgZGVsZXRlIHRoZSBjYWNoZSBmaWxlIGFuZCBwcm9jZWVkIGFzIG5vIGNhY2hlIGZpbGUg
aXMgZm91bmQuCisKKyAgICAgICAgICAgV2l0aCB0aGlzIGNoYW5nZSwgd2Ugbm93IGhhdmUgc29t
ZSBwcm90ZWN0aW9uIGFnYWluc3QgY29ycnVwdGlvbiB3aGVyZSB0aGUKKyAgICAgICAgICAgZmls
ZSBnZXRzIG1vZGlmaWVkIChlaXRoZXIgdHJ1bmNhdGVkIG9yIGFwcGVuZGVkIHRvKS4gIFRoaXMg
aXMgbm90IGEgZ3VhcmFudGVlCisgICAgICAgICAgIHRoYXQgdGhlIGZpbGUgY29udGVudCB3b24n
dCBiZSBjb3JydXB0ZWQgaW4gc29tZSBvdGhlciB3YXkuICBIb3dldmVyLCBpZiB3ZQorICAgICAg
ICAgICBjcmFzaCBmcm9tIHRoYXQsIHdlJ2xsIGJlIGFibGUgdG8gcmVjb3ZlciB3aXRoIG1pdGln
YXRpb24gKDEpIGFib3ZlLgorCisgICAgICAgICAgIEluIHRoZSBmdXR1cmUsIHdlIGNhbiBjb25z
aWRlciBoYXNoaW5nIHRoZSBjYWNoZSBmaWxlIGFuZCBzdG9yaW5nIHRoZSBoYXNoIGluCisgICAg
ICAgICAgIHRoZSBoZWFkZXIgZm9yIHZlcmlmaWNhdGlvbiBiZWZvcmUgYWxsb3dpbmcgdGhlIGZp
bGUgdG8gYmUgcmVhZC4gIFdlIGRvbid0CisgICAgICAgICAgIGN1cnJlbnRseSBkbyB0aGlzIGJl
Y2F1c2Ugd2UgYWxyZWFkeSBleHBlY3QgdGhlIGNsaWVudCB0byBrZWVwIHRoZSBjYWNoZSBmaWxl
CisgICAgICAgICAgIGluIGEgc2VjdXJlIGVudmlyb25tZW50IHRoYXQgaXMgbm90IHN1YmplY3Qg
dG8gZXh0ZXJuYWwgY29ycnVwdGlvbi4gIEFsbCB3ZSdyZQorICAgICAgICAgICBkb2luZyBoZXJl
IGlzIG1pdGlnYXRpbmcgYWdhaW5zdCBjYXRhc3Ryb3BoaWMgZmFpbHVyZSBkdWUgdG8gdW5mb3Jl
c2VlbiBidWdzCisgICAgICAgICAgIGluIG91ciBjb2RlIG9yIHRoZSBjbGllbnQncyBjb2RlLgor
CisgICAgICAgIFRvIHN1cHBvcnQgKDMpLCB3ZSBhbHNvIG1vZGlmeSB0aGUgQ2FjaGVkQnl0ZWNv
ZGUgYW5kIEVuY29kZXIgY2xhc3NlcyB0byBzdXBwb3J0CisgICAgICAgIHNraXBwaW5nIHNvbWUg
bnVtYmVyIG9mIGhlYWRlciBieXRlcywgYW5kIG5vdCBhc3N1bWUgdGhhdCB0aGV5IGFyZSBhbHdh
eXMgcmVhZGluZworICAgICAgICAvIHdyaXRpbmcgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUu
CisKKyAgICAgICAgTWFudWFsbHkgdGVzdGVkIHdpdGggdGhlIGZvbGxvd2luZyBzY2VuYXJpb3Mg
YW5kIGVuc3VyaW5nIHRoYXQgdGhlIGNsaWVudCByZWNvdmVycworICAgICAgICB3aXRoIG5vIGNy
YXNoZXM6CisKKyAgICAgICAgMS4gbm8gY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICAyLiBh
IDAtc2l6ZWQgY2FjaGUgZmlsZSBvbiBhIGRpc2suCisgICAgICAgIDMuIGEgZnVsbCBzaXplZCBj
YWNoZSBmaWxlIG9uIGRpc2ssIHdpdGggdGhlIGhlYWRlciBmaWxlU2l6ZSBmaWVsZCBzZXQgdG8g
MC4KKyAgICAgICAgNC4gYSB0cnVuY2F0ZWQgY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICA1
LiBhbiB1bmNvcnJ1cHRlZCBjYWNoZSBmaWxlIG9uIGRpc2suCisKKyAgICAgICAgQWxzbyBtYW51
YWxseSB0ZXN0ZWQgYnkgY29tbWVudGVkIG91dCBzb21lIGNoZWNrcyBhbmQgYWxsb3dpbmcgdGhl
IGNsaWVudCB0bworICAgICAgICBjcmFzaCBvbiBhIHRydW5jYXRlZCBjYWNoZSBmaWxlLCBhbmQg
ZW5zdXJpbmcgdGhhdCB0aGUgY2xpZW50IHJlY292ZXJzIGFuZCBkb2VzCisgICAgICAgIG5vdCBj
cmFzaCBhIHNlY29uZCB0aW1lLgorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAgICAg
ICAoLVtKU1NjcmlwdCByZWFkQ2FjaGVdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgbm90aWZ5QmVm
b3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IG5vdGlmeUFm
dGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2Fj
aGU6XSk6CisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkv
SlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFNvdXJjZVBy
b3ZpZGVyLm1tOgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QmVmb3Jl
UmVhZGluZ0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKEpTU2NyaXB0U291cmNlUHJvdmlkZXI6
Om5vdGlmeUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvU291
cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6Om5vdGlmeUJlZm9y
ZVJlYWRpbmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpu
b3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9DYWNo
ZWRCeXRlY29kZS5oOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWNoZWRCeXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpT
Qzo6RW5jb2Rlcjo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2VNYXBw
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorCiAyMDIwLTAyLTE5ICBLZWl0aCBNaWxsZXIg
IDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgV2FzbSByZWZlcmVu
Y2UgdHlwZXMgYnkgZGVmYXVsdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
Lm1tCShyZXZpc2lvbiAyNTcwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCwxMiArMTQ4LDMxIEBAICsgKGluc3RhbmNldHlwZSlz
Y3JpcHRPZlR5cGU6KEpTU2NyaXB0VHkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdHJ1Y3Qg
Q2FjaGVGaWxlSGVhZGVyIHsKKyAgICB1aW50MzJfdCBmaWxlU2l6ZSB7IDAgfTsKKyAgICB1aW50
MzJfdCB1bnVzZWRSZXNlcnZlZEZvckZ1dHVyZVVzZVszXTsKK307CitzdGF0aWNfYXNzZXJ0KHNp
emVvZihDYWNoZUZpbGVIZWFkZXIpID09IHJvdW5kVXBUb011bHRpcGxlT2Y8YWxpZ25vZihzdGQ6
Om1heF9hbGlnbl90KT4oc2l6ZW9mKENhY2hlRmlsZUhlYWRlcikpKTsKKwogLSAodm9pZClyZWFk
Q2FjaGUKIHsKICAgICBpZiAoIW1fY2FjaGVQYXRoKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGZkID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKFttX2NhY2hlUGF0aCBwYXRoXS5V
VEY4U3RyaW5nLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIHtGaWxlU3lzdGVtOjpG
aWxlTG9ja01vZGU6OkV4Y2x1c2l2ZSwgRmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpOb25ibG9j
a2luZ30pOworICAgIE5TU3RyaW5nICpjYWNoZVBhdGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0
aF07CisgICAgY29uc3QgY2hhciogY2FjaGVGaWxlbmFtZSA9IGNhY2hlUGF0aFN0cmluZy5VVEY4
U3RyaW5nOworICAgIGNvbnN0IGNoYXIqIHRva2VuRmlsZU5hbWUgPSBbY2FjaGVQYXRoU3RyaW5n
IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jlc3MiXS5VVEY4U3Ry
aW5nOworCisgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHModG9rZW5GaWxlTmFtZSkpIHsK
KyAgICAgICAgLy8gV2UgbXVzdCBoYXZlIGNyYXNoZWQgd2hpbGUgdHJ5aW5nIHRvIGRlY29kZSB0
aGUgY2FjaGUgZmlsZSBiZWZvcmUuCisgICAgICAgIC8vIExldCdzIHB1cmdlIHRva2VuRmlsZU5h
bWUgYW5kIHN0YXJ0IG92ZXIuCisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoY2FjaGVG
aWxlbmFtZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodG9rZW5GaWxlTmFtZSk7
CisgICAgICAgIEFTU0VSVCghbV9jYWNoZWRCeXRlY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gZmQgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUo
Y2FjaGVGaWxlbmFtZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCB7RmlsZVN5c3Rl
bTo6RmlsZUxvY2tNb2RlOjpFeGNsdXNpdmUsIEZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6Tm9u
YmxvY2tpbmd9KTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmQpKQogICAg
ICAgICByZXR1cm47CiAgICAgYXV0byBjbG9zZUZEID0gbWFrZVNjb3BlRXhpdChbJl0gewpAQCAt
MTY1LDE1ICsxODQsMzcgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZjxKU0M6OkNhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRl
Y29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGU6OmNyZWF0ZShXVEZNb3ZlKG1hcHBlZEZpbGUpKTsK
KyAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIGhlYWRlciB0byByZWFkLgorICAgIGlmIChtYXBwZWRG
aWxlLnNpemUoKSA8IHNpemVvZihDYWNoZUZpbGVIZWFkZXIpKSB7CisgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoY2FjaGVGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBFbnN1cmUgdGhlIGNhY2hlIGZpbGUgd3JpdGUgaXMgbm90IGNvcnJ1cHRlZC4gV2Ug
b25seSB3cml0ZSB0aGUgZmlsZQorICAgIC8vIHNpemUgdG8gdGhlIGhlYWRlciBhZnRlciB0aGUg
Y29udGVudCBvZiB0aGUgZW50aXJlIGZpbGUgaGFzIGJlZW4gd3JpdHRlbi4KKyAgICAvLyBUaGUg
Y2FjaGUgZmlsZSBpcyBhbHNvIHdyaXR0ZW4gdG8gYXMgYSB0cmFuc2FjdGlvbiAoc2VlIHdyaXRl
Q2FjaGUpLgorICAgIC8vIE90aGVyIHRoYW4gc29tZSBjb3JydXB0aW9uIGR1ZSB0byBleHRlcm5h
bCBmYWN0b3JzLCB3ZSBkb24ndCBleHBlY3QgYQorICAgIC8vIHBhcnRpYWxseSB3cml0dGVuIGZp
bGUuCisgICAgLy8gV2UgYWxzbyBleHBsaWNpdGx5IGNoZWNrIGZvciBleGFjdCBmaWxlIHNpemUg
dG8gY2F0Y2ggY2FzZXMgd2hlcmUgdGhlCisgICAgLy8gZmlsZSBnZXRzIHRhbXBlcmVkIHdpdGgg
KHZpYSBzb21lb25lIGFwcGVuZGluZyBzb21ldGhpbmcgb3IgdHJ1bmNhdGluZyBpdCkuCisgICAg
Y29uc3QgQ2FjaGVGaWxlSGVhZGVyJiBoZWFkZXIgPSAqYml0d2lzZV9jYXN0PGNvbnN0IENhY2hl
RmlsZUhlYWRlcio+KG1hcHBlZEZpbGUuZGF0YSgpKTsKKyAgICBpZiAoaGVhZGVyLmZpbGVTaXpl
ICE9IG1hcHBlZEZpbGUuc2l6ZSgpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
Y2FjaGVGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8SlNDOjpD
YWNoZWRCeXRlY29kZT4gY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OkNhY2hlZEJ5dGVjb2RlOjpjcmVh
dGUoV1RGTW92ZShtYXBwZWRGaWxlKSwgc2l6ZW9mKENhY2hlRmlsZUhlYWRlcikpOwogCiAgICAg
SlNDOjpWTSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRleHRHcm91cFJlZl0p
OwogICAgIEpTQzo6U291cmNlQ29kZSBzb3VyY2VDb2RlID0gW3NlbGYgc291cmNlQ29kZV07CiAg
ICAgSlNDOjpTb3VyY2VDb2RlS2V5IGtleSA9IG1fdHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3Jh
bSA/IHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxpemVkUHJvZ3JhbSh2bSwgc291cmNlQ29kZSkgOiBz
b3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXplZE1vZHVsZSh2bSwgc291cmNlQ29kZSk7CisKKyAgICBb
c2VsZiBub3RpZnlCZWZvcmVSZWFkaW5nQ2FjaGVkQnl0ZWNvZGVdOwogICAgIGlmIChpc0NhY2hl
ZEJ5dGVjb2RlU3RpbGxWYWxpZCh2bSwgY2FjaGVkQnl0ZWNvZGUuY29weVJlZigpLCBrZXksIG1f
dHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSA/IEpTQzo6U291cmNlQ29kZVR5cGU6OlByb2dy
YW1UeXBlIDogSlNDOjpTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSkpCiAgICAgICAgIG1fY2Fj
aGVkQnl0ZWNvZGUgPSBXVEZNb3ZlKGNhY2hlZEJ5dGVjb2RlKTsKICAgICBlbHNlCiAgICAgICAg
IGZ0cnVuY2F0ZShmZCwgMCk7CisgICAgW3NlbGYgbm90aWZ5QWZ0ZXJSZWFkaW5nQ2FjaGVkQnl0
ZWNvZGVdOwogfQogCiAtIChCT09MKWNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6KE5TRXJyb3IgKiop
ZXJyb3IKQEAgLTIzMyw2ICsyNzQsMjcgQEAgLSAoUmVmUHRyPEpTQzo6Q2FjaGVkQnl0ZWNvZGU+
KWNhY2hlZEJ5dAogICAgIHJldHVybiBtX2NhY2hlZEJ5dGVjb2RlOwogfQogCistICh2b2lkKW5v
dGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRlY29kZQoreworICAgIEFTU0VSVChtX2NhY2hlUGF0
aCAmJiBtX2NhY2hlZEJ5dGVjb2RlKTsKKyAgICBOU1N0cmluZyAqY2FjaGVQYXRoU3RyaW5nID0g
W21fY2FjaGVQYXRoIHBhdGhdOworICAgIGNvbnN0IGNoYXIqIHRva2VuRmlsZU5hbWUgPSBbY2Fj
aGVQYXRoU3RyaW5nIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jl
c3MiXS5VVEY4U3RyaW5nOworICAgIGludCBmZCA9IG9wZW4odG9rZW5GaWxlTmFtZSwgT19DUkVB
VCB8IE9fTk9OQkxPQ0ssIDA2NjYpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNsb3NlKGZkKTsKK30KKworLSAodm9pZClub3RpZnlBZnRlclJlYWRpbmdDYWNoZWRC
eXRlY29kZQoreworICAgIEFTU0VSVChtX2NhY2hlUGF0aCAmJiBtX2NhY2hlZEJ5dGVjb2RlKTsK
KyAgICBOU1N0cmluZyAqY2FjaGVQYXRoU3RyaW5nID0gW21fY2FjaGVQYXRoIHBhdGhdOworICAg
IGNvbnN0IGNoYXIqIHRva2VuRmlsZU5hbWUgPSBbY2FjaGVQYXRoU3RyaW5nIHN0cmluZ0J5QXBw
ZW5kaW5nU3RyaW5nOkAiLnJlYWRpbmctaW4tcHJvZ3Jlc3MiXS5VVEY4U3RyaW5nOworICAgIGlu
dCBmZCA9IEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUodG9rZW5GaWxlTmFtZSk7CisgICAgaWYgKGZk
ID09IC0xKQorICAgICAgICByZXR1cm47Cit9CisKIC0gKEpTQzo6U291cmNlQ29kZSlzb3VyY2VD
b2RlCiB7CiAgICAgSlNDOjpWTSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRl
eHRHcm91cFJlZl0pOwpAQCAtMjY2LDI0ICszMjgsNDMgQEAgLSAoQk9PTCl3cml0ZUNhY2hlOihT
dHJpbmcmKWVycm9yCiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKLSAgICBpbnQgZmQgPSBv
cGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19SRFdSIHwgT19F
WExPQ0sgfCBPX05PTkJMT0NLLCAwNjY2KTsKKyAgICAvLyBXZSB3YW50IHRvIGRvIHRoZSB3cml0
ZSBhcyBhIHRyYW5zYWN0aW9uIChpLmUuIHdlIGd1YXJhbnRlZSB0aGF0IGl0J3MgYWxsCisgICAg
Ly8gb3Igbm90aGluZykuIFNvLCB3ZSdsbCB3cml0ZSB0byBhIHRlbXAgZmlsZSBmaXJzdCwgYW5k
IHJlbmFtZSB0aGUgdGVtcAorICAgIC8vIGZpbGUgdG8gdGhlIGNhY2hlIGZpbGUgb25seSBhZnRl
ciB3ZSd2ZSBmaW5pc2hlZCB3cml0aW5nIHRoZSB3aG9sZSB0aGluZy4KKworICAgIE5TU3RyaW5n
ICpjYWNoZVBhdGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciog
Y2FjaGVGaWxlbmFtZSA9IGNhY2hlUGF0aFN0cmluZy5VVEY4U3RyaW5nOworICAgIGNvbnN0IGNo
YXIqIHRlbXBGaWxlTmFtZSA9IFtjYWNoZVBhdGhTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6QCIudG1wIl0uVVRGOFN0cmluZzsKKyAgICBpbnQgZmQgPSBvcGVuKGNhY2hlRmlsZW5hbWUs
IE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9fTk9OQkxPQ0ssIDA2NjYpOwogICAgIGlm
IChmZCA9PSAtMSkgewogICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVu
IG9yIGxvY2sgdGhlIGJ5dGVjb2RlIGNhY2hlIGZpbGUuIEl0J3MgbGlrZWx5IGFub3RoZXIgVk0g
b3IgcHJvY2VzcyBpcyBhbHJlYWR5IHVzaW5nIGl0LiBFcnJvcjogIiwgc3RyZXJyb3IoZXJybm8p
KTsKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KKworICAgIGludCB0ZW1wRkQgPSBvcGVuKHRl
bXBGaWxlTmFtZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fRVhMT0NLIHwgT19OT05CTE9DSywgMDY2
Nik7CisgICAgaWYgKHRlbXBGRCA9PSAtMSkgeworICAgICAgICBlcnJvciA9IG1ha2VTdHJpbmco
IkNvdWxkIG5vdCBvcGVuIG9yIGxvY2sgdGhlIGJ5dGVjb2RlIGNhY2hlIHRlbXAgZmlsZS4gRXJy
b3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0
dXJuIE5POworICAgIH0KKwogICAgIGF1dG8gY2xvc2VGRCA9IG1ha2VTY29wZUV4aXQoWyZdIHsK
KyAgICAgICAgY2xvc2UodGVtcEZEKTsKICAgICAgICAgY2xvc2UoZmQpOwogICAgIH0pOwogCisg
ICAgQ2FjaGVGaWxlSGVhZGVyIGhlYWRlcjsKKyAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSh0
ZW1wRkQsIGJpdHdpc2VfY2FzdDxjb25zdCBjaGFyKj4oJmhlYWRlciksIHNpemVvZihoZWFkZXIp
KTsKKwogICAgIEpTQzo6Qnl0ZWNvZGVDYWNoZUVycm9yIGNhY2hlRXJyb3I7CiAgICAgSlNDOjpT
b3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBbc2VsZiBzb3VyY2VDb2RlXTsKICAgICBKU0M6OlZNJiB2
bSA9ICp0b0pTKFttX3ZpcnR1YWxNYWNoaW5lIEpTQ29udGV4dEdyb3VwUmVmXSk7CiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIGtKU1NjcmlwdFR5cGVNb2R1bGU6Ci0gICAgICAgIG1f
Y2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUodm0sIHNvdXJjZUNv
ZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2Vu
ZXJhdGVNb2R1bGVCeXRlY29kZSh2bSwgc291cmNlQ29kZSwgdGVtcEZELCBjYWNoZUVycm9yKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrSlNTY3JpcHRUeXBlUHJvZ3JhbToKLSAgICAgICAg
bV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUodm0sIHNvdXJj
ZUNvZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6
Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIHRlbXBGRCwgY2FjaGVFcnJv
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjk0LDYgKzM3NSwxMyBAQCAtIChCT09M
KXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAor
ICAgIGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpzZWVrRmlsZSh0ZW1wRkQsIDAsIEZpbGVT
eXN0ZW06OkZpbGVTZWVrT3JpZ2luOjpFbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKGZpbGVTaXpl
IDw9IFVJTlRfTUFYKTsKKyAgICBoZWFkZXIuZmlsZVNpemUgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oZmlsZVNpemUpOworICAgIEZpbGVTeXN0ZW06OnNlZWtGaWxlKHRlbXBGRCwgMCwgRmlsZVN5
c3RlbTo6RmlsZVNlZWtPcmlnaW46OkJlZ2lubmluZyk7CisgICAgd3JpdGUodGVtcEZELCAmaGVh
ZGVyLCBzaXplb2YoaGVhZGVyKSk7CisKKyAgICByZW5hbWUodGVtcEZpbGVOYW1lLCBjYWNoZUZp
bGVuYW1lKTsKICAgICByZXR1cm4gWUVTOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkocmV2aXNpb24gMjU3MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIs
NiArNTIsOCBAQCBjbGFzcyBTdHJpbmc7CiAtIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VD
b2RlOwogLSAoSlNDOjpTb3VyY2VDb2RlKXNvdXJjZUNvZGU7CiAtIChCT09MKXdyaXRlQ2FjaGU6
KFN0cmluZyYpZXJyb3I7CistICh2b2lkKW5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRlY29k
ZTsKKy0gKHZvaWQpbm90aWZ5QWZ0ZXJSZWFkaW5nQ2FjaGVkQnl0ZWNvZGU7CiAKIEBlbmQKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFNvdXJjZVBy
b3ZpZGVyLmgJKHJldmlzaW9uIDI1NzAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRTb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDggQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZTsKICAgICBTdHJpbmdWaWV3
IHNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxKU0M6OkNhY2hlZEJ5dGVjb2Rl
PiBjYWNoZWRCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5QmVmb3Jl
UmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlBZnRlclJl
YWRpbmdDYWNoZWRCeXRlY29kZSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0U291cmNlUHJvdmlkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tCShyZXZpc2lvbiAyNTcwMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDUsNCArNDUsMTQgQEAgUmVmUHRyPEpTQzo6Q2FjaGVkQnl0ZWNvZGU+IEpTU2NyaXB0
U291cgogICAgIHJldHVybiBbbV9zY3JpcHQuZ2V0KCkgY2FjaGVkQnl0ZWNvZGVdOwogfQogCit2
b2lkIEpTU2NyaXB0U291cmNlUHJvdmlkZXI6Om5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRCeXRl
Y29kZSgpCit7CisgICAgW21fc2NyaXB0LmdldCgpIG5vdGlmeUJlZm9yZVJlYWRpbmdDYWNoZWRC
eXRlY29kZV07Cit9CisKK3ZvaWQgSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QWZ0ZXJS
ZWFkaW5nQ2FjaGVkQnl0ZWNvZGUoKQoreworICAgIFttX3NjcmlwdC5nZXQoKSBub3RpZnlBZnRl
clJlYWRpbmdDYWNoZWRCeXRlY29kZV07Cit9CisKICNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5B
QkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlk
ZXIuaAkocmV2aXNpb24gMjU3MDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsOCBAQCBjbGFzcyBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVCeXRl
Y29kZShjb25zdCBCeXRlY29kZUNhY2hlR2VuZXJhdG9yJikgY29uc3QgeyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDYWNoZShjb25zdCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSos
IGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKikgY29uc3QgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRDYWNoZWRCeXRlY29kZSgpIGNvbnN0IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
QmVmb3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSgpIHsgfQogCiAgICAgICAgIFN0cmluZ1Zp
ZXcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAogICAgICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRCeXRlY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZEJ5dGVjb2RlLmgJKHJldmlz
aW9uIDI1NzAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZEJ5dGVj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVkQnl0ZWNvZGUoQ2FjaGVQYXlsb2FkOjptYWtlRW1wdHlQ
YXlsb2FkKCkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPENhY2hlZEJ5dGVjb2RlPiBjcmVh
dGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBkYXRhLCBMZWFmRXhlY3V0YWJsZU1hcCYm
IGxlYWZFeGVjdXRhYmxlcyA9IHsgfSkKKyAgICBzdGF0aWMgUmVmPENhY2hlZEJ5dGVjb2RlPiBj
cmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBkYXRhLCB1aW50MzJfdCBoZWFkZXJC
eXRlc1RvU2tpcCA9IDAsIExlYWZFeGVjdXRhYmxlTWFwJiYgbGVhZkV4ZWN1dGFibGVzID0geyB9
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVkQnl0ZWNvZGUoQ2Fj
aGVQYXlsb2FkOjptYWtlTWFwcGVkUGF5bG9hZChXVEZNb3ZlKGRhdGEpKSwgV1RGTW92ZShsZWFm
RXhlY3V0YWJsZXMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZEJ5dGVj
b2RlKENhY2hlUGF5bG9hZDo6bWFrZU1hcHBlZFBheWxvYWQoV1RGTW92ZShkYXRhKSksIGhlYWRl
ckJ5dGVzVG9Ta2lwLCBXVEZNb3ZlKGxlYWZFeGVjdXRhYmxlcykpKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUmVmPENhY2hlZEJ5dGVjb2RlPiBjcmVhdGUoTWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFs
bG9jPiYmIGRhdGEsIHNpemVfdCBzaXplLCBMZWFmRXhlY3V0YWJsZU1hcCYmIGxlYWZFeGVjdXRh
YmxlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZEJ5dGVjb2Rl
KENhY2hlUGF5bG9hZDo6bWFrZU1hbGxvY1BheWxvYWQoV1RGTW92ZShkYXRhKSwgc2l6ZSksIFdU
Rk1vdmUobGVhZkV4ZWN1dGFibGVzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
YWNoZWRCeXRlY29kZShDYWNoZVBheWxvYWQ6Om1ha2VNYWxsb2NQYXlsb2FkKFdURk1vdmUoZGF0
YSksIHNpemUpLCAwLCBXVEZNb3ZlKGxlYWZFeGVjdXRhYmxlcykpKTsKICAgICB9CiAKICAgICBM
ZWFmRXhlY3V0YWJsZU1hcCYgbGVhZkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9sZWFmRXhlY3V0
YWJsZXM7IH0KQEAgLTY0LDE0ICs2NCwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRm9yRWFjaFVw
ZGF0ZUNhbGxiYWNrID0gRnVuY3Rpb248dm9pZChvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk+
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tbWl0VXBkYXRlcyhjb25zdCBGb3JFYWNo
VXBkYXRlQ2FsbGJhY2smKSBjb25zdDsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX3BheWxvYWQuZGF0YSgpOyB9CisgICAgY29uc3QgdWludDhfdCogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZC5kYXRhKCkgKyBtX2hlYWRlckJ5dGVzVG9Ta2lwOyB9
CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BheWxvYWQuc2l6ZSgpOyB9CiAg
ICAgYm9vbCBoYXNVcGRhdGVzKCkgY29uc3QgeyByZXR1cm4gIW1fdXBkYXRlcy5pc0VtcHR5KCk7
IH0KICAgICBzaXplX3Qgc2l6ZUZvclVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQog
CiBwcml2YXRlOgotICAgIENhY2hlZEJ5dGVjb2RlKENhY2hlUGF5bG9hZCYmIHBheWxvYWQsIExl
YWZFeGVjdXRhYmxlTWFwJiYgbGVhZkV4ZWN1dGFibGVzID0geyB9KQotICAgICAgICA6IG1fc2l6
ZShwYXlsb2FkLnNpemUoKSkKKyAgICBDYWNoZWRCeXRlY29kZShDYWNoZVBheWxvYWQmJiBwYXls
b2FkLCB1aW50MzJfdCBoZWFkZXJCeXRlc1RvU2tpcCA9IDAsIExlYWZFeGVjdXRhYmxlTWFwJiYg
bGVhZkV4ZWN1dGFibGVzID0geyB9KQorICAgICAgICA6IG1faGVhZGVyQnl0ZXNUb1NraXAoaGVh
ZGVyQnl0ZXNUb1NraXApCisgICAgICAgICwgbV9zaXplKHBheWxvYWQuc2l6ZSgpKQogICAgICAg
ICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQogICAgICAgICAsIG1fbGVhZkV4ZWN1dGFi
bGVzKFdURk1vdmUobGVhZkV4ZWN1dGFibGVzKSkKICAgICB7CkBAIC03OSw2ICs4MCw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGNvcHlMZWFmRXhlY3V0YWJsZXMoY29uc3QgQ2FjaGVkQnl0ZWNv
ZGUmKTsKIAorICAgIHVpbnQzMl90IG1faGVhZGVyQnl0ZXNUb1NraXA7CiAgICAgc2l6ZV90IG1f
c2l6ZSB7IDAgfTsKICAgICBDYWNoZVBheWxvYWQgbV9wYXlsb2FkOwogICAgIExlYWZFeGVjdXRh
YmxlTWFwIG1fbGVhZkV4ZWN1dGFibGVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjU3MDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw2
ICsxMDAsMTEgQEAgcHVibGljOgogICAgICAgICAsIG1fYmFzZU9mZnNldCgwKQogICAgICAgICAs
IG1fY3VycmVudFBhZ2UobnVsbHB0cikKICAgICB7CisgICAgICAgIGlmIChmZCAhPSBGaWxlU3lz
dGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgICAgICBhdXRvIGN1cnJl
bnRGaWxlUG9zaXRpb24gPSBGaWxlU3lzdGVtOjpzZWVrRmlsZShmZCwgMCwgRmlsZVN5c3RlbTo6
RmlsZVNlZWtPcmlnaW46OkN1cnJlbnQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3Vy
cmVudEZpbGVQb3NpdGlvbiA8IFVJTlRfTUFYKTsKKyAgICAgICAgICAgIG1faGVhZGVyQnl0ZXNU
b1NraXAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3VycmVudEZpbGVQb3NpdGlvbik7CisgICAg
ICAgIH0KICAgICAgICAgYWxsb2NhdGVOZXdQYWdlKCk7CiAgICAgfQogCkBAIC0xNjIsNiArMTY3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2VNYXBwZWQoZXJyb3IpOwog
ICAgICAgICB9CiAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGVhZGVyQnl0ZXNUb1NraXAp
OwogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYmFzZU9mZnNldCArIG1fY3VycmVudFBhZ2UtPnNp
emUoKTsKICAgICAgICAgTWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiBidWZmZXIgPSBNYWxs
b2NQdHI8dWludDhfdCwgVk1NYWxsb2M+OjptYWxsb2Moc2l6ZSk7CiAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IDA7CkBAIC0xNzYsMTIgKzE4MiwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFJlZlB0cjxDYWNoZWRCeXRlY29kZT4gcmVsZWFzZU1hcHBlZChCeXRlY29kZUNhY2hlRXJyb3Im
IGVycm9yKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Jhc2VPZmZzZXQgKyBtX2N1
cnJlbnRQYWdlLT5zaXplKCk7CisgICAgICAgIHNpemVfdCBzaXplID0gbV9oZWFkZXJCeXRlc1Rv
U2tpcCArIG1fYmFzZU9mZnNldCArIG1fY3VycmVudFBhZ2UtPnNpemUoKTsKICAgICAgICAgaWYg
KCFGaWxlU3lzdGVtOjp0cnVuY2F0ZUZpbGUobV9mZCwgc2l6ZSkpIHsKICAgICAgICAgICAgIGVy
cm9yID0gQnl0ZWNvZGVDYWNoZUVycm9yOjpTdGFuZGFyZEVycm9yKGVycm5vKTsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAgICAgRmlsZVN5c3RlbTo6c2Vl
a0ZpbGUobV9mZCwgbV9oZWFkZXJCeXRlc1RvU2tpcCwgRmlsZVN5c3RlbTo6RmlsZVNlZWtPcmln
aW46OkJlZ2lubmluZyk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFnZSA6IG1fcGFnZXMp
IHsKICAgICAgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShtX2ZkLCByZWludGVycHJldF9jYXN0PGNoYXIqPihwYWdlLmJ1ZmZlcigpKSwgcGFnZS5zaXpl
KCkpOwogICAgICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgewpAQCAtMjAyLDcgKzIw
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKFdURk1vdmUobWFwcGVkRmls
ZURhdGEpLCBXVEZNb3ZlKG1fbGVhZkV4ZWN1dGFibGVzKSk7CisgICAgICAgIHJldHVybiBDYWNo
ZWRCeXRlY29kZTo6Y3JlYXRlKFdURk1vdmUobWFwcGVkRmlsZURhdGEpLCBtX2hlYWRlckJ5dGVz
VG9Ta2lwLCBXVEZNb3ZlKG1fbGVhZkV4ZWN1dGFibGVzKSk7CiAgICAgfQogCiAgICAgY2xhc3Mg
UGFnZSB7CkBAIC0yNzEsNiArMjc4LDcgQEAgcHJpdmF0ZToKIAogICAgIFZNJiBtX3ZtOwogICAg
IEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZkOworICAgIHVpbnQzMl90IG1faGVh
ZGVyQnl0ZXNUb1NraXAgeyAwIH07CiAgICAgcHRyZGlmZl90IG1fYmFzZU9mZnNldDsKICAgICBQ
YWdlKiBtX2N1cnJlbnRQYWdlOwogICAgIFZlY3RvcjxQYWdlPiBtX3BhZ2VzOwpAQCAtMjMxOCw2
ICsyMzI2LDggQEAgcHJpdmF0ZToKICAgICBDYWNoZWRDb2RlQmxvY2tUYWcgbV90YWc7CiB9Owog
CitzdGF0aWNfYXNzZXJ0KGFsaWdub2YoR2VuZXJpY0NhY2hlRW50cnkpIDw9IGFsaWdub2Yoc3Rk
OjptYXhfYWxpZ25fdCkpOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5
cGU+CiBjbGFzcyBDYWNoZUVudHJ5IDogcHVibGljIEdlbmVyaWNDYWNoZUVudHJ5IHsKIHB1Ymxp
YzoKQEAgLTIzNTUsNiArMjM2NSw5IEBAIHByaXZhdGU6CiAgICAgQ2FjaGVkUHRyPENhY2hlZENv
ZGVCbG9ja1R5cGU8VW5saW5rZWRDb2RlQmxvY2tUeXBlPj4gbV9jb2RlQmxvY2s7CiB9OwogCitz
dGF0aWNfYXNzZXJ0KGFsaWdub2YoQ2FjaGVFbnRyeTxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+
KSA8PSBhbGlnbm9mKHN0ZDo6bWF4X2FsaWduX3QpKTsKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihD
YWNoZUVudHJ5PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4pIDw9IGFsaWdub2Yoc3Rk
OjptYXhfYWxpZ25fdCkpOworCiBib29sIEdlbmVyaWNDYWNoZUVudHJ5OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXksIFVubGlua2VkQ29kZUJsb2NrKj4m
IHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIWlzVXBUb0RhdGUoZGVjb2RlcikpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMjU3MDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNTEsMTAgKzE1MSwxNCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZl
dGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsK
LSAgICAgICAgUmVmUHRyPENhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRlY29kZSA9IGtleS5zb3Vy
Y2UoKS5wcm92aWRlcigpLmNhY2hlZEJ5dGVjb2RlKCk7CisgICAgICAgIFNvdXJjZVByb3ZpZGVy
JiBzb3VyY2VQcm92aWRlciA9IGtleS5zb3VyY2UoKS5wcm92aWRlcigpOworICAgICAgICBSZWZQ
dHI8Q2FjaGVkQnl0ZWNvZGU+IGNhY2hlZEJ5dGVjb2RlID0gc291cmNlUHJvdmlkZXIuY2FjaGVk
Qnl0ZWNvZGUoKTsKICAgICAgICAgaWYgKCFjYWNoZWRCeXRlY29kZSB8fCAhY2FjaGVkQnl0ZWNv
ZGUtPnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4g
ZGVjb2RlQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgKmNhY2hlZEJ5
dGVjb2RlKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIubm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hl
ZEJ5dGVjb2RlKCk7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IGRlY29kZUNvZGVCbG9jazxVbmxp
bmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXksICpjYWNoZWRCeXRlY29kZSk7CisgICAgICAgIHNv
dXJjZVByb3ZpZGVyLm5vdGlmeUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRD
b2RlQmxvY2tUeXBlPgo=
</data>
<flag name="review"
          id="406795"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391347</attachid>
            <date>2020-02-20 15:46:04 -0800</date>
            <delta_ts>2020-02-20 17:33:22 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-207972b.patch</filename>
            <type>text/plain</type>
            <size>15604</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3MDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDIwLTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2RlIGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxl
IGNvcnJ1cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDc5NzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MjYwNTk1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgYnl0ZWNvZGUgY2Fj
aGUgZmlsZSBpcyBjb3JydXB0ZWQsIHdlIGN1cnJlbnRseSB3aWxsIGFsd2F5cyBjcmFzaCBldmVy
eSB0aW1lCisgICAgICAgIHdlIHRyeSB0byByZWFkIGl0IChpbiBwZXJwZXR1aXR5IGFzIGxvbmcg
YXMgdGhlIGNvcnJ1cHRlZCBjYWNoZSBmaWxlIGNvbnRpbnVlcyB0bworICAgICAgICBleGlzdCBv
biBkaXNrKS4gIFRvIGd1YXJkIGFnYWluc3QgdGhpcywgd2UnbGwgaGFyZGVuIHRoZSBieXRlY29k
ZSBjYWNoaW5nIG1lY2hhbmlzbQorICAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgIDEuIE1v
ZGlmeSB0aGUgcmVhZENhY2hlIG9wZXJhdGlvbiB0byBmaXJzdCBkcm9wIGEgLnJlYWRpbmctaW4t
cHJvZ3Jlc3MgdG9rZW4gZmlsZQorICAgICAgICAgICBvbiBkaXNrIGJlZm9yZSBhdHRlbXB0aW5n
IHRvIHJlYWQgdGhlIGNhY2hlIGZpbGUsIGFuZCB0byBkZWxldGUgdGhlIHRva2VuIGZpbGUKKyAg
ICAgICAgICAgYWZ0ZXIgd2UncmUgZG9uZSBkZWNvZGluZyBmcm9tIHRoZSBjYWNoZS4KKworICAg
ICAgICAgICBCZWZvcmUgY29tbWVuY2luZyB3aXRoIHJlYWRpbmcgdGhlIGNhY2hlIGZpbGUsIHdl
J2xsIGFsc28gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2UKKyAgICAgICAgICAgb2YgdGhlIHRva2Vu
IGZpbGUgb24gZGlzay4gIElmIGZvdW5kLCB0aGlzIGlzIGFuIGluZGljYXRvciB0aGF0IHdlIHdl
cmUgdW5hYmxlCisgICAgICAgICAgIHRvIGNvbXBsZXRlIHRoZSBsYXN0IHJlYWQgLyBkZWNvZGUg
b2YgdGhlIGNhY2hlIGZpbGUuICBJbiB0aGlzIGNhc2UsIHdlJ2xsCisgICAgICAgICAgIGRlbGV0
ZSBib3RoIHRoZSBjYWNoZSBhbmQgdG9rZW4gZmlsZXMsIGFuZCBwcm9jZWVkIGFzIGlmIG5vIGNh
Y2hlIGZpbGUgaXMgZm91bmQuCisKKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29u
J3QgYmUgY3Jhc2hpbmcgaW4gcGVycGV0dWl0eSwgYW5kIHRoYXQgdGhlIHN5c3RlbSBzZWxmCisg
ICAgICAgICAgIGhlYWxzIGlmIHRoZSBjYWNoZSBmaWxlIGdvdCBjb3JydXB0ZWQgc29tZWhvdy4K
KworICAgICAgICAyLiBNb2RpZnkgdGhlIHdyaXRlQ2FjaGUgb3BlcmF0aW9uIHRvIGFsd2F5cyB3
cml0ZSB0aGUgY2FjaGUgZmlsZSBpbiBhIHRyYW5zYWN0aW9uYWwKKyAgICAgICAgICAgbWFubmVy
IGkuZS4gd2UnbGwgZmlyc3Qgd3JpdGUgdG8gYSAudG1wIGZpbGUsIGFuZCB0aGVuIHJlbmFtZSB0
aGUgLnRtcCBmaWxlIHRvCisgICAgICAgICAgIHRoZSBjYWNoZSBmaWxlIG9ubHkgaWYgdGhlIGVu
dGlyZSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gaW4gY29tcGxldGVuZXNzLgorCisgICAgICAgICAg
IFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0IGdldCBjb3JydXB0ZWQgY2FjaGUgZmlsZXMgZHVl
IHRvIGludGVycnVwdGVkIHdyaXRlcy4KKworICAgICAgICBNYW51YWxseSB0ZXN0ZWQgd2l0aCB0
aGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhbmQgZW5zdXJpbmcgdGhhdCB0aGUgY2xpZW50IHJlY292
ZXJzCisgICAgICAgIHdpdGggbm8gY3Jhc2hlczoKKworICAgICAgICAxLiBubyBjYWNoZSBmaWxl
IG9uIGRpc2suCisgICAgICAgIDIuIGEgMC1zaXplZCBjYWNoZSBmaWxlIG9uIGEgZGlzay4KKyAg
ICAgICAgMy4gYSB0cnVuY2F0ZWQgY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICA0LiBhbiB1
bmNvcnJ1cHRlZCBjYWNoZSBmaWxlIG9uIGRpc2suCisKKyAgICAgICAgQWxzbyBtYW51YWxseSB0
ZXN0ZWQgYnkgY29tbWVudGVkIG91dCBzb21lIGNoZWNrcyBhbmQgYWxsb3dpbmcgdGhlIGNsaWVu
dCB0bworICAgICAgICBjcmFzaCBvbiBhIHRydW5jYXRlZCBjYWNoZSBmaWxlLCBhbmQgZW5zdXJp
bmcgdGhhdCB0aGUgY2xpZW50IHJlY292ZXJzIGFuZCBkb2VzCisgICAgICAgIG5vdCBjcmFzaCBh
IHNlY29uZCB0aW1lLgorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAgICAgICAoLVtK
U1NjcmlwdCByZWFkQ2FjaGVdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgbm90aWZ5QmVmb3JlUmVh
ZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IG5vdGlmeUFmdGVyUmVh
ZGluZ0NhY2hlZEJ5dGVjb2RlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2FjaGU6XSk6
CisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHRTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVy
Lm1tOgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QmVmb3JlUmVhZGlu
Z0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKEpTU2NyaXB0U291cmNlUHJvdmlkZXI6Om5vdGlm
eUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlUHJv
dmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6Om5vdGlmeUJlZm9yZVJlYWRp
bmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpub3RpZnlB
ZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRCeXRl
Y29kZS5oOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkQnl0ZWNvZGU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRC
eXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMu
Y3BwOgorICAgICAgICAoSlNDOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6RW5j
b2Rlcjo6cmVsZWFzZSk6CisgICAgICAgIChKU0M6OkVuY29kZXI6OnJlbGVhc2VNYXBwZWQpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1h
cDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorCiAyMDIwLTAyLTE5ICBSb3NzIEtpcnNsaW5nICA8cm9z
cy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBDb21wdXRlZCBQcm9wZXJ0aWVzIHdpdGgg
aW5jcmVtZW50IHNvbWV0aW1lcyBwcm9kdWNlcyBpbmNvcnJlY3QgcmVzdWx0cwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShyZXZpc2lvbiAyNTcwNjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MywxMyAr
MTUzLDI5IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgaWYgKCFtX2NhY2hlUGF0aCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBmZCA9IEZpbGVTeXN0ZW06Om9wZW5BbmRMb2NrRmlsZShb
bV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpS
ZWFkLCB7RmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpFeGNsdXNpdmUsIEZpbGVTeXN0ZW06OkZp
bGVMb2NrTW9kZTo6Tm9uYmxvY2tpbmd9KTsKKyAgICBOU1N0cmluZyAqY2FjaGVQYXRoU3RyaW5n
ID0gW21fY2FjaGVQYXRoIHBhdGhdOworICAgIGNvbnN0IGNoYXIqIGNhY2hlRmlsZW5hbWUgPSBj
YWNoZVBhdGhTdHJpbmcuVVRGOFN0cmluZzsKKyAgICBjb25zdCBjaGFyKiB0b2tlbkZpbGVOYW1l
ID0gW2NhY2hlUGF0aFN0cmluZyBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi5yZWFkaW5nLWlu
LXByb2dyZXNzIl0uVVRGOFN0cmluZzsKKworICAgIGF1dG8gZmQgPSBGaWxlU3lzdGVtOjpvcGVu
QW5kTG9ja0ZpbGUoY2FjaGVGaWxlbmFtZSwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFk
LCB7RmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpFeGNsdXNpdmUsIEZpbGVTeXN0ZW06OkZpbGVM
b2NrTW9kZTo6Tm9uYmxvY2tpbmd9KTsKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFs
aWQoZmQpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBjbG9zZUZEID0gbWFrZVNjb3BlRXhp
dChbJl0gewogICAgICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoZmQpOwogICAg
IH0pOwogCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgY2hlY2sgZm9yIHRoaXMgYWZ0ZXIgbG9ja2lu
ZyB0aGUgY2FjaGUgZmlsZSBhYm92ZSB0bworICAgIC8vIHN5bmNocm9uaXplIGJldHdlZW4gbXVs
dGlwbGUgcHJvY2Vzc2VzIHRoYXQgbWF5IGJlIHNoYXJpbmcgdGhpcyBzYW1lCisgICAgLy8gY2Fj
aGUgZmlsZS4KKyAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh0b2tlbkZpbGVOYW1lKSkg
eworICAgICAgICAvLyBXZSBtdXN0IGhhdmUgY3Jhc2hlZCB3aGlsZSB0cnlpbmcgdG8gZGVjb2Rl
IHRoZSBjYWNoZSBmaWxlIGJlZm9yZS4KKyAgICAgICAgLy8gTGV0J3MgcHVyZ2UgdGhlIHRva2Vu
IGFuZCBjYWNoZSBmaWxlcywgYW5kIHN0YXJ0IG92ZXIuCisgICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUZpbGUodG9rZW5GaWxlTmFtZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
Y2FjaGVGaWxlbmFtZSk7CisgICAgICAgIEFTU0VSVCghbV9jYWNoZWRCeXRlY29kZS0+c2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJvb2wgc3VjY2VzczsKICAgICBGaWxl
U3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtYXBwZWRGaWxlKGZkLCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlTW9kZTo6UHJpdmF0ZSwgc3VjY2Vzcyk7CiAgICAgaWYgKCFzdWNjZXNzKQpAQCAtMTcwLDEw
ICsxODYsMTMgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBKU0M6OlZNJiB2bSA9ICp0b0pTKFtt
X3ZpcnR1YWxNYWNoaW5lIEpTQ29udGV4dEdyb3VwUmVmXSk7CiAgICAgSlNDOjpTb3VyY2VDb2Rl
IHNvdXJjZUNvZGUgPSBbc2VsZiBzb3VyY2VDb2RlXTsKICAgICBKU0M6OlNvdXJjZUNvZGVLZXkg
a2V5ID0gbV90eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtID8gc291cmNlQ29kZUtleUZvclNl
cmlhbGl6ZWRQcm9ncmFtKHZtLCBzb3VyY2VDb2RlKSA6IHNvdXJjZUNvZGVLZXlGb3JTZXJpYWxp
emVkTW9kdWxlKHZtLCBzb3VyY2VDb2RlKTsKKworICAgIFtzZWxmIG5vdGlmeUJlZm9yZVJlYWRp
bmdDYWNoZWRCeXRlY29kZV07CiAgICAgaWYgKGlzQ2FjaGVkQnl0ZWNvZGVTdGlsbFZhbGlkKHZt
LCBjYWNoZWRCeXRlY29kZS5jb3B5UmVmKCksIGtleSwgbV90eXBlID09IGtKU1NjcmlwdFR5cGVQ
cm9ncmFtID8gSlNDOjpTb3VyY2VDb2RlVHlwZTo6UHJvZ3JhbVR5cGUgOiBKU0M6OlNvdXJjZUNv
ZGVUeXBlOjpNb2R1bGVUeXBlKSkKICAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IFdURk1vdmUo
Y2FjaGVkQnl0ZWNvZGUpOwogICAgIGVsc2UKLSAgICAgICAgZnRydW5jYXRlKGZkLCAwKTsKKyAg
ICAgICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZkLCAwKTsKKyAgICBbc2VsZiBub3RpZnlB
ZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZV07CiB9CiAKIC0gKEJPT0wpY2FjaGVCeXRlY29kZVdp
dGhFcnJvcjooTlNFcnJvciAqKillcnJvcgpAQCAtMjMzLDYgKzI1MiwyNyBAQCAtIChSZWZQdHI8
SlNDOjpDYWNoZWRCeXRlY29kZT4pY2FjaGVkQnl0CiAgICAgcmV0dXJuIG1fY2FjaGVkQnl0ZWNv
ZGU7CiB9CiAKKy0gKHZvaWQpbm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hlZEJ5dGVjb2RlCit7Cisg
ICAgQVNTRVJUKG1fY2FjaGVQYXRoICYmIG1fY2FjaGVkQnl0ZWNvZGUpOworICAgIE5TU3RyaW5n
ICpjYWNoZVBhdGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciog
dG9rZW5GaWxlTmFtZSA9IFtjYWNoZVBhdGhTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6
QCIucmVhZGluZy1pbi1wcm9ncmVzcyJdLlVURjhTdHJpbmc7CisgICAgaW50IGZkID0gb3Blbih0
b2tlbkZpbGVOYW1lLCBPX0NSRUFUIHwgT19OT05CTE9DSywgMCk7CisgICAgaWYgKGZkID09IC0x
KQorICAgICAgICByZXR1cm47CisgICAgY2xvc2UoZmQpOworfQorCistICh2b2lkKW5vdGlmeUFm
dGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlCit7CisgICAgQVNTRVJUKG1fY2FjaGVQYXRoICYmIG1f
Y2FjaGVkQnl0ZWNvZGUpOworICAgIE5TU3RyaW5nICpjYWNoZVBhdGhTdHJpbmcgPSBbbV9jYWNo
ZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciogdG9rZW5GaWxlTmFtZSA9IFtjYWNoZVBhdGhT
dHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIucmVhZGluZy1pbi1wcm9ncmVzcyJdLlVU
RjhTdHJpbmc7CisgICAgaW50IGZkID0gRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh0b2tlbkZpbGVO
YW1lKTsKKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgIHJldHVybjsKK30KKwogLSAoSlNDOjpT
b3VyY2VDb2RlKXNvdXJjZUNvZGUKIHsKICAgICBKU0M6OlZNJiB2bSA9ICp0b0pTKFttX3ZpcnR1
YWxNYWNoaW5lIEpTQ29udGV4dEdyb3VwUmVmXSk7CkBAIC0yNjYsMTIgKzMwNiwyOCBAQCAtIChC
T09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0K
IAotICAgIGludCBmZCA9IG9wZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JF
QVQgfCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9fTk9OQkxPQ0ssIDA2NjYpOworICAgIC8vIFdlIHdh
bnQgdG8gZG8gdGhlIHdyaXRlIGFzIGEgdHJhbnNhY3Rpb24gKGkuZS4gd2UgZ3VhcmFudGVlIHRo
YXQgaXQncyBhbGwKKyAgICAvLyBvciBub3RoaW5nKS4gU28sIHdlJ2xsIHdyaXRlIHRvIGEgdGVt
cCBmaWxlIGZpcnN0LCBhbmQgcmVuYW1lIHRoZSB0ZW1wCisgICAgLy8gZmlsZSB0byB0aGUgY2Fj
aGUgZmlsZSBvbmx5IGFmdGVyIHdlJ3ZlIGZpbmlzaGVkIHdyaXRpbmcgdGhlIHdob2xlIHRoaW5n
LgorCisgICAgTlNTdHJpbmcgKmNhY2hlUGF0aFN0cmluZyA9IFttX2NhY2hlUGF0aCBwYXRoXTsK
KyAgICBjb25zdCBjaGFyKiBjYWNoZUZpbGVOYW1lID0gY2FjaGVQYXRoU3RyaW5nLlVURjhTdHJp
bmc7CisgICAgY29uc3QgY2hhciogdGVtcEZpbGVOYW1lID0gW2NhY2hlUGF0aFN0cmluZyBzdHJp
bmdCeUFwcGVuZGluZ1N0cmluZzpAIi50bXAiXS5VVEY4U3RyaW5nOworICAgIGludCBmZCA9IG9w
ZW4oY2FjaGVGaWxlTmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19FWExPQ0sgfCBPX05PTkJM
T0NLLCAwNjAwKTsKICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgZXJyb3IgPSBtYWtlU3Ry
aW5nKCJDb3VsZCBub3Qgb3BlbiBvciBsb2NrIHRoZSBieXRlY29kZSBjYWNoZSBmaWxlLiBJdCdz
IGxpa2VseSBhbm90aGVyIFZNIG9yIHByb2Nlc3MgaXMgYWxyZWFkeSB1c2luZyBpdC4gRXJyb3I6
ICIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CisKKyAgICBp
bnQgdGVtcEZEID0gb3Blbih0ZW1wRmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYTE9D
SyB8IE9fTk9OQkxPQ0ssIDA2MDApOworICAgIGlmICh0ZW1wRkQgPT0gLTEpIHsKKyAgICAgICAg
ZXJyb3IgPSBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBvciBsb2NrIHRoZSBieXRlY29kZSBj
YWNoZSB0ZW1wIGZpbGUuIEVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9z
ZShmZCk7CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKICAgICBhdXRvIGNsb3NlRkQgPSBt
YWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIGNsb3NlKHRlbXBGRCk7CiAgICAgICAgIGNsb3Nl
KGZkKTsKICAgICB9KTsKIApAQCAtMjgwLDEwICszMzYsMTAgQEAgLSAoQk9PTCl3cml0ZUNhY2hl
OihTdHJpbmcmKWVycm9yCiAgICAgSlNDOjpWTSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGlu
ZSBKU0NvbnRleHRHcm91cFJlZl0pOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBr
SlNTY3JpcHRUeXBlTW9kdWxlOgotICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5l
cmF0ZU1vZHVsZUJ5dGVjb2RlKHZtLCBzb3VyY2VDb2RlLCBmZCwgY2FjaGVFcnJvcik7CisgICAg
ICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUodm0sIHNv
dXJjZUNvZGUsIHRlbXBGRCwgY2FjaGVFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
a0pTU2NyaXB0VHlwZVByb2dyYW06Ci0gICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6Omdl
bmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKHZtLCBzb3VyY2VDb2RlLCBmZCwgY2FjaGVFcnJvcik7Cisg
ICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKHZt
LCBzb3VyY2VDb2RlLCB0ZW1wRkQsIGNhY2hlRXJyb3IpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTI5NCw2ICszNTAsNyBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IK
ICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAorICAgIHJlbmFtZSh0ZW1wRmlsZU5hbWUsIGNh
Y2hlRmlsZU5hbWUpOwogICAgIHJldHVybiBZRVM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCShyZXZpc2lvbiAyNTcwNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Miw2ICs1Miw4IEBAIGNsYXNzIFN0cmluZzsKIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1Nv
dXJjZUNvZGU7CiAtIChKU0M6OlNvdXJjZUNvZGUpc291cmNlQ29kZTsKIC0gKEJPT0wpd3JpdGVD
YWNoZTooU3RyaW5nJillcnJvcjsKKy0gKHZvaWQpbm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hlZEJ5
dGVjb2RlOworLSAodm9pZClub3RpZnlBZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZTsKIAogQGVu
ZAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291
cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gMjU3MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsOCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFN0cmlu
Z1ZpZXcgc291cmNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEpTQzo6Q2FjaGVkQnl0
ZWNvZGU+IGNhY2hlZEJ5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBub3RpZnlC
ZWZvcmVSZWFkaW5nQ2FjaGVkQnl0ZWNvZGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG5vdGlmeUFm
dGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0JKHJldmlzaW9uIDI1NzA2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00NSw0ICs0NSwxNCBAQCBSZWZQdHI8SlNDOjpDYWNoZWRCeXRlY29kZT4gSlNT
Y3JpcHRTb3VyCiAgICAgcmV0dXJuIFttX3NjcmlwdC5nZXQoKSBjYWNoZWRCeXRlY29kZV07CiB9
CiAKK3ZvaWQgSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6bm90aWZ5QmVmb3JlUmVhZGluZ0NhY2hl
ZEJ5dGVjb2RlKCkKK3sKKyAgICBbbV9zY3JpcHQuZ2V0KCkgbm90aWZ5QmVmb3JlUmVhZGluZ0Nh
Y2hlZEJ5dGVjb2RlXTsKK30KKwordm9pZCBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpub3RpZnlB
ZnRlclJlYWRpbmdDYWNoZWRCeXRlY29kZSgpCit7CisgICAgW21fc2NyaXB0LmdldCgpIG5vdGlm
eUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlXTsKK30KKwogI2VuZGlmIC8vIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3Zp
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQ
cm92aWRlci5oCShyZXZpc2lvbiAyNTcwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCw4IEBAIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYWNo
ZUJ5dGVjb2RlKGNvbnN0IEJ5dGVjb2RlQ2FjaGVHZW5lcmF0b3ImKSBjb25zdCB7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlKGNvbnN0IFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqKSBjb25zdCB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENhY2hlZEJ5dGVjb2RlKCkgY29uc3QgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlCZWZvcmVSZWFkaW5nQ2FjaGVkQnl0ZWNvZGUoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUFmdGVyUmVhZGluZ0NhY2hlZEJ5dGVjb2RlKCkgeyB9CiAKICAgICAgICAgU3Ry
aW5nVmlldyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0CiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJl
dmlzaW9uIDI1NzA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzE4LDYgKzIzMTgsOCBAQCBwcml2YXRlOgogICAgIENh
Y2hlZENvZGVCbG9ja1RhZyBtX3RhZzsKIH07CiAKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihHZW5l
cmljQ2FjaGVFbnRyeSkgPD0gYWxpZ25vZihzdGQ6Om1heF9hbGlnbl90KSk7CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KIGNsYXNzIENhY2hlRW50cnkgOiBwdWJs
aWMgR2VuZXJpY0NhY2hlRW50cnkgewogcHVibGljOgpAQCAtMjM1NSw2ICsyMzU3LDkgQEAgcHJp
dmF0ZToKICAgICBDYWNoZWRQdHI8Q2FjaGVkQ29kZUJsb2NrVHlwZTxVbmxpbmtlZENvZGVCbG9j
a1R5cGU+PiBtX2NvZGVCbG9jazsKIH07CiAKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihDYWNoZUVu
dHJ5PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4pIDw9IGFsaWdub2Yoc3RkOjptYXhfYWxpZ25f
dCkpOworc3RhdGljX2Fzc2VydChhbGlnbm9mKENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrPikgPD0gYWxpZ25vZihzdGQ6Om1heF9hbGlnbl90KSk7CisKIGJvb2wgR2Vu
ZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNl
Q29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICgh
aXNVcFRvRGF0ZShkZWNvZGVyKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCShyZXZpc2lvbiAyNTcwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSwxMCArMTUxLDE0IEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgog
ICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZmV0Y2hGcm9tRGlza0ltcGwoVk0mIHZtLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiBrZXkpCiAgICAgewotICAgICAgICBSZWZQdHI8Q2FjaGVkQnl0ZWNv
ZGU+IGNhY2hlZEJ5dGVjb2RlID0ga2V5LnNvdXJjZSgpLnByb3ZpZGVyKCkuY2FjaGVkQnl0ZWNv
ZGUoKTsKKyAgICAgICAgU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyID0ga2V5LnNvdXJj
ZSgpLnByb3ZpZGVyKCk7CisgICAgICAgIFJlZlB0cjxDYWNoZWRCeXRlY29kZT4gY2FjaGVkQnl0
ZWNvZGUgPSBzb3VyY2VQcm92aWRlci5jYWNoZWRCeXRlY29kZSgpOwogICAgICAgICBpZiAoIWNh
Y2hlZEJ5dGVjb2RlIHx8ICFjYWNoZWRCeXRlY29kZS0+c2l6ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlPih2bSwga2V5LCAqY2FjaGVkQnl0ZWNvZGUpOworICAgICAgICBzb3VyY2VQcm92
aWRlci5ub3RpZnlCZWZvcmVSZWFkaW5nQ2FjaGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgYXV0byog
cmVzdWx0ID0gZGVjb2RlQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwg
KmNhY2hlZEJ5dGVjb2RlKTsKKyAgICAgICAgc291cmNlUHJvdmlkZXIubm90aWZ5QWZ0ZXJSZWFk
aW5nQ2FjaGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+Cg==
</data>
<flag name="review"
          id="406909"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391377</attachid>
            <date>2020-02-20 20:58:49 -0800</date>
            <delta_ts>2020-02-21 00:12:18 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-207972c.patch</filename>
            <type>text/plain</type>
            <size>8621</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDIwLTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2RlIGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxl
IGNvcnJ1cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDc5NzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MjYwNTk1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgYnl0ZWNvZGUgY2Fj
aGUgZmlsZSBpcyBjb3JydXB0ZWQsIHdlIGN1cnJlbnRseSB3aWxsIGFsd2F5cyBjcmFzaCBldmVy
eSB0aW1lCisgICAgICAgIHdlIHRyeSB0byByZWFkIGl0IChpbiBwZXJwZXR1aXR5IGFzIGxvbmcg
YXMgdGhlIGNvcnJ1cHRlZCBjYWNoZSBmaWxlIGNvbnRpbnVlcyB0bworICAgICAgICBleGlzdCBv
biBkaXNrKS4gIFRvIGd1YXJkIGFnYWluc3QgdGhpcywgd2UnbGwgaGFyZGVuIHRoZSBieXRlY29k
ZSBjYWNoaW5nIG1lY2hhbmlzbQorICAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgIDEuIE1v
ZGlmeSB0aGUgd3JpdGVDYWNoZSBvcGVyYXRpb24gdG8gYWx3YXlzIHdyaXRlIHRoZSBjYWNoZSBm
aWxlIGluIGEgdHJhbnNhY3Rpb25hbAorICAgICAgICAgICBtYW5uZXIgaS5lLiB3ZSdsbCBmaXJz
dCB3cml0ZSB0byBhIC50bXAgZmlsZSwgYW5kIHRoZW4gcmVuYW1lIHRoZSAudG1wIGZpbGUgdG8K
KyAgICAgICAgICAgdGhlIGNhY2hlIGZpbGUgb25seSBpZiB0aGUgZW50aXJlIGZpbGUgaGFzIGJl
ZW4gd3JpdHRlbiBpbiBjb21wbGV0ZW5lc3MuCisKKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRo
YXQgd2Ugd29uJ3QgZ2V0IGNvcnJ1cHRlZCBjYWNoZSBmaWxlcyBkdWUgdG8gaW50ZXJydXB0ZWQg
d3JpdGVzLgorCisgICAgICAgIDIuIE1vZGlmeSB0aGUgd3JpdGVDYWNoZSBvcGVyYXRpb24gdG8g
YWxzbyBjb21wdXRlIGEgU0hBMSBoYXNoIG9mIHRoZSBjYWNoZSBmaWxlCisgICAgICAgICAgIGFu
ZCBhcHBlbmQgdGhlIGhhc2ggYXQgZW5kIG9mIHRoZSBmaWxlLiAgTW9kaWZ5IHRoZSByZWFkQ2Fj
aGUgb3BlcmF0aW9uIHRvCisgICAgICAgICAgIGZpcnN0IGF1dGhlbnRpY2F0ZSB0aGUgU0hBMSBo
YXNoIGJlZm9yZSBhbGxvd2luZyB0aGUgY2FjaGUgZmlsZSB0byBiZSB1c2VkLgorICAgICAgICAg
ICBJZiB0aGUgaGFzaCBkb2VzIG5vdCBtYXRjaCwgdGhlIGZpbGUgaXMgYmFkLCBhbmQgd2UnbGwg
anVzdCBkZWxldGUgaXQuCisKKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29uJ3Qg
YmUgY3Jhc2hpbmcgd2hpbGUgZGVjb2RpbmcgYSBjb3JydXB0ZWQgY2FjaGUgZmlsZS4KKworICAg
ICAgICBNYW51YWxseSB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhbmQgZW5z
dXJpbmcgdGhhdCB0aGUgY2xpZW50IHJlY292ZXJzCisgICAgICAgIHdpdGggbm8gY3Jhc2hlczoK
KworICAgICAgICBBbHNvIGFkZGVkIHNvbWUgc3RhdGljX2Fzc2VydHMgaW4gQ2FjaGVkVHlwZXMu
Y3BwIHRvIGRvY3VtZW50IHNvbWUgaW52YXJpYW50cyB0aGF0CisgICAgICAgIHRoZSBwcmUtZXhp
c3RpbmcgY29kZSBpcyBkZXBlbmRlbnQgb24uCisKKyAgICAgICAgMS4gbm8gY2FjaGUgZmlsZSBv
biBkaXNrLgorICAgICAgICAyLiBhIDAtc2l6ZWQgY2FjaGUgZmlsZSBvbiBhIGRpc2suCisgICAg
ICAgIDMuIGEgdHJ1bmNhdGVkIGNhY2hlIGZpbGUgb24gZGlzay4KKyAgICAgICAgNC4gYSBjb3Jy
dXB0ZWQgY2FjaGUgZmlsZSBvbiBkaXNrLgorICAgICAgICA1LiBhbiB1bmNvcnJ1cHRlZCBjYWNo
ZSBmaWxlIG9uIGRpc2suCisKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06CisgICAgICAgICgt
W0pTU2NyaXB0IHJlYWRDYWNoZV0pOgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0ZUNhY2hlOl0p
OgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorCiAyMDIwLTAyLTE5ICBSb3Nz
IEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBDb21wdXRlZCBQ
cm9wZXJ0aWVzIHdpdGggaW5jcmVtZW50IHNvbWV0aW1lcyBwcm9kdWNlcyBpbmNvcnJlY3QgcmVz
dWx0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCShyZXZpc2lvbiAy
NTcxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHN5cy9zdGF0Lmg+CiAjaW1wb3J0IDx3dGYv
RmlsZU1ldGFkYXRhLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgorI2ltcG9ydCA8d3Rm
L1NIQTEuaD4KICNpbXBvcnQgPHd0Zi9TY29wZS5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9EYXRhVmF1bHRTUEkuaD4KQEAgLTE1Myw3ICsx
NTQsMTAgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBpZiAoIW1fY2FjaGVQYXRoKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGZkID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKFtt
X2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJl
YWQsIHtGaWxlU3lzdGVtOjpGaWxlTG9ja01vZGU6OkV4Y2x1c2l2ZSwgRmlsZVN5c3RlbTo6Rmls
ZUxvY2tNb2RlOjpOb25ibG9ja2luZ30pOworICAgIE5TU3RyaW5nICpjYWNoZVBhdGhTdHJpbmcg
PSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciogY2FjaGVGaWxlbmFtZSA9IGNh
Y2hlUGF0aFN0cmluZy5VVEY4U3RyaW5nOworCisgICAgYXV0byBmZCA9IEZpbGVTeXN0ZW06Om9w
ZW5BbmRMb2NrRmlsZShjYWNoZUZpbGVuYW1lLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJl
YWQsIHtGaWxlU3lzdGVtOjpGaWxlTG9ja01vZGU6OkV4Y2x1c2l2ZSwgRmlsZVN5c3RlbTo6Rmls
ZUxvY2tNb2RlOjpOb25ibG9ja2luZ30pOwogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVW
YWxpZChmZCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIGNsb3NlRkQgPSBtYWtlU2NvcGVF
eGl0KFsmXSB7CkBAIC0xNjUsNiArMTY5LDI5IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgaWYg
KCFzdWNjZXNzKQogICAgICAgICByZXR1cm47CiAKKyAgICBjb25zdCB1aW50OF90KiBmaWxlRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1hcHBlZEZpbGUuZGF0YSgpKTsK
KyAgICB1bnNpZ25lZCBmaWxlVG90YWxTaXplID0gbWFwcGVkRmlsZS5zaXplKCk7CisKKyAgICAv
LyBFbnN1cmUgd2UgYXQgbGVhc3QgaGF2ZSBhIFNIQTE6OkRpZ2VzdCB0byByZWFkLgorICAgIGlm
IChmaWxlVG90YWxTaXplIDwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpIHsKKyAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZShjYWNoZUZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVuc2lnbmVkIGZpbGVEYXRhU2l6ZSA9IGZpbGVUb3RhbFNpemUgLSBzaXplb2YoU0hB
MTo6RGlnZXN0KTsKKworICAgIFNIQTE6OkRpZ2VzdCBmaWxlSGFzaDsKKyAgICBtZW1jcHkoJmZp
bGVIYXNoLCBmaWxlRGF0YSArIGZpbGVEYXRhU2l6ZSwgc2l6ZW9mKFNIQTE6OkRpZ2VzdCkpOwor
CisgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKKyAgICBTSEExIHNoYTE7CisgICAgc2hh
MS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFTaXplKTsKKyAgICBzaGExLmNvbXB1dGVIYXNo
KGNvbXB1dGVkSGFzaCk7CisgICAgaWYgKGNvbXB1dGVkSGFzaCAhPSBmaWxlSGFzaCkgeworICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgUmVmPEpTQzo6Q2FjaGVkQnl0ZWNvZGU+IGNhY2hlZEJ5dGVjb2Rl
ID0gSlNDOjpDYWNoZWRCeXRlY29kZTo6Y3JlYXRlKFdURk1vdmUobWFwcGVkRmlsZSkpOwogCiAg
ICAgSlNDOjpWTSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRleHRHcm91cFJl
Zl0pOwpAQCAtMTczLDcgKzIwMCw3IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgaWYgKGlzQ2Fj
aGVkQnl0ZWNvZGVTdGlsbFZhbGlkKHZtLCBjYWNoZWRCeXRlY29kZS5jb3B5UmVmKCksIGtleSwg
bV90eXBlID09IGtKU1NjcmlwdFR5cGVQcm9ncmFtID8gSlNDOjpTb3VyY2VDb2RlVHlwZTo6UHJv
Z3JhbVR5cGUgOiBKU0M6OlNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlKSkKICAgICAgICAgbV9j
YWNoZWRCeXRlY29kZSA9IFdURk1vdmUoY2FjaGVkQnl0ZWNvZGUpOwogICAgIGVsc2UKLSAgICAg
ICAgZnRydW5jYXRlKGZkLCAwKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZk
LCAwKTsKIH0KIAogLSAoQk9PTCljYWNoZUJ5dGVjb2RlV2l0aEVycm9yOihOU0Vycm9yICoqKWVy
cm9yCkBAIC0yNjYsMTIgKzI5MywyOCBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJy
b3IKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAotICAgIGludCBmZCA9IG9wZW4oW21fY2Fj
aGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9f
Tk9OQkxPQ0ssIDA2NjYpOworICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhlIHdyaXRlIGFzIGEgdHJh
bnNhY3Rpb24gKGkuZS4gd2UgZ3VhcmFudGVlIHRoYXQgaXQncyBhbGwKKyAgICAvLyBvciBub3Ro
aW5nKS4gU28sIHdlJ2xsIHdyaXRlIHRvIGEgdGVtcCBmaWxlIGZpcnN0LCBhbmQgcmVuYW1lIHRo
ZSB0ZW1wCisgICAgLy8gZmlsZSB0byB0aGUgY2FjaGUgZmlsZSBvbmx5IGFmdGVyIHdlJ3ZlIGZp
bmlzaGVkIHdyaXRpbmcgdGhlIHdob2xlIHRoaW5nLgorCisgICAgTlNTdHJpbmcgKmNhY2hlUGF0
aFN0cmluZyA9IFttX2NhY2hlUGF0aCBwYXRoXTsKKyAgICBjb25zdCBjaGFyKiBjYWNoZUZpbGVO
YW1lID0gY2FjaGVQYXRoU3RyaW5nLlVURjhTdHJpbmc7CisgICAgY29uc3QgY2hhciogdGVtcEZp
bGVOYW1lID0gW2NhY2hlUGF0aFN0cmluZyBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi50bXAi
XS5VVEY4U3RyaW5nOworICAgIGludCBmZCA9IG9wZW4oY2FjaGVGaWxlTmFtZSwgT19DUkVBVCB8
IE9fV1JPTkxZIHwgT19FWExPQ0sgfCBPX05PTkJMT0NLLCAwNjAwKTsKICAgICBpZiAoZmQgPT0g
LTEpIHsKICAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBvciBsb2Nr
IHRoZSBieXRlY29kZSBjYWNoZSBmaWxlLiBJdCdzIGxpa2VseSBhbm90aGVyIFZNIG9yIHByb2Nl
c3MgaXMgYWxyZWFkeSB1c2luZyBpdC4gRXJyb3I6ICIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAg
ICAgIHJldHVybiBOTzsKICAgICB9CisKKyAgICBpbnQgdGVtcEZEID0gb3Blbih0ZW1wRmlsZU5h
bWUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9fTk9OQkxPQ0ssIDA2MDApOworICAg
IGlmICh0ZW1wRkQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJDb3VsZCBu
b3Qgb3BlbiBvciBsb2NrIHRoZSBieXRlY29kZSBjYWNoZSB0ZW1wIGZpbGUuIEVycm9yOiAiLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiBOTzsK
KyAgICB9CisKICAgICBhdXRvIGNsb3NlRkQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAg
IGNsb3NlKHRlbXBGRCk7CiAgICAgICAgIGNsb3NlKGZkKTsKICAgICB9KTsKIApAQCAtMjgwLDEw
ICszMjMsMTAgQEAgLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCiAgICAgSlNDOjpW
TSYgdm0gPSAqdG9KUyhbbV92aXJ0dWFsTWFjaGluZSBKU0NvbnRleHRHcm91cFJlZl0pOwogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBrSlNTY3JpcHRUeXBlTW9kdWxlOgotICAgICAg
ICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKHZtLCBzb3Vy
Y2VDb2RlLCBmZCwgY2FjaGVFcnJvcik7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6
OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIHRlbXBGRCwgY2FjaGVFcnJv
cik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0pTU2NyaXB0VHlwZVByb2dyYW06Ci0gICAg
ICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKHZtLCBz
b3VyY2VDb2RlLCBmZCwgY2FjaGVFcnJvcik7CisgICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBK
U0M6OmdlbmVyYXRlUHJvZ3JhbUJ5dGVjb2RlKHZtLCBzb3VyY2VDb2RlLCB0ZW1wRkQsIGNhY2hl
RXJyb3IpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI5NCw2ICszMzcsMTMgQEAgLSAo
Qk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCiAgICAgICAgIHJldHVybiBOTzsKICAgICB9
CiAKKyAgICBTSEExOjpEaWdlc3QgY29tcHV0ZWRIYXNoOworICAgIFNIQTEgc2hhMTsKKyAgICBz
aGExLmFkZEJ5dGVzKG1fY2FjaGVkQnl0ZWNvZGUtPmRhdGEoKSwgbV9jYWNoZWRCeXRlY29kZS0+
c2l6ZSgpKTsKKyAgICBzaGExLmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CisgICAgRmlsZVN5
c3RlbTo6d3JpdGVUb0ZpbGUodGVtcEZELCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigm
Y29tcHV0ZWRIYXNoKSwgc2l6ZW9mKGNvbXB1dGVkSGFzaCkpOworCisgICAgcmVuYW1lKHRlbXBG
aWxlTmFtZSwgY2FjaGVGaWxlTmFtZSk7CiAgICAgcmV0dXJuIFlFUzsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24g
MjU3MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzMTgsNiArMjMxOCw4IEBAIHByaXZhdGU6CiAgICAgQ2FjaGVkQ29k
ZUJsb2NrVGFnIG1fdGFnOwogfTsKIAorc3RhdGljX2Fzc2VydChhbGlnbm9mKEdlbmVyaWNDYWNo
ZUVudHJ5KSA8PSBhbGlnbm9mKHN0ZDo6bWF4X2FsaWduX3QpKTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgVW5saW5rZWRDb2RlQmxvY2tUeXBlPgogY2xhc3MgQ2FjaGVFbnRyeSA6IHB1YmxpYyBHZW5l
cmljQ2FjaGVFbnRyeSB7CiBwdWJsaWM6CkBAIC0yMzU1LDYgKzIzNTcsOSBAQCBwcml2YXRlOgog
ICAgIENhY2hlZFB0cjxDYWNoZWRDb2RlQmxvY2tUeXBlPFVubGlua2VkQ29kZUJsb2NrVHlwZT4+
IG1fY29kZUJsb2NrOwogfTsKIAorc3RhdGljX2Fzc2VydChhbGlnbm9mKENhY2hlRW50cnk8VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrPikgPD0gYWxpZ25vZihzdGQ6Om1heF9hbGlnbl90KSk7Citz
dGF0aWNfYXNzZXJ0KGFsaWdub2YoQ2FjaGVFbnRyeTxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2s+KSA8PSBhbGlnbm9mKHN0ZDo6bWF4X2FsaWduX3QpKTsKKwogYm9vbCBHZW5lcmljQ2Fj
aGVFbnRyeTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5
LCBVbmxpbmtlZENvZGVCbG9jayo+JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1VwVG9E
YXRlKGRlY29kZXIpKQo=
</data>
<flag name="review"
          id="406933"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391384</attachid>
            <date>2020-02-21 00:12:18 -0800</date>
            <delta_ts>2020-02-21 00:12:18 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-207972d.patch</filename>
            <type>text/plain</type>
            <size>8715</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3MTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDIwLTAyLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHN1cHBvcnQgZm9yIGJ5dGVjb2RlIGNhY2hpbmcgbW9yZSByb2J1c3QgYWdhaW5zdCBmaWxl
IGNvcnJ1cHRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDc5NzIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU5MjYwNTk1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgSWYgYSBieXRlY29kZSBjYWNo
ZSBmaWxlIGlzIGNvcnJ1cHRlZCwgd2UgY3VycmVudGx5IHdpbGwgYWx3YXlzIGNyYXNoIGV2ZXJ5
IHRpbWUKKyAgICAgICAgd2UgdHJ5IHRvIHJlYWQgaXQgKGluIHBlcnBldHVpdHkgYXMgbG9uZyBh
cyB0aGUgY29ycnVwdGVkIGNhY2hlIGZpbGUgY29udGludWVzIHRvCisgICAgICAgIGV4aXN0IG9u
IGRpc2spLiAgVG8gZ3VhcmQgYWdhaW5zdCB0aGlzLCB3ZSdsbCBoYXJkZW4gdGhlIGJ5dGVjb2Rl
IGNhY2hpbmcgbWVjaGFuaXNtCisgICAgICAgIGFzIGZvbGxvd3M6CisKKyAgICAgICAgMS4gTW9k
aWZ5IHRoZSB3cml0ZUNhY2hlIG9wZXJhdGlvbiB0byBhbHdheXMgd3JpdGUgdGhlIGNhY2hlIGZp
bGUgaW4gYSB0cmFuc2FjdGlvbmFsCisgICAgICAgICAgIG1hbm5lciBpLmUuIHdlJ2xsIGZpcnN0
IHdyaXRlIHRvIGEgLnRtcCBmaWxlLCBhbmQgdGhlbiByZW5hbWUgdGhlIC50bXAgZmlsZSB0bwor
ICAgICAgICAgICB0aGUgY2FjaGUgZmlsZSBvbmx5IGlmIHRoZSBlbnRpcmUgZmlsZSBoYXMgYmVl
biB3cml0dGVuIGluIGNvbXBsZXRlbmVzcy4KKworICAgICAgICAgICBUaGlzIGVuc3VyZXMgdGhh
dCB3ZSB3b24ndCBnZXQgY29ycnVwdGVkIGNhY2hlIGZpbGVzIGR1ZSB0byBpbnRlcnJ1cHRlZCB3
cml0ZXMuCisKKyAgICAgICAgMi4gTW9kaWZ5IHRoZSB3cml0ZUNhY2hlIG9wZXJhdGlvbiB0byBh
bHNvIGNvbXB1dGUgYSBTSEExIGhhc2ggb2YgdGhlIGNhY2hlIGZpbGUKKyAgICAgICAgICAgYW5k
IGFwcGVuZCB0aGUgaGFzaCBhdCBlbmQgb2YgdGhlIGZpbGUuICBNb2RpZnkgdGhlIHJlYWRDYWNo
ZSBvcGVyYXRpb24gdG8KKyAgICAgICAgICAgZmlyc3QgYXV0aGVudGljYXRlIHRoZSBTSEExIGhh
c2ggYmVmb3JlIGFsbG93aW5nIHRoZSBjYWNoZSBmaWxlIHRvIGJlIHVzZWQuCisgICAgICAgICAg
IElmIHRoZSBoYXNoIGRvZXMgbm90IG1hdGNoLCB0aGUgZmlsZSBpcyBiYWQsIGFuZCB3ZSdsbCBq
dXN0IGRlbGV0ZSBpdC4KKworICAgICAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3b24ndCBi
ZSBjcmFzaGluZyB3aGlsZSBkZWNvZGluZyBhIGNvcnJ1cHRlZCBjYWNoZSBmaWxlLgorCisgICAg
ICAgIE1hbnVhbGx5IHRlc3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zIGFuZCBlbnN1
cmluZyB0aGF0IHRoZSBjbGllbnQgcmVjb3ZlcnMKKyAgICAgICAgd2l0aCBubyBjcmFzaGVzOgor
CisgICAgICAgIDEuIG5vIGNhY2hlIGZpbGUgb24gZGlzay4KKyAgICAgICAgMi4gYSAwLXNpemVk
IGNhY2hlIGZpbGUgb24gYSBkaXNrLgorICAgICAgICAzLiBhIHRydW5jYXRlZCBjYWNoZSBmaWxl
IG9uIGRpc2suCisgICAgICAgIDQuIGEgY29ycnVwdGVkIGNhY2hlIGZpbGUgb24gZGlzay4KKyAg
ICAgICAgNS4gYW4gdW5jb3JydXB0ZWQgY2FjaGUgZmlsZSBvbiBkaXNrLgorCisgICAgICAgIEFs
c28gYWRkZWQgc29tZSBzdGF0aWNfYXNzZXJ0cyBpbiBDYWNoZWRUeXBlcy5jcHAgdG8gZG9jdW1l
bnQgc29tZSBpbnZhcmlhbnRzIHRoYXQKKyAgICAgICAgdGhlIHByZS1leGlzdGluZyBjb2RlIGlz
IGRlcGVuZGVudCBvbi4KKworICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAgICAgKC1b
SlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2FjaGU6XSk6
CisgICAgICAgICogcnVudGltZS9DYWNoZWRUeXBlcy5jcHA6CisKIDIwMjAtMDItMTkgIFJvc3Mg
S2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIENvbXB1dGVkIFBy
b3BlcnRpZXMgd2l0aCBpbmNyZW1lbnQgc29tZXRpbWVzIHByb2R1Y2VzIGluY29ycmVjdCByZXN1
bHRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHJldmlzaW9uIDI1
NzEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCA8c3lzL3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9G
aWxlTWV0YWRhdGEuaD4KICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW1wb3J0IDx3dGYv
U0hBMS5oPgogI2ltcG9ydCA8d3RmL1Njb3BlLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIu
aD4KICNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL0RhdGFWYXVsdFNQSS5oPgpAQCAtMTUzLDcgKzE1
NCwxMCBAQCAtICh2b2lkKXJlYWRDYWNoZQogICAgIGlmICghbV9jYWNoZVBhdGgpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZmQgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUoW21f
Y2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVh
ZCwge0ZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6RXhjbHVzaXZlLCBGaWxlU3lzdGVtOjpGaWxl
TG9ja01vZGU6Ok5vbmJsb2NraW5nfSk7CisgICAgTlNTdHJpbmcgKmNhY2hlUGF0aFN0cmluZyA9
IFttX2NhY2hlUGF0aCBwYXRoXTsKKyAgICBjb25zdCBjaGFyKiBjYWNoZUZpbGVuYW1lID0gY2Fj
aGVQYXRoU3RyaW5nLlVURjhTdHJpbmc7CisKKyAgICBhdXRvIGZkID0gRmlsZVN5c3RlbTo6b3Bl
bkFuZExvY2tGaWxlKGNhY2hlRmlsZW5hbWUsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVh
ZCwge0ZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6RXhjbHVzaXZlLCBGaWxlU3lzdGVtOjpGaWxl
TG9ja01vZGU6Ok5vbmJsb2NraW5nfSk7CiAgICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZh
bGlkKGZkKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gY2xvc2VGRCA9IG1ha2VTY29wZUV4
aXQoWyZdIHsKQEAgLTE2NSw2ICsxNjksMzAgQEAgLSAodm9pZClyZWFkQ2FjaGUKICAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKIAorICAgIGNvbnN0IHVpbnQ4X3QqIGZpbGVEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obWFwcGVkRmlsZS5kYXRhKCkpOwor
ICAgIHVuc2lnbmVkIGZpbGVUb3RhbFNpemUgPSBtYXBwZWRGaWxlLnNpemUoKTsKKworICAgIC8v
IEVuc3VyZSB3ZSBhdCBsZWFzdCBoYXZlIGEgU0hBMTo6RGlnZXN0IHRvIHJlYWQuCisgICAgaWYg
KGZpbGVUb3RhbFNpemUgPCBzaXplb2YoU0hBMTo6RGlnZXN0KSkgeworICAgICAgICBGaWxlU3lz
dGVtOjpkZWxldGVGaWxlKGNhY2hlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdW5zaWduZWQgZmlsZURhdGFTaXplID0gZmlsZVRvdGFsU2l6ZSAtIHNpemVvZihTSEEx
OjpEaWdlc3QpOworCisgICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKKyAgICBTSEExIHNo
YTE7CisgICAgc2hhMS5hZGRCeXRlcyhmaWxlRGF0YSwgZmlsZURhdGFTaXplKTsKKyAgICBzaGEx
LmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CisKKyAgICBTSEExOjpEaWdlc3QgZmlsZUhhc2g7
CisgICAgbWVtY3B5KCZmaWxlSGFzaCwgZmlsZURhdGEgKyBmaWxlRGF0YVNpemUsIHNpemVvZihT
SEExOjpEaWdlc3QpKTsKKworICAgIGlmIChjb21wdXRlZEhhc2ggIT0gZmlsZUhhc2gpIHsKKyAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShjYWNoZUZpbGVuYW1lKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIFJlZjxKU0M6OkNhY2hlZEJ5dGVjb2RlPiBjYWNoZWRCeXRlY29k
ZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGU6OmNyZWF0ZShXVEZNb3ZlKG1hcHBlZEZpbGUpKTsKIAog
ICAgIEpTQzo6Vk0mIHZtID0gKnRvSlMoW21fdmlydHVhbE1hY2hpbmUgSlNDb250ZXh0R3JvdXBS
ZWZdKTsKQEAgLTE3Myw3ICsyMDEsNyBAQCAtICh2b2lkKXJlYWRDYWNoZQogICAgIGlmIChpc0Nh
Y2hlZEJ5dGVjb2RlU3RpbGxWYWxpZCh2bSwgY2FjaGVkQnl0ZWNvZGUuY29weVJlZigpLCBrZXks
IG1fdHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSA/IEpTQzo6U291cmNlQ29kZVR5cGU6OlBy
b2dyYW1UeXBlIDogSlNDOjpTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSkpCiAgICAgICAgIG1f
Y2FjaGVkQnl0ZWNvZGUgPSBXVEZNb3ZlKGNhY2hlZEJ5dGVjb2RlKTsKICAgICBlbHNlCi0gICAg
ICAgIGZ0cnVuY2F0ZShmZCwgMCk7CisgICAgICAgIEZpbGVTeXN0ZW06OnRydW5jYXRlRmlsZShm
ZCwgMCk7CiB9CiAKIC0gKEJPT0wpY2FjaGVCeXRlY29kZVdpdGhFcnJvcjooTlNFcnJvciAqKill
cnJvcgpAQCAtMjY2LDI0ICsyOTQsNDIgQEAgLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVy
cm9yCiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKLSAgICBpbnQgZmQgPSBvcGVuKFttX2Nh
Y2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19SRFdSIHwgT19FWExPQ0sgfCBP
X05PTkJMT0NLLCAwNjY2KTsKKyAgICAvLyBXZSB3YW50IHRvIGRvIHRoZSB3cml0ZSBhcyBhIHRy
YW5zYWN0aW9uIChpLmUuIHdlIGd1YXJhbnRlZSB0aGF0IGl0J3MgYWxsCisgICAgLy8gb3Igbm90
aGluZykuIFNvLCB3ZSdsbCB3cml0ZSB0byBhIHRlbXAgZmlsZSBmaXJzdCwgYW5kIHJlbmFtZSB0
aGUgdGVtcAorICAgIC8vIGZpbGUgdG8gdGhlIGNhY2hlIGZpbGUgb25seSBhZnRlciB3ZSd2ZSBm
aW5pc2hlZCB3cml0aW5nIHRoZSB3aG9sZSB0aGluZy4KKworICAgIE5TU3RyaW5nICpjYWNoZVBh
dGhTdHJpbmcgPSBbbV9jYWNoZVBhdGggcGF0aF07CisgICAgY29uc3QgY2hhciogY2FjaGVGaWxl
TmFtZSA9IGNhY2hlUGF0aFN0cmluZy5VVEY4U3RyaW5nOworICAgIGNvbnN0IGNoYXIqIHRlbXBG
aWxlTmFtZSA9IFtjYWNoZVBhdGhTdHJpbmcgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIudG1w
Il0uVVRGOFN0cmluZzsKKyAgICBpbnQgZmQgPSBvcGVuKGNhY2hlRmlsZU5hbWUsIE9fQ1JFQVQg
fCBPX1dST05MWSB8IE9fRVhMT0NLIHwgT19OT05CTE9DSywgMDYwMCk7CiAgICAgaWYgKGZkID09
IC0xKSB7CiAgICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiQ291bGQgbm90IG9wZW4gb3IgbG9j
ayB0aGUgYnl0ZWNvZGUgY2FjaGUgZmlsZS4gSXQncyBsaWtlbHkgYW5vdGhlciBWTSBvciBwcm9j
ZXNzIGlzIGFscmVhZHkgdXNpbmcgaXQuIEVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOwogICAg
ICAgICByZXR1cm4gTk87CiAgICAgfQorCiAgICAgYXV0byBjbG9zZUZEID0gbWFrZVNjb3BlRXhp
dChbJl0gewogICAgICAgICBjbG9zZShmZCk7CiAgICAgfSk7CiAKKyAgICBpbnQgdGVtcEZEID0g
b3Blbih0ZW1wRmlsZU5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX0VYTE9DSyB8IE9fTk9OQkxP
Q0ssIDA2MDApOworICAgIGlmICh0ZW1wRkQgPT0gLTEpIHsKKyAgICAgICAgZXJyb3IgPSBtYWtl
U3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBvciBsb2NrIHRoZSBieXRlY29kZSBjYWNoZSB0ZW1wIGZp
bGUuIEVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gTk87CisgICAg
fQorCisgICAgYXV0byBjbG9zZVRlbXBGRCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAg
Y2xvc2UodGVtcEZEKTsKKyAgICB9KTsKKwogICAgIEpTQzo6Qnl0ZWNvZGVDYWNoZUVycm9yIGNh
Y2hlRXJyb3I7CiAgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBbc2VsZiBzb3VyY2VD
b2RlXTsKICAgICBKU0M6OlZNJiB2bSA9ICp0b0pTKFttX3ZpcnR1YWxNYWNoaW5lIEpTQ29udGV4
dEdyb3VwUmVmXSk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIGtKU1NjcmlwdFR5
cGVNb2R1bGU6Ci0gICAgICAgIG1fY2FjaGVkQnl0ZWNvZGUgPSBKU0M6OmdlbmVyYXRlTW9kdWxl
Qnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9jYWNo
ZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZSh2bSwgc291cmNlQ29kZSwg
dGVtcEZELCBjYWNoZUVycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrSlNTY3JpcHRU
eXBlUHJvZ3JhbToKLSAgICAgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVQcm9n
cmFtQnl0ZWNvZGUodm0sIHNvdXJjZUNvZGUsIGZkLCBjYWNoZUVycm9yKTsKKyAgICAgICAgbV9j
YWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVQcm9ncmFtQnl0ZWNvZGUodm0sIHNvdXJjZUNv
ZGUsIHRlbXBGRCwgY2FjaGVFcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjk0
LDYgKzM0MCwxNCBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0cmluZyYpZXJyb3IKICAgICAgICAg
cmV0dXJuIE5POwogICAgIH0KIAorICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7CisgICAg
U0hBMSBzaGExOworICAgIHNoYTEuYWRkQnl0ZXMobV9jYWNoZWRCeXRlY29kZS0+ZGF0YSgpLCBt
X2NhY2hlZEJ5dGVjb2RlLT5zaXplKCkpOworICAgIHNoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRI
YXNoKTsKKyAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZSh0ZW1wRkQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZjb21wdXRlZEhhc2gpLCBzaXplb2YoY29tcHV0ZWRIYXNoKSk7CisK
KyAgICBmc3luYyh0ZW1wRkQpOworICAgIHJlbmFtZSh0ZW1wRmlsZU5hbWUsIGNhY2hlRmlsZU5h
bWUpOwogICAgIHJldHVybiBZRVM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI1NzEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzE4
LDYgKzIzMTgsOCBAQCBwcml2YXRlOgogICAgIENhY2hlZENvZGVCbG9ja1RhZyBtX3RhZzsKIH07
CiAKK3N0YXRpY19hc3NlcnQoYWxpZ25vZihHZW5lcmljQ2FjaGVFbnRyeSkgPD0gYWxpZ25vZihz
dGQ6Om1heF9hbGlnbl90KSk7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KIGNsYXNzIENhY2hlRW50cnkgOiBwdWJsaWMgR2VuZXJpY0NhY2hlRW50cnkgewogcHVi
bGljOgpAQCAtMjM1NSw2ICsyMzU3LDkgQEAgcHJpdmF0ZToKICAgICBDYWNoZWRQdHI8Q2FjaGVk
Q29kZUJsb2NrVHlwZTxVbmxpbmtlZENvZGVCbG9ja1R5cGU+PiBtX2NvZGVCbG9jazsKIH07CiAK
K3N0YXRpY19hc3NlcnQoYWxpZ25vZihDYWNoZUVudHJ5PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
az4pIDw9IGFsaWdub2Yoc3RkOjptYXhfYWxpZ25fdCkpOworc3RhdGljX2Fzc2VydChhbGlnbm9m
KENhY2hlRW50cnk8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPikgPD0gYWxpZ25vZihz
dGQ6Om1heF9hbGlnbl90KSk7CisKIGJvb2wgR2VuZXJpY0NhY2hlRW50cnk6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8U291cmNlQ29kZUtleSwgVW5saW5rZWRDb2RlQmxvY2sq
PiYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICghaXNVcFRvRGF0ZShkZWNvZGVyKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>