<?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>141803</bug_id>
          
          <creation_ts>2015-02-19 12:12:16 -0800</creation_ts>
          <short_desc>[WK2] Add more detailed diagnostic logging for measuring network cache efficacy</short_desc>
          <delta_ts>2015-02-20 14:26:09 -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>WebKit2</component>
          <version>528+ (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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070470</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-19 12:12:16 -0800</bug_when>
    <thetext>Add more detailed diagnostic logging for measuring network cache efficacy.

We want to know the reason the network cache is being by-passed, why the network cache decided not to cache a response and why it cannot reuse a cache entry.

Radar: &lt;rdar://problem/19632080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070482</commentid>
    <comment_count>1</comment_count>
      <attachid>246907</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-19 12:30:11 -0800</bug_when>
    <thetext>Created attachment 246907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070728</commentid>
    <comment_count>2</comment_count>
      <attachid>246907</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-20 11:05:40 -0800</bug_when>
    <thetext>Comment on attachment 246907
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:202
&gt; +static bool canRetrieve(const WebCore::ResourceRequest&amp; request, CacheBypassReason&amp; reason)

Having both the bool return and the reason seems redundant. Why not just make this return a singe RetrieveDecision enum (or similar) that covers both the success and the failure cases?

Same comment for canStore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070747</commentid>
    <comment_count>3</comment_count>
      <attachid>246907</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-20 11:34:10 -0800</bug_when>
    <thetext>Comment on attachment 246907
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatistics.h:63
&gt; +enum class CacheBypassReason {
&gt; +    None,
&gt; +    NotHTTPFamily,
&gt; +    UnsupportedHTTPMethod,
&gt; +    IsConditionalRequest,
&gt; +    IsReloadIgnoringCacheData
&gt; +};
&gt; +
&gt; +enum class CacheStorageFailure {
&gt; +    None,
&gt; +    NotHTTPFamily,
&gt; +    UnsupportedHTTPMethod,
&gt; +    IsAttachment,
&gt; +    CacheControlNoStore,
&gt; +    UncacheableHTTPStatusCode
&gt; +};
&gt; +
&gt; +enum class CachedEntryReuseFailure {
&gt; +    None,
&gt; +    VaryingHeaderMismatch,
&gt; +    MissingValidatorFields,
&gt; +    Other,
&gt; +};

I think these should then move to NetworkCache scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070799</commentid>
    <comment_count>4</comment_count>
      <attachid>246993</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-20 13:24:40 -0800</bug_when>
    <thetext>Created attachment 246993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070803</commentid>
    <comment_count>5</comment_count>
      <attachid>246993</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-20 13:40:36 -0800</bug_when>
    <thetext>Comment on attachment 246993
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070835</commentid>
    <comment_count>6</comment_count>
      <attachid>246993</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 14:26:04 -0800</bug_when>
    <thetext>Comment on attachment 246993
Patch

Clearing flags on attachment: 246993

Committed r180456: &lt;http://trac.webkit.org/changeset/180456&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070836</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 14:26:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246907</attachid>
            <date>2015-02-19 12:30:11 -0800</date>
            <delta_ts>2015-02-20 13:24:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141803-20150219123003.patch</filename>
            <type>text/plain</type>
            <size>32498</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU4Nzc5MzE2NTZiZWFk
NmFmOTU0OTRmZjZiMzJiN2U4NDUzZWQzMC4uZDA0MGM5YjhkMGQyMDlhMjFkMGI1ZmUxM2VmZWJk
NzM2OWM2MzdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTAyLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIG1vcmUgZGV0
YWlsZWQgZGlhZ25vc3RpYyBsb2dnaW5nIGZvciBtZWFzdXJpbmcgbmV0d29yayBjYWNoZSBlZmZp
Y2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xOTYzMjA4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSBkaWFnbm9zdGljIGxvZ2dp
bmcga2V5cyBmb3IgdGhlIG5ldHdvcmsgY2FjaGUuCisKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpub0xvbmdlckluQ2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc1JlbG9hZElnbm9yaW5nQ2FjaGVEYXRhS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNBdHRhY2htZW50S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNDb25kaXRpb25hbFJl
cXVlc3RLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYWNo
ZUNvbnRyb2xOb1N0b3JlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6dW5jYWNoZWFibGVTdGF0dXNDb2RlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdu
b3N0aWNMb2dnaW5nS2V5czo6dW5zdXBwb3J0ZWRIVFRQTWV0aG9kS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnZhcnlpbmdIZWFkZXJNaXNt
YXRjaEtleSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om5vdEhUVFBGYW1pbHlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpub3RJbkNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dn
aW5nS2V5czo6bm9Mb25nZXJJbkNhY2hlRmFpbHVyZUtleSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51
c2FibGVDYWNoZWRFbnRyeUZhaWx1cmVLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmg6CisKIDIwMTUtMDItMTggIEFuZHJlYXMgS2xpbmcgIDxha2xp
bmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3OTM0Nyk6IENsZWFyaW5nIHRo
ZSBQYWdlQ2FjaGUgbm8gbG9uZ2VyIGNsZWFycyB0aGUgUGFnZUNhY2hlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGZiNzc0ODc3YTA4YWU0OTc2ZjBhNzZmZWJhMzVlYjM5ZWI1NmQxZDYuLmEzNGIwZjE1NWZjOTQ5
ZGRlYWQ0NjY4N2E0M2ZmMzkyNDU3NzRjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAor
MjAxNS0wMi0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFtX
SzJdIEFkZCBtb3JlIGRldGFpbGVkIGRpYWdub3N0aWMgbG9nZ2luZyBmb3IgbWVhc3VyaW5nIG5l
dHdvcmsgY2FjaGUgZWZmaWNhY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTgwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG1vcmUg
ZGV0YWlsZWQgZGlhZ25vc3RpYyBsb2dnaW5nIGZvciBtZWFzdXJpbmcgbmV0d29yayBjYWNoZQor
ICAgICAgICBlZmZpY2FjeS4KKworICAgICAgICBXZSB3YW50IHRvIGtub3cgdGhlIHJlYXNvbiB0
aGUgbmV0d29yayBjYWNoZSBpcyBiZWluZyBieS1wYXNzZWQsIHdoeQorICAgICAgICB0aGUgbmV0
d29yayBjYWNoZSBkZWNpZGVkIG5vdCB0byBjYWNoZSBhIHJlc3BvbnNlIGFuZCB3aHkgaXQgY2Fu
bm90CisgICAgICAgIHJldXNlIGEgY2FjaGUgZW50cnkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3ICJVbmNhY2hlZFJlYXNvbiIgdGFibGUgdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZQor
ICAgICAgICB0byBzdG9yZSB0aGUgcmVhc29uIHRoZSBuZXR3b3JrIGNhY2hlIGlzIGRlY2lkaW5n
IG5vdCB0byBjYWNoZSBhCisgICAgICAgIGdpdmVuIHJlc3BvbnNlLiBUaGlzIGluZm9ybWF0aW9u
IGlzIHVzZWQgbGF0ZXIsIHdoZW4gdGhlIHJlc291cmNlIGlzCisgICAgICAgIHJlcXVlc3RlZCBh
Z2FpbiB0byBsb2cgdGhlIHJlYXNvbiB3aHkgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzdGll
ZAorICAgICAgICBieSB0aGUgY2FjaGUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpkZWNvZGVTdG9yYWdlRW50cnkp
OgorICAgICAgICAoV2ViS2l0OjpjYW5SZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6cmV0cmlldmUpOgorICAgICAgICAoV2ViS2l0OjpjYW5TdG9yZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6c3RvcmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViS2l0OjpjYWNoZUJ5cGFzc1JlYXNvblRvRGlhZ25vc3RpY0tleSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6Y2FjaGVTdG9yYWdlRmFpbHVyZVRvRGlhZ25vc3RpY0tl
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFJldHJp
ZXZhbEZhaWx1cmUpOgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRv
RGlhZ25vc3RpY0tleSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6
OnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Y2xlYXIpOgorCiAyMDE1LTAyLTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9TXSBGaXggTmV0d29ya0Nh
Y2hlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5j
cHAKaW5kZXggMzlmZjVkOGRlYmRlYjZkODA4NTc0YTBmOGE2MzAwMTM0ZGVjNzhhOC4uNDJiOTg0
MmZjNzU3MDNkMmM2YjE1MTJjYzYwY2E0OTdiYzgxYWNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcApAQCAtMzgsNiArMzgsMTEgQEAgU3RyaW5n
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6bWVkaWFMb2FkaW5nRmFpbGVkS2V5KCkKICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJtZWRpYUZhaWxlZExvYWRpbmciKTsKIH0KIAorU3RyaW5nIERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6bWlzc2luZ1ZhbGlkYXRvckZpZWxkc0tleSgpCit7CisgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgibWlzc2luZ1ZhbGlkYXRvckZpZWxkcyIpOworfQorCiBTdHJpbmcg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjptdXN0UmV2YWxpZGF0ZUlzRXhwaXJlZEtleSgpCiB7CiAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibXVzdFJldmFsaWRhdGVJc0V4cGlyZWQiKTsKQEAgLTEz
OCw5ICsxNDMsOSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0RvY3VtZW50TG9h
ZGVyS2V5KCkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub0RvY3VtZW50TG9hZGVyIik7CiB9
CiAKLVN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vTG9uZ2VySW5DYWNoZUZhaWx1cmVL
ZXkoKQorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Mb25nZXJJbkNhY2hlS2V5KCkK
IHsKLSAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub0xvbmdlckluQ2FjaGVGYWlsdXJlIik7Cisg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibm9Mb25nZXJJbkNhY2hlIik7CiB9CiAKIFN0cmluZyBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6Om90aGVyS2V5KCkKQEAgLTE3Myw2ICsxNzgsMTEgQEAgU3Ry
aW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNFeHBpcmVkS2V5KCkKICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJpc0V4cGlyZWQiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5
czo6aXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiaXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSIpOworfQorCiBTdHJpbmcgRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpsb2FkZWRLZXkoKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImxv
YWRlZCIpOwpAQCAtMjAzLDYgKzIxMywxNiBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
Ojppbk1lbW9yeUNhY2hlS2V5KCkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJpbk1lbW9yeUNh
Y2hlIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQXR0YWNobWVudEtl
eSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiaXNBdHRhY2htZW50Iik7Cit9CisKK1N0
cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQ29uZGl0aW9uYWxSZXF1ZXN0S2V5KCkKK3sK
KyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJpc0NvbmRpdGlvbmFsUmVxdWVzdCIpOworfQorCiBT
dHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpoYXNPcGVuRGF0YWJhc2VzS2V5KCkKIHsKICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJoYXNPcGVuRGF0YWJhc2VzIik7CkBAIC0yNTMsNiArMjcz
LDExIEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmF1ZGlvS2V5KCkKICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJhdWRpbyIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpjYWNoZUNvbnRyb2xOb1N0b3JlS2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJjYWNoZUNvbnRyb2xOb1N0b3JlIik7Cit9CisKIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OmNhY2hlZFJlc291cmNlUmV2YWxpZGF0aW9uS2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJjYWNoZWRSZXNvdXJjZVJldmFsaWRhdGlvbiIpOwpAQCAtMzQ4LDE0ICszNzMsMTkg
QEAgU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6c3ZnRG9jdW1lbnRLZXkoKQogICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInN2Z0RvY3VtZW50Iik7CiB9CiAKLVN0cmluZyBEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5KCkKK1N0cmluZyBEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpCit7CisgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgidW5jYWNoZWFibGVTdGF0dXNDb2RlIik7Cit9CisKK1N0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpCiB7Ci0gICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgidW5oYW5kbGVkUmVxdWVzdEZhaWx1cmUiKTsKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJ1bnN1cHBvcnRlZEhUVFBNZXRob2QiKTsKIH0KIAotU3RyaW5nIERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUZhaWx1cmVLZXkoKQorU3RyaW5n
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUtleSgpCiB7Ci0gICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgidW51c2FibGVDYWNoZWRFbnRyeUZhaWx1cmUiKTsKKyAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bnVzYWJsZUNhY2hlZEVudHJ5Iik7CiB9CiAKIFN0cmluZyBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZEtleSgpCkBAIC00MDgsNiArNDM4LDExIEBAIFN0
cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVzZXJLZXkoKQogICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInVzZXIiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWlu
Z0hlYWRlck1pc21hdGNoS2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ2YXJ5aW5n
SGVhZGVyTWlzbWF0Y2giKTsKK30KKwogU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dmlk
ZW9LZXkoKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInZpZGVvIik7CkBAIC00NDgsNSAr
NDgzLDE1IEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvUHJvY2Vz
c1N1c3BlbmRlZCgpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicHJ1bmVkLnByb2Nlc3NTdXNw
ZW5kZWQiKTsKIH0KIAorU3RyaW5nIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm90
SFRUUEZhbWlseUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibm90SFRUUEZhbWls
eSIpOworfQorCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub3RJbkNhY2hlS2V5KCkK
K3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub3RJbkNhY2hlIik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9z
dGljTG9nZ2luZ0tleXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgKaW5kZXggZjljYTIxZDY5NTQzNjNhYjU1OTM5NmY5Y2IzNDU4YWM4YWNlY2YxMy4uMjdm
ZWQwMTk2Mjg2ZGY1YzU5MTIzYzU0Nzk4M2ZhZTZjOGZhMzJkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIERp
YWdub3N0aWNMb2dnaW5nS2V5cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBhcHBsaWNh
dGlvbkNhY2hlS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBhdWRpb0tleSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY2FjaGVDb250cm9sTm9TdG9yZUtleSgpOwogICAgIHN0
YXRpYyBTdHJpbmcgY2FjaGVkUmVzb3VyY2VSZXZhbGlkYXRpb25LZXkoKTsKICAgICBzdGF0aWMg
U3RyaW5nIGNhbm5vdFN1c3BlbmRBY3RpdmVET01PYmplY3RzS2V5KCk7CiAgICAgc3RhdGljIFN0
cmluZyBkZW5pZWRCeUNsaWVudEtleSgpOwpAQCAtNTEsOCArNTIsMTEgQEAgcHVibGljOgogICAg
IHN0YXRpYyBTdHJpbmcgaHR0cHNOb1N0b3JlS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBpbWFn
ZUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgaW5NZW1vcnlDYWNoZUtleSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgaXNBdHRhY2htZW50S2V5KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFN0cmluZyBpc0NvbmRpdGlvbmFsUmVxdWVzdEtleSgpOwogICAgIHN0YXRp
YyBTdHJpbmcgaXNFcnJvclBhZ2VLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIGlzRXhwaXJlZEtl
eSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgaXNSZWxvYWRJZ25vcmluZ0Nh
Y2hlRGF0YUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgbG9hZGVkS2V5KCk7CiAgICAgc3RhdGlj
IFN0cmluZyBsb2FkaW5nS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBsb2FkaW5nQVBJU2Vuc2VL
ZXkoKTsKQEAgLTYxLDYgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgbWVkaWFL
ZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIG1lZGlhTG9hZGVkS2V5KCk7CiAgICAgc3RhdGljIFN0
cmluZyBtZWRpYUxvYWRpbmdGYWlsZWRLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIG1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIG11
c3RSZXZhbGlkYXRlSXNFeHBpcmVkS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBuYXZpZ2F0aW9u
S2V5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBuZXR3b3JrQ2FjaGVLZXko
KTsKQEAgLTY4LDEwICs3MywxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBub0NhY2hl
S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBub0N1cnJlbnRIaXN0b3J5SXRlbUtleSgpOwogICAg
IHN0YXRpYyBTdHJpbmcgbm9Eb2N1bWVudExvYWRlcktleSgpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBTdHJpbmcgbm9Mb25nZXJJbkNhY2hlRmFpbHVyZUtleSgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBTdHJpbmcgbm9Mb25nZXJJbkNhY2hlS2V5KCk7CiAgICAgc3RhdGljIFN0
cmluZyBub1N0b3JlS2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBub3RI
VFRQRmFtaWx5S2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBub3RJbkNh
Y2hlS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBub3RJbk1lbW9yeUNhY2hlS2V5KCk7Ci0gICAg
c3RhdGljIFN0cmluZyBvdGhlcktleSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgb3RoZXJLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHBhZ2VDYWNoZUtleSgpOwogICAgIHN0
YXRpYyBTdHJpbmcgcGFnZUNvbnRhaW5zQXRMZWFzdE9uZU1lZGlhRW5naW5lS2V5KCk7CiAgICAg
c3RhdGljIFN0cmluZyBwYWdlQ29udGFpbnNBdExlYXN0T25lUGx1Z2luS2V5KCk7CkBAIC05OSw5
ICsxMDYsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgc291cmNlS2V5KCk7CiAgICAg
c3RhdGljIFN0cmluZyBzdHlsZVNoZWV0S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzdmdEb2N1
bWVudEtleSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5oYW5kbGVkUmVx
dWVzdEZhaWx1cmVLZXkoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVudXNh
YmxlQ2FjaGVkRW50cnlGYWlsdXJlS2V5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB1bnVzZWRLZXko
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVuY2FjaGVhYmxlU3RhdHVzQ29k
ZUtleSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5zdXBwb3J0ZWRIVFRQ
TWV0aG9kS2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyB1bnVzYWJsZUNh
Y2hlZEVudHJ5S2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyB1bnVzZWRL
ZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHVudXNlZFJlYXNvbkNyZWRlbnRpYWxTZXR0aW5nc0tl
eSgpOwogICAgIHN0YXRpYyBTdHJpbmcgdW51c2VkUmVhc29uRXJyb3JLZXkoKTsKICAgICBzdGF0
aWMgU3RyaW5nIHVudXNlZFJlYXNvbk11c3RSZXZhbGlkYXRlTm9WYWxpZGF0b3JLZXkoKTsKQEAg
LTExMSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyB1bnVzZWRSZWFzb25U
eXBlTWlzbWF0Y2hLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHVzZWRLZXkoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVzZXJLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgU3RyaW5nIHZhcnlpbmdIZWFkZXJNaXNtYXRjaEtleSgpOwogICAgIHN0YXRpYyBTdHJp
bmcgdmlkZW9LZXkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHdlYlZpZXdL
ZXkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHpvb21lZEtleSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHAKaW5kZXggYTI0NDA5NTI1MGIwNzU3MTdhODQxZjRlZjJmMTMwYjk2NGYyZjE5Yy4uODUzMTc0
MmVjMzg3YzM1ODFmNTc1Yjc1NTE4NDJlOWE5MWVhMjgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC0xMjcsMzIg
KzEyNywzOSBAQCBzdGF0aWMgYm9vbCBjYWNoZVBvbGljeUFsbG93c0V4cGlyZWQoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5KQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBkZWNvZGVTdG9y
YWdlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnkmIHN0b3JhZ2VFbnRyeSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBkZWNvZGVTdG9yYWdlRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlU3RvcmFnZTo6RW50cnkmIHN0b3JhZ2VFbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZSYgZmFpbHVyZSkK
IHsKICAgICBOZXR3b3JrQ2FjaGVEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5k
YXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKIAogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgY2FjaGVkUmVzcG9uc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNo
ZWRSZXNwb25zZSkpIHsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgcmVzcG9uc2UgZGVjb2RpbmcgZmFpbGVkXG4iKTsKKyAgICAgICAgZmFpbHVyZSA9IENhY2hl
ZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgYm9vbCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpKQorICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkgeworICAgICAgICBmYWlsdXJlID0gQ2FjaGVk
RW50cnlSZXVzZUZhaWx1cmU6Ok90aGVyOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CiAKICAgICBpZiAoaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzKSB7CiAgICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiB2YXJ5aW5nUmVxdWVzdEhlYWRlcnM7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh2YXJ5aW5nUmVxdWVzdEhlYWRlcnMpKSB7CisgICAgICAgICAgICBm
YWlsdXJlID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok90aGVyOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoIXZlcmlmeVZhcnlpbmdSZXF1
ZXN0SGVhZGVycyh2YXJ5aW5nUmVxdWVzdEhlYWRlcnMsIHJlcXVlc3QpKSB7CiAgICAgICAgICAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB2YXJ5aW5nIGhlYWRlciBtaXNt
YXRjaFxuIik7CisgICAgICAgICAgICBmYWlsdXJlID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6
OlZhcnlpbmdIZWFkZXJNaXNtYXRjaDsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQogICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNh
dGlvbiBmYWlsdXJlXG4iKTsKKyAgICAgICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWls
dXJlOjpPdGhlcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xNjYsOCAr
MTczLDEwIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZGVj
b2RlU3RvcmFnZUVudHJ5KGNvbnN0IE5ldHdvcmtDYWNoCiAgICAgaWYgKG5lZWRzUmV2YWxpZGF0
aW9uKSB7CiAgICAgICAgIGJvb2wgaGFzVmFsaWRhdG9yRmllbGRzID0gY2FjaGVkUmVzcG9uc2Uu
aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihO
ZXR3b3JrUHJvY2VzcykgbmVlZHNSZXZhbGlkYXRpb24gaGFzVmFsaWRhdG9yRmllbGRzPSVkIGlz
RXhwaXJlZD0lZCBhZ2U9JWYgbGlmZXRpbWU9JWYiLCBpc0V4cGlyZWQsIGhhc1ZhbGlkYXRvckZp
ZWxkcywgYWdlLCBsaWZldGltZSk7Ci0gICAgICAgIGlmICghaGFzVmFsaWRhdG9yRmllbGRzKQor
ICAgICAgICBpZiAoIWhhc1ZhbGlkYXRvckZpZWxkcykgeworICAgICAgICAgICAgZmFpbHVyZSA9
IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpNaXNzaW5nVmFsaWRhdG9yRmllbGRzOwogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIGVudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FjaGU6OkVudHJ5PigpOwpAQCAtMTkwLDE4ICsx
OTksMjYgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBkZWNv
ZGVTdG9yYWdlRW50cnkoY29uc3QgTmV0d29ya0NhY2gKICAgICByZXR1cm4gZW50cnk7CiB9CiAK
LXN0YXRpYyBib29sIGNhblJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3N0YXRpYyBib29sIGNhblJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVCeXBhc3NSZWFzb24mIHJlYXNvbikKIHsKLSAgICBpZiAo
IXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgIGlmICghcmVxdWVz
dC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgcmVhc29uID0gQ2Fj
aGVCeXBhc3NSZWFzb246Ok5vdEhUVFBGYW1pbHk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgSEVBRCBhbmQgT1BUSU9OUyByZXF1ZXN0cy4KLSAg
ICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgIT0gIkdFVCIpCisgICAgaWYgKHJlcXVlc3QuaHR0
cE1ldGhvZCgpICE9ICJHRVQiKSB7CisgICAgICAgIHJlYXNvbiA9IENhY2hlQnlwYXNzUmVhc29u
OjpVbnN1cHBvcnRlZEhUVFBNZXRob2Q7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHZhbGlkYXRlIGNvbmRpdGlvbmFsIHJl
cXVlc3RzIHVzaW5nIGNhY2hlLgotICAgIGlmIChyZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkKKyAg
ICBpZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpIHsKKyAgICAgICAgcmVhc29uID0gQ2FjaGVC
eXBhc3NSZWFzb246OklzQ29uZGl0aW9uYWxSZXF1ZXN0OwogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHJlcXVlc3QuY2FjaGVQb2xpY3koKSA9PSBXZWJDb3JlOjpSZWxvYWRJZ25vcmlu
Z0NhY2hlRGF0YSkKKyAgICB9CisgICAgaWYgKHJlcXVlc3QuY2FjaGVQb2xpY3koKSA9PSBXZWJD
b3JlOjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSkgeworICAgICAgICByZWFzb24gPSBDYWNoZUJ5
cGFzc1JlYXNvbjo6SXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjI1LDkgKzI0MiwxMCBAQCB2
b2lkIE5ldHdvcmtDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiBvcmlnaW5hbFJlcXVlc3QsIHVpbgogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1By
b2Nlc3MpIHJldHJpZXZpbmcgJXMgcHJpb3JpdHkgJXUiLCBvcmlnaW5hbFJlcXVlc3QudXJsKCku
c3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpKTsKIAog
ICAgIE5ldHdvcmtDYWNoZUtleSBzdG9yYWdlS2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVx
dWVzdCk7Ci0gICAgaWYgKCFjYW5SZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QpKSB7CisgICAgQ2Fj
aGVCeXBhc3NSZWFzb24gZmFpbHVyZSA9IENhY2hlQnlwYXNzUmVhc29uOjpOb25lOworICAgIGlm
ICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0LCBmYWlsdXJlKSkgewogICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RVc2luZ0Nh
Y2hlRm9yUmVxdWVzdCh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCk7Cisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHdl
YlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCBmYWlsdXJlKTsKIAogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ2LDEw
ICsyNjQsMTEgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW4KICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
Ci0gICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwg
b3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAgICAgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVy
ZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpOb25lOworICAgICAgICBhdXRvIGRlY29kZWRF
bnRyeSA9IGRlY29kZVN0b3JhZ2VFbnRyeSgqZW50cnksIG9yaWdpbmFsUmVxdWVzdCwgZmFpbHVy
ZSk7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9ICEhZGVjb2RlZEVudHJ5OwogICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRD
YWNoZWRFbnRyeSh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCwgc3VjY2Vz
cyk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5
KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0LCBmYWlsdXJlKTsKIAogI2lm
ICFMT0dfRElTQUJMRUQKICAgICAgICAgYXV0byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSkuY291bnQoKTsKQEAgLTI2MCwxOCArMjc5LDIxIEBA
IHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCwgdWluCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBib29sIGNhblN0
b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3N0YXRpYyBib29sIGNhblN0
b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ2FjaGVTdG9yYWdlRmFpbHVy
ZSYgZmFpbHVyZSkKIHsKICAgICBpZiAoIW9yaWdpbmFsUmVxdWVzdC51cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkgfHwgIXJlc3BvbnNlLmlzSFRUUCgpKSB7CiAgICAgICAgIExPRyhOZXR3
b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBIVFRQIik7CisgICAgICAgIGZhaWx1cmUg
PSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpOb3RIVFRQRmFtaWx5OwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIGlmIChvcmlnaW5hbFJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJHRVQi
KSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG1ldGhvZCAl
cyIsIG9yaWdpbmFsUmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IGZhaWx1cmUgPSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpVbnN1cHBvcnRlZEhUVFBNZXRob2Q7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHJlc3BvbnNlLmlzQXR0YWNobWVu
dCgpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGF0dGFj
aG1lbnQiKTsKKyAgICAgICAgZmFpbHVyZSA9IENhY2hlU3RvcmFnZUZhaWx1cmU6OklzQXR0YWNo
bWVudDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjg1LDExICszMDcsMTMg
QEAgc3RhdGljIGJvb2wgY2FuU3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBv
cmlnaW5hbFJlcXVlc3QsIGNvbnN0IFdlYkMKICAgICBjYXNlIDQxMDogLy8gR29uZQogICAgICAg
ICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsKICAgICAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIENhY2hlLWNvbnRyb2w6bm8t
c3RvcmUiKTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpDYWNo
ZUNvbnRyb2xOb1N0b3JlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0YXR1cyBjb2RlICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSk7CisgICAgICAgIGZhaWx1cmUgPSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpVbmNhY2hl
YWJsZUhUVFBTdGF0dXNDb2RlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTMwMiwx
MiArMzI2LDE1IEBAIHZvaWQgTmV0d29ya0NhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QKIAogICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHN0b3JpbmcgJXMsIHBhcnRpdGlvbiAlcyIsIG9yaWdpbmFs
UmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIG9yaWdpbmFsUmVxdWVzdC5j
YWNoZVBhcnRpdGlvbigpLmxhdGluMSgpLmRhdGEoKSk7CiAKLSAgICBpZiAoIWNhblN0b3JlKG9y
aWdpbmFsUmVxdWVzdCwgcmVzcG9uc2UpKSB7CisgICAgYXV0byBrZXkgPSBtYWtlQ2FjaGVLZXko
b3JpZ2luYWxSZXF1ZXN0KTsKKyAgICBDYWNoZVN0b3JhZ2VGYWlsdXJlIGZhaWx1cmUgPSBDYWNo
ZVN0b3JhZ2VGYWlsdXJlOjpOb25lOworICAgIGlmICghY2FuU3RvcmUob3JpZ2luYWxSZXF1ZXN0
LCByZXNwb25zZSwgZmFpbHVyZSkpIHsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3
b3JrUHJvY2VzcykgZGlkbid0IHN0b3JlIik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdENhY2hpbmdSZXNwb25zZShrZXksIGZh
aWx1cmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBrZXkgPSBtYWtlQ2Fj
aGVLZXkob3JpZ2luYWxSZXF1ZXN0KTsKICAgICBhdXRvIHN0b3JhZ2VFbnRyeSA9IGVuY29kZVN0
b3JhZ2VFbnRyeShvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VE
YXRhKSk7CiAKICAgICBtX3N0b3JhZ2UtPnN0b3JlKGtleSwgc3RvcmFnZUVudHJ5LCBbY29tcGxl
dGlvbkhhbmRsZXJdKGJvb2wgc3VjY2VzcywgY29uc3QgTmV0d29ya0NhY2hlU3RvcmFnZTo6RGF0
YSYgYm9keURhdGEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAppbmRleCA2NWNmZDZjMDNlYjNi
MjJmZDZhMTUzZjRkMDVkYjhjZDhmY2ZkM2MxLi42NGI4MTdmMTUyNDg2OGQyMWNkZjM1NGIxNTY5
ZTE2ZmUwNTA0OWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0zOCwxNSArMzgsNDAg
QEAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorZW51bSBj
bGFzcyBDYWNoZUJ5cGFzc1JlYXNvbiB7CisgICAgTm9uZSwKKyAgICBOb3RIVFRQRmFtaWx5LAor
ICAgIFVuc3VwcG9ydGVkSFRUUE1ldGhvZCwKKyAgICBJc0NvbmRpdGlvbmFsUmVxdWVzdCwKKyAg
ICBJc1JlbG9hZElnbm9yaW5nQ2FjaGVEYXRhCit9OworCitlbnVtIGNsYXNzIENhY2hlU3RvcmFn
ZUZhaWx1cmUgeworICAgIE5vbmUsCisgICAgTm90SFRUUEZhbWlseSwKKyAgICBVbnN1cHBvcnRl
ZEhUVFBNZXRob2QsCisgICAgSXNBdHRhY2htZW50LAorICAgIENhY2hlQ29udHJvbE5vU3RvcmUs
CisgICAgVW5jYWNoZWFibGVIVFRQU3RhdHVzQ29kZQorfTsKKworZW51bSBjbGFzcyBDYWNoZWRF
bnRyeVJldXNlRmFpbHVyZSB7CisgICAgTm9uZSwKKyAgICBWYXJ5aW5nSGVhZGVyTWlzbWF0Y2gs
CisgICAgTWlzc2luZ1ZhbGlkYXRvckZpZWxkcywKKyAgICBPdGhlciwKK307CisKIGNsYXNzIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3MgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gb3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCk7
CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICB2b2lkIHJlY29yZE5vdFVzaW5nQ2FjaGVGb3JS
ZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNvcmROb3RDYWNoaW5nUmVz
cG9uc2UoY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgQ2FjaGVTdG9yYWdlRmFpbHVyZSk7CisgICAg
dm9pZCByZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGNv
bnN0IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIENh
Y2hlQnlwYXNzUmVhc29uKTsKICAgICB2b2lkIHJlY29yZFJldHJpZXZhbEZhaWx1cmUodWludDY0
X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIHJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5KHVpbnQ2
NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIHJlY29yZFJldHJpZXZlZENh
Y2hlZEVudHJ5KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUpOwog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpOwpAQCAtNTcsNyArODIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBhZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpOwogCi0gICAgdHlwZWRlZiBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJlcXVlc3RlZCk+IFJlcXVlc3RlZENvbXBs
ZXRpb25IYW5kbGVyOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc0V2
ZXJSZXF1ZXN0ZWQsIENhY2hlU3RvcmFnZUZhaWx1cmUgc3RvcmFnZUZhaWx1cmUpPiBSZXF1ZXN0
ZWRDb21wbGV0aW9uSGFuZGxlcjsKICAgICB2b2lkIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25z
dCBTdHJpbmcmLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYpOwogICAgIHZvaWQg
bWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbQppbmRleCBjMTNmZDBlZTExZWE5ZGU0NTViNmEwNTA3MTIyMjVkNDNi
ZWRkNDc0Li5iMDFkY2NjMTg0MTU5NTZkMmI0YzI3NjBkZTgwODU0ZTZhYjY3ZDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCkBAIC0xMTAsNiArMTEwLDggQEAgdm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQ
YXRoKQogICAgICAgICB9CiAKICAgICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRhYmFzZSwg
QVNDSUlMaXRlcmFsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBBbHJlYWR5UmVxdWVzdGVk
IChoYXNoIFRFWFQgUFJJTUFSWSBLRVkpIikpOworICAgICAgICBleGVjdXRlU1FMQ29tbWFuZCht
X2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFVuY2Fj
aGVkUmVhc29uIChoYXNoIFRFWFQgUFJJTUFSWSBLRVksIHJlYXNvbiBJTlRFR0VSKSIpKTsKKwog
ICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFT
Q0lJTGl0ZXJhbCgiU0VMRUNUIGNvdW50KCopIEZST00gQWxyZWFkeVJlcXVlc3RlZCIpKTsKICAg
ICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpICE9IFdlYkNvcmU6OlNRTFJlc3Vs
dFJvdykgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6
IEZhaWxlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gQWxyZWFkeVJlcXVlc3RlZCB0
YWJsZSIpOwpAQCAtMTY4LDQyICsxNzAsMTE5IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6c2hyaW5rSWZOZWVkZWQoKQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwg
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkTm90Q2FjaGlu
Z1Jlc3BvbnNlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBDYWNoZVN0b3JhZ2VGYWlsdXJl
IHJlYXNvbikKK3sKKyAgICBBU1NFUlQocmVhc29uICE9IENhY2hlU3RvcmFnZUZhaWx1cmU6Ok5v
bmUpOworCisgICAgU3RyaW5nQ2FwdHVyZSBoYXNoQ2FwdHVyZShrZXkuaGFzaEFzU3RyaW5nKCkp
OworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBo
YXNoQ2FwdHVyZSwgcmVhc29uXSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8g
VW5jYWNoZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIpKTsKKyAgICAgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2hDYXB0dXJl
LnN0cmluZygpKTsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50
PihyZWFzb24pKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpOworICAg
IH0pOworfQorCitzdGF0aWMgU3RyaW5nIGNhY2hlQnlwYXNzUmVhc29uVG9EaWFnbm9zdGljS2V5
KENhY2hlQnlwYXNzUmVhc29uIHJlYXNvbikKK3sKKyAgICBzd2l0Y2ggKHJlYXNvbikgeworICAg
IGNhc2UgQ2FjaGVCeXBhc3NSZWFzb246Ok5vdEhUVFBGYW1pbHk6CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vdEhUVFBGYW1pbHlLZXkoKTsKKyAgICBj
YXNlIENhY2hlQnlwYXNzUmVhc29uOjpVbnN1cHBvcnRlZEhUVFBNZXRob2Q6CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuc3VwcG9ydGVkSFRUUE1ldGhv
ZEtleSgpOworICAgIGNhc2UgQ2FjaGVCeXBhc3NSZWFzb246OklzQ29uZGl0aW9uYWxSZXF1ZXN0
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0NvbmRp
dGlvbmFsUmVxdWVzdEtleSgpOworICAgIGNhc2UgQ2FjaGVCeXBhc3NSZWFzb246OklzUmVsb2Fk
SWdub3JpbmdDYWNoZURhdGE6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmlzUmVsb2FkSWdub3JpbmdDYWNoZURhdGFLZXkoKTsKKyAgICBjYXNlIENhY2hl
QnlwYXNzUmVhc29uOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2
NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVCeXBhc3NSZWFzb24gcmVhc29uKQogewor
ICAgIEFTU0VSVChyZWFzb24gIT0gQ2FjaGVCeXBhc3NSZWFzb246Ok5vbmUpOworCiAgICAgU3Ry
aW5nIGhhc2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RV
UkwgPSByZXF1ZXN0LnVybCgpOwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhp
cywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQpIHsK
KyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkws
IHdlYlBhZ2VJRCwgcmVhc29uXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQsIENhY2hlU3RvcmFnZUZh
aWx1cmUpIHsKICAgICAgICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKLSAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMg
cHJldmlvdXNseSByZXF1ZXN0ZWQgYnV0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBjYWNoZSIsIHdl
YlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNo
ZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJldHJpZXZhbEtleSgpLCBX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5
KCkpOworICAgICAgICAgICAgU3RyaW5nIHJlYXNvbktleSA9IGNhY2hlQnlwYXNzUmVhc29uVG9E
aWFnbm9zdGljS2V5KHJlYXNvbik7CisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVk
IGJ1dCB3ZSBhcmUgbm90IHVzaW5nIHRoZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwg
cmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgcmVhc29uS2V5LnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1
bnVzZWRLZXkoKSwgcmVhc29uS2V5KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtYXJr
QXNSZXF1ZXN0ZWQoaGFzaCk7CiAgICAgfSk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgY2FjaGVTdG9y
YWdlRmFpbHVyZVRvRGlhZ25vc3RpY0tleShDYWNoZVN0b3JhZ2VGYWlsdXJlIGZhaWx1cmUpCit7
CisgICAgc3dpdGNoIChmYWlsdXJlKSB7CisgICAgY2FzZSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpO
b3RIVFRQRmFtaWx5OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpub3RIVFRQRmFtaWx5S2V5KCk7CisgICAgY2FzZSBDYWNoZVN0b3JhZ2VGYWlsdXJlOjpV
bnN1cHBvcnRlZEhUVFBNZXRob2Q6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpOworICAgIGNhc2UgQ2FjaGVT
dG9yYWdlRmFpbHVyZTo6SXNBdHRhY2htZW50OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjppc0F0dGFjaG1lbnRLZXkoKTsKKyAgICBjYXNlIENhY2hlU3Rv
cmFnZUZhaWx1cmU6OkNhY2hlQ29udHJvbE5vU3RvcmU6CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmNhY2hlQ29udHJvbE5vU3RvcmVLZXkoKTsKKyAgICBj
YXNlIENhY2hlU3RvcmFnZUZhaWx1cmU6OlVuY2FjaGVhYmxlSFRUUFN0YXR1c0NvZGU6CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3Rh
dHVzQ29kZUtleSgpOworICAgIGNhc2UgQ2FjaGVTdG9yYWdlRmFpbHVyZTo6Tm9uZToKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Mb25nZXJJbkNhY2hl
S2V5KCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwogdm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwg
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKICAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKICAg
ICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNF
dmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJv
b2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCkgeworICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZCho
YXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3Vz
bHlSZXF1ZXN0ZWQsIENhY2hlU3RvcmFnZUZhaWx1cmUgZmFpbHVyZSkgewogICAgICAgICBpZiAo
d2FzUHJldmlvdXNseVJlcXVlc3RlZCkgewotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91c2x5IGNhY2hl
ZCBidXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBjYWNoZSIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5z
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlELCBXZWJDb3Jl
OjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnJldHJpZXZhbEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ0tleXM6Om5vTG9uZ2VySW5DYWNoZUZhaWx1cmVLZXkoKSk7CisgICAgICAgICAgICBTdHJp
bmcgcmVhc29uS2V5ID0gY2FjaGVTdG9yYWdlRmFpbHVyZVRvRGlhZ25vc3RpY0tleShmYWlsdXJl
KTsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBh
Z2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0IGJ1dCBpcyBub3QgaW4gdGhlIGNh
Y2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpLCByZWFzb25LZXkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBOZXR3b3JrUHJv
Y2Vzczo6c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlE
LCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJD
b3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vdEluQ2FjaGVLZXkoKSwgcmVhc29uS2V5KTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7CiAgICAg
fSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2Fj
aGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHN1Y2Nlc3MpCitz
dGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KENhY2hl
ZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCit7CisgICAgc3dpdGNoIChmYWlsdXJlKSB7Cisg
ICAgY2FzZSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6VmFyeWluZ0hlYWRlck1pc21hdGNoOgor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp2YXJ5aW5nSGVh
ZGVyTWlzbWF0Y2hLZXkoKTsKKyAgICBjYXNlIENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpNaXNz
aW5nVmFsaWRhdG9yRmllbGRzOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjptaXNzaW5nVmFsaWRhdG9yRmllbGRzS2V5KCk7CisgICAgY2FzZSBDYWNoZWRF
bnRyeVJldXNlRmFpbHVyZTo6T3RoZXI6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6Om90aGVyS2V5KCk7CisgICAgY2FzZSBDYWNoZWRFbnRyeVJldXNlRmFp
bHVyZTo6Tm9uZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh1aW50NjRfdCB3ZWJQYWdl
SUQsIGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCiB7CiAgICAg
V2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOwotICAgIGlmIChzdWNjZXNz
KSB7CisgICAgaWYgKGZhaWx1cmUgPT0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok5vbmUpIHsK
ICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVs
bHU6ICVzIGlzIGluIHRoZSBjYWNoZSBhbmQgaXMgdXNlZCIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVS
TC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQod2ViUGFnZUlELCBXZWJDb3Jl
OjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnJldHJpZXZhbEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ1Jlc3VsdFBhc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyBpcyBpbiB0aGUgY2FjaGUgYnV0
IHdhc24ndCB1c2VkIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmxvZ0RpYWdub3N0aWNN
ZXNzYWdlV2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXRy
aWV2YWxLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzYWJsZUNhY2hl
ZEVudHJ5RmFpbHVyZUtleSgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIFN0cmlu
ZyByZWFzb25LZXkgPSBjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleShmYWls
dXJlKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQg
JWxsdTogJXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCB3YXNuJ3QgdXNlZCwgcmVhc29uOiAlcyIsIHdl
YlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgcmVhc29uS2V5LnV0
ZjgoKS5kYXRhKCkpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6
dW51c2FibGVDYWNoZWRFbnRyeUtleSgpLCByZWFzb25LZXkpOwogfQogCiB2b2lkIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M6Om1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpCkBAIC0y
MzAsMTUgKzMwOSwyMCBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZl
clJlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gsIGNvbnN0IFJlcQogICAgIGRpc3BhdGNoX2Fz
eW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmcXVlcnldIHsKICAgICAgICAg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rp
b25Db3VudGVyOwogICAgICAgICBib29sIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgQ2FjaGVTdG9yYWdlRmFpbHVyZSBzdG9yYWdlRmFpbHVyZSA9IENhY2hlU3RvcmFnZUZh
aWx1cmU6Ok5vbmU7CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAg
ICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJ
TGl0ZXJhbCgiU0VMRUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIp
KTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRh
YmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgQWxyZWFkeVJlcXVlc3RlZC5oYXNoLCByZWFzb24g
RlJPTSBBbHJlYWR5UmVxdWVzdGVkIExFRlQgT1VURVIgSk9JTiBVbmNhY2hlZFJlYXNvbiBPTiBB
bHJlYWR5UmVxdWVzdGVkLmhhc2g9VW5jYWNoZWRSZWFzb24uaGFzaCBXSEVSRSBBbHJlYWR5UmVx
dWVzdGVkLmhhc2g9PyIpKTsKICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CiAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDEsIHF1ZXJ5Lmhhc2gpOwotICAgICAgICAgICAgICAgIHdhc0FscmVhZHlSZXF1ZXN0ZWQg
PSBzdGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdzsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKKyAg
ICAgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghc3RhdGVtZW50LmlzQ29sdW1uTnVsbCgxKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2VGYWlsdXJlID0gc3RhdGljX2Nhc3Q8Q2FjaGVTdG9yYWdlRmFpbHVy
ZT4oc3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFt0aGlzLCAmcXVlcnksIHdhc0FscmVhZHlSZXF1ZXN0ZWRdIHsKLSAgICAg
ICAgICAgIHF1ZXJ5LmNvbXBsZXRpb25IYW5kbGVyKHdhc0FscmVhZHlSZXF1ZXN0ZWQpOworICAg
ICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnF1
ZXJ5LCB3YXNBbHJlYWR5UmVxdWVzdGVkLCBzdG9yYWdlRmFpbHVyZV0geworICAgICAgICAgICAg
cXVlcnkuY29tcGxldGlvbkhhbmRsZXIod2FzQWxyZWFkeVJlcXVlc3RlZCwgc3RvcmFnZUZhaWx1
cmUpOwogICAgICAgICAgICAgbV9hY3RpdmVRdWVyaWVzLnJlbW92ZSgmcXVlcnkpOwogICAgICAg
ICB9KTsKICAgICB9KTsKQEAgLTI0OSw5ICszMzMsMTMgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjpjbGVhcigpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzXSB7Ci0gICAgICAg
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKKyAgICAgICAg
ICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5z
YWN0aW9uQ291bnRlcjsKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIGRl
bGV0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgICAgICAgICAgZGVsZXRlVHJhbnNhY3Rp
b24uYmVnaW4oKTsKICAgICAgICAgICAgIGV4ZWN1dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFT
Q0lJTGl0ZXJhbCgiREVMRVRFIEZST00gQWxyZWFkeVJlcXVlc3RlZCIpKTsKKyAgICAgICAgICAg
IGV4ZWN1dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiREVMRVRFIEZST00g
VW5jYWNoZWRSZWFzb24iKSk7CisgICAgICAgICAgICBkZWxldGVUcmFuc2FjdGlvbi5jb21taXQo
KTsKICAgICAgICAgICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0gMDsKICAgICAgICAgfQog
ICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246993</attachid>
            <date>2015-02-20 13:24:40 -0800</date>
            <delta_ts>2015-02-20 14:26:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141803-20150220132431.patch</filename>
            <type>text/plain</type>
            <size>34273</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU2ZDg4Y2I2YzM2M2Uw
YmY0ZTlkYmVmN2IxM2U5ODg3YjUyMzBlNy4uOGU0MDRmMjk2ZTVhYjE2MmJhNWVjYjNhNDA4MmUz
OGFiMDI1NWQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTAyLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIG1vcmUgZGV0
YWlsZWQgZGlhZ25vc3RpYyBsb2dnaW5nIGZvciBtZWFzdXJpbmcgbmV0d29yayBjYWNoZSBlZmZp
Y2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xOTYzMjA4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSBkaWFnbm9zdGljIGxvZ2dp
bmcga2V5cyBmb3IgdGhlIG5ldHdvcmsgY2FjaGUuCisKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0
aWNMb2dnaW5nS2V5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpub0xvbmdlckluQ2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc1JlbG9hZElnbm9yaW5nQ2FjaGVEYXRhS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNBdHRhY2htZW50S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNDb25kaXRpb25hbFJl
cXVlc3RLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYWNo
ZUNvbnRyb2xOb1N0b3JlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6dW5jYWNoZWFibGVTdGF0dXNDb2RlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdu
b3N0aWNMb2dnaW5nS2V5czo6dW5zdXBwb3J0ZWRIVFRQTWV0aG9kS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnZhcnlpbmdIZWFkZXJNaXNt
YXRjaEtleSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om5vdEhUVFBGYW1pbHlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpub3RJbkNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dn
aW5nS2V5czo6bm9Mb25nZXJJbkNhY2hlRmFpbHVyZUtleSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51
c2FibGVDYWNoZWRFbnRyeUZhaWx1cmVLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzLmg6CisKIDIwMTUtMDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gUkVHUkVTU0lPTjogU2Nyb2xsIHNuYXAg
cG9pbnRzIGJyb2tlbiBhZnRlciByMTgwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTgyZTBmNDgyMzUwYmFh
MjM0MzhkNWVkMDdkODNhMDc5YjMzNjA2ZS4uYzRlMzgzNWE0ZmVjNzFiMGVkMzIxNGIzYmIxZTA5
MWZlMjczOGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTAyLTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gQWRkIG1vcmUgZGV0
YWlsZWQgZGlhZ25vc3RpYyBsb2dnaW5nIGZvciBtZWFzdXJpbmcgbmV0d29yayBjYWNoZSBlZmZp
Y2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xOTYzMjA4MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSBkZXRhaWxlZCBkaWFnbm9z
dGljIGxvZ2dpbmcgZm9yIG1lYXN1cmluZyBuZXR3b3JrIGNhY2hlCisgICAgICAgIGVmZmljYWN5
LgorCisgICAgICAgIFdlIHdhbnQgdG8ga25vdyB0aGUgcmVhc29uIHRoZSBuZXR3b3JrIGNhY2hl
IGlzIGJlaW5nIGJ5LXBhc3NlZCwgd2h5CisgICAgICAgIHRoZSBuZXR3b3JrIGNhY2hlIGRlY2lk
ZWQgbm90IHRvIGNhY2hlIGEgcmVzcG9uc2UgYW5kIHdoeSBpdCBjYW5ub3QKKyAgICAgICAgcmV1
c2UgYSBjYWNoZSBlbnRyeS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgIlVuY2Fj
aGVkUmVhc29uIiB0YWJsZSB0byB0aGUgU1FMaXRlIGRhdGFiYXNlCisgICAgICAgIHRvIHN0b3Jl
IHRoZSByZWFzb24gdGhlIG5ldHdvcmsgY2FjaGUgaXMgZGVjaWRpbmcgbm90IHRvIGNhY2hlIGEK
KyAgICAgICAgZ2l2ZW4gcmVzcG9uc2UuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBsYXRlciwg
d2hlbiB0aGUgcmVzb3VyY2UgaXMKKyAgICAgICAgcmVxdWVzdGVkIGFnYWluIHRvIGxvZyB0aGUg
cmVhc29uIHdoeSB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgc2F0aXN0aWVkCisgICAgICAgIGJ5IHRo
ZSBjYWNoZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmRlY29kZVN0b3JhZ2VFbnRyeSk6CisgICAgICAgIChXZWJL
aXQ6OmNhblJldHJpZXZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpyZXRyaWV2
ZSk6CisgICAgICAgIChXZWJLaXQ6OmNhblN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpzdG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRp
c3RpY3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJl
Y29yZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OnJldHJpZXZlRGVjaXNp
b25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzOjpyZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OnN0
b3JlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6
Y2FjaGVkRW50cnlSZXVzZUZhaWx1cmVUb0RpYWdub3N0aWNLZXkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlclJlcXVl
c3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmNsZWFyKToK
KwogMjAxNS0wMi0yMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSB0b0FQSSB3aGVuIHJldHVybmluZyB0aGUgb2JqZWN0IGdyYXBoIGFzIGEgV0tU
eXBlUmVmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5n
S2V5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAK
aW5kZXggMzlmZjVkOGRlYmRlYjZkODA4NTc0YTBmOGE2MzAwMTM0ZGVjNzhhOC4uNDJiOTg0MmZj
NzU3MDNkMmM2YjE1MTJjYzYwY2E0OTdiYzgxYWNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcApAQCAtMzgsNiArMzgsMTEgQEAgU3RyaW5nIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6bWVkaWFMb2FkaW5nRmFpbGVkS2V5KCkKICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJtZWRpYUZhaWxlZExvYWRpbmciKTsKIH0KIAorU3RyaW5nIERpYWdub3N0
aWNMb2dnaW5nS2V5czo6bWlzc2luZ1ZhbGlkYXRvckZpZWxkc0tleSgpCit7CisgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgibWlzc2luZ1ZhbGlkYXRvckZpZWxkcyIpOworfQorCiBTdHJpbmcgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjptdXN0UmV2YWxpZGF0ZUlzRXhwaXJlZEtleSgpCiB7CiAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgibXVzdFJldmFsaWRhdGVJc0V4cGlyZWQiKTsKQEAgLTEzOCw5
ICsxNDMsOSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0RvY3VtZW50TG9hZGVy
S2V5KCkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub0RvY3VtZW50TG9hZGVyIik7CiB9CiAK
LVN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vTG9uZ2VySW5DYWNoZUZhaWx1cmVLZXko
KQorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Mb25nZXJJbkNhY2hlS2V5KCkKIHsK
LSAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub0xvbmdlckluQ2FjaGVGYWlsdXJlIik7CisgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgibm9Mb25nZXJJbkNhY2hlIik7CiB9CiAKIFN0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6Om90aGVyS2V5KCkKQEAgLTE3Myw2ICsxNzgsMTEgQEAgU3RyaW5n
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNFeHBpcmVkS2V5KCkKICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJpc0V4cGlyZWQiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6
aXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiaXNSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSIpOworfQorCiBTdHJpbmcgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpsb2FkZWRLZXkoKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImxvYWRl
ZCIpOwpAQCAtMjAzLDYgKzIxMywxNiBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpp
bk1lbW9yeUNhY2hlS2V5KCkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJpbk1lbW9yeUNhY2hl
Iik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQXR0YWNobWVudEtleSgp
Cit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiaXNBdHRhY2htZW50Iik7Cit9CisKK1N0cmlu
ZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQ29uZGl0aW9uYWxSZXF1ZXN0S2V5KCkKK3sKKyAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJpc0NvbmRpdGlvbmFsUmVxdWVzdCIpOworfQorCiBTdHJp
bmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpoYXNPcGVuRGF0YWJhc2VzS2V5KCkKIHsKICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJoYXNPcGVuRGF0YWJhc2VzIik7CkBAIC0yNTMsNiArMjczLDEx
IEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmF1ZGlvS2V5KCkKICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJhdWRpbyIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpjYWNoZUNvbnRyb2xOb1N0b3JlS2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJj
YWNoZUNvbnRyb2xOb1N0b3JlIik7Cit9CisKIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OmNhY2hlZFJlc291cmNlUmV2YWxpZGF0aW9uS2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJjYWNoZWRSZXNvdXJjZVJldmFsaWRhdGlvbiIpOwpAQCAtMzQ4LDE0ICszNzMsMTkgQEAg
U3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6c3ZnRG9jdW1lbnRLZXkoKQogICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInN2Z0RvY3VtZW50Iik7CiB9CiAKLVN0cmluZyBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5KCkKK1N0cmluZyBEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpCit7CisgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgidW5jYWNoZWFibGVTdGF0dXNDb2RlIik7Cit9CisKK1N0cmluZyBEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpCiB7Ci0gICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgidW5oYW5kbGVkUmVxdWVzdEZhaWx1cmUiKTsKKyAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJ1bnN1cHBvcnRlZEhUVFBNZXRob2QiKTsKIH0KIAotU3RyaW5nIERpYWdub3N0
aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUZhaWx1cmVLZXkoKQorU3RyaW5nIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2FibGVDYWNoZWRFbnRyeUtleSgpCiB7Ci0gICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgidW51c2FibGVDYWNoZWRFbnRyeUZhaWx1cmUiKTsKKyAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJ1bnVzYWJsZUNhY2hlZEVudHJ5Iik7CiB9CiAKIFN0cmluZyBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZEtleSgpCkBAIC00MDgsNiArNDM4LDExIEBAIFN0cmlu
ZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVzZXJLZXkoKQogICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoInVzZXIiKTsKIH0KIAorU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWluZ0hl
YWRlck1pc21hdGNoS2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ2YXJ5aW5nSGVh
ZGVyTWlzbWF0Y2giKTsKK30KKwogU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dmlkZW9L
ZXkoKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInZpZGVvIik7CkBAIC00NDgsNSArNDgz
LDE1IEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvUHJvY2Vzc1N1
c3BlbmRlZCgpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicHJ1bmVkLnByb2Nlc3NTdXNwZW5k
ZWQiKTsKIH0KIAorU3RyaW5nIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm90SFRU
UEZhbWlseUtleSgpCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibm90SFRUUEZhbWlseSIp
OworfQorCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub3RJbkNhY2hlS2V5KCkKK3sK
KyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub3RJbkNhY2hlIik7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmgKaW5kZXggZjljYTIxZDY5NTQzNjNhYjU1OTM5NmY5Y2IzNDU4YWM4YWNlY2YxMy4uMjdmZWQw
MTk2Mjg2ZGY1YzU5MTIzYzU0Nzk4M2ZhZTZjOGZhMzJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIERpYWdu
b3N0aWNMb2dnaW5nS2V5cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBhcHBsaWNhdGlv
bkNhY2hlS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBhdWRpb0tleSgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBTdHJpbmcgY2FjaGVDb250cm9sTm9TdG9yZUtleSgpOwogICAgIHN0YXRp
YyBTdHJpbmcgY2FjaGVkUmVzb3VyY2VSZXZhbGlkYXRpb25LZXkoKTsKICAgICBzdGF0aWMgU3Ry
aW5nIGNhbm5vdFN1c3BlbmRBY3RpdmVET01PYmplY3RzS2V5KCk7CiAgICAgc3RhdGljIFN0cmlu
ZyBkZW5pZWRCeUNsaWVudEtleSgpOwpAQCAtNTEsOCArNTIsMTEgQEAgcHVibGljOgogICAgIHN0
YXRpYyBTdHJpbmcgaHR0cHNOb1N0b3JlS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBpbWFnZUtl
eSgpOwogICAgIHN0YXRpYyBTdHJpbmcgaW5NZW1vcnlDYWNoZUtleSgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBTdHJpbmcgaXNBdHRhY2htZW50S2V5KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0cmluZyBpc0NvbmRpdGlvbmFsUmVxdWVzdEtleSgpOwogICAgIHN0YXRpYyBT
dHJpbmcgaXNFcnJvclBhZ2VLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIGlzRXhwaXJlZEtleSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgaXNSZWxvYWRJZ25vcmluZ0NhY2hl
RGF0YUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgbG9hZGVkS2V5KCk7CiAgICAgc3RhdGljIFN0
cmluZyBsb2FkaW5nS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBsb2FkaW5nQVBJU2Vuc2VLZXko
KTsKQEAgLTYxLDYgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgbWVkaWFLZXko
KTsKICAgICBzdGF0aWMgU3RyaW5nIG1lZGlhTG9hZGVkS2V5KCk7CiAgICAgc3RhdGljIFN0cmlu
ZyBtZWRpYUxvYWRpbmdGYWlsZWRLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3Ry
aW5nIG1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIG11c3RS
ZXZhbGlkYXRlSXNFeHBpcmVkS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBuYXZpZ2F0aW9uS2V5
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBuZXR3b3JrQ2FjaGVLZXkoKTsK
QEAgLTY4LDEwICs3MywxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBub0NhY2hlS2V5
KCk7CiAgICAgc3RhdGljIFN0cmluZyBub0N1cnJlbnRIaXN0b3J5SXRlbUtleSgpOwogICAgIHN0
YXRpYyBTdHJpbmcgbm9Eb2N1bWVudExvYWRlcktleSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBTdHJpbmcgbm9Mb25nZXJJbkNhY2hlRmFpbHVyZUtleSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBTdHJpbmcgbm9Mb25nZXJJbkNhY2hlS2V5KCk7CiAgICAgc3RhdGljIFN0cmlu
ZyBub1N0b3JlS2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBub3RIVFRQ
RmFtaWx5S2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBub3RJbkNhY2hl
S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBub3RJbk1lbW9yeUNhY2hlS2V5KCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBvdGhlcktleSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcg
b3RoZXJLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHBhZ2VDYWNoZUtleSgpOwogICAgIHN0YXRp
YyBTdHJpbmcgcGFnZUNvbnRhaW5zQXRMZWFzdE9uZU1lZGlhRW5naW5lS2V5KCk7CiAgICAgc3Rh
dGljIFN0cmluZyBwYWdlQ29udGFpbnNBdExlYXN0T25lUGx1Z2luS2V5KCk7CkBAIC05OSw5ICsx
MDYsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgc291cmNlS2V5KCk7CiAgICAgc3Rh
dGljIFN0cmluZyBzdHlsZVNoZWV0S2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBzdmdEb2N1bWVu
dEtleSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5oYW5kbGVkUmVxdWVz
dEZhaWx1cmVLZXkoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVudXNhYmxl
Q2FjaGVkRW50cnlGYWlsdXJlS2V5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB1bnVzZWRLZXkoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVuY2FjaGVhYmxlU3RhdHVzQ29kZUtl
eSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5zdXBwb3J0ZWRIVFRQTWV0
aG9kS2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyB1bnVzYWJsZUNhY2hl
ZEVudHJ5S2V5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyB1bnVzZWRLZXko
KTsKICAgICBzdGF0aWMgU3RyaW5nIHVudXNlZFJlYXNvbkNyZWRlbnRpYWxTZXR0aW5nc0tleSgp
OwogICAgIHN0YXRpYyBTdHJpbmcgdW51c2VkUmVhc29uRXJyb3JLZXkoKTsKICAgICBzdGF0aWMg
U3RyaW5nIHVudXNlZFJlYXNvbk11c3RSZXZhbGlkYXRlTm9WYWxpZGF0b3JLZXkoKTsKQEAgLTEx
MSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyB1bnVzZWRSZWFzb25UeXBl
TWlzbWF0Y2hLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHVzZWRLZXkoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVzZXJLZXkoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgU3RyaW5nIHZhcnlpbmdIZWFkZXJNaXNtYXRjaEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcg
dmlkZW9LZXkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHdlYlZpZXdLZXko
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHpvb21lZEtleSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAK
aW5kZXggYTI0NDA5NTI1MGIwNzU3MTdhODQxZjRlZjJmMTMwYjk2NGYyZjE5Yy4uMmEyYmIzNDEx
NzllNDI2MTI4ZmFiOTUyZTE2NDI3NmJhZjEwMGU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC0xMjcsMzIgKzEy
NywzOSBAQCBzdGF0aWMgYm9vbCBjYWNoZVBvbGljeUFsbG93c0V4cGlyZWQoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBkZWNvZGVTdG9yYWdl
RW50cnkoY29uc3QgTmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnkmIHN0b3JhZ2VFbnRyeSwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBkZWNvZGVTdG9yYWdlRW50cnkoY29uc3QgTmV0d29y
a0NhY2hlU3RvcmFnZTo6RW50cnkmIHN0b3JhZ2VFbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JrQ2FjaGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJl
JiBmYWlsdXJlKQogewogICAgIE5ldHdvcmtDYWNoZURlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50
cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwogCiAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSBjYWNoZWRSZXNwb25zZTsKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGNhY2hlZFJlc3BvbnNlKSkgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSByZXNwb25zZSBkZWNvZGluZyBmYWlsZWRcbiIpOworICAgICAgICBmYWls
dXJlID0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGJvb2wgaGFzVmFyeWluZ1JlcXVlc3RI
ZWFkZXJzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJz
KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVycykpIHsK
KyAgICAgICAgZmFpbHVyZSA9IE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6
Ok90aGVyOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKICAgICBpZiAoaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzKSB7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+PiB2YXJ5aW5nUmVxdWVzdEhlYWRlcnM7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
YXJ5aW5nUmVxdWVzdEhlYWRlcnMpKSB7CisgICAgICAgICAgICBmYWlsdXJlID0gTmV0d29ya0Nh
Y2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghdmVyaWZ5VmFyeWluZ1JlcXVlc3RI
ZWFkZXJzKHZhcnlpbmdSZXF1ZXN0SGVhZGVycywgcmVxdWVzdCkpIHsKICAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHZhcnlpbmcgaGVhZGVyIG1pc21hdGNo
XG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmUgPSBOZXR3b3JrQ2FjaGU6OkNhY2hlZEVudHJ5UmV1
c2VGYWlsdXJlOjpWYXJ5aW5nSGVhZGVyTWlzbWF0Y2g7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tzdW0o
KSkgewogICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBjaGVja3N1
bSB2ZXJpZmljYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgIGZhaWx1cmUgPSBOZXR3b3JrQ2Fj
aGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCkBAIC0xNjYsOCArMTczLDEwIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlOjpFbnRyeT4gZGVjb2RlU3RvcmFnZUVudHJ5KGNvbnN0IE5ldHdvcmtDYWNo
CiAgICAgaWYgKG5lZWRzUmV2YWxpZGF0aW9uKSB7CiAgICAgICAgIGJvb2wgaGFzVmFsaWRhdG9y
RmllbGRzID0gY2FjaGVkUmVzcG9uc2UuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKICAgICAg
ICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgbmVlZHNSZXZhbGlkYXRpb24g
aGFzVmFsaWRhdG9yRmllbGRzPSVkIGlzRXhwaXJlZD0lZCBhZ2U9JWYgbGlmZXRpbWU9JWYiLCBp
c0V4cGlyZWQsIGhhc1ZhbGlkYXRvckZpZWxkcywgYWdlLCBsaWZldGltZSk7Ci0gICAgICAgIGlm
ICghaGFzVmFsaWRhdG9yRmllbGRzKQorICAgICAgICBpZiAoIWhhc1ZhbGlkYXRvckZpZWxkcykg
eworICAgICAgICAgICAgZmFpbHVyZSA9IE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZh
aWx1cmU6Ok1pc3NpbmdWYWxpZGF0b3JGaWVsZHM7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gZW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PE5ldHdvcmtDYWNoZTo6RW50cnk+KCk7CkBAIC0xOTAsMjAgKzE5OSwyMCBAQCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGRlY29kZVN0b3JhZ2VFbnRyeShjb25z
dCBOZXR3b3JrQ2FjaAogICAgIHJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIGJvb2wgY2FuUmV0
cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorc3RhdGljIE5l
dHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbiBjYW5SZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gTmV0d29ya0NhY2hlOjpSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUHJvdG9jb2w7CiAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgSEVBRCBhbmQgT1BUSU9OUyByZXF1ZXN0cy4KICAgICBpZiAocmVx
dWVzdC5odHRwTWV0aG9kKCkgIT0gIkdFVCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbjo6Tm9EdWVUb0hUVFBNZXRo
b2Q7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHZhbGlkYXRlIGNvbmRpdGlv
bmFsIHJlcXVlc3RzIHVzaW5nIGNhY2hlLgogICAgIGlmIChyZXF1ZXN0LmlzQ29uZGl0aW9uYWwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpS
ZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvQ29uZGl0aW9uYWxSZXF1ZXN0OwogICAgIGlmIChyZXF1
ZXN0LmNhY2hlUG9saWN5KCkgPT0gV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtDYWNoZTo6UmV0cmll
dmVEZWNpc2lvbjo6Tm9EdWVUb1JlbG9hZElnbm9yaW5nQ2FjaGU7CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpSZXRyaWV2ZURlY2lzaW9uOjpZZXM7CiB9CiAK
IHN0YXRpYyBOZXR3b3JrQ2FjaGVLZXkgbWFrZUNhY2hlS2V5KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTIyNSw5ICsyMzQsMTAgQEAgdm9pZCBOZXR3b3JrQ2Fj
aGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1
ZXN0LCB1aW4KICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXRyaWV2
aW5nICVzIHByaW9yaXR5ICV1Iiwgb3JpZ2luYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpLCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKICAgICBOZXR3b3JrQ2Fj
aGVLZXkgc3RvcmFnZUtleSA9IG1ha2VDYWNoZUtleShvcmlnaW5hbFJlcXVlc3QpOwotICAgIGlm
ICghY2FuUmV0cmlldmUob3JpZ2luYWxSZXF1ZXN0KSkgeworICAgIFJldHJpZXZlRGVjaXNpb24g
cmV0cmlldmVEZWNpc2lvbiA9IGNhblJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCk7CisgICAgaWYg
KHJldHJpZXZlRGVjaXNpb24gIT0gUmV0cmlldmVEZWNpc2lvbjo6WWVzKSB7CiAgICAgICAgIGlm
IChtX3N0YXRpc3RpY3MpCi0gICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZE5vdFVzaW5n
Q2FjaGVGb3JSZXF1ZXN0KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1ZXN0KTsK
KyAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3Qo
d2ViUGFnZUlELCBzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QsIHJldHJpZXZlRGVjaXNpb24p
OwogCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICByZXR1cm47
CkBAIC0yNDYsMTAgKzI1NiwxMSBAQCB2b2lkIE5ldHdvcmtDYWNoZTo6cmV0cmlldmUoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIHVpbgogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBkZWNvZGVkRW50cnkgPSBkZWNvZGVTdG9yYWdlRW50
cnkoKmVudHJ5LCBvcmlnaW5hbFJlcXVlc3QpOworICAgICAgICBDYWNoZWRFbnRyeVJldXNlRmFp
bHVyZSBmYWlsdXJlID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok5vbmU7CisgICAgICAgIGF1
dG8gZGVjb2RlZEVudHJ5ID0gZGVjb2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgb3JpZ2luYWxSZXF1
ZXN0LCBmYWlsdXJlKTsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gISFkZWNvZGVkRW50cnk7CiAg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCi0gICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29y
ZFJldHJpZXZlZENhY2hlZEVudHJ5KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1
ZXN0LCBzdWNjZXNzKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljcy0+cmVjb3JkUmV0cmlldmVk
Q2FjaGVkRW50cnkod2ViUGFnZUlELCBzdG9yYWdlS2V5LCBvcmlnaW5hbFJlcXVlc3QsIGZhaWx1
cmUpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBhdXRvIGVsYXBzZWRNUyA9IHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwpAQCAtMjYwLDE5
ICsyNzEsMTkgQEAgdm9pZCBOZXR3b3JrQ2FjaGU6OnJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW4KICAgICB9KTsKIH0KIAotc3RhdGlj
IGJvb2wgY2FuU3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorc3RhdGlj
IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbiBjYW5TdG9yZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCFvcmlnaW5hbFJlcXVlc3QudXJsKCkucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpIHx8ICFyZXNwb25zZS5pc0hUVFAoKSkgewogICAgICAgICBMT0co
TmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBub3QgSFRUUCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Ok5v
RHVlVG9Qcm90b2NvbDsKICAgICB9CiAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdC5odHRwTWV0aG9k
KCkgIT0gIkdFVCIpIHsKICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgbWV0aG9kICVzIiwgb3JpZ2luYWxSZXF1ZXN0Lmh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTmV0d29ya0NhY2hlOjpT
dG9yZURlY2lzaW9uOjpOb0R1ZVRvSFRUUE1ldGhvZDsKICAgICB9CiAgICAgaWYgKHJlc3BvbnNl
LmlzQXR0YWNobWVudCgpKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1By
b2Nlc3MpIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpOb0R1ZVRvQXR0YWNobWVudFJlc3BvbnNl
OwogICAgIH0KIAogICAgIHN3aXRjaCAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgewpAQCAt
Mjg1LDE0ICsyOTYsMTQgQEAgc3RhdGljIGJvb2wgY2FuU3RvcmUoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0IFdlYkMKICAgICBjYXNlIDQxMDog
Ly8gR29uZQogICAgICAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3Jl
KCkpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIENh
Y2hlLWNvbnRyb2w6bm8tc3RvcmUiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Ok5vRHVlVG9Ob1N0b3Jl
UmVzcG9uc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246OlllczsKICAgICBkZWZhdWx0OgogICAgICAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdGF0dXMgY29kZSAlZCIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpOb0R1ZVRvSFRUUFN0YXR1c0Nv
ZGU7CiB9CiAKIHZvaWQgTmV0d29ya0NhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRh
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKE1hcHBlZEJvZHkmKT4gY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0zMDIsMTIgKzMxMywxNSBAQCB2b2lkIE5ldHdvcmtDYWNoZTo6c3RvcmUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNvbnN0CiAKICAgICBMT0coTmV0
d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBzdG9yaW5nICVzLCBwYXJ0aXRpb24gJXMiLCBv
cmlnaW5hbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBvcmlnaW5hbFJl
cXVlc3QuY2FjaGVQYXJ0aXRpb24oKS5sYXRpbjEoKS5kYXRhKCkpOwogCi0gICAgaWYgKCFjYW5T
dG9yZShvcmlnaW5hbFJlcXVlc3QsIHJlc3BvbnNlKSkgeworICAgIGF1dG8ga2V5ID0gbWFrZUNh
Y2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CisgICAgU3RvcmVEZWNpc2lvbiBzdG9yZURlY2lzaW9u
ID0gY2FuU3RvcmUob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSk7CisgICAgaWYgKHN0b3JlRGVj
aXNpb24gIT0gU3RvcmVEZWNpc2lvbjo6WWVzKSB7CiAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIGRpZG4ndCBzdG9yZSIpOworICAgICAgICBpZiAobV9zdGF0aXN0
aWNzKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmROb3RDYWNoaW5nUmVzcG9uc2Uo
a2V5LCBzdG9yZURlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
a2V5ID0gbWFrZUNhY2hlS2V5KG9yaWdpbmFsUmVxdWVzdCk7CiAgICAgYXV0byBzdG9yYWdlRW50
cnkgPSBlbmNvZGVTdG9yYWdlRW50cnkob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSwgV1RGOjpt
b3ZlKHJlc3BvbnNlRGF0YSkpOwogCiAgICAgbV9zdG9yYWdlLT5zdG9yZShrZXksIHN0b3JhZ2VF
bnRyeSwgW2NvbXBsZXRpb25IYW5kbGVyXShib29sIHN1Y2Nlc3MsIGNvbnN0IE5ldHdvcmtDYWNo
ZVN0b3JhZ2U6OkRhdGEmIGJvZHlEYXRhKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4IDRhZjMxODcxOWU4ZTY2ZmIwZGRl
YmVjOTA3ZGIzZGI3MTZmNTE1N2EuLjgxNWJjYTdmM2Q4ZGI5M2ZjODk1ODdiYmQyNzNhODcyN2My
MjYyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oCkBAIC00Nyw2ICs0NywzMCBAQCBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtDYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hlPjsKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNz
IFJldHJpZXZlRGVjaXNpb24geworICAgICAgICBZZXMsCisgICAgICAgIE5vRHVlVG9Qcm90b2Nv
bCwKKyAgICAgICAgTm9EdWVUb0hUVFBNZXRob2QsCisgICAgICAgIE5vRHVlVG9Db25kaXRpb25h
bFJlcXVlc3QsCisgICAgICAgIE5vRHVlVG9SZWxvYWRJZ25vcmluZ0NhY2hlCisgICAgfTsKKwor
ICAgIGVudW0gY2xhc3MgU3RvcmVEZWNpc2lvbiB7CisgICAgICAgIFllcywKKyAgICAgICAgTm9E
dWVUb1Byb3RvY29sLAorICAgICAgICBOb0R1ZVRvSFRUUE1ldGhvZCwKKyAgICAgICAgTm9EdWVU
b0F0dGFjaG1lbnRSZXNwb25zZSwKKyAgICAgICAgTm9EdWVUb05vU3RvcmVSZXNwb25zZSwKKyAg
ICAgICAgTm9EdWVUb0hUVFBTdGF0dXNDb2RlCisgICAgfTsKKworICAgIGVudW0gY2xhc3MgQ2Fj
aGVkRW50cnlSZXVzZUZhaWx1cmUgeworICAgICAgICBOb25lLAorICAgICAgICBWYXJ5aW5nSGVh
ZGVyTWlzbWF0Y2gsCisgICAgICAgIE1pc3NpbmdWYWxpZGF0b3JGaWVsZHMsCisgICAgICAgIE90
aGVyLAorICAgIH07CisKICAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBzaW5nbGV0b24oKTsKIAog
ICAgIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCwgYm9vbCBlbmFibGVF
ZmZpY2FjeUxvZ2dpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCmluZGV4IDY1Y2ZkNmMwM2Vi
M2IyMmZkNmExNTNmNGQwNWRiOGNkOGZjZmQzYzEuLmY5Yzc4MjViOWM2NWZhNzViZGI2MzQ1MTcy
MGI2ODdiZTdmMzQzMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCisjaW5jbHVkZSAiTmV0d29ya0NhY2hl
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hl
U3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KQEAgLTQ0LDkg
KzQ1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgcmVjb3Jk
Tm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3Jr
Q2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJl
Y29yZE5vdENhY2hpbmdSZXNwb25zZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBOZXR3b3JrQ2Fj
aGU6OlN0b3JlRGVjaXNpb24pOworICAgIHZvaWQgcmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVl
c3QodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb24pOwog
ICAgIHZvaWQgcmVjb3JkUmV0cmlldmFsRmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0
IE5ldHdvcmtDYWNoZUtleSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAg
IHZvaWQgcmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25z
dCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29s
IHN1Y2Nlc3MpOworICAgIHZvaWQgcmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qg
d2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBOZXR3b3JrQ2FjaGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VQYXRoKTsKQEAgLTU3LDcgKzU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRk
SGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKTsKIAotICAgIHR5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkIChib29sIHdhc0V2ZXJSZXF1ZXN0ZWQpPiBSZXF1ZXN0ZWRDb21wbGV0aW9u
SGFuZGxlcjsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCB3YXNFdmVyUmVx
dWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+Jik+IFJl
cXVlc3RlZENvbXBsZXRpb25IYW5kbGVyOwogICAgIHZvaWQgcXVlcnlXYXNFdmVyUmVxdWVzdGVk
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJik7CiAgICAg
dm9pZCBtYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGlj
c0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RhdGlzdGljc0NvY29hLm1tCmluZGV4IGMxM2ZkMGVlMTFlYTlkZTQ1NWI2YTA1MDcxMjIy
NWQ0M2JlZGQ0NzQuLmQ2ZTU0NjEwZTYzMDRiNTk5ZWRkOTRmNTRlMjI2ZDU0MjViMGUwM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAgLTExMCw2ICsxMTAsOCBAQCB2
b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVBhdGgpCiAgICAgICAgIH0KIAogICAgICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFi
YXNlLCBBU0NJSUxpdGVyYWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEFscmVhZHlSZXF1
ZXN0ZWQgKGhhc2ggVEVYVCBQUklNQVJZIEtFWSkiKSk7CisgICAgICAgIGV4ZWN1dGVTUUxDb21t
YW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg
VW5jYWNoZWRSZWFzb24gKGhhc2ggVEVYVCBQUklNQVJZIEtFWSwgcmVhc29uIElOVEVHRVIpIikp
OworCiAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgY291bnQoKikgRlJPTSBBbHJlYWR5UmVxdWVzdGVkIikp
OwogICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgIT0gV2ViQ29yZTo6U1FM
UmVzdWx0Um93KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlz
dGljczogRmFpbGVkIHRvIGNvdW50IHRoZSBudW1iZXIgb2Ygcm93cyBpbiBBbHJlYWR5UmVxdWVz
dGVkIHRhYmxlIik7CkBAIC0xNjgsNDIgKzE3MCwxMjAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hl
U3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qgd2ViUGFn
ZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RD
YWNoaW5nUmVzcG9uc2UoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIE5ldHdvcmtDYWNoZTo6
U3RvcmVEZWNpc2lvbiBzdG9yZURlY2lzaW9uKQoreworICAgIEFTU0VSVChzdG9yZURlY2lzaW9u
ICE9IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzKTsKKworICAgIFN0cmluZ0NhcHR1
cmUgaGFzaENhcHR1cmUoa2V5Lmhhc2hBc1N0cmluZygpKTsKKyAgICBkaXNwYXRjaF9hc3luYyht
X2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmUsIHN0b3JlRGVjaXNp
b25dIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmNhY2hlZFJlYXNvbiAo
aGFzaCwgcmVhc29uKSBWQUxVRVMgKD8sID8pIikpOworICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaENhcHR1cmUuc3RyaW5nKCkpOworICAg
ICAgICBzdGF0ZW1lbnQuYmluZEludCgyLCBzdGF0aWNfY2FzdDxpbnQ+KHN0b3JlRGVjaXNpb24p
KTsKKyAgICAgICAgZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpOworICAgIH0pOworfQor
CitzdGF0aWMgU3RyaW5nIHJldHJpZXZlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkoTmV0d29ya0Nh
Y2hlOjpSZXRyaWV2ZURlY2lzaW9uIHJldHJpZXZlRGVjaXNpb24pCit7CisgICAgc3dpdGNoIChy
ZXRyaWV2ZURlY2lzaW9uKSB7CisgICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNp
b246Ok5vRHVlVG9Qcm90b2NvbDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nS2V5czo6bm90SFRUUEZhbWlseUtleSgpOworICAgIGNhc2UgTmV0d29ya0NhY2hlOjpS
ZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvSFRUUE1ldGhvZDoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW5zdXBwb3J0ZWRIVFRQTWV0aG9kS2V5KCk7Cisg
ICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb246Ok5vRHVlVG9Db25kaXRpb25h
bFJlcXVlc3Q6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OmlzQ29uZGl0aW9uYWxSZXF1ZXN0S2V5KCk7CisgICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlJldHJp
ZXZlRGVjaXNpb246Ok5vRHVlVG9SZWxvYWRJZ25vcmluZ0NhY2hlOgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc1JlbG9hZElnbm9yaW5nQ2FjaGVEYXRh
S2V5KCk7CisgICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb246OlllczoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpy
ZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVxdWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IE5l
dHdvcmtDYWNoZUtleSYga2V5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbiByZXRyaWV2ZURlY2lzaW9uKQogewor
ICAgIEFTU0VSVChyZXRyaWV2ZURlY2lzaW9uICE9IE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNp
c2lvbjo6WWVzKTsKKwogICAgIFN0cmluZyBoYXNoID0ga2V5Lmhhc2hBc1N0cmluZygpOwogICAg
IFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKLSAgICBxdWVyeVdhc0V2
ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRF0oYm9v
bCB3YXNFdmVyUmVxdWVzdGVkKSB7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0
aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wg
d2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lz
aW9uPiYpIHsKICAgICAgICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKLSAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMg
cHJldmlvdXNseSByZXF1ZXN0ZWQgYnV0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBjYWNoZSIsIHdl
YlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNo
ZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJldHJpZXZhbEtleSgpLCBX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuaGFuZGxlZFJlcXVlc3RGYWlsdXJlS2V5
KCkpOworICAgICAgICAgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSByZXRyaWV2ZURlY2lzaW9u
VG9EaWFnbm9zdGljS2V5KHJldHJpZXZlRGVjaXNpb24pOworICAgICAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91
c2x5IHJlcXVlc3RlZCBidXQgd2UgYXJlIG5vdCB1c2luZyB0aGUgY2FjaGUsIHJlYXNvbjogJXMi
LCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGRpYWdub3N0
aWNLZXkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xl
dG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlELCBXZWJDb3JlOjpE
aWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnVudXNlZEtleSgpLCBkaWFnbm9zdGljS2V5KTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7CiAgICAgfSk7CiB9CiAKK3N0
YXRpYyBTdHJpbmcgc3RvcmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShOZXR3b3JrQ2FjaGU6OlN0
b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbikKK3sKKyAgICBzd2l0Y2ggKHN0b3JlRGVjaXNpb24p
IHsKKyAgICBjYXNlIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6Tm9EdWVUb1Byb3RvY29s
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub3RIVFRQ
RmFtaWx5S2V5KCk7CisgICAgY2FzZSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Ok5vRHVl
VG9IVFRQTWV0aG9kOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjp1bnN1cHBvcnRlZEhUVFBNZXRob2RLZXkoKTsKKyAgICBjYXNlIE5ldHdvcmtDYWNoZTo6
U3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0F0dGFjaG1lbnRSZXNwb25zZToKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNBdHRhY2htZW50S2V5KCk7CisgICAg
Y2FzZSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Ok5vRHVlVG9Ob1N0b3JlUmVzcG9uc2U6
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmNhY2hlQ29u
dHJvbE5vU3RvcmVLZXkoKTsKKyAgICBjYXNlIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6
Tm9EdWVUb0hUVFBTdGF0dXNDb2RlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjp1bmNhY2hlYWJsZVN0YXR1c0NvZGVLZXkoKTsKKyAgICBjYXNlIE5ldHdv
cmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzOgorICAgICAgICAvLyBJdCB3YXMgc3RvcmVkIGJ1
dCBjb3VsZCBub3QgYmUgcmV0cmlldmVkIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHBydW5lZCBmcm9t
IHRoZSBjYWNoZS4KKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5
czo6bm9Mb25nZXJJbkNhY2hlS2V5KCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcoKTsKK30K
Kwogdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVp
bnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXksIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBTdHJpbmcgaGFzaCA9IGtleS5o
YXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJs
KCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0
VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCkgeworICAgIHF1ZXJ5
V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlE
XShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNo
ZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3JlRGVjaXNpb24pIHsKICAgICAgICAgaWYgKHdhc1ByZXZp
b3VzbHlSZXF1ZXN0ZWQpIHsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSBjYWNoZWQgYnV0IGlz
IG5vIGxvbmdlciBpbiB0aGUgY2FjaGUiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXRyaWV2YWxLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlz
Ojpub0xvbmdlckluQ2FjaGVGYWlsdXJlS2V5KCkpOworICAgICAgICAgICAgU3RyaW5nIGRpYWdu
b3N0aWNLZXkgPSBzdG9yZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KHN0b3JlRGVjaXNpb24udmFs
dWUoKSk7CisgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3
ZWJQYWdlSUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdCBidXQgaXMgbm90IGluIHRo
ZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIE5l
dHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh3
ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5
KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm90SW5DYWNoZUtleSgpLCBkaWFn
bm9zdGljS2V5KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQo
aGFzaCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3Jk
UmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2Fj
aGVLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29s
IHN1Y2Nlc3MpCitzdGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9z
dGljS2V5KE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSkKK3sK
KyAgICBzd2l0Y2ggKGZhaWx1cmUpIHsKKyAgICBjYXNlIE5ldHdvcmtDYWNoZTo6Q2FjaGVkRW50
cnlSZXVzZUZhaWx1cmU6OlZhcnlpbmdIZWFkZXJNaXNtYXRjaDoKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWluZ0hlYWRlck1pc21hdGNoS2V5KCk7
CisgICAgY2FzZSBOZXR3b3JrQ2FjaGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpNaXNzaW5n
VmFsaWRhdG9yRmllbGRzOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjptaXNzaW5nVmFsaWRhdG9yRmllbGRzS2V5KCk7CisgICAgY2FzZSBOZXR3b3JrQ2Fj
aGU6OkNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjoKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6b3RoZXJLZXkoKTsKKyAgICBjYXNlIE5ldHdvcmtD
YWNoZTo6Q2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok5vbmU6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2Fj
aGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleSwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBOZXR3b3JrQ2FjaGU6OkNh
Y2hlZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCiB7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVl
c3RVUkwgPSByZXF1ZXN0LnVybCgpOwotICAgIGlmIChzdWNjZXNzKSB7CisgICAgaWYgKGZhaWx1
cmUgPT0gTmV0d29ya0NhY2hlOjpDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6Tm9uZSkgewogICAg
ICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTog
JXMgaXMgaW4gdGhlIGNhY2hlIGFuZCBpcyB1c2VkIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0
cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRv
bigpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRp
YWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmV0cmlldmFsS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
UmVzdWx0UGFzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihO
ZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIGlzIGluIHRoZSBjYWNoZSBidXQgd2Fz
bid0IHVzZWQiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoVmFsdWUod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5l
dHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJldHJpZXZh
bEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNhYmxlQ2FjaGVkRW50
cnlGYWlsdXJlS2V5KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgU3RyaW5nIGRp
YWdub3N0aWNLZXkgPSBjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleShmYWls
dXJlKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQg
JWxsdTogJXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCB3YXNuJ3QgdXNlZCwgcmVhc29uOiAlcyIsIHdl
YlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tl
eS51dGY4KCkuZGF0YSgpKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnVudXNhYmxlQ2FjaGVkRW50cnlLZXkoKSwgZGlhZ25vc3RpY0tleSk7CiB9CiAKIHZvaWQg
TmV0d29ya0NhY2hlU3RhdGlzdGljczo6bWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFz
aCkKQEAgLTIzMCwxNSArMzEwLDE5IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVl
cnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgUmVxCiAgICAgZGlz
cGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0gewog
ICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CiAgICAgICAgIGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZh
bHNlOworICAgICAgICBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IHN0b3Jl
RGVjaXNpb247CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0
ZXJhbCgiU0VMRUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgQWxyZWFkeVJlcXVlc3RlZC5oYXNoLCByZWFzb24gRlJP
TSBBbHJlYWR5UmVxdWVzdGVkIExFRlQgT1VURVIgSk9JTiBVbmNhY2hlZFJlYXNvbiBPTiBBbHJl
YWR5UmVxdWVzdGVkLmhhc2g9VW5jYWNoZWRSZWFzb24uaGFzaCBXSEVSRSBBbHJlYWR5UmVxdWVz
dGVkLmhhc2g9PyIpKTsKICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdl
YkNvcmU6OlNRTFJlc3VsdE9rKSB7CiAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIHF1ZXJ5Lmhhc2gpOwotICAgICAgICAgICAgICAgIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBz
dGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdzsKKyAgICAgICAgICAgICAg
ICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKKyAgICAg
ICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHN0b3JlRGVjaXNpb24gPSBzdGF0ZW1lbnQuaXNDb2x1bW5OdWxsKDEpID8gTmV0d29y
a0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXMgOiBzdGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0
b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnF1ZXJ5LCB3YXNBbHJlYWR5UmVxdWVzdGVk
XSB7Ci0gICAgICAgICAgICBxdWVyeS5jb21wbGV0aW9uSGFuZGxlcih3YXNBbHJlYWR5UmVxdWVz
dGVkKTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3RoaXMsICZxdWVyeSwgd2FzQWxyZWFkeVJlcXVlc3RlZCwgc3RvcmVEZWNpc2lvbl0geworICAg
ICAgICAgICAgcXVlcnkuY29tcGxldGlvbkhhbmRsZXIod2FzQWxyZWFkeVJlcXVlc3RlZCwgc3Rv
cmVEZWNpc2lvbik7CiAgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMucmVtb3ZlKCZxdWVyeSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMjQ5LDkgKzMzMywxMyBAQCB2b2lkIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M6OmNsZWFyKCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXNdIHsK
LSAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwogICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewor
ICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50
ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNh
Y3Rpb24gZGVsZXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgICAgICAgICBkZWxldGVU
cmFuc2FjdGlvbi5iZWdpbigpOwogICAgICAgICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRh
YmFzZSwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBBbHJlYWR5UmVxdWVzdGVkIikpOworICAg
ICAgICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJERUxF
VEUgRlJPTSBVbmNhY2hlZFJlYXNvbiIpKTsKKyAgICAgICAgICAgIGRlbGV0ZVRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogICAgICAgICAgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSAwOwogICAg
ICAgICB9CiAgICAgfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>