<?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>198176</bug_id>
          
          <creation_ts>2019-05-23 00:43:29 -0700</creation_ts>
          <short_desc>[WebAuthn] Use WebPreferences instead of RuntimeEnabledFeatures in UIProcess</short_desc>
          <delta_ts>2019-09-17 01:17:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>alex.gaynor</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1538606</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-05-23 00:43:29 -0700</bug_when>
    <thetext>Move the check for LocalAuthenticator runtime flag from LocalService to WebCore, as the method is only useful in web processes not UI processes. Somehow, it serves my purpose now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570083</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-11 18:28:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/55285709&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570085</commentid>
    <comment_count>2</comment_count>
      <attachid>378611</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-11 18:41:53 -0700</bug_when>
    <thetext>Created attachment 378611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570218</commentid>
    <comment_count>3</comment_count>
      <attachid>378611</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-12 03:07:50 -0700</bug_when>
    <thetext>Comment on attachment 378611
Patch

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

&gt; Source/WebKit/UIProcess/WebAuthentication/AuthenticatorManager.cpp:142
&gt; +        initTimeOutTimer(options.timeout);

This is done in both cases, can we have this line out of the switch.

&gt; Source/WebKit/UIProcess/WebAuthentication/AuthenticatorManager.cpp:219
&gt; +        if (transport == AuthenticatorTransport::Internal &amp;&amp; !m_pendingRequest.preferences-&gt;store().getBoolValueForKey(WebPreferencesKey::webAuthenticationLocalAuthenticatorEnabledKey()))

If webAuthenticationLocalAuthenticatorEnabledKey value is false, should we even call startDiscovery?
Could we just return early somewhere higher in the stack, like in handleRequest?
Also, what happens to m_pendingCompletionHandler if we are not starting the discovery, is it called?

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:113
&gt; +    HashSet&lt;String&gt; excludeCredentialIds = produceHashSet(WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).excludeCredentials);

auto

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:354
&gt; +    HashSet&lt;String&gt; allowCredentialIds = produceHashSet(WTF::get&lt;PublicKeyCredentialRequestOptions&gt;(requestData().options).allowCredentials);

auto

&gt; Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h:41
&gt; +    RefPtr&lt;WebPreferences&gt; preferences;

Do we really need to have a ref of the preferences?
Can we just pass them along the request data or use it in the right place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570318</commentid>
    <comment_count>4</comment_count>
      <attachid>378611</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-12 11:59:51 -0700</bug_when>
    <thetext>Comment on attachment 378611
Patch

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

Thanks Youenn for taking a look.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/AuthenticatorManager.cpp:142
&gt;&gt; +        initTimeOutTimer(options.timeout);
&gt; 
&gt; This is done in both cases, can we have this line out of the switch.

I guess we have no way to know the type of the options before the switchOn? Then we don&apos;t really have a way to access the options.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/AuthenticatorManager.cpp:219
&gt;&gt; +        if (transport == AuthenticatorTransport::Internal &amp;&amp; !m_pendingRequest.preferences-&gt;store().getBoolValueForKey(WebPreferencesKey::webAuthenticationLocalAuthenticatorEnabledKey()))
&gt; 
&gt; If webAuthenticationLocalAuthenticatorEnabledKey value is false, should we even call startDiscovery?
&gt; Could we just return early somewhere higher in the stack, like in handleRequest?
&gt; Also, what happens to m_pendingCompletionHandler if we are not starting the discovery, is it called?

WebAuthn defines multiple transports to communicate with different type of authenticators. webAuthenticationLocalAuthenticatorEnabledKey is only for the Internal transport type which is our platform authenticators, i.e., TouchID/FaceID. We allow USB/NFC by default and therefore this method should continue.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:113
&gt;&gt; +    HashSet&lt;String&gt; excludeCredentialIds = produceHashSet(WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).excludeCredentials);
&gt; 
&gt; auto

Right.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:354
&gt;&gt; +    HashSet&lt;String&gt; allowCredentialIds = produceHashSet(WTF::get&lt;PublicKeyCredentialRequestOptions&gt;(requestData().options).allowCredentials);
&gt; 
&gt; auto

Fixed.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h:41
&gt;&gt; +    RefPtr&lt;WebPreferences&gt; preferences;
&gt; 
&gt; Do we really need to have a ref of the preferences?
&gt; Can we just pass them along the request data or use it in the right place?

Given the request handling happens in async mostly. It is really tedious to capture it in every lambda and pass it along the way. Also, we might need different runtime flag for different features. For example, we might have a flag to turn on and off the UI or part of the UI when we have one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570562</commentid>
    <comment_count>5</comment_count>
      <attachid>378611</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-13 05:46:05 -0700</bug_when>
    <thetext>Comment on attachment 378611
Patch

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

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:101
&gt; +    for (auto&amp; pubKeyCredParam : WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).pubKeyCredParams) {

Can we refactor the code to pass directly a const PublicKeyCredentialCreationOptions&amp; to makeCredential.
That will allow to move the WTF::get closer to the WTF::hold and remove the question of whether we are always using the right variant.
Can we do the same for getAssertion()?

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:176
&gt; +        (id)kSecAttrLabel: WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).rp.id,

We could put WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options in a temporary auto&amp; to improve code readability since this is called several times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571332</commentid>
    <comment_count>6</comment_count>
      <attachid>378611</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-16 16:40:22 -0700</bug_when>
    <thetext>Comment on attachment 378611
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:101
&gt;&gt; +    for (auto&amp; pubKeyCredParam : WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).pubKeyCredParams) {
&gt; 
&gt; Can we refactor the code to pass directly a const PublicKeyCredentialCreationOptions&amp; to makeCredential.
&gt; That will allow to move the WTF::get closer to the WTF::hold and remove the question of whether we are always using the right variant.
&gt; Can we do the same for getAssertion()?

The reason why I make WebAuthenticationRequestData is that makeCredential not only requires PublicKeyCredentialCreationOptions but also hash. Instead of passing two parameters, I prefer pass one struct that contains those two.
The reason why I make WebAuthenticationRequestData a private member instead of parameters is that makeCredential is an async operation and consists more than one step: makeCredential =&gt; continueMakeCredentialAfterUserConsented =&gt; continueMakeCredentialAfterAttested, capturing them in lambdas and passing them along all steps is just too tedious.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:176
&gt;&gt; +        (id)kSecAttrLabel: WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options).rp.id,
&gt; 
&gt; We could put WTF::get&lt;PublicKeyCredentialCreationOptions&gt;(requestData().options in a temporary auto&amp; to improve code readability since this is called several times.

Sounds good. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571336</commentid>
    <comment_count>7</comment_count>
      <attachid>378914</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-16 16:56:18 -0700</bug_when>
    <thetext>Created attachment 378914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571340</commentid>
    <comment_count>8</comment_count>
      <attachid>378914</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-16 17:08:44 -0700</bug_when>
    <thetext>Comment on attachment 378914
Patch

OK, let&apos;s go.
I would continue to reduce the use of WTF::get.
Methods like continueGetAssertionAfterUserConsented could be given the correctly typed values so that only makeCredential/getAssertion and their lambdas would do the WTF::get</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571350</commentid>
    <comment_count>9</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-16 17:28:18 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #8)
&gt; Comment on attachment 378914 [details]
&gt; Patch
&gt; 
&gt; OK, let&apos;s go.
&gt; I would continue to reduce the use of WTF::get.
&gt; Methods like continueGetAssertionAfterUserConsented could be given the
&gt; correctly typed values so that only makeCredential/getAssertion and their
&gt; lambdas would do the WTF::get

Thanks Youenn for r+ the patch. Maybe I shouldn&apos;t use a variant. Anyway, both the old and the new way are not perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571453</commentid>
    <comment_count>10</comment_count>
      <attachid>378914</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-09-17 00:33:21 -0700</bug_when>
    <thetext>Comment on attachment 378914
Patch

The wincairo and mac-debug-wk1 failures don&apos;t seem to be related. cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571474</commentid>
    <comment_count>11</comment_count>
      <attachid>378914</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-17 01:17:24 -0700</bug_when>
    <thetext>Comment on attachment 378914
Patch

Clearing flags on attachment: 378914

Committed r249949: &lt;https://trac.webkit.org/changeset/249949&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571475</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-17 01:17:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378611</attachid>
            <date>2019-09-11 18:41:53 -0700</date>
            <delta_ts>2019-09-16 16:56:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198176-20190911184152.patch</filename>
            <type>text/plain</type>
            <size>37609</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJhNTIwNjhmNWNkODI3
Y2M4OWYwZmQ5YzE0MmI2MTkyMWJjZmYxZC4uZWU3NGE0NGFkOWEzZmUxYzc3MjliZTYyZTlmNGE4
MTk3MGQ0MWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA5LTExICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBVc2Ug
V2ViUHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzIGluIFVJUHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MTc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTI4NTcwOT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2VzIG9mIGJlaGF2aW9yLgor
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OmlzVXNlclZlcmlmeWluZ1BsYXRm
b3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSk6CisgICAgICAgIFJlc29sdmVzIHRoZSBwcm9taXNl
IHdpdGggZmFsc2UgaW1tZWRpYXRlbHkgd2hlbiB0aGUgZmVhdHVyZSBmbGFnIGlzIGZhbHNlLgor
CiAyMDE5LTA5LTEwICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTjogWyBDYXRhbGluYSBXSzIgXSBodHRwL3dwdC93ZWJhdXRobi9wdWJsaWMt
a2V5LWNyZWRlbnRpYWwtY3JlYXRlLXN1Y2Nlc3MtdTJmLmh0dHBzLmh0bWwgaXMgZmFpbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCAwMjgyMTIxMTNiYWQ4Mzk2ZTNjNjI3YjBlMjg0NDE3NjdmZWQ3YWYzLi4zYmM4
OGY4MGEwODYwNTg1ZTQ4OTY1YTliY2EyYzY0NTMyYWI4ZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU2IEBACisyMDE5LTA5LTExICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dlYkF1dGhuXSBVc2UgV2ViUHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzIGluIFVJUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTI4
NTcwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGRvZXMgdGhlIGZvbGxvd2luZyB0d28gdGhpbmdzOgorICAgICAgICAxKSBJdCBt
ZXJnZXMgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTo6Y3JlYXRpb25PcHRpb25zIGFuZCBy
ZXF1ZXN0T3B0aW9ucyBpbnRvIGEgdmFyaWFudCwgYW5kIHRoZXJlZm9yZQorICAgICAgICBtZXJn
ZXMgY29kZSBwYXRocyB0aGF0IGludm9sdmUgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS4K
KyAgICAgICAgMikgSXQgdGVhY2hlcyBXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhIHRvIHN0
b3JlIGEgV2ViUHJlZmVyZW5jZXMgc3VjaCB0aGF0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyIGNvdWxk
IHV0aWxpemUKKyAgICAgICAgcnVudGltZSBmZWF0dXJlIGZsYWdzIHRvIHR1cm4gZmVhdHVyZXMg
b24gb3Igb2ZmLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhl
bnRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yOjpoYW5kbGVSZXF1
ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6aGFu
ZGxlUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpjbGVh
clN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI6OmF1dGhlbnRp
Y2F0b3JBZGRlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFy
dERpc2NvdmVyeSk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjptYWtl
Q3JlZGVudGlhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5h
Z2VyOjpnZXRBc3NlcnRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclVzZXJD
b25zZW50ZWQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVl
TWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRo
ZW50aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJVc2VyQ29uc2VudGVkKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxTZXJ2aWNlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgRG9uJ3Qg
Y2hlY2sgUnVudGltZUVuYWJsZWRGZWF0dXJlcyBnaXZlbiBpdCBpcyBmb3IgV2ViQ29yZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1
ZXN0RGF0YS5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6bWFrZUNyZWRl
bnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eTo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxB
ZnRlclJlc3BvbnNlUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0aGVu
dGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50
aWNhdG9yOjpjaGVja0V4Y2x1ZGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGlj
YXRvcjo6aXNzdWVSZWdpc3RlckNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9y
Ojppc3N1ZVNpZ25Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGljYXRvcjo6
Y29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
V2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25z
ZVJlY2VpdmVkKToKKwogMjAxOS0wOS0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEhhbmdzIG9uIFN3aXNzLmNvbSBkdWUgdG8gdGhlIHdlYiBwcm9jZXNzIGJl
aW5nIGJsb2NrZWQgb24gU3RvcmFnZUFyZWFNYXA6OkxvYWRWYWx1ZXNJZk5lZWRlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bC5jcHAKaW5kZXggNDc1MDg2OThkZGQyODNiMjEyNDE2OGZjNmY4MTUzOThhY2UxNTQ1Ni4uYmMy
ODJkNDUxZmYxNzFhZjU2MjgyYmUwMDk0MDdkZmRjODFmYjU0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERhdGEuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczLDYgKzc0LDEwIEBAIFB1YmxpY0tleUNy
ZWRlbnRpYWw6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHVibGljS2V5
Q3JlZGVudGlhbDo6CiAKIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbDo6aXNVc2VyVmVyaWZ5aW5n
UGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKERvY3VtZW50JiBkb2N1bWVudCwgRE9NUHJv
bWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKKyAgICBpZiAoIVJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3JFbmFibGVkKCkpIHsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBkb2N1bWVudC5wYWdlKCktPmF1dGhlbnRpY2F0
b3JDb29yZGluYXRvcigpLmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWls
YWJsZShXVEZNb3ZlKHByb21pc2UpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcAppbmRleCAx
NjAwYmJmNjE0OTY4MWNiMmZkN2Y4MGM1NWY0MzdiNjAzNmVhYmQ5Li5mYzY3Zjc3YzZkMmRjNzk1
NzcxYTAwZGU0ZDk5MWY5NmU5ODI5MGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcApAQCAtMzYs
MTMgKzM2LDEzIEBAIHZvaWQgQXV0aGVudGljYXRvcjo6aGFuZGxlUmVxdWVzdChjb25zdCBXZWJB
dXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiBkYXRhKQogewogICAgIG1fcGVuZGluZ1JlcXVlc3RE
YXRhID0gZGF0YTsKICAgICAvLyBFbmZvcmNlIGFzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgbWFr
ZUNyZWRlbnRpYWwvZ2V0QXNzZXJ0aW9uLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzXSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh3ZWFrVGhpcy0+
bV9wZW5kaW5nUmVxdWVzdERhdGEuaXNDcmVhdGlvblJlcXVlc3QpCi0gICAgICAgICAgICB3ZWFr
VGhpcy0+bWFrZUNyZWRlbnRpYWwoKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4obV9wZW5kaW5n
UmVxdWVzdERhdGEub3B0aW9ucykpCisgICAgICAgICAgICBtYWtlQ3JlZGVudGlhbCgpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB3ZWFrVGhpcy0+Z2V0QXNzZXJ0aW9uKCk7CisgICAgICAg
ICAgICBnZXRBc3NlcnRpb24oKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwCmluZGV4IDEwYjgxNjJiMDJjNmJiMGU1OTFmMTIwMTYwNTBiY2RjNzAyZWY2
MzIuLjYyNmY0Y2U3ZTRjYzMyZjZhZDNjOTJkNDJiYmNkZGEyOGY0NzQwMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJfQVVUSE4pCiAKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgpAQCAtMTE5LDcgKzEyMCw3IEBAIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpBdXRo
ZW50aWNhdG9yTWFuYWdlcigpCiB7CiB9CiAKLXZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Om1h
a2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucywgQ2FsbGJhY2smJiBjYWxsYmFjaykK
K3ZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmhhbmRsZVJlcXVlc3QoUmVxdWVzdCYmIHJlcXVl
c3QsIENhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIEF1dGhlbnRp
Y2F0b3JNYW5hZ2VySW50ZXJuYWw7CiAKQEAgLTEzMCwzMiArMTMxLDE3IEBAIHZvaWQgQXV0aGVu
dGljYXRvck1hbmFnZXI6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFz
aCwgY29uc3QgUHViCiAgICAgY2xlYXJTdGF0ZSgpOwogCiAgICAgLy8gMS4gU2F2ZSByZXF1ZXN0
IGZvciBhc3luYyBvcGVyYXRpb25zLgotICAgIG1fcGVuZGluZ1JlcXVlc3REYXRhID0geyBoYXNo
LCB0cnVlLCBvcHRpb25zLCB7IH0gfTsKKyAgICBtX3BlbmRpbmdSZXF1ZXN0ID0gV1RGTW92ZShy
ZXF1ZXN0KTsKICAgICBtX3BlbmRpbmdDb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY2FsbGJh
Y2spOwotICAgIGluaXRUaW1lT3V0VGltZXIob3B0aW9ucy50aW1lb3V0KTsKIAogICAgIC8vIDIu
IEdldCBhdmFpbGFibGUgdHJhbnNwb3J0cyBhbmQgc3RhcnQgZGlzY292ZXJpbmcgYXV0aGVudGlj
YXRvcnMgb24gdGhlbS4KLSAgICBzdGFydERpc2NvdmVyeShjb2xsZWN0VHJhbnNwb3J0cyhvcHRp
b25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pKTsKLX0KLQotdm9pZCBBdXRoZW50aWNhdG9yTWFu
YWdlcjo6Z2V0QXNzZXJ0aW9uKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zLCBDYWxsYmFjayYmIGNhbGxi
YWNrKQotewotICAgIHVzaW5nIG5hbWVzcGFjZSBBdXRoZW50aWNhdG9yTWFuYWdlckludGVybmFs
OwotCi0gICAgaWYgKG1fcGVuZGluZ0NvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ0NvbXBsZXRpb25IYW5kbGVyKEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3IsICJU
aGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsbGVkIGJ5IGEgbmV3IHJlcXVlc3QuIl9zIH0pOwot
ICAgICAgICBtX3JlcXVlc3RUaW1lT3V0VGltZXIuc3RvcCgpOwotICAgIH0KLSAgICBjbGVhclN0
YXRlKCk7Ci0KLSAgICAvLyAxLiBTYXZlIHJlcXVlc3QgZm9yIGFzeW5jIG9wZXJhdGlvbnMuCi0g
ICAgbV9wZW5kaW5nUmVxdWVzdERhdGEgPSB7IGhhc2gsIGZhbHNlLCB7IH0sIG9wdGlvbnMgfTsK
LSAgICBtX3BlbmRpbmdDb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY2FsbGJhY2spOwotICAg
IGluaXRUaW1lT3V0VGltZXIob3B0aW9ucy50aW1lb3V0KTsKLQotICAgIC8vIDIuIEdldCBhdmFp
bGFibGUgdHJhbnNwb3J0cyBhbmQgc3RhcnQgZGlzY292ZXJpbmcgYXV0aGVudGljYXRvcnMgb24g
dGhlbS4KLSAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5KCkpOwotICAgIHN0YXJ0RGlzY292
ZXJ5KGNvbGxlY3RUcmFuc3BvcnRzKG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscykpOworICAgIFdU
Rjo6c3dpdGNoT24obV9wZW5kaW5nUmVxdWVzdC5vcHRpb25zLCBbJl0oY29uc3QgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucykgeworICAgICAgICBpbml0VGltZU91
dFRpbWVyKG9wdGlvbnMudGltZW91dCk7CisgICAgICAgIHN0YXJ0RGlzY292ZXJ5KGNvbGxlY3RU
cmFuc3BvcnRzKG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbikpOworICAgIH0sIFsmXShj
b25zdCAgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zJiBvcHRpb25zKSB7CisgICAg
ICAgIGluaXRUaW1lT3V0VGltZXIob3B0aW9ucy50aW1lb3V0KTsKKyAgICAgICAgc3RhcnREaXNj
b3ZlcnkoY29sbGVjdFRyYW5zcG9ydHMob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmNsZWFyU3RhdGVBc3luYygpCkBA
IC0xNzEsNyArMTU3LDcgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6Y2xlYXJTdGF0ZSgp
CiB7CiAgICAgaWYgKG1fcGVuZGluZ0NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9wZW5kaW5nUmVxdWVzdERhdGEgPSB7IH07CisgICAgbV9wZW5kaW5nUmVxdWVzdCA9
IHsgfTsKICAgICBtX3NlcnZpY2VzLmNsZWFyKCk7CiAgICAgbV9hdXRoZW50aWNhdG9ycy5jbGVh
cigpOwogfQpAQCAtMTgwLDcgKzE2Niw3IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmF1
dGhlbnRpY2F0b3JBZGRlZChSZWY8QXV0aGVudGljYXRvcj4mJiBhdXRoZW50aWNhdG9yCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBhdXRoZW50aWNhdG9yLT5zZXRPYnNl
cnZlcigqdGhpcyk7Ci0gICAgYXV0aGVudGljYXRvci0+aGFuZGxlUmVxdWVzdChtX3BlbmRpbmdS
ZXF1ZXN0RGF0YSk7CisgICAgYXV0aGVudGljYXRvci0+aGFuZGxlUmVxdWVzdChtX3BlbmRpbmdS
ZXF1ZXN0KTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYXV0aGVudGljYXRvcnMuYWRkKFdURk1v
dmUoYXV0aGVudGljYXRvcikpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CiB9CkBAIC0yMjgsOCArMjE0LDEwIEBAIHZvaWQgQXV0aGVudGljYXRv
ck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5KGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cykK
IHsKICAgICB1c2luZyBuYW1lc3BhY2UgQXV0aGVudGljYXRvck1hbmFnZXJJbnRlcm5hbDsKIAot
ICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRzLnNpemUoKSA8PSBt
YXhUcmFuc3BvcnROdW1iZXIpOworICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0
cmFuc3BvcnRzLnNpemUoKSA8PSBtYXhUcmFuc3BvcnROdW1iZXIgJiYgbV9wZW5kaW5nUmVxdWVz
dC5wcmVmZXJlbmNlcyk7CiAgICAgZm9yIChhdXRvJiB0cmFuc3BvcnQgOiB0cmFuc3BvcnRzKSB7
CisgICAgICAgIGlmICh0cmFuc3BvcnQgPT0gQXV0aGVudGljYXRvclRyYW5zcG9ydDo6SW50ZXJu
YWwgJiYgIW1fcGVuZGluZ1JlcXVlc3QucHJlZmVyZW5jZXMtPnN0b3JlKCkuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp3ZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGlj
YXRvckVuYWJsZWRLZXkoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBz
ZXJ2aWNlID0gY3JlYXRlU2VydmljZSh0cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2Vydmlj
ZS0+c3RhcnREaXNjb3ZlcnkoKTsKICAgICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShz
ZXJ2aWNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuaAppbmRleCAzYWQ0YzliNDRk
NmUzYzUzNDA1ZDA5ZmJmZDJkOGMyNjdlMWM0ODExLi4yMDc2YzM4ZWY5MTY4N2Q3OWQ3YzIyYWM3
Mzk0NzlhOTUwMjBiNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgKQEAgLTQ3
LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlc3BvbmQgPSBWYXJpYW50PFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxEYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPjsKICAgICB1
c2luZyBDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzcG9uZCYmKT47CiAgICAg
dXNpbmcgVHJhbnNwb3J0U2V0ID0gSGFzaFNldDxXZWJDb3JlOjpBdXRoZW50aWNhdG9yVHJhbnNw
b3J0LCBXVEY6OkludEhhc2g8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4sIFdURjo6
U3Ryb25nRW51bUhhc2hUcmFpdHM8V2ViQ29yZTo6QXV0aGVudGljYXRvclRyYW5zcG9ydD4+Owor
ICAgIHVzaW5nIFJlcXVlc3QgPSBXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhOwogCiAgICAg
dXNpbmcgQXV0aGVudGljYXRvclRyYW5zcG9ydFNlcnZpY2U6Ok9ic2VydmVyOjp3ZWFrUHRyRmFj
dG9yeTsKICAgICB1c2luZyBXZWFrVmFsdWVUeXBlID0gQXV0aGVudGljYXRvclRyYW5zcG9ydFNl
cnZpY2U6Ok9ic2VydmVyOjpXZWFrVmFsdWVUeXBlOwpAQCAtNTQsOCArNTUsNyBAQCBwdWJsaWM6
CiAgICAgQXV0aGVudGljYXRvck1hbmFnZXIoKTsKICAgICB2aXJ0dWFsIH5BdXRoZW50aWNhdG9y
TWFuYWdlcigpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgbWFrZUNyZWRlbnRpYWwoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zJiwgQ2FsbGJhY2smJik7Ci0gICAgdm9pZCBnZXRBc3NlcnRpb24oY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBoYXNoLCBjb25zdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFs
UmVxdWVzdE9wdGlvbnMmLCBDYWxsYmFjayYmKTsKKyAgICB2b2lkIGhhbmRsZVJlcXVlc3QoUmVx
dWVzdCYmLCBDYWxsYmFjayYmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc01vY2soKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCkBAIC04Myw3ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0
aW1lT3V0VGltZXJGaXJlZCgpOwogCiAgICAgLy8gUmVxdWVzdDogV2Ugb25seSBhbGxvdyBvbmUg
cmVxdWVzdCBwZXIgdGltZS4gQSBuZXcgcmVxdWVzdCB3aWxsIGNhbmNlbCBhbnkgcGVuZGluZyBv
bmVzLgotICAgIFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEgbV9wZW5kaW5nUmVxdWVzdERh
dGE7CisgICAgUmVxdWVzdCBtX3BlbmRpbmdSZXF1ZXN0OwogICAgIENhbGxiYWNrIG1fcGVuZGlu
Z0NvbXBsZXRpb25IYW5kbGVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPEF1dGhlbnRpY2F0b3JNYW5h
Z2VyPiBtX3JlcXVlc3RUaW1lT3V0VGltZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQppbmRleCA0ZTkwMjRkOWU3ZTg4NmYyYTc1MzU5NzcyNzc5YTY3MTQ3NDdi
M2FmLi4xNzE1YzRiNzA0OGRlMWQ0M2I1YjdjZWQxZWJiMjQ2YzlmNzEzMTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1
dGhlbnRpY2F0b3IubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQg
TG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiAgICAgLy8gU3RlcCA4IGlzIGlt
cGxpY2l0bHkgY2FwdHVyZWQgYnkgYWxsIFVua25vd25FcnJvciBleGNlcHRpb24gcmVjZWl2ZVJl
c3BvbmRzLgogICAgIC8vIFN0ZXAgMi4KICAgICBib29sIGNhbkZ1bGxmaWxsUHViS2V5Q3JlZFBh
cmFtcyA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgcHViS2V5Q3JlZFBhcmFtIDogcmVxdWVzdERh
dGEoKS5jcmVhdGlvbk9wdGlvbnMucHViS2V5Q3JlZFBhcmFtcykgeworICAgIGZvciAoYXV0byYg
cHViS2V5Q3JlZFBhcmFtIDogV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5wdWJLZXlDcmVkUGFyYW1zKSB7CiAgICAgICAg
IGlmIChwdWJLZXlDcmVkUGFyYW0udHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6UHVi
bGljS2V5ICYmIHB1YktleUNyZWRQYXJhbS5hbGcgPT0gQ09TRTo6RVMyNTYpIHsKICAgICAgICAg
ICAgIGNhbkZ1bGxmaWxsUHViS2V5Q3JlZFBhcmFtcyA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTExMCwxMyArMTEwLDEzIEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3Jl
ZGVudGlhbCgpCiAgICAgfQogCiAgICAgLy8gU3RlcCAzLgotICAgIEhhc2hTZXQ8U3RyaW5nPiBl
eGNsdWRlQ3JlZGVudGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KHJlcXVlc3REYXRhKCkuY3JlYXRp
b25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgSGFzaFNldDxTdHJpbmc+IGV4Y2x1
ZGVDcmVkZW50aWFsSWRzID0gcHJvZHVjZUhhc2hTZXQoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVu
dGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5leGNsdWRlQ3JlZGVu
dGlhbHMpOwogICAgIGlmICghZXhjbHVkZUNyZWRlbnRpYWxJZHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIFNlYXJjaCBLZXljaGFpbiBmb3IgdGhlIFJQIElELgogICAgICAgICBOU0RpY3Rpb25h
cnkgKnF1ZXJ5ID0gQHsKICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NL
ZXksCiAgICAgICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xh
c3NQcml2YXRlLAotICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IHJlcXVlc3REYXRhKCku
Y3JlYXRpb25PcHRpb25zLnJwLmlkLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdU
Rjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3REYXRhKCku
b3B0aW9ucykucnAuaWQsCiAgICAgICAgICAgICAoaWQpa1NlY1JldHVybkF0dHJpYnV0ZXM6IEBZ
RVMsCiAgICAgICAgICAgICAoaWQpa1NlY01hdGNoTGltaXQ6IChpZClrU2VjTWF0Y2hMaW1pdEFs
bCwKICNpZiBIQVZFKERBVEFfUFJPVEVDVElPTl9LRVlDSEFJTikKQEAgLTE1NCw3ICsxNTQsNyBA
QCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoKQogICAgICAgICB3ZWFr
VGhpcy0+Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyVXNlckNvbnNlbnRlZChjb25zZW50KTsK
ICAgICB9OwogICAgIG1fY29ubmVjdGlvbi0+Z2V0VXNlckNvbnNlbnQoCi0gICAgICAgICJhbGxv
dyAiICsgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQgKyAiIHRvIGNyZWF0ZSBh
IHB1YmxpYyBrZXkgY3JlZGVudGlhbCBmb3IgIiArIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRp
b25zLnVzZXIubmFtZSwKKyAgICAgICAgImFsbG93ICIgKyBXVEY6OmdldDxQdWJsaWNLZXlDcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLnJwLmlkICsgIiB0
byBjcmVhdGUgYSBwdWJsaWMga2V5IGNyZWRlbnRpYWwgZm9yICIgKyBXVEY6OmdldDxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLnVzZXIu
bmFtZSwKICAgICAgICAgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCkBAIC0xNzMsOCArMTczLDgg
QEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclVz
ZXJDb25zZW50ZWQoTG9jYWxDb25uZWN0aW8KICAgICAvLyBGYWlsdXJlcyBhZnRlciB0aGlzIHBv
aW50IGNvdWxkIGJsb2NrIHVzZXJzJyBhY2NvdW50cyBmb3JldmVyLiBTaG91bGQgd2UgZm9sbG93
IHRoZSBzcGVjPwogICAgIE5TRGljdGlvbmFyeSogZGVsZXRlUXVlcnkgPSBAewogICAgICAgICAo
aWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAotICAgICAgICAoaWQpa1NlY0F0dHJMYWJl
bDogcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsCi0gICAgICAgIChpZClrU2Vj
QXR0ckFwcGxpY2F0aW9uVGFnOiBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6cmVxdWVzdERhdGEoKS5j
cmVhdGlvbk9wdGlvbnMudXNlci5pZFZlY3Rvci5kYXRhKCkgbGVuZ3RoOnJlcXVlc3REYXRhKCku
Y3JlYXRpb25PcHRpb25zLnVzZXIuaWRWZWN0b3Iuc2l6ZSgpXSwKKyAgICAgICAgKGlkKWtTZWNB
dHRyTGFiZWw6IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJl
cXVlc3REYXRhKCkub3B0aW9ucykucnAuaWQsCisgICAgICAgIChpZClrU2VjQXR0ckFwcGxpY2F0
aW9uVGFnOiBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6V1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS51c2VyLmlkVmVjdG9yLmRh
dGEoKSBsZW5ndGg6V1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4o
cmVxdWVzdERhdGEoKS5vcHRpb25zKS51c2VyLmlkVmVjdG9yLnNpemUoKV0sCiAjaWYgSEFWRShE
QVRBX1BST1RFQ1RJT05fS0VZQ0hBSU4pCiAgICAgICAgIChpZClrU2VjVXNlRGF0YVByb3RlY3Rp
b25LZXljaGFpbjogQFlFUwogI2Vsc2UKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIExvY2FsQXV0
aGVudGljYXRvcjo6Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyVXNlckNvbnNlbnRlZChMb2Nh
bENvbm5lY3RpbwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB3ZWFrVGhpcy0+Y29udGlu
dWVNYWtlQ3JlZGVudGlhbEFmdGVyQXR0ZXN0ZWQocHJpdmF0ZUtleSwgY2VydGlmaWNhdGVzLCBl
cnJvcik7CiAgICAgfTsKLSAgICBtX2Nvbm5lY3Rpb24tPmdldEF0dGVzdGF0aW9uKHJlcXVlc3RE
YXRhKCkuY3JlYXRpb25PcHRpb25zLnJwLmlkLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9u
cy51c2VyLm5hbWUsIHJlcXVlc3REYXRhKCkuaGFzaCwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
IG1fY29ubmVjdGlvbi0+Z2V0QXR0ZXN0YXRpb24oV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5ycC5pZCwgV1RGOjpnZXQ8
UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25z
KS51c2VyLm5hbWUsIHJlcXVlc3REYXRhKCkuaGFzaCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQog
CiB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyQXR0
ZXN0ZWQoU2VjS2V5UmVmIHByaXZhdGVLZXksIE5TQXJyYXkgKmNlcnRpZmljYXRlcywgTlNFcnJv
ciAqZXJyb3IpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmNv
bnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKFNlY0tleVJlZiBwcml2YXRlS2UKICAg
ICBWZWN0b3I8dWludDhfdD4gY3JlZGVudGlhbElkOwogICAgIHsKICAgICAgICAgLy8gLXJrLXVj
cnQgaXMgYWRkZWQgYnkgRGV2aWNlSWRlbnRpdHkuRnJhbWV3b3JrLgotICAgICAgICBTdHJpbmcg
bGFiZWwgPSBtYWtlU3RyaW5nKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnVzZXIubmFt
ZSwgIkAiLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5ycC5pZCwgIi1yay11Y3J0Iik7
CisgICAgICAgIFN0cmluZyBsYWJlbCA9IG1ha2VTdHJpbmcoV1RGOjpnZXQ8UHVibGljS2V5Q3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS51c2VyLm5hbWUs
ICJAIiwgV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVz
dERhdGEoKS5vcHRpb25zKS5ycC5pZCwgIi1yay11Y3J0Iik7CiAgICAgICAgIE5TRGljdGlvbmFy
eSAqY3JlZGVudGlhbElkUXVlcnkgPSBAewogICAgICAgICAgICAgKGlkKWtTZWNDbGFzczogKGlk
KWtTZWNDbGFzc0tleSwKICAgICAgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1Nl
Y0F0dHJLZXlDbGFzc1ByaXZhdGUsCkBAIC0yNjQsOCArMjY0LDggQEAgdm9pZCBMb2NhbEF1dGhl
bnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKFNlY0tleVJlZiBw
cml2YXRlS2UKICNlbmRpZgogICAgICAgICB9OwogICAgICAgICBOU0RpY3Rpb25hcnkgKnVwZGF0
ZVBhcmFtcyA9IEB7Ci0gICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogcmVxdWVzdERhdGEo
KS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsCi0gICAgICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNh
dGlvblRhZzogW05TRGF0YSBkYXRhV2l0aEJ5dGVzOnJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRp
b25zLnVzZXIuaWRWZWN0b3IuZGF0YSgpIGxlbmd0aDpyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0
aW9ucy51c2VyLmlkVmVjdG9yLnNpemUoKV0sCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJl
bDogV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERh
dGEoKS5vcHRpb25zKS5ycC5pZCwKKyAgICAgICAgICAgIChpZClrU2VjQXR0ckFwcGxpY2F0aW9u
VGFnOiBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6V1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS51c2VyLmlkVmVjdG9yLmRhdGEo
KSBsZW5ndGg6V1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVx
dWVzdERhdGEoKS5vcHRpb25zKS51c2VyLmlkVmVjdG9yLnNpemUoKV0sCiAgICAgICAgIH07CiAg
ICAgICAgIHN0YXR1cyA9IFNlY0l0ZW1VcGRhdGUoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZil1
cGRhdGVRdWVyeSwgKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZil1cGRhdGVQYXJhbXMpOwogICAg
ICAgICBpZiAoc3RhdHVzKSB7CkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKFNlY0tleVJlZiBwcml2
YXRlS2UKICAgICBhdXRvIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEgPSBidWlsZEF0dGVzdGVkQ3Jl
ZGVudGlhbERhdGEoVmVjdG9yPHVpbnQ4X3Q+KGFhZ3VpZExlbmd0aCwgMCksIGNyZWRlbnRpYWxJ
ZCwgY29zZVB1YmxpY0tleSk7CiAKICAgICAvLyBTdGVwIDEyLgotICAgIGF1dG8gYXV0aERhdGEg
PSBidWlsZEF1dGhEYXRhKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnJwLmlkLCBtYWtl
Q3JlZGVudGlhbEZsYWdzLCBjb3VudGVyLCBhdHRlc3RlZENyZWRlbnRpYWxEYXRhKTsKKyAgICBh
dXRvIGF1dGhEYXRhID0gYnVpbGRBdXRoRGF0YShXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLnJwLmlkLCBtYWtlQ3JlZGVu
dGlhbEZsYWdzLCBjb3VudGVyLCBhdHRlc3RlZENyZWRlbnRpYWxEYXRhKTsKIAogICAgIC8vIFN0
ZXAgMTMuIEFwcGxlIEF0dGVzdGF0aW9uIENvbnQnCiAgICAgLy8gQXNzZW1ibGUgdGhlIGF0dGVz
dGF0aW9uIG9iamVjdDoKQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRv
cjo6Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyQXR0ZXN0ZWQoU2VjS2V5UmVmIHByaXZhdGVL
ZQogICAgICAgICAgICAgY2JvckFycmF5LmFwcGVuZChjYm9yOjpDQk9SVmFsdWUodG9WZWN0b3Io
KE5TRGF0YSAqKWFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDb3B5RGF0YSgoX19icmlkZ2UgU2VjQ2Vy
dGlmaWNhdGVSZWYpY2VydGlmaWNhdGVzW2ldKSkuZ2V0KCkpKSk7CiAgICAgICAgIGF0dGVzdGF0
aW9uU3RhdGVtZW50TWFwW2Nib3I6OkNCT1JWYWx1ZSgieDVjIildID0gY2Jvcjo6Q0JPUlZhbHVl
KFdURk1vdmUoY2JvckFycmF5KSk7CiAgICAgfQotICAgIGF1dG8gYXR0ZXN0YXRpb25PYmplY3Qg
PSBidWlsZEF0dGVzdGF0aW9uT2JqZWN0KFdURk1vdmUoYXV0aERhdGEpLCAiQXBwbGUiLCBXVEZN
b3ZlKGF0dGVzdGF0aW9uU3RhdGVtZW50TWFwKSwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlv
bnMuYXR0ZXN0YXRpb24pOworICAgIGF1dG8gYXR0ZXN0YXRpb25PYmplY3QgPSBidWlsZEF0dGVz
dGF0aW9uT2JqZWN0KFdURk1vdmUoYXV0aERhdGEpLCAiQXBwbGUiLCBXVEZNb3ZlKGF0dGVzdGF0
aW9uU3RhdGVtZW50TWFwKSwgV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5hdHRlc3RhdGlvbik7CiAKICAgICByZWNlaXZl
UmVzcG9uZChQdWJsaWNLZXlDcmVkZW50aWFsRGF0YSB7IEFycmF5QnVmZmVyOjpjcmVhdGUoY3Jl
ZGVudGlhbElkLmRhdGEoKSwgY3JlZGVudGlhbElkLnNpemUoKSksIHRydWUsIG51bGxwdHIsIEFy
cmF5QnVmZmVyOjpjcmVhdGUoYXR0ZXN0YXRpb25PYmplY3QuZGF0YSgpLCBhdHRlc3RhdGlvbk9i
amVjdC5zaXplKCkpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBXVEY6Om51bGxvcHQgfSk7
CiB9CkBAIC0zNTEsOCArMzUxLDggQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmdldEFzc2Vy
dGlvbigpCiAgICAgLy8gU2tpcCBTdGVwIDggYXMgZXh0ZW5zaW9ucyBhcmUgbm90IHN1cHBvcnRl
ZCB5ZXQuCiAgICAgLy8gU3RlcCAxMiBpcyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtu
b3duRXJyb3IgZXhjZXB0aW9uIGNhbGxiYWNrcy4KICAgICAvLyBTdGVwIDMtNS4gVW5saWtlIHRo
ZSBzcGVjLCBpZiBhbiBhbGxvdyBsaXN0IGlzIHByb3ZpZGVkIGFuZCB0aGVyZSBpcyBubyBpbnRl
cnNlY3Rpb24gYmV0d2VlbiBleGlzdGluZyBvbmVzIGFuZCB0aGUgYWxsb3cgbGlzdCwgd2UgYWx3
YXlzIHJldHVybiBOb3RBbGxvd2VkRXJyb3IuCi0gICAgSGFzaFNldDxTdHJpbmc+IGFsbG93Q3Jl
ZGVudGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMu
YWxsb3dDcmVkZW50aWFscyk7Ci0gICAgaWYgKCFyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMuaXNFbXB0eSgpICYmIGFsbG93Q3JlZGVudGlhbElkcy5pc0VtcHR5
KCkpIHsKKyAgICBIYXNoU2V0PFN0cmluZz4gYWxsb3dDcmVkZW50aWFsSWRzID0gcHJvZHVjZUhh
c2hTZXQoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0
RGF0YSgpLm9wdGlvbnMpLmFsbG93Q3JlZGVudGlhbHMpOworICAgIGlmICghV1RGOjpnZXQ8UHVi
bGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmFs
bG93Q3JlZGVudGlhbHMuaXNFbXB0eSgpICYmIGFsbG93Q3JlZGVudGlhbElkcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IE5vdEFsbG93ZWRFcnJv
ciwgIk5vIG1hdGNoZWQgY3JlZGVudGlhbHMgYXJlIGZvdW5kIGluIHRoZSBwbGF0Zm9ybSBhdHRh
Y2hlZCBhdXRoZW50aWNhdG9yLiJfcyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM2
MSw3ICszNjEsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAg
ICBOU0RpY3Rpb25hcnkgKnF1ZXJ5ID0gQHsKICAgICAgICAgKGlkKWtTZWNDbGFzczogKGlkKWtT
ZWNDbGFzc0tleSwKICAgICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktl
eUNsYXNzUHJpdmF0ZSwKLSAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IHJlcXVlc3REYXRhKCku
cmVxdWVzdE9wdGlvbnMucnBJZCwKKyAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdURjo6Z2V0
PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25z
KS5ycElkLAogICAgICAgICAoaWQpa1NlY1JldHVybkF0dHJpYnV0ZXM6IEBZRVMsCiAgICAgICAg
IChpZClrU2VjTWF0Y2hMaW1pdDogKGlkKWtTZWNNYXRjaExpbWl0QWxsLAogI2lmIEhBVkUoREFU
QV9QUk9URUNUSU9OX0tFWUNIQUlOKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgTG9jYWxBdXRo
ZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgIGF1dG8gcmV0YWluQXR0cmlidXRlc0FycmF5
ID0gYWRvcHRDRihhdHRyaWJ1dGVzQXJyYXlSZWYpOwogCiAgICAgTlNBcnJheSAqaW50ZXJzZWN0
ZWRDcmVkZW50aWFsc0F0dHJpYnV0ZXMgPSBuaWw7Ci0gICAgaWYgKHJlcXVlc3REYXRhKCkucmVx
dWVzdE9wdGlvbnMuYWxsb3dDcmVkZW50aWFscy5pc0VtcHR5KCkpCisgICAgaWYgKFdURjo6Z2V0
PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25z
KS5hbGxvd0NyZWRlbnRpYWxzLmlzRW1wdHkoKSkKICAgICAgICAgaW50ZXJzZWN0ZWRDcmVkZW50
aWFsc0F0dHJpYnV0ZXMgPSAoTlNBcnJheSAqKWF0dHJpYnV0ZXNBcnJheVJlZjsKICAgICBlbHNl
IHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTphbGxvd0NyZWRlbnRpYWxJZHMuc2l6ZSgpXTsKQEAgLTQxNiw3ICs0MTYs
NyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICBOU0RhdGEg
KmlkRGF0YSA9IHNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBwbGlj
YXRpb25UYWddOwogICAgIFN0cmluZ1ZpZXcgaWRTdHJpbmdWaWV3IHsgc3RhdGljX2Nhc3Q8Y29u
c3QgVUNoYXIqPihbaWREYXRhIGJ5dGVzXSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihbaWREYXRh
IGxlbmd0aF0pIH07CiAgICAgbV9jb25uZWN0aW9uLT5nZXRVc2VyQ29uc2VudCgKLSAgICAgICAg
bWFrZVN0cmluZygibG9nIGludG8gIiwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5ycElk
LCAiIHdpdGggIiwgaWRTdHJpbmdWaWV3KSwKKyAgICAgICAgbWFrZVN0cmluZygibG9nIGludG8g
IiwgV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0
YSgpLm9wdGlvbnMpLnJwSWQsICIgd2l0aCAiLCBpZFN0cmluZ1ZpZXcpLAogICAgICAgICAoX19i
cmlkZ2UgU2VjQWNjZXNzQ29udHJvbFJlZilzZWxlY3RlZENyZWRlbnRpYWxBdHRyaWJ1dGVzWyhp
ZClrU2VjQXR0ckFjY2Vzc0NvbnRyb2xdLAogICAgICAgICBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9
CkBAIC00MzYsNyArNDM2LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlR2V0
QXNzZXJ0aW9uQWZ0ZXJVc2VyQ29uc2VudGVkKExvY2FsQ29ubmVjdGlvbjoKICAgICAvLyBGSVhN
RSgxODM1MzMpOiBEdWUgdG8gdGhlIHN0YXRlZCBLZXljaGFpbiBsaW1pdGF0aW9ucywgd2UgY2Fu
J3Qgc2F2ZSB0aGUgY291bnRlciB2YWx1ZS4KICAgICAvLyBUaGVyZWZvcmUsIGl0IGlzIGFsd2F5
cyB6ZXJvLgogICAgIHVpbnQzMl90IGNvdW50ZXIgPSAwOwotICAgIGF1dG8gYXV0aERhdGEgPSBi
dWlsZEF1dGhEYXRhKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMucnBJZCwgZ2V0QXNzZXJ0
aW9uRmxhZ3MsIGNvdW50ZXIsIHsgfSk7CisgICAgYXV0byBhdXRoRGF0YSA9IGJ1aWxkQXV0aERh
dGEoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0
YSgpLm9wdGlvbnMpLnJwSWQsIGdldEFzc2VydGlvbkZsYWdzLCBjb3VudGVyLCB7IH0pOwogCiAg
ICAgLy8gU3RlcCAxMS4KICAgICBWZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxT
ZXJ2aWNlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29j
b2EvTG9jYWxTZXJ2aWNlLm1tCmluZGV4IDMyNDliMGUwMTc2NzI1NmZmOGUzNDQ3ZDZmNDRmNWE4
MGFjMTdmOGYuLmFmMmZhNDc0MWQ0YzI5MTFhMDAzOGMwZTVhYTU2OGRlZDQ0OWU4ODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xv
Y2FsU2VydmljZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9Mb2NhbFNlcnZpY2UubW0KQEAgLTQ0LDEwICs0NCw2IEBAIExvY2FsU2Vydmlj
ZTo6TG9jYWxTZXJ2aWNlKE9ic2VydmVyJiBvYnNlcnZlcikKIC8vIEZJWE1FKHJkYXI6Ly9wcm9i
bGVtLzUxMDQ4NTQyKQogYm9vbCBMb2NhbFNlcnZpY2U6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICAv
LyBGSVhNRSgxOTgxNzYpCi0gICAgaWYgKCFXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dE5TKFthbGxvY0xBQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOwogICAgIGlmICghW2NvbnRleHQgY2FuRXZhbHVhdGVQb2xpY3k6TEFQb2xpY3lEZXZp
Y2VPd25lckF1dGhlbnRpY2F0aW9uV2l0aEJpb21ldHJpY3MgZXJyb3I6JmVycm9yXSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0
aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCmluZGV4IDQ4ZDg5MWY1
ZGJmY2FlMTFkZTVlNWIwNGI0ZGJjN2Y3M2Y5MzZlNzMuLjY2ZWJiN2MyNWJjYjJiNzAxMGVlOWQy
OGRhZWJhNGFmZjczZjliYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJl
cXVlc3REYXRhLmgKQEAgLTI3LDE4ICsyNywxOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikK
IAorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNL
ZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBX
ZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhIHsKICAgICBWZWN0b3I8dWludDhfdD4gaGFzaDsK
LSAgICAvLyBGSVhNRTogTWF5YmUgd2UgY291bGQgbWFrZSBhbiBBQkMgb2YgT3B0aW9ucyBhbmQg
dGhlbiB1c2Ugc2FmZSBjYXN0aW5nIGhlcmUuCi0gICAgYm9vbCBpc0NyZWF0aW9uUmVxdWVzdCB7
IHRydWUgfTsKLSAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
IGNyZWF0aW9uT3B0aW9uczsKLSAgICBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnMgcmVxdWVzdE9wdGlvbnM7CisgICAgVmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsUmVx
dWVzdE9wdGlvbnM+IG9wdGlvbnM7CisgICAgUmVmUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJl
bmNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5h
dG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IGM2NWUxNmI5YjYxZTFk
YzQwNTdkMTAxYTJiZTM2ZWRlMDM1NWU5MTAuLjk1YzgwZGUxMjg0MmVmYjQwOGZkNWZjNzIyZTQw
MTUwMjQyZTI4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29v
cmRpbmF0b3JQcm94eS5jcHAKQEAgLTU1LDIxICs1NSwxNSBAQCBXZWJBdXRoZW50aWNhdG9yQ29v
cmRpbmF0b3JQcm94eTo6fldlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5KCkKIAogdm9p
ZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6bWFrZUNyZWRlbnRpYWwodWludDY0
X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0
byBjYWxsYmFjayA9IFttZXNzYWdlSWQsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSAo
VmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGF0YSwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mJiByZXN1bHQpIHsKLSAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBX
VEY6OnN3aXRjaE9uKHJlc3VsdCwgWyZdKGNvbnN0IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICB3ZWFrVGhpcy0+cmVxdWVzdFJlcGx5KG1lc3Nh
Z2VJZCwgZGF0YSwgeyB9KTsKLSAgICAgICAgfSwgWyZdKGNvbnN0ICBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhJiBleGNlcHRpb24pIHsKLSAgICAgICAgICAgIHdlYWtUaGlzLT5yZXF1ZXN0UmVwbHko
bWVzc2FnZUlkLCB7IH0sIGV4Y2VwdGlvbik7Ci0gICAgICAgIH0pOwotICAgIH07Ci0gICAgbV93
ZWJQYWdlUHJveHkud2Vic2l0ZURhdGFTdG9yZSgpLmF1dGhlbnRpY2F0b3JNYW5hZ2VyKCkubWFr
ZUNyZWRlbnRpYWwoaGFzaCwgb3B0aW9ucywgV1RGTW92ZShjYWxsYmFjaykpOworICAgIGhhbmRs
ZVJlcXVlc3QobWVzc2FnZUlkLCB7IGhhc2gsIG9wdGlvbnMsIG1fd2ViUGFnZVByb3h5LnByZWZl
cmVuY2VzKCkuY29weSgpIH0pOwogfQogCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5OjpnZXRBc3NlcnRpb24odWludDY0X3QgbWVzc2FnZUlkLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGhhc2gsIGNvbnN0IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBoYW5kbGVSZXF1ZXN0KG1lc3NhZ2VJZCwgeyBoYXNoLCBv
cHRpb25zLCBtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLmNvcHkoKSB9KTsKK30KKwordm9p
ZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6aGFuZGxlUmVxdWVzdCh1aW50NjRf
dCBtZXNzYWdlSWQsIFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEmJiByZXF1ZXN0KQogewog
ICAgIGF1dG8gY2FsbGJhY2sgPSBbbWVzc2FnZUlkLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gKFZhcmlhbnQ8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbERhdGEsIFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGE+JiYgcmVzdWx0KSB7CiAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CkBAIC04Miw3ICs3Niw3IEBAIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9y
UHJveHk6OmdldEFzc2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlCiAgICAgICAg
ICAgICB3ZWFrVGhpcy0+cmVxdWVzdFJlcGx5KG1lc3NhZ2VJZCwgeyB9LCBleGNlcHRpb24pOwog
ICAgICAgICB9KTsKICAgICB9OwotICAgIG1fd2ViUGFnZVByb3h5LndlYnNpdGVEYXRhU3RvcmUo
KS5hdXRoZW50aWNhdG9yTWFuYWdlcigpLmdldEFzc2VydGlvbihoYXNoLCBvcHRpb25zLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CisgICAgbV93ZWJQYWdlUHJveHkud2Vic2l0ZURhdGFTdG9yZSgpLmF1
dGhlbnRpY2F0b3JNYW5hZ2VyKCkuaGFuZGxlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJv
eHk6OmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSh1aW50NjRf
dCBtZXNzYWdlSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5h
dG9yUHJveHkuaAppbmRleCBmODUyYmVkMjEzMGI0N2MyZjdkZDI5OGFkMzU2YWVhYzg3YzAyNjg0
Li5lZjczMzQxNjI4ZDMwYjFiNGM3YzllNjA5YzMxNmMyN2Y1Zjk2MTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmgKQEAgLTQzLDYgKzQz
LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIAorc3RydWN0
IFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGE7CisKIGNsYXNzIFdlYkF1dGhlbnRpY2F0b3JD
b29yZGluYXRvclByb3h5IDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIENh
bk1ha2VXZWFrUHRyPFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5PiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQXV0aGVu
dGljYXRvckNvb3JkaW5hdG9yUHJveHkpOwpAQCAtNjIsNiArNjQsOCBAQCBwcml2YXRlOgogICAg
IC8vIFNlbmRlcnMuCiAgICAgdm9pZCByZXF1ZXN0UmVwbHkodWludDY0X3QgbWVzc2FnZUlkLCBj
b25zdCBXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkV4
Y2VwdGlvbkRhdGEmKTsKIAorICAgIHZvaWQgaGFuZGxlUmVxdWVzdCh1aW50NjRfdCBtZXNzYWdl
SWQsIFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEmJik7CisKICAgICBXZWJQYWdlUHJveHkm
IG1fd2ViUGFnZVByb3h5OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9y
LmNwcAppbmRleCAwZjk5MzMzNDk4YjJjNzMwNWMzMzFhMTU4ZjIxYTQxZGE0OTA5YjA4Li43NDNj
YTI4M2NjY2JlNmRhYjA3MTAzOThjN2IwZjg2ODQwMzc5NjIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRv
L0N0YXBBdXRoZW50aWNhdG9yLmNwcApAQCAtNTIsNyArNTIsNyBAQCBDdGFwQXV0aGVudGljYXRv
cjo6Q3RhcEF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2ZXI+JiYgZHJpdmVy
LCBBdXRoZQogdm9pZCBDdGFwQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoKQogewogICAg
IEFTU0VSVCghbV9pc0Rvd25ncmFkZWQpOwotICAgIGF1dG8gY2JvckNtZCA9IGVuY29kZU1ha2VD
cmVkZW5pdGFsUmVxdWVzdEFzQ0JPUihyZXF1ZXN0RGF0YSgpLmhhc2gsIHJlcXVlc3REYXRhKCku
Y3JlYXRpb25PcHRpb25zLCBtX2luZm8ub3B0aW9ucygpLnVzZXJWZXJpZmljYXRpb25BdmFpbGFi
aWxpdHkoKSk7CisgICAgYXV0byBjYm9yQ21kID0gZW5jb2RlTWFrZUNyZWRlbml0YWxSZXF1ZXN0
QXNDQk9SKHJlcXVlc3REYXRhKCkuaGFzaCwgV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENy
ZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKSwgbV9pbmZvLm9wdGlvbnMoKS51
c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOwogICAgIG1fZHJpdmVyLT50cmFuc2FjdChX
VEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKFZlY3Rvcjx1
aW50OF90PiYmIGRhdGEpIHsKICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBDdGFwQXV0aGVudGlj
YXRvcjo6bWFrZUNyZWRlbnRpYWwoKQogCiB2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51
ZU1ha2VDcmVkZW50aWFsQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpIGNvbnN0CiB7Ci0gICAgYXV0byByZXNwb25zZSA9IHJlYWRDVEFQTWFrZUNyZWRlbnRpYWxS
ZXNwb25zZShkYXRhLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7
CisgICAgYXV0byByZXNwb25zZSA9IHJlYWRDVEFQTWFrZUNyZWRlbnRpYWxSZXNwb25zZShkYXRh
LCBXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0
YSgpLm9wdGlvbnMpLmF0dGVzdGF0aW9uKTsKICAgICBpZiAoIXJlc3BvbnNlKSB7CiAgICAgICAg
IGF1dG8gZXJyb3IgPSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7CiAgICAgICAgIGlmIChlcnJvciA9
PSBDdGFwRGV2aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJDcmVkZW50aWFsRXhjbHVkZWQpCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgQ3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRl
bnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4CiB2b2lkIEN0YXBBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogewogICAgIEFTU0VSVCghbV9pc0Rvd25ncmFkZWQpOwot
ICAgIGF1dG8gY2JvckNtZCA9IGVuY29kZUdldEFzc2VydGlvblJlcXVlc3RBc0NCT1IocmVxdWVz
dERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCBtX2luZm8ub3B0aW9u
cygpLnVzZXJWZXJpZmljYXRpb25BdmFpbGFiaWxpdHkoKSk7CisgICAgYXV0byBjYm9yQ21kID0g
ZW5jb2RlR2V0QXNzZXJ0aW9uUmVxdWVzdEFzQ0JPUihyZXF1ZXN0RGF0YSgpLmhhc2gsIFdURjo6
Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRp
b25zKSwgbV9pbmZvLm9wdGlvbnMoKS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOwog
ICAgIG1fZHJpdmVyLT50cmFuc2FjdChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyldKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIHsKICAgICAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVu
dGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCmluZGV4IDRkMTJhOTY1ZDdmMDE5YTNhNTNiOWZkMjZl
YzZjYTNmZTI2NGIxZTIuLjAwZDE2ZGRiZDU0NmRlMTRhMjE4OWM0OWVjNTU3MzA5MzI0NjA4ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vVTJmQXV0aGVudGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcApAQCAtNTUsMTEgKzU1LDEx
IEBAIFUyZkF1dGhlbnRpY2F0b3I6OlUyZkF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0
YXBEcml2ZXI+JiYgZHJpdmVyKQogCiB2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50
aWFsKCkKIHsKLSAgICBpZiAoIWlzQ29udmVydGlibGVUb1UyZlJlZ2lzdGVyQ29tbWFuZChyZXF1
ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucykpIHsKKyAgICBpZiAoIWlzQ29udmVydGlibGVUb1Uy
ZlJlZ2lzdGVyQ29tbWFuZChXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpKSkgewogICAgICAgICByZWNlaXZlUmVzcG9uZChF
eGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVx
dWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKCFyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMuaXNF
bXB0eSgpKSB7CisgICAgaWYgKCFXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25P
cHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmV4Y2x1ZGVDcmVkZW50aWFscy5pc0VtcHR5
KCkpIHsKICAgICAgICAgQVNTRVJUKCFtX25leHRMaXN0SW5kZXgpOwogICAgICAgICBjaGVja0V4
Y2x1ZGVMaXN0KG1fbmV4dExpc3RJbmRleCsrKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjksMjUg
KzY5LDI1IEBAIHZvaWQgVTJmQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoKQogCiB2b2lk
IFUyZkF1dGhlbnRpY2F0b3I6OmNoZWNrRXhjbHVkZUxpc3Qoc2l6ZV90IGluZGV4KQogewotICAg
IGlmIChpbmRleCA+PSByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVu
dGlhbHMuc2l6ZSgpKSB7CisgICAgaWYgKGluZGV4ID49IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucykuZXhjbHVkZUNyZWRl
bnRpYWxzLnNpemUoKSkgewogICAgICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tPbmx5
U2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0
aW9ucywgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzW2lu
ZGV4XSk7CisgICAgYXV0byB1MmZDbWQgPSBjb252ZXJ0VG9VMmZDaGVja09ubHlTaWduQ29tbWFu
ZChyZXF1ZXN0RGF0YSgpLmhhc2gsIFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucyksIFdURjo6Z2V0PFB1YmxpY0tleUNyZWRl
bnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucykuZXhjbHVkZUNyZWRl
bnRpYWxzW2luZGV4XSk7CiAgICAgQVNTRVJUKHUyZkNtZCk7CiAgICAgaXNzdWVOZXdDb21tYW5k
KFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRUeXBlOjpDaGVja09ubHlDb21tYW5kKTsKIH0KIAog
dm9pZCBVMmZBdXRoZW50aWNhdG9yOjppc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpCiB7Ci0gICAgYXV0
byB1MmZDbWQgPSBjb252ZXJ0VG9VMmZSZWdpc3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNo
LCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucyk7CisgICAgYXV0byB1MmZDbWQgPSBjb252
ZXJ0VG9VMmZSZWdpc3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCBXVEY6OmdldDxQdWJs
aWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpKTsK
ICAgICBBU1NFUlQodTJmQ21kKTsKICAgICBpc3N1ZU5ld0NvbW1hbmQoV1RGTW92ZSgqdTJmQ21k
KSwgQ29tbWFuZFR5cGU6OlJlZ2lzdGVyQ29tbWFuZCk7CiB9CiAKIHZvaWQgVTJmQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAoIWlzQ29udmVydGlibGVUb1UyZlNpZ25D
b21tYW5kKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMpKSB7CisgICAgaWYgKCFpc0NvbnZl
cnRpYmxlVG9VMmZTaWduQ29tbWFuZChXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVz
dE9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucykpKSB7CiAgICAgICAgIHJlY2VpdmVSZXNw
b25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RTdXBwb3J0ZWRFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHRo
ZSByZXF1ZXN0IHRvIFUyRiBjb21tYW5kLiJfcyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTk3LDExICs5NywxMSBAQCB2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigp
CiAKIHZvaWQgVTJmQXV0aGVudGljYXRvcjo6aXNzdWVTaWduQ29tbWFuZChzaXplX3QgaW5kZXgp
CiB7Ci0gICAgaWYgKGluZGV4ID49IHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuYWxsb3dD
cmVkZW50aWFscy5zaXplKCkpIHsKKyAgICBpZiAoaW5kZXggPj0gV1RGOjpnZXQ8UHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmFsbG93Q3Jl
ZGVudGlhbHMuc2l6ZSgpKSB7CiAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEg
eyBOb3RBbGxvd2VkRXJyb3IsICJObyBjcmVkZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRp
YWxzIGxpc3QgaXMgZm91bmQgaW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQo
cmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0
RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBt
X2lzQXBwSWQpOworICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVx
dWVzdERhdGEoKS5oYXNoLCBXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlv
bnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucyksIFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxS
ZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5hbGxvd0NyZWRlbnRpYWxzW2lu
ZGV4XS5pZFZlY3RvciwgbV9pc0FwcElkKTsKICAgICBBU1NFUlQodTJmQ21kKTsKICAgICBpc3N1
ZU5ld0NvbW1hbmQoV1RGTW92ZSgqdTJmQ21kKSwgQ29tbWFuZFR5cGU6OlNpZ25Db21tYW5kKTsK
IH0KQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlUmVn
aXN0ZXJDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZQogewogICAgIHN3
aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7CiAgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0
YXR1czo6U1dfTk9fRVJST1I6IHsKLSAgICAgICAgYXV0byByZXNwb25zZSA9IHJlYWRVMmZSZWdp
c3RlclJlc3BvbnNlKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnJwLmlkLCBhcGR1UmVz
cG9uc2UuZGF0YSgpLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7
CisgICAgICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkVTJmUmVnaXN0ZXJSZXNwb25zZShXVEY6Omdl
dDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlv
bnMpLnJwLmlkLCBhcGR1UmVzcG9uc2UuZGF0YSgpLCBXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmF0dGVzdGF0aW9uKTsK
ICAgICAgICAgaWYgKCFyZXNwb25zZSkgewogICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhj
ZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRoZSBVMkYgcmVnaXN0
ZXIgcmVzcG9uc2UuIl9zIH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjAyLDEwICsyMDIs
MTAgQEAgdm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNw
b25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGEKICAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3Rh
dHVzOjpTV19OT19FUlJPUjogewogICAgICAgICBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFs
RGF0YT4gcmVzcG9uc2U7CiAgICAgICAgIGlmIChtX2lzQXBwSWQpIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmV4dGVuc2lvbnMgJiYgIXJlcXVlc3RE
YXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOwotICAgICAg
ICAgICAgcmVzcG9uc2UgPSByZWFkVTJmU2lnblJlc3BvbnNlKHJlcXVlc3REYXRhKCkucmVxdWVz
dE9wdGlvbnMuZXh0ZW5zaW9ucy0+YXBwaWQsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMu
YWxsb3dDcmVkZW50aWFsc1ttX25leHRMaXN0SW5kZXggLSAxXS5pZFZlY3RvciwgYXBkdVJlc3Bv
bnNlLmRhdGEoKSk7CisgICAgICAgICAgICBBU1NFUlQoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVu
dGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmV4dGVuc2lvbnMgJiYg
IVdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEo
KS5vcHRpb25zKS5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgICAgICAgICByZXNw
b25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmV4dGVuc2lvbnMtPmFwcGlkLCBX
VEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+KHJlcXVlc3REYXRhKCku
b3B0aW9ucykuYWxsb3dDcmVkZW50aWFsc1ttX25leHRMaXN0SW5kZXggLSAxXS5pZFZlY3Rvciwg
YXBkdVJlc3BvbnNlLmRhdGEoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzcG9u
c2UgPSByZWFkVTJmU2lnblJlc3BvbnNlKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMucnBJ
ZCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzW21fbmV4dExp
c3RJbmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0YSgpKTsKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVhZFUyZlNpZ25SZXNwb25zZShXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucykucnBJZCwgV1RGOjpnZXQ8
UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMp
LmFsbG93Q3JlZGVudGlhbHNbbV9uZXh0TGlzdEluZGV4IC0gMV0uaWRWZWN0b3IsIGFwZHVSZXNw
b25zZS5kYXRhKCkpOwogICAgICAgICBpZiAoIXJlc3BvbnNlKSB7CiAgICAgICAgICAgICByZWNl
aXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291bGRuJ3QgcGFyc2Ug
dGhlIFUyRiBzaWduIHJlc3BvbnNlLiJfcyB9KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIy
MSw3ICsyMjEsNyBAQCB2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlU2lnbkNvbW1hbmRB
ZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYQogICAgICAgICBtX3JldHJ5VGlt
ZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFs
dWVNcykpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6
U1dfV1JPTkdfREFUQToKLSAgICAgICAgaWYgKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMu
ZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5h
cHBpZC5pc051bGwoKSkgeworICAgICAgICBpZiAoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLmV4dGVuc2lvbnMgJiYgIVdU
Rjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5v
cHRpb25zKS5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFt
X2lzQXBwSWQpIHsKICAgICAgICAgICAgICAgICBtX2lzQXBwSWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4IC0gMSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378914</attachid>
            <date>2019-09-16 16:56:18 -0700</date>
            <delta_ts>2019-09-17 01:17:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198176-20190916165617.patch</filename>
            <type>text/plain</type>
            <size>36277</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJhNTIwNjhmNWNkODI3
Y2M4OWYwZmQ5YzE0MmI2MTkyMWJjZmYxZC4uZWU3NGE0NGFkOWEzZmUxYzc3MjliZTYyZTlmNGE4
MTk3MGQ0MWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA5LTExICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhuXSBVc2Ug
V2ViUHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzIGluIFVJUHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
MTc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTI4NTcwOT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2VzIG9mIGJlaGF2aW9yLgor
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWw6OmlzVXNlclZlcmlmeWluZ1BsYXRm
b3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSk6CisgICAgICAgIFJlc29sdmVzIHRoZSBwcm9taXNl
IHdpdGggZmFsc2UgaW1tZWRpYXRlbHkgd2hlbiB0aGUgZmVhdHVyZSBmbGFnIGlzIGZhbHNlLgor
CiAyMDE5LTA5LTEwICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTjogWyBDYXRhbGluYSBXSzIgXSBodHRwL3dwdC93ZWJhdXRobi9wdWJsaWMt
a2V5LWNyZWRlbnRpYWwtY3JlYXRlLXN1Y2Nlc3MtdTJmLmh0dHBzLmh0bWwgaXMgZmFpbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCAwMjgyMTIxMTNiYWQ4Mzk2ZTNjNjI3YjBlMjg0NDE3NjdmZWQ3YWYzLi4zYmM4
OGY4MGEwODYwNTg1ZTQ4OTY1YTliY2EyYzY0NTMyYWI4ZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU2IEBACisyMDE5LTA5LTExICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dlYkF1dGhuXSBVc2UgV2ViUHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzIGluIFVJUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTI4
NTcwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGRvZXMgdGhlIGZvbGxvd2luZyB0d28gdGhpbmdzOgorICAgICAgICAxKSBJdCBt
ZXJnZXMgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTo6Y3JlYXRpb25PcHRpb25zIGFuZCBy
ZXF1ZXN0T3B0aW9ucyBpbnRvIGEgdmFyaWFudCwgYW5kIHRoZXJlZm9yZQorICAgICAgICBtZXJn
ZXMgY29kZSBwYXRocyB0aGF0IGludm9sdmUgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS4K
KyAgICAgICAgMikgSXQgdGVhY2hlcyBXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhIHRvIHN0
b3JlIGEgV2ViUHJlZmVyZW5jZXMgc3VjaCB0aGF0IEF1dGhlbnRpY2F0b3JNYW5hZ2VyIGNvdWxk
IHV0aWxpemUKKyAgICAgICAgcnVudGltZSBmZWF0dXJlIGZsYWdzIHRvIHR1cm4gZmVhdHVyZXMg
b24gb3Igb2ZmLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhl
bnRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yOjpoYW5kbGVSZXF1
ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6aGFu
ZGxlUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpjbGVh
clN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI6OmF1dGhlbnRp
Y2F0b3JBZGRlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFy
dERpc2NvdmVyeSk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5hZ2VyOjptYWtl
Q3JlZGVudGlhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3JNYW5h
Z2VyOjpnZXRBc3NlcnRpb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW06CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclVzZXJD
b25zZW50ZWQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVl
TWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRo
ZW50aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJVc2VyQ29uc2VudGVkKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxTZXJ2aWNlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFNlcnZpY2U6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgRG9uJ3Qg
Y2hlY2sgUnVudGltZUVuYWJsZWRGZWF0dXJlcyBnaXZlbiBpdCBpcyBmb3IgV2ViQ29yZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1
ZXN0RGF0YS5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eTo6bWFrZUNyZWRl
bnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eTo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHk6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxB
ZnRlclJlc3BvbnNlUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0aGVu
dGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50
aWNhdG9yOjpjaGVja0V4Y2x1ZGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGlj
YXRvcjo6aXNzdWVSZWdpc3RlckNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24pOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9y
Ojppc3N1ZVNpZ25Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGljYXRvcjo6
Y29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
V2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25z
ZVJlY2VpdmVkKToKKwogMjAxOS0wOS0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEhhbmdzIG9uIFN3aXNzLmNvbSBkdWUgdG8gdGhlIHdlYiBwcm9jZXNzIGJl
aW5nIGJsb2NrZWQgb24gU3RvcmFnZUFyZWFNYXA6OkxvYWRWYWx1ZXNJZk5lZWRlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vUHVibGljS2V5Q3JlZGVudGlh
bC5jcHAKaW5kZXggNDc1MDg2OThkZGQyODNiMjEyNDE2OGZjNmY4MTUzOThhY2UxNTQ1Ni4uYmMy
ODJkNDUxZmYxNzFhZjU2MjgyYmUwMDk0MDdkZmRjODFmYjU0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHVibGljS2V5Q3JlZGVudGlhbERhdGEuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczLDYgKzc0LDEwIEBAIFB1YmxpY0tleUNy
ZWRlbnRpYWw6OkF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgUHVibGljS2V5
Q3JlZGVudGlhbDo6CiAKIHZvaWQgUHVibGljS2V5Q3JlZGVudGlhbDo6aXNVc2VyVmVyaWZ5aW5n
UGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKERvY3VtZW50JiBkb2N1bWVudCwgRE9NUHJv
bWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKKyAgICBpZiAoIVJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3JFbmFibGVkKCkpIHsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBkb2N1bWVudC5wYWdlKCktPmF1dGhlbnRpY2F0
b3JDb29yZGluYXRvcigpLmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWls
YWJsZShXVEZNb3ZlKHByb21pc2UpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcAppbmRleCAx
NjAwYmJmNjE0OTY4MWNiMmZkN2Y4MGM1NWY0MzdiNjAzNmVhYmQ5Li5mYzY3Zjc3YzZkMmRjNzk1
NzcxYTAwZGU0ZDk5MWY5NmU5ODI5MGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcApAQCAtMzYs
MTMgKzM2LDEzIEBAIHZvaWQgQXV0aGVudGljYXRvcjo6aGFuZGxlUmVxdWVzdChjb25zdCBXZWJB
dXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiBkYXRhKQogewogICAgIG1fcGVuZGluZ1JlcXVlc3RE
YXRhID0gZGF0YTsKICAgICAvLyBFbmZvcmNlIGFzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgbWFr
ZUNyZWRlbnRpYWwvZ2V0QXNzZXJ0aW9uLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzXSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh3ZWFrVGhpcy0+
bV9wZW5kaW5nUmVxdWVzdERhdGEuaXNDcmVhdGlvblJlcXVlc3QpCi0gICAgICAgICAgICB3ZWFr
VGhpcy0+bWFrZUNyZWRlbnRpYWwoKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4obV9wZW5kaW5n
UmVxdWVzdERhdGEub3B0aW9ucykpCisgICAgICAgICAgICBtYWtlQ3JlZGVudGlhbCgpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB3ZWFrVGhpcy0+Z2V0QXNzZXJ0aW9uKCk7CisgICAgICAg
ICAgICBnZXRBc3NlcnRpb24oKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwCmluZGV4IDEwYjgxNjJiMDJjNmJiMGU1OTFmMTIwMTYwNTBiY2RjNzAyZWY2
MzIuLjkzMDQ0MWVjMDdhOGE1MGVmYWZlNTZjYWMzYmQzOTdjZjFjMDY2ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJfQVVUSE4pCiAKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1B1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3Rv
bmljVGltZS5oPgpAQCAtMTE5LDcgKzEyMCw3IEBAIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpBdXRo
ZW50aWNhdG9yTWFuYWdlcigpCiB7CiB9CiAKLXZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Om1h
a2VDcmVkZW50aWFsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucywgQ2FsbGJhY2smJiBjYWxsYmFjaykK
K3ZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmhhbmRsZVJlcXVlc3QoV2ViQXV0aGVudGljYXRp
b25SZXF1ZXN0RGF0YSYmIGRhdGEsIENhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgdXNpbmcg
bmFtZXNwYWNlIEF1dGhlbnRpY2F0b3JNYW5hZ2VySW50ZXJuYWw7CiAKQEAgLTEzMCwzMiArMTMx
LDE3IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Om1ha2VDcmVkZW50aWFsKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgUHViCiAgICAgY2xlYXJTdGF0ZSgpOwogCiAgICAg
Ly8gMS4gU2F2ZSByZXF1ZXN0IGZvciBhc3luYyBvcGVyYXRpb25zLgotICAgIG1fcGVuZGluZ1Jl
cXVlc3REYXRhID0geyBoYXNoLCB0cnVlLCBvcHRpb25zLCB7IH0gfTsKKyAgICBtX3BlbmRpbmdS
ZXF1ZXN0RGF0YSA9IFdURk1vdmUoZGF0YSk7CiAgICAgbV9wZW5kaW5nQ29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICBpbml0VGltZU91dFRpbWVyKG9wdGlvbnMudGlt
ZW91dCk7CiAKICAgICAvLyAyLiBHZXQgYXZhaWxhYmxlIHRyYW5zcG9ydHMgYW5kIHN0YXJ0IGRp
c2NvdmVyaW5nIGF1dGhlbnRpY2F0b3JzIG9uIHRoZW0uCi0gICAgc3RhcnREaXNjb3ZlcnkoY29s
bGVjdFRyYW5zcG9ydHMob3B0aW9ucy5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKSk7Ci19Ci0KLXZv
aWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmdldEFzc2VydGlvbihjb25zdCBWZWN0b3I8dWludDhf
dD4mIGhhc2gsIGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyYgb3B0aW9u
cywgQ2FsbGJhY2smJiBjYWxsYmFjaykKLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgQXV0aGVudGlj
YXRvck1hbmFnZXJJbnRlcm5hbDsKLQotICAgIGlmIChtX3BlbmRpbmdDb21wbGV0aW9uSGFuZGxl
cikgewotICAgICAgICBtX3BlbmRpbmdDb21wbGV0aW9uSGFuZGxlcihFeGNlcHRpb25EYXRhIHsg
Tm90QWxsb3dlZEVycm9yLCAiVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGxlZCBieSBhIG5l
dyByZXF1ZXN0LiJfcyB9KTsKLSAgICAgICAgbV9yZXF1ZXN0VGltZU91dFRpbWVyLnN0b3AoKTsK
LSAgICB9Ci0gICAgY2xlYXJTdGF0ZSgpOwotCi0gICAgLy8gMS4gU2F2ZSByZXF1ZXN0IGZvciBh
c3luYyBvcGVyYXRpb25zLgotICAgIG1fcGVuZGluZ1JlcXVlc3REYXRhID0geyBoYXNoLCBmYWxz
ZSwgeyB9LCBvcHRpb25zIH07Ci0gICAgbV9wZW5kaW5nQ29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNhbGxiYWNrKTsKLSAgICBpbml0VGltZU91dFRpbWVyKG9wdGlvbnMudGltZW91dCk7Ci0K
LSAgICAvLyAyLiBHZXQgYXZhaWxhYmxlIHRyYW5zcG9ydHMgYW5kIHN0YXJ0IGRpc2NvdmVyaW5n
IGF1dGhlbnRpY2F0b3JzIG9uIHRoZW0uCi0gICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgp
KTsKLSAgICBzdGFydERpc2NvdmVyeShjb2xsZWN0VHJhbnNwb3J0cyhvcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMpKTsKKyAgICBXVEY6OnN3aXRjaE9uKG1fcGVuZGluZ1JlcXVlc3REYXRhLm9wdGlv
bnMsIFsmXShjb25zdCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zJiBvcHRpb25z
KSB7CisgICAgICAgIGluaXRUaW1lT3V0VGltZXIob3B0aW9ucy50aW1lb3V0KTsKKyAgICAgICAg
c3RhcnREaXNjb3ZlcnkoY29sbGVjdFRyYW5zcG9ydHMob3B0aW9ucy5hdXRoZW50aWNhdG9yU2Vs
ZWN0aW9uKSk7CisgICAgfSwgWyZdKGNvbnN0ICBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9w
dGlvbnMmIG9wdGlvbnMpIHsKKyAgICAgICAgaW5pdFRpbWVPdXRUaW1lcihvcHRpb25zLnRpbWVv
dXQpOworICAgICAgICBzdGFydERpc2NvdmVyeShjb2xsZWN0VHJhbnNwb3J0cyhvcHRpb25zLmFs
bG93Q3JlZGVudGlhbHMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdl
cjo6Y2xlYXJTdGF0ZUFzeW5jKCkKQEAgLTIyOCw4ICsyMTQsMTAgQEAgdm9pZCBBdXRoZW50aWNh
dG9yTWFuYWdlcjo6c3RhcnREaXNjb3ZlcnkoY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRz
KQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBBdXRoZW50aWNhdG9yTWFuYWdlckludGVybmFsOwog
Ci0gICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYmIHRyYW5zcG9ydHMuc2l6ZSgpIDw9
IG1heFRyYW5zcG9ydE51bWJlcik7CisgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYm
IHRyYW5zcG9ydHMuc2l6ZSgpIDw9IG1heFRyYW5zcG9ydE51bWJlciAmJiBtX3BlbmRpbmdSZXF1
ZXN0RGF0YS5wcmVmZXJlbmNlcyk7CiAgICAgZm9yIChhdXRvJiB0cmFuc3BvcnQgOiB0cmFuc3Bv
cnRzKSB7CisgICAgICAgIGlmICh0cmFuc3BvcnQgPT0gQXV0aGVudGljYXRvclRyYW5zcG9ydDo6
SW50ZXJuYWwgJiYgIW1fcGVuZGluZ1JlcXVlc3REYXRhLnByZWZlcmVuY2VzLT5zdG9yZSgpLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6d2ViQXV0aGVudGljYXRpb25Mb2Nh
bEF1dGhlbnRpY2F0b3JFbmFibGVkS2V5KCkpKQorICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UodHJhbnNwb3J0LCAqdGhpcyk7CiAgICAg
ICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5KCk7CiAgICAgICAgIG1fc2VydmljZXMuYXBwZW5k
KFdURk1vdmUoc2VydmljZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmgKaW5kZXgg
M2FkNGM5YjQ0ZDZlM2M1MzQwNWQwOWZiZmQyZDhjMjY3ZTFjNDgxMS4uMDcyMDdkNzcwNWIyNzA4
N2M1MWEwZGE4NGY0NWZmOTBhZjhlZDcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdl
ci5oCkBAIC01NCw4ICs1NCw3IEBAIHB1YmxpYzoKICAgICBBdXRoZW50aWNhdG9yTWFuYWdlcigp
OwogICAgIHZpcnR1YWwgfkF1dGhlbnRpY2F0b3JNYW5hZ2VyKCkgPSBkZWZhdWx0OwogCi0gICAg
dm9pZCBtYWtlQ3JlZGVudGlhbChjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0IFdl
YkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMmLCBDYWxsYmFjayYmKTsK
LSAgICB2b2lkIGdldEFzc2VydGlvbihjb25zdCBWZWN0b3I8dWludDhfdD4mIGhhc2gsIGNvbnN0
IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyYsIENhbGxiYWNrJiYp
OworICAgIHZvaWQgaGFuZGxlUmVxdWVzdChXZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhJiYs
IENhbGxiYWNrJiYpOwogCiAgICAgdmlydHVhbCBib29sIGlzTW9jaygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0aGVudGljYXRvci5tbQppbmRl
eCA0ZTkwMjRkOWU3ZTg4NmYyYTc1MzU5NzcyNzc5YTY3MTQ3NDdiM2FmLi5mZGIxMmM5MzVmZGYx
YjdkMTM4NTZjZGQwMWYzMWFlMjc0MjU0YmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxB
dXRoZW50aWNhdG9yLm1tCkBAIC05MSw2ICs5MSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9y
OjptYWtlQ3JlZGVudGlhbCgpCiAgICAgdXNpbmcgbmFtZXNwYWNlIExvY2FsQXV0aGVudGljYXRv
ckludGVybmFsOwogICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbml0KTsKICAgICBtX3N0
YXRlID0gU3RhdGU6OlJlcXVlc3RSZWNlaXZlZDsKKyAgICBhdXRvJiBjcmVhdGlvbk9wdGlvbnMg
PSBXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0
YSgpLm9wdGlvbnMpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBpbXBsZW1lbnRzIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi93ZWJhdXRobi8jb3AtbWFrZS1jcmVkIGFzIG9mIDUgRGVjZW1iZXIgMjAx
Ny4KICAgICAvLyBTa2lwIFN0ZXAgNC01IGFzIHJlcXVpcmVSZXNpZGVudEtleSBhbmQgcmVxdWly
ZVVzZXJWZXJpZmljYXRpb24gYXJlIGVuZm9yY2VkLgpAQCAtOTgsNyArOTksNyBAQCB2b2lkIExv
Y2FsQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoKQogICAgIC8vIFN0ZXAgOCBpcyBpbXBs
aWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJyb3IgZXhjZXB0aW9uIHJlY2VpdmVSZXNw
b25kcy4KICAgICAvLyBTdGVwIDIuCiAgICAgYm9vbCBjYW5GdWxsZmlsbFB1YktleUNyZWRQYXJh
bXMgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHB1YktleUNyZWRQYXJhbSA6IHJlcXVlc3REYXRh
KCkuY3JlYXRpb25PcHRpb25zLnB1YktleUNyZWRQYXJhbXMpIHsKKyAgICBmb3IgKGF1dG8mIHB1
YktleUNyZWRQYXJhbSA6IGNyZWF0aW9uT3B0aW9ucy5wdWJLZXlDcmVkUGFyYW1zKSB7CiAgICAg
ICAgIGlmIChwdWJLZXlDcmVkUGFyYW0udHlwZSA9PSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTo6
UHVibGljS2V5ICYmIHB1YktleUNyZWRQYXJhbS5hbGcgPT0gQ09TRTo6RVMyNTYpIHsKICAgICAg
ICAgICAgIGNhbkZ1bGxmaWxsUHViS2V5Q3JlZFBhcmFtcyA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTExMCwxMyArMTExLDEzIEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtl
Q3JlZGVudGlhbCgpCiAgICAgfQogCiAgICAgLy8gU3RlcCAzLgotICAgIEhhc2hTZXQ8U3RyaW5n
PiBleGNsdWRlQ3JlZGVudGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KHJlcXVlc3REYXRhKCkuY3Jl
YXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscyk7CisgICAgYXV0byBleGNsdWRlQ3JlZGVu
dGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KGNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlh
bHMpOwogICAgIGlmICghZXhjbHVkZUNyZWRlbnRpYWxJZHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIFNlYXJjaCBLZXljaGFpbiBmb3IgdGhlIFJQIElELgogICAgICAgICBOU0RpY3Rpb25hcnkg
KnF1ZXJ5ID0gQHsKICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXks
CiAgICAgICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQ
cml2YXRlLAotICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IHJlcXVlc3REYXRhKCkuY3Jl
YXRpb25PcHRpb25zLnJwLmlkLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IGNyZWF0
aW9uT3B0aW9ucy5ycC5pZCwKICAgICAgICAgICAgIChpZClrU2VjUmV0dXJuQXR0cmlidXRlczog
QFlFUywKICAgICAgICAgICAgIChpZClrU2VjTWF0Y2hMaW1pdDogKGlkKWtTZWNNYXRjaExpbWl0
QWxsLAogI2lmIEhBVkUoREFUQV9QUk9URUNUSU9OX0tFWUNIQUlOKQpAQCAtMTU0LDcgKzE1NSw3
IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiAgICAgICAgIHdl
YWtUaGlzLT5jb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJVc2VyQ29uc2VudGVkKGNvbnNlbnQp
OwogICAgIH07CiAgICAgbV9jb25uZWN0aW9uLT5nZXRVc2VyQ29uc2VudCgKLSAgICAgICAgImFs
bG93ICIgKyByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5ycC5pZCArICIgdG8gY3JlYXRl
IGEgcHVibGljIGtleSBjcmVkZW50aWFsIGZvciAiICsgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9w
dGlvbnMudXNlci5uYW1lLAorICAgICAgICAiYWxsb3cgIiArIGNyZWF0aW9uT3B0aW9ucy5ycC5p
ZCArICIgdG8gY3JlYXRlIGEgcHVibGljIGtleSBjcmVkZW50aWFsIGZvciAiICsgY3JlYXRpb25P
cHRpb25zLnVzZXIubmFtZSwKICAgICAgICAgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCkBAIC0x
NjIsNiArMTYzLDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRl
bnRpYWxBZnRlclVzZXJDb25zZW50ZWQoTG9jYWxDb25uZWN0aW8KIHsKICAgICBBU1NFUlQobV9z
dGF0ZSA9PSBTdGF0ZTo6UmVxdWVzdFJlY2VpdmVkKTsKICAgICBtX3N0YXRlID0gU3RhdGU6OlVz
ZXJDb25zZW50ZWQ7CisgICAgYXV0byYgY3JlYXRpb25PcHRpb25zID0gV1RGOjpnZXQ8UHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKTsKIAog
ICAgIGlmIChjb25zZW50ID09IExvY2FsQ29ubmVjdGlvbjo6VXNlckNvbnNlbnQ6Ok5vKSB7CiAg
ICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3IsICJD
b3VsZG4ndCBnZXQgdXNlciBjb25zZW50LiJfcyB9KTsKQEAgLTE3Myw4ICsxNzUsOCBAQCB2b2lk
IExvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyVXNlckNvbnNl
bnRlZChMb2NhbENvbm5lY3RpbwogICAgIC8vIEZhaWx1cmVzIGFmdGVyIHRoaXMgcG9pbnQgY291
bGQgYmxvY2sgdXNlcnMnIGFjY291bnRzIGZvcmV2ZXIuIFNob3VsZCB3ZSBmb2xsb3cgdGhlIHNw
ZWM/CiAgICAgTlNEaWN0aW9uYXJ5KiBkZWxldGVRdWVyeSA9IEB7CiAgICAgICAgIChpZClrU2Vj
Q2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCi0gICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiByZXF1
ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5ycC5pZCwKLSAgICAgICAgKGlkKWtTZWNBdHRyQXBw
bGljYXRpb25UYWc6IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpyZXF1ZXN0RGF0YSgpLmNyZWF0aW9u
T3B0aW9ucy51c2VyLmlkVmVjdG9yLmRhdGEoKSBsZW5ndGg6cmVxdWVzdERhdGEoKS5jcmVhdGlv
bk9wdGlvbnMudXNlci5pZFZlY3Rvci5zaXplKCldLAorICAgICAgICAoaWQpa1NlY0F0dHJMYWJl
bDogY3JlYXRpb25PcHRpb25zLnJwLmlkLAorICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlv
blRhZzogW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmNyZWF0aW9uT3B0aW9ucy51c2VyLmlkVmVjdG9y
LmRhdGEoKSBsZW5ndGg6Y3JlYXRpb25PcHRpb25zLnVzZXIuaWRWZWN0b3Iuc2l6ZSgpXSwKICNp
ZiBIQVZFKERBVEFfUFJPVEVDVElPTl9LRVlDSEFJTikKICAgICAgICAgKGlkKWtTZWNVc2VEYXRh
UHJvdGVjdGlvbktleWNoYWluOiBAWUVTCiAjZWxzZQpAQCAtMTk1LDcgKzE5Nyw3IEBAIHZvaWQg
TG9jYWxBdXRoZW50aWNhdG9yOjpjb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJVc2VyQ29uc2Vu
dGVkKExvY2FsQ29ubmVjdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHdlYWtUaGlz
LT5jb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJBdHRlc3RlZChwcml2YXRlS2V5LCBjZXJ0aWZp
Y2F0ZXMsIGVycm9yKTsKICAgICB9OwotICAgIG1fY29ubmVjdGlvbi0+Z2V0QXR0ZXN0YXRpb24o
cmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsIHJlcXVlc3REYXRhKCkuY3JlYXRp
b25PcHRpb25zLnVzZXIubmFtZSwgcmVxdWVzdERhdGEoKS5oYXNoLCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CisgICAgbV9jb25uZWN0aW9uLT5nZXRBdHRlc3RhdGlvbihjcmVhdGlvbk9wdGlvbnMucnAu
aWQsIGNyZWF0aW9uT3B0aW9ucy51c2VyLm5hbWUsIHJlcXVlc3REYXRhKCkuaGFzaCwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVNYWtl
Q3JlZGVudGlhbEFmdGVyQXR0ZXN0ZWQoU2VjS2V5UmVmIHByaXZhdGVLZXksIE5TQXJyYXkgKmNl
cnRpZmljYXRlcywgTlNFcnJvciAqZXJyb3IpCkBAIC0yMDQsNiArMjA2LDcgQEAgdm9pZCBMb2Nh
bEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKFNlY0tl
eVJlZiBwcml2YXRlS2UKIAogICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpVc2VyQ29uc2Vu
dGVkKTsKICAgICBtX3N0YXRlID0gU3RhdGU6OkF0dGVzdGVkOworICAgIGF1dG8mIGNyZWF0aW9u
T3B0aW9ucyA9IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJl
cXVlc3REYXRhKCkub3B0aW9ucyk7CiAKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZG4ndCBhdHRlc3Q6ICVAIiwgZXJyb3IpOwpAQCAtMjI5LDcgKzIzMiw3IEBAIHZv
aWQgTG9jYWxBdXRoZW50aWNhdG9yOjpjb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJBdHRlc3Rl
ZChTZWNLZXlSZWYgcHJpdmF0ZUtlCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWRlbnRpYWxJZDsK
ICAgICB7CiAgICAgICAgIC8vIC1yay11Y3J0IGlzIGFkZGVkIGJ5IERldmljZUlkZW50aXR5LkZy
YW1ld29yay4KLSAgICAgICAgU3RyaW5nIGxhYmVsID0gbWFrZVN0cmluZyhyZXF1ZXN0RGF0YSgp
LmNyZWF0aW9uT3B0aW9ucy51c2VyLm5hbWUsICJAIiwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9w
dGlvbnMucnAuaWQsICItcmstdWNydCIpOworICAgICAgICBTdHJpbmcgbGFiZWwgPSBtYWtlU3Ry
aW5nKGNyZWF0aW9uT3B0aW9ucy51c2VyLm5hbWUsICJAIiwgY3JlYXRpb25PcHRpb25zLnJwLmlk
LCAiLXJrLXVjcnQiKTsKICAgICAgICAgTlNEaWN0aW9uYXJ5ICpjcmVkZW50aWFsSWRRdWVyeSA9
IEB7CiAgICAgICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAogICAgICAg
ICAgICAgKGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwK
QEAgLTI2NCw4ICsyNjcsOCBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Y29udGludWVNYWtl
Q3JlZGVudGlhbEFmdGVyQXR0ZXN0ZWQoU2VjS2V5UmVmIHByaXZhdGVLZQogI2VuZGlmCiAgICAg
ICAgIH07CiAgICAgICAgIE5TRGljdGlvbmFyeSAqdXBkYXRlUGFyYW1zID0gQHsKLSAgICAgICAg
ICAgIChpZClrU2VjQXR0ckxhYmVsOiByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5ycC5p
ZCwKLSAgICAgICAgICAgIChpZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnOiBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6cmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMudXNlci5pZFZlY3Rvci5kYXRh
KCkgbGVuZ3RoOnJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnVzZXIuaWRWZWN0b3Iuc2l6
ZSgpXSwKKyAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBjcmVhdGlvbk9wdGlvbnMucnAu
aWQsCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJBcHBsaWNhdGlvblRhZzogW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmNyZWF0aW9uT3B0aW9ucy51c2VyLmlkVmVjdG9yLmRhdGEoKSBsZW5ndGg6Y3Jl
YXRpb25PcHRpb25zLnVzZXIuaWRWZWN0b3Iuc2l6ZSgpXSwKICAgICAgICAgfTsKICAgICAgICAg
c3RhdHVzID0gU2VjSXRlbVVwZGF0ZSgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKXVwZGF0ZVF1
ZXJ5LCAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKXVwZGF0ZVBhcmFtcyk7CiAgICAgICAgIGlm
IChzdGF0dXMpIHsKQEAgLTMwOCw3ICszMTEsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6
Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyQXR0ZXN0ZWQoU2VjS2V5UmVmIHByaXZhdGVLZQog
ICAgIGF1dG8gYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSA9IGJ1aWxkQXR0ZXN0ZWRDcmVkZW50aWFs
RGF0YShWZWN0b3I8dWludDhfdD4oYWFndWlkTGVuZ3RoLCAwKSwgY3JlZGVudGlhbElkLCBjb3Nl
UHVibGljS2V5KTsKIAogICAgIC8vIFN0ZXAgMTIuCi0gICAgYXV0byBhdXRoRGF0YSA9IGJ1aWxk
QXV0aERhdGEocmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsIG1ha2VDcmVkZW50
aWFsRmxhZ3MsIGNvdW50ZXIsIGF0dGVzdGVkQ3JlZGVudGlhbERhdGEpOworICAgIGF1dG8gYXV0
aERhdGEgPSBidWlsZEF1dGhEYXRhKGNyZWF0aW9uT3B0aW9ucy5ycC5pZCwgbWFrZUNyZWRlbnRp
YWxGbGFncywgY291bnRlciwgYXR0ZXN0ZWRDcmVkZW50aWFsRGF0YSk7CiAKICAgICAvLyBTdGVw
IDEzLiBBcHBsZSBBdHRlc3RhdGlvbiBDb250JwogICAgIC8vIEFzc2VtYmxlIHRoZSBhdHRlc3Rh
dGlvbiBvYmplY3Q6CkBAIC0zMzUsNyArMzM4LDcgQEAgdm9pZCBMb2NhbEF1dGhlbnRpY2F0b3I6
OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlckF0dGVzdGVkKFNlY0tleVJlZiBwcml2YXRlS2UK
ICAgICAgICAgICAgIGNib3JBcnJheS5hcHBlbmQoY2Jvcjo6Q0JPUlZhbHVlKHRvVmVjdG9yKChO
U0RhdGEgKilhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoKF9fYnJpZGdlIFNlY0NlcnRp
ZmljYXRlUmVmKWNlcnRpZmljYXRlc1tpXSkpLmdldCgpKSkpOwogICAgICAgICBhdHRlc3RhdGlv
blN0YXRlbWVudE1hcFtjYm9yOjpDQk9SVmFsdWUoIng1YyIpXSA9IGNib3I6OkNCT1JWYWx1ZShX
VEZNb3ZlKGNib3JBcnJheSkpOwogICAgIH0KLSAgICBhdXRvIGF0dGVzdGF0aW9uT2JqZWN0ID0g
YnVpbGRBdHRlc3RhdGlvbk9iamVjdChXVEZNb3ZlKGF1dGhEYXRhKSwgIkFwcGxlIiwgV1RGTW92
ZShhdHRlc3RhdGlvblN0YXRlbWVudE1hcCksIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25z
LmF0dGVzdGF0aW9uKTsKKyAgICBhdXRvIGF0dGVzdGF0aW9uT2JqZWN0ID0gYnVpbGRBdHRlc3Rh
dGlvbk9iamVjdChXVEZNb3ZlKGF1dGhEYXRhKSwgIkFwcGxlIiwgV1RGTW92ZShhdHRlc3RhdGlv
blN0YXRlbWVudE1hcCksIGNyZWF0aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7CiAKICAgICByZWNl
aXZlUmVzcG9uZChQdWJsaWNLZXlDcmVkZW50aWFsRGF0YSB7IEFycmF5QnVmZmVyOjpjcmVhdGUo
Y3JlZGVudGlhbElkLmRhdGEoKSwgY3JlZGVudGlhbElkLnNpemUoKSksIHRydWUsIG51bGxwdHIs
IEFycmF5QnVmZmVyOjpjcmVhdGUoYXR0ZXN0YXRpb25PYmplY3QuZGF0YSgpLCBhdHRlc3RhdGlv
bk9iamVjdC5zaXplKCkpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBXVEY6Om51bGxvcHQg
fSk7CiB9CkBAIC0zNDUsMTQgKzM0OCwxNSBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0
QXNzZXJ0aW9uKCkKICAgICB1c2luZyBuYW1lc3BhY2UgTG9jYWxBdXRoZW50aWNhdG9ySW50ZXJu
YWw7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkluaXQpOwogICAgIG1fc3RhdGUgPSBT
dGF0ZTo6UmVxdWVzdFJlY2VpdmVkOworICAgIGF1dG8mIHJlcXVlc3RPcHRpb25zID0gV1RGOjpn
ZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlv
bnMpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi93ZWJhdXRobi8jb3AtZ2V0LWFzc2VydGlvbiBhcyBvZiA1IERlY2VtYmVyIDIwMTcuCiAg
ICAgLy8gU2tpcCBTdGVwIDIgYXMgcmVxdWlyZVVzZXJWZXJpZmljYXRpb24gaXMgZW5mb3JjZWQu
CiAgICAgLy8gU2tpcCBTdGVwIDggYXMgZXh0ZW5zaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQu
CiAgICAgLy8gU3RlcCAxMiBpcyBpbXBsaWNpdGx5IGNhcHR1cmVkIGJ5IGFsbCBVbmtub3duRXJy
b3IgZXhjZXB0aW9uIGNhbGxiYWNrcy4KICAgICAvLyBTdGVwIDMtNS4gVW5saWtlIHRoZSBzcGVj
LCBpZiBhbiBhbGxvdyBsaXN0IGlzIHByb3ZpZGVkIGFuZCB0aGVyZSBpcyBubyBpbnRlcnNlY3Rp
b24gYmV0d2VlbiBleGlzdGluZyBvbmVzIGFuZCB0aGUgYWxsb3cgbGlzdCwgd2UgYWx3YXlzIHJl
dHVybiBOb3RBbGxvd2VkRXJyb3IuCi0gICAgSGFzaFNldDxTdHJpbmc+IGFsbG93Q3JlZGVudGlh
bElkcyA9IHByb2R1Y2VIYXNoU2V0KHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuYWxsb3dD
cmVkZW50aWFscyk7Ci0gICAgaWYgKCFyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMuaXNFbXB0eSgpICYmIGFsbG93Q3JlZGVudGlhbElkcy5pc0VtcHR5KCkpIHsK
KyAgICBhdXRvIGFsbG93Q3JlZGVudGlhbElkcyA9IHByb2R1Y2VIYXNoU2V0KHJlcXVlc3RPcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIGlmICghcmVxdWVzdE9wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscy5pc0VtcHR5KCkgJiYgYWxsb3dDcmVkZW50aWFsSWRzLmlzRW1wdHkoKSkgewogICAg
ICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9yLCAiTm8g
bWF0Y2hlZCBjcmVkZW50aWFscyBhcmUgZm91bmQgaW4gdGhlIHBsYXRmb3JtIGF0dGFjaGVkIGF1
dGhlbnRpY2F0b3IuIl9zIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzYxLDcgKzM2
NSw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogICAgIE5TRGlj
dGlvbmFyeSAqcXVlcnkgPSBAewogICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNz
S2V5LAogICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQ
cml2YXRlLAotICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogcmVxdWVzdERhdGEoKS5yZXF1ZXN0
T3B0aW9ucy5ycElkLAorICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogcmVxdWVzdE9wdGlvbnMu
cnBJZCwKICAgICAgICAgKGlkKWtTZWNSZXR1cm5BdHRyaWJ1dGVzOiBAWUVTLAogICAgICAgICAo
aWQpa1NlY01hdGNoTGltaXQ6IChpZClrU2VjTWF0Y2hMaW1pdEFsbCwKICNpZiBIQVZFKERBVEFf
UFJPVEVDVElPTl9LRVlDSEFJTikKQEAgLTM4MCw3ICszODQsNyBAQCB2b2lkIExvY2FsQXV0aGVu
dGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICBhdXRvIHJldGFpbkF0dHJpYnV0ZXNBcnJheSA9
IGFkb3B0Q0YoYXR0cmlidXRlc0FycmF5UmVmKTsKIAogICAgIE5TQXJyYXkgKmludGVyc2VjdGVk
Q3JlZGVudGlhbHNBdHRyaWJ1dGVzID0gbmlsOwotICAgIGlmIChyZXF1ZXN0RGF0YSgpLnJlcXVl
c3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuaXNFbXB0eSgpKQorICAgIGlmIChyZXF1ZXN0T3B0
aW9ucy5hbGxvd0NyZWRlbnRpYWxzLmlzRW1wdHkoKSkKICAgICAgICAgaW50ZXJzZWN0ZWRDcmVk
ZW50aWFsc0F0dHJpYnV0ZXMgPSAoTlNBcnJheSAqKWF0dHJpYnV0ZXNBcnJheVJlZjsKICAgICBl
bHNlIHsKICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTphbGxvd0NyZWRlbnRpYWxJZHMuc2l6ZSgpXTsKQEAgLTQxNiw3ICs0
MjAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKCkKICAgICBOU0Rh
dGEgKmlkRGF0YSA9IHNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQXBw
bGljYXRpb25UYWddOwogICAgIFN0cmluZ1ZpZXcgaWRTdHJpbmdWaWV3IHsgc3RhdGljX2Nhc3Q8
Y29uc3QgVUNoYXIqPihbaWREYXRhIGJ5dGVzXSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihbaWRE
YXRhIGxlbmd0aF0pIH07CiAgICAgbV9jb25uZWN0aW9uLT5nZXRVc2VyQ29uc2VudCgKLSAgICAg
ICAgbWFrZVN0cmluZygibG9nIGludG8gIiwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5y
cElkLCAiIHdpdGggIiwgaWRTdHJpbmdWaWV3KSwKKyAgICAgICAgbWFrZVN0cmluZygibG9nIGlu
dG8gIiwgcmVxdWVzdE9wdGlvbnMucnBJZCwgIiB3aXRoICIsIGlkU3RyaW5nVmlldyksCiAgICAg
ICAgIChfX2JyaWRnZSBTZWNBY2Nlc3NDb250cm9sUmVmKXNlbGVjdGVkQ3JlZGVudGlhbEF0dHJp
YnV0ZXNbKGlkKWtTZWNBdHRyQWNjZXNzQ29udHJvbF0sCiAgICAgICAgIFdURk1vdmUoY2FsbGJh
Y2spKTsKIH0KQEAgLTQzNiw3ICs0NDAsNyBAQCB2b2lkIExvY2FsQXV0aGVudGljYXRvcjo6Y29u
dGludWVHZXRBc3NlcnRpb25BZnRlclVzZXJDb25zZW50ZWQoTG9jYWxDb25uZWN0aW9uOgogICAg
IC8vIEZJWE1FKDE4MzUzMyk6IER1ZSB0byB0aGUgc3RhdGVkIEtleWNoYWluIGxpbWl0YXRpb25z
LCB3ZSBjYW4ndCBzYXZlIHRoZSBjb3VudGVyIHZhbHVlLgogICAgIC8vIFRoZXJlZm9yZSwgaXQg
aXMgYWx3YXlzIHplcm8uCiAgICAgdWludDMyX3QgY291bnRlciA9IDA7Ci0gICAgYXV0byBhdXRo
RGF0YSA9IGJ1aWxkQXV0aERhdGEocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5ycElkLCBn
ZXRBc3NlcnRpb25GbGFncywgY291bnRlciwgeyB9KTsKKyAgICBhdXRvIGF1dGhEYXRhID0gYnVp
bGRBdXRoRGF0YShXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+KHJl
cXVlc3REYXRhKCkub3B0aW9ucykucnBJZCwgZ2V0QXNzZXJ0aW9uRmxhZ3MsIGNvdW50ZXIsIHsg
fSk7CiAKICAgICAvLyBTdGVwIDExLgogICAgIFZlY3Rvcjx1aW50OF90PiBzaWduYXR1cmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2Nv
YS9Mb2NhbFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Db2NvYS9Mb2NhbFNlcnZpY2UubW0KaW5kZXggMzI0OWIwZTAxNzY3MjU2ZmY4ZTM0NDdk
NmY0NGY1YTgwYWMxN2Y4Zi4uYWYyZmE0NzQxZDRjMjkxMWEwMDM4YzBlNWFhNTY4ZGVkNDQ5ZTg4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvTG9jYWxTZXJ2aWNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsU2VydmljZS5tbQpAQCAtNDQsMTAgKzQ0LDYgQEAgTG9j
YWxTZXJ2aWNlOjpMb2NhbFNlcnZpY2UoT2JzZXJ2ZXImIG9ic2VydmVyKQogLy8gRklYTUUocmRh
cjovL3Byb2JsZW0vNTEwNDg1NDIpCiBib29sIExvY2FsU2VydmljZTo6aXNBdmFpbGFibGUoKQog
ewotICAgIC8vIEZJWE1FKDE5ODE3NikKLSAgICBpZiAoIVdlYkNvcmU6OlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3JFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0TlMoW2FsbG9jTEFDb250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgTlNFcnJv
ciAqZXJyb3IgPSBuaWw7CiAgICAgaWYgKCFbY29udGV4dCBjYW5FdmFsdWF0ZVBvbGljeTpMQVBv
bGljeURldmljZU93bmVyQXV0aGVudGljYXRpb25XaXRoQmlvbWV0cmljcyBlcnJvcjomZXJyb3Jd
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmgKaW5kZXgg
NDhkODkxZjVkYmZjYWUxMWRlNWU1YjA0YjRkYmM3ZjczZjkzNmU3My4uNjZlYmI3YzI1YmNiMmI3
MDEwZWU5ZDI4ZGFlYmE0YWZmNzNmOWJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRp
Y2F0aW9uUmVxdWVzdERhdGEuaApAQCAtMjcsMTggKzI3LDE4IEBACiAKICNpZiBFTkFCTEUoV0VC
X0FVVEhOKQogCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WYXJp
YW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
c3RydWN0IFdlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEgewogICAgIFZlY3Rvcjx1aW50OF90
PiBoYXNoOwotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBtYWtlIGFuIEFCQyBvZiBPcHRp
b25zIGFuZCB0aGVuIHVzZSBzYWZlIGNhc3RpbmcgaGVyZS4KLSAgICBib29sIGlzQ3JlYXRpb25S
ZXF1ZXN0IHsgdHJ1ZSB9OwotICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlv
bk9wdGlvbnMgY3JlYXRpb25PcHRpb25zOwotICAgIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRp
YWxSZXF1ZXN0T3B0aW9ucyByZXF1ZXN0T3B0aW9uczsKKyAgICBWYXJpYW50PFdlYkNvcmU6OlB1
YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMsIFdlYkNvcmU6OlB1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucz4gb3B0aW9uczsKKyAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+
IHByZWZlcmVuY2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9y
Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggYzY1ZTE2
YjliNjFlMWRjNDA1N2QxMDFhMmJlMzZlZGUwMzU1ZTkxMC4uODdlMjhhMTZlMmYwYjdkOGU4OWEw
ZjJjYTI4YTcwNTU0Mjc1ZmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5LmNwcApAQCAtNTUsMjEgKzU1LDE1IEBAIFdlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5Ojp+V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHko
KQogCiB2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjptYWtlQ3JlZGVudGlh
bCh1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3Qg
V2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBhdXRvIGNhbGxiYWNrID0gW21lc3NhZ2VJZCwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldIChWYXJpYW50PFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEYXRhLCBXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhPiYmIHJlc3VsdCkgewotICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIFdURjo6c3dpdGNoT24ocmVzdWx0LCBbJl0oY29uc3QgV2ViQ29yZTo6UHVibGljS2V5
Q3JlZGVudGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHdlYWtUaGlzLT5yZXF1ZXN0UmVw
bHkobWVzc2FnZUlkLCBkYXRhLCB7IH0pOwotICAgICAgICB9LCBbJl0oY29uc3QgIFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGEmIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgd2Vha1RoaXMtPnJlcXVl
c3RSZXBseShtZXNzYWdlSWQsIHsgfSwgZXhjZXB0aW9uKTsKLSAgICAgICAgfSk7Ci0gICAgfTsK
LSAgICBtX3dlYlBhZ2VQcm94eS53ZWJzaXRlRGF0YVN0b3JlKCkuYXV0aGVudGljYXRvck1hbmFn
ZXIoKS5tYWtlQ3JlZGVudGlhbChoYXNoLCBvcHRpb25zLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cisg
ICAgaGFuZGxlUmVxdWVzdChtZXNzYWdlSWQsIHsgaGFzaCwgb3B0aW9ucywgbV93ZWJQYWdlUHJv
eHkucHJlZmVyZW5jZXMoKS5jb3B5KCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yUHJveHk6OmdldEFzc2VydGlvbih1aW50NjRfdCBtZXNzYWdlSWQsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaGFzaCwgY29uc3QgV2ViQ29yZTo6UHVibGljS2V5Q3JlZGVudGlhbFJl
cXVlc3RPcHRpb25zJiBvcHRpb25zKQoreworICAgIGhhbmRsZVJlcXVlc3QobWVzc2FnZUlkLCB7
IGhhc2gsIG9wdGlvbnMsIG1fd2ViUGFnZVByb3h5LnByZWZlcmVuY2VzKCkuY29weSgpIH0pOwor
fQorCit2b2lkIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5OjpoYW5kbGVSZXF1ZXN0
KHVpbnQ2NF90IG1lc3NhZ2VJZCwgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYmIGRhdGEp
CiB7CiAgICAgYXV0byBjYWxsYmFjayA9IFttZXNzYWdlSWQsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXSAoVmFyaWFudDxXZWJDb3JlOjpQdWJsaWNLZXlDcmVkZW50aWFsRGF0YSwgV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YT4mJiByZXN1bHQpIHsKICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTgyLDcgKzc2LDcgQEAgdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3JQcm94eTo6Z2V0QXNzZXJ0aW9uKHVpbnQ2NF90IG1lc3NhZ2VJZCwgY29uc3QgVmUKICAg
ICAgICAgICAgIHdlYWtUaGlzLT5yZXF1ZXN0UmVwbHkobWVzc2FnZUlkLCB7IH0sIGV4Y2VwdGlv
bik7CiAgICAgICAgIH0pOwogICAgIH07Ci0gICAgbV93ZWJQYWdlUHJveHkud2Vic2l0ZURhdGFT
dG9yZSgpLmF1dGhlbnRpY2F0b3JNYW5hZ2VyKCkuZ2V0QXNzZXJ0aW9uKGhhc2gsIG9wdGlvbnMs
IFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX3dlYlBhZ2VQcm94eS53ZWJzaXRlRGF0YVN0b3Jl
KCkuYXV0aGVudGljYXRvck1hbmFnZXIoKS5oYW5kbGVSZXF1ZXN0KFdURk1vdmUoZGF0YSksIFdU
Rk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eTo6aXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKHVpbnQ2
NF90IG1lc3NhZ2VJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3JQcm94eS5oCmluZGV4IGY4NTJiZWQyMTMwYjQ3YzJmN2RkMjk4YWQzNTZhZWFjODdjMDI2
ODQuLmVmNzMzNDE2MjhkMzBiMWI0YzdjOWU2MDljMzE2YzI3ZjVmOTYxNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkuaApAQCAtNDMsNiAr
NDMsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwogCitzdHJ1
Y3QgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YTsKKwogY2xhc3MgV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yUHJveHkgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHk+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eSk7CkBAIC02Miw2ICs2NCw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gU2VuZGVycy4KICAgICB2b2lkIHJlcXVlc3RSZXBseSh1aW50NjRfdCBtZXNzYWdlSWQs
IGNvbnN0IFdlYkNvcmU6OlB1YmxpY0tleUNyZWRlbnRpYWxEYXRhJiwgY29uc3QgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YSYpOwogCisgICAgdm9pZCBoYW5kbGVSZXF1ZXN0KHVpbnQ2NF90IG1lc3Nh
Z2VJZCwgV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YSYmKTsKKwogICAgIFdlYlBhZ2VQcm94
eSYgbV93ZWJQYWdlUHJveHk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwCmluZGV4IDBmOTkzMzM0OThiMmM3MzA1YzMzMWExNThmMjFhNDFkYTQ5MDliMDguLjc0
M2NhMjgzY2NjYmU2ZGFiMDcxMDM5OGM3YjBmODY4NDAzNzk2MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC01Miw3ICs1Miw3IEBAIEN0YXBBdXRoZW50aWNh
dG9yOjpDdGFwQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4mJiBkcml2
ZXIsIEF1dGhlCiB2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiB7CiAg
ICAgQVNTRVJUKCFtX2lzRG93bmdyYWRlZCk7Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlTWFr
ZUNyZWRlbml0YWxSZXF1ZXN0QXNDQk9SKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEo
KS5jcmVhdGlvbk9wdGlvbnMsIG1faW5mby5vcHRpb25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWls
YWJpbGl0eSgpKTsKKyAgICBhdXRvIGNib3JDbWQgPSBlbmNvZGVNYWtlQ3JlZGVuaXRhbFJlcXVl
c3RBc0NCT1IocmVxdWVzdERhdGEoKS5oYXNoLCBXVEY6OmdldDxQdWJsaWNLZXlDcmVkZW50aWFs
Q3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpLCBtX2luZm8ub3B0aW9ucygp
LnVzZXJWZXJpZmljYXRpb25BdmFpbGFiaWxpdHkoKSk7CiAgICAgbV9kcml2ZXItPnRyYW5zYWN0
KFdURk1vdmUoY2JvckNtZCksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oVmVjdG9y
PHVpbnQ4X3Q+JiYgZGF0YSkgewogICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEN0YXBBdXRoZW50
aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiAKIHZvaWQgQ3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRp
bnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYg
ZGF0YSkgY29uc3QKIHsKLSAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENUQVBNYWtlQ3JlZGVudGlh
bFJlc3BvbnNlKGRhdGEsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLmF0dGVzdGF0aW9u
KTsKKyAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENUQVBNYWtlQ3JlZGVudGlhbFJlc3BvbnNlKGRh
dGEsIFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3RE
YXRhKCkub3B0aW9ucykuYXR0ZXN0YXRpb24pOwogICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAg
ICAgYXV0byBlcnJvciA9IGdldFJlc3BvbnNlQ29kZShkYXRhKTsKICAgICAgICAgaWYgKGVycm9y
ID09IEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6OmtDdGFwMkVyckNyZWRlbnRpYWxFeGNsdWRlZCkK
QEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBDdGFwQXV0aGVudGljYXRvcjo6Y29udGludWVNYWtlQ3Jl
ZGVudGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDgKIHZvaWQgQ3RhcEF1dGhl
bnRpY2F0b3I6OmdldEFzc2VydGlvbigpCiB7CiAgICAgQVNTRVJUKCFtX2lzRG93bmdyYWRlZCk7
Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlR2V0QXNzZXJ0aW9uUmVxdWVzdEFzQ0JPUihyZXF1
ZXN0RGF0YSgpLmhhc2gsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMsIG1faW5mby5vcHRp
b25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWlsYWJpbGl0eSgpKTsKKyAgICBhdXRvIGNib3JDbWQg
PSBlbmNvZGVHZXRBc3NlcnRpb25SZXF1ZXN0QXNDQk9SKHJlcXVlc3REYXRhKCkuaGFzaCwgV1RG
OjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9w
dGlvbnMpLCBtX2luZm8ub3B0aW9ucygpLnVzZXJWZXJpZmljYXRpb25BdmFpbGFiaWxpdHkoKSk7
CiAgICAgbV9kcml2ZXItPnRyYW5zYWN0KFdURk1vdmUoY2JvckNtZCksIFt3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKV0oVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgewogICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRo
ZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L2ZpZG8vVTJmQXV0aGVudGljYXRvci5jcHAKaW5kZXggNGQxMmE5NjVkN2YwMTlhM2E1M2I5ZmQy
NmVjNmNhM2ZlMjY0YjFlMi4uMzFiMjQ5MGUyYWMyNzIyNTFmZDliMzQzOTU2ZTUwM2ZkNDRiM2Yz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Zmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCkBAIC01NSwxMSArNTUs
MTIgQEAgVTJmQXV0aGVudGljYXRvcjo6VTJmQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8
Q3RhcERyaXZlcj4mJiBkcml2ZXIpCiAKIHZvaWQgVTJmQXV0aGVudGljYXRvcjo6bWFrZUNyZWRl
bnRpYWwoKQogewotICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmUmVnaXN0ZXJDb21tYW5kKHJl
cXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zKSkgeworICAgIGF1dG8mIGNyZWF0aW9uT3B0aW9u
cyA9IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KHJlcXVlc3RE
YXRhKCkub3B0aW9ucyk7CisgICAgaWYgKCFpc0NvbnZlcnRpYmxlVG9VMmZSZWdpc3RlckNvbW1h
bmQoY3JlYXRpb25PcHRpb25zKSkgewogICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25E
YXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVxdWVzdCB0byBV
MkYgY29tbWFuZC4iX3MgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFyZXF1
ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMuaXNFbXB0eSgpKSB7
CisgICAgaWYgKCFjcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQoIW1fbmV4dExpc3RJbmRleCk7CiAgICAgICAgIGNoZWNrRXhjbHVk
ZUxpc3QobV9uZXh0TGlzdEluZGV4KyspOwogICAgICAgICByZXR1cm47CkBAIC02OSwyNSArNzAs
MjYgQEAgdm9pZCBVMmZBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCiAKIHZvaWQgVTJm
QXV0aGVudGljYXRvcjo6Y2hlY2tFeGNsdWRlTGlzdChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KGluZGV4ID49IHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFs
cy5zaXplKCkpIHsKKyAgICBhdXRvJiBjcmVhdGlvbk9wdGlvbnMgPSBXVEY6OmdldDxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpOworICAg
IGlmIChpbmRleCA+PSBjcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSkg
ewogICAgICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tPbmx5U2lnbkNvbW1hbmQocmVx
dWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucywgcmVxdWVzdERh
dGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzW2luZGV4XSk7CisgICAgYXV0
byB1MmZDbWQgPSBjb252ZXJ0VG9VMmZDaGVja09ubHlTaWduQ29tbWFuZChyZXF1ZXN0RGF0YSgp
Lmhhc2gsIGNyZWF0aW9uT3B0aW9ucywgY3JlYXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFs
c1tpbmRleF0pOwogICAgIEFTU0VSVCh1MmZDbWQpOwogICAgIGlzc3VlTmV3Q29tbWFuZChXVEZN
b3ZlKCp1MmZDbWQpLCBDb21tYW5kVHlwZTo6Q2hlY2tPbmx5Q29tbWFuZCk7CiB9CiAKIHZvaWQg
VTJmQXV0aGVudGljYXRvcjo6aXNzdWVSZWdpc3RlckNvbW1hbmQoKQogewotICAgIGF1dG8gdTJm
Q21kID0gY29udmVydFRvVTJmUmVnaXN0ZXJDb21tYW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVx
dWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMpOworICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRv
VTJmUmVnaXN0ZXJDb21tYW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgV1RGOjpnZXQ8UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKSk7CiAgICAg
QVNTRVJUKHUyZkNtZCk7CiAgICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUoKnUyZkNtZCksIENv
bW1hbmRUeXBlOjpSZWdpc3RlckNvbW1hbmQpOwogfQogCiB2b2lkIFUyZkF1dGhlbnRpY2F0b3I6
OmdldEFzc2VydGlvbigpCiB7Ci0gICAgaWYgKCFpc0NvbnZlcnRpYmxlVG9VMmZTaWduQ29tbWFu
ZChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zKSkgeworICAgIGlmICghaXNDb252ZXJ0aWJs
ZVRvVTJmU2lnbkNvbW1hbmQoV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zPihyZXF1ZXN0RGF0YSgpLm9wdGlvbnMpKSkgewogICAgICAgICByZWNlaXZlUmVzcG9uZChF
eGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVx
dWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05
NywxMSArOTksMTIgQEAgdm9pZCBVMmZBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogCiB2
b2lkIFUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmIChpbmRleCA+PSByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMuc2l6ZSgpKSB7CisgICAgYXV0byYgcmVxdWVzdE9wdGlvbnMgPSBXVEY6OmdldDxQdWJs
aWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+KHJlcXVlc3REYXRhKCkub3B0aW9ucyk7Cisg
ICAgaWYgKGluZGV4ID49IHJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpKSB7
CiAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3Is
ICJObyBjcmVkZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRpYWxzIGxpc3QgaXMgZm91bmQg
aW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNo
LCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRp
b25zLmFsbG93Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBtX2lzQXBwSWQpOworICAgIGF1
dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCBy
ZXF1ZXN0T3B0aW9ucywgcmVxdWVzdE9wdGlvbnMuYWxsb3dDcmVkZW50aWFsc1tpbmRleF0uaWRW
ZWN0b3IsIG1faXNBcHBJZCk7CiAgICAgQVNTRVJUKHUyZkNtZCk7CiAgICAgaXNzdWVOZXdDb21t
YW5kKFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRUeXBlOjpTaWduQ29tbWFuZCk7CiB9CkBAIC0x
NTIsNyArMTU1LDcgQEAgdm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVJlZ2lzdGVyQ29t
bWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UKIHsKICAgICBzd2l0Y2ggKGFw
ZHVSZXNwb25zZS5zdGF0dXMoKSkgewogICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNX
X05PX0VSUk9SOiB7Ci0gICAgICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkVTJmUmVnaXN0ZXJSZXNw
b25zZShyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5ycC5pZCwgYXBkdVJlc3BvbnNlLmRh
dGEoKSwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuYXR0ZXN0YXRpb24pOworICAgICAg
ICBhdXRvIHJlc3BvbnNlID0gcmVhZFUyZlJlZ2lzdGVyUmVzcG9uc2UoV1RGOjpnZXQ8UHVibGlj
S2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5ycC5p
ZCwgYXBkdVJlc3BvbnNlLmRhdGEoKSwgV1RGOjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKS5hdHRlc3RhdGlvbik7CiAgICAgICAg
IGlmICghcmVzcG9uc2UpIHsKICAgICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRh
dGEgeyBVbmtub3duRXJyb3IsICJDb3VsZG4ndCBwYXJzZSB0aGUgVTJGIHJlZ2lzdGVyIHJlc3Bv
bnNlLiJfcyB9KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5OCwxNCArMjAxLDE1IEBAIHZv
aWQgVTJmQXV0aGVudGljYXRvcjo6Y29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoQXBkdVJlc3BvbnNlJiYKIAogdm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVNp
Z25Db21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGFwZHVSZXNwb25z
ZSkKIHsKKyAgICBhdXRvJiByZXF1ZXN0T3B0aW9ucyA9IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRl
bnRpYWxSZXF1ZXN0T3B0aW9ucz4ocmVxdWVzdERhdGEoKS5vcHRpb25zKTsKICAgICBzd2l0Y2gg
KGFwZHVSZXNwb25zZS5zdGF0dXMoKSkgewogICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6
OlNXX05PX0VSUk9SOiB7CiAgICAgICAgIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxEYXRh
PiByZXNwb25zZTsKICAgICAgICAgaWYgKG1faXNBcHBJZCkgewotICAgICAgICAgICAgQVNTRVJU
KHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEo
KS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7Ci0gICAgICAgICAg
ICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0
aW9ucy5leHRlbnNpb25zLT5hcHBpZCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzW21fbmV4dExpc3RJbmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2Uu
ZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYm
ICFyZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAgICAgICAg
ICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9u
cy0+YXBwaWQsIHJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbbV9uZXh0TGlzdEluZGV4
IC0gMV0uaWRWZWN0b3IsIGFwZHVSZXNwb25zZS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHJlc3BvbnNlID0gcmVhZFUyZlNpZ25SZXNwb25zZShyZXF1ZXN0RGF0YSgpLnJl
cXVlc3RPcHRpb25zLnJwSWQsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuYWxsb3dDcmVk
ZW50aWFsc1ttX25leHRMaXN0SW5kZXggLSAxXS5pZFZlY3RvciwgYXBkdVJlc3BvbnNlLmRhdGEo
KSk7CisgICAgICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdE9w
dGlvbnMucnBJZCwgcmVxdWVzdE9wdGlvbnMuYWxsb3dDcmVkZW50aWFsc1ttX25leHRMaXN0SW5k
ZXggLSAxXS5pZFZlY3RvciwgYXBkdVJlc3BvbnNlLmRhdGEoKSk7CiAgICAgICAgIGlmICghcmVz
cG9uc2UpIHsKICAgICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtu
b3duRXJyb3IsICJDb3VsZG4ndCBwYXJzZSB0aGUgVTJGIHNpZ24gcmVzcG9uc2UuIl9zIH0pOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjIxLDcgKzIyNSw3IEBAIHZvaWQgVTJmQXV0aGVudGlj
YXRvcjo6Y29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9u
c2UmJiBhCiAgICAgICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19XUk9OR19EQVRBOgotICAgICAgICBpZiAocmVx
dWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYmICFyZXF1ZXN0RGF0YSgpLnJl
cXVlc3RPcHRpb25zLmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChy
ZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYmICFyZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5h
cHBpZC5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFtX2lzQXBwSWQpIHsKICAgICAgICAg
ICAgICAgICBtX2lzQXBwSWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzc3VlU2lnbkNvbW1h
bmQobV9uZXh0TGlzdEluZGV4IC0gMSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>