<?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>158425</bug_id>
          
          <creation_ts>2016-06-06 10:05:08 -0700</creation_ts>
          <short_desc>Move preflight check code outside of DocumentThreadableLoader</short_desc>
          <delta_ts>2016-06-10 06:25:03 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=111008</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1199597</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-06 10:05:08 -0700</bug_when>
    <thetext>Having preflight checks done in DocumentThreadableLoader makes the code hard to parse and potentially difficult to reuse.
It would be more convenient to split the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199606</commentid>
    <comment_count>1</comment_count>
      <attachid>280606</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-06 10:30:57 -0700</bug_when>
    <thetext>Created attachment 280606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199958</commentid>
    <comment_count>2</comment_count>
      <attachid>280606</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-07 00:00:33 -0700</bug_when>
    <thetext>Comment on attachment 280606
Patch

Putting in r?
I kept the handling of redirect responses as close to the existent code.
But this does not seem very good.
At the very least we should check preflight from it.

It would be better to align with fetch spec and reject non-ok responses (https://fetch.spec.whatwg.org/#ok-status).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200206</commentid>
    <comment_count>3</comment_count>
      <attachid>280606</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-07 14:58:55 -0700</bug_when>
    <thetext>Comment on attachment 280606
Patch

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

This is to share the functionality with fetch, right?

&gt; Source/WebCore/ChangeLog:12
&gt; +        Behavior should be the same as before except in the case of a preflight response
&gt; +        being a 3XX redirect response.

Could you add a test for this behavior?  I&apos;d be interested in comparing our behavior in this case with other browsers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200419</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-08 05:37:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 280606 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280606&amp;action=review
&gt; 
&gt; This is to share the functionality with fetch, right?

This is mostly to make the code easier to read, maintain and relate to https://fetch.spec.whatwg.org/#cors-preflight-fetch.
In the future, it may also help if preflight is required outside of DocumentThreadableLoader.
For window.fetch, the plan is to keep calling ThreadableLoader::create to handle the actual loading which would handle the preflight.

&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        Behavior should be the same as before except in the case of a preflight response
&gt; &gt; +        being a 3XX redirect response.

The difference is minor really and the change of behavior should hopefully not be visible from JS.

With the patch, any 3XX redirect response will directly lead to a didRedirectFailCheck() call.

Without the patch, DocumentThreadableLoader::redirectReceived is called.
In that function, didRedirectFailCheck() will probably always be called (through a CSP check or through the regular response code path as request is cross-origin and not simple).

I think 3XX preflight responses should lead to a preflight failure, thus a call to didFailAccessControl.
This would have impact on the logging of the error but not on the JS observable behavior.

&gt; Could you add a test for this behavior?  I&apos;d be interested in comparing our
&gt; behavior in this case with other browsers.

LayoutTests/http/tests/xmlhttprequest/access-control-and-redirects-async.html is testing that.
If you change the redirect response preflight code from 302 to 300 or 304 in redirect-cors.php, a preflight failure (and a call to didFailAccessContro) will happen.

Firefox and Chrome are failing on preflight responses with non-ok status, including 3XX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201136</commentid>
    <comment_count>5</comment_count>
      <attachid>280606</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-09 20:39:32 -0700</bug_when>
    <thetext>Comment on attachment 280606
Patch

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

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:55
&gt; +        m_resource-&gt;removeClient(this);

Seems clear this function should take a reference instead of a pointer. Some day.

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:71
&gt; +    InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(frame);

I suggest auto here instead of this long type name.

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:74
&gt; +    String accessControlErrorDescription;

I think this could just be named description, since this has a pretty narrow scope here.

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:80
&gt; +    auto preflightResult = std::make_unique&lt;CrossOriginPreflightResultCacheItem&gt;(loader.options().allowCredentials());

I think we could just call this result, since it’s in the scope of a function that’s all about preflighting.

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:104
&gt; +    ThreadableLoaderOptions options = m_loader.options();

I suggest using auto here.

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.h:33
&gt; +#include &quot;CachedRawResource.h&quot;

Does this actually need to be included or would a forward declaration suffice?

&gt; Source/WebCore/loader/CrossOriginPreflightChecker.h:68
&gt; +} //  namespace WebCore

Extra space here after the &quot;//&quot;.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:115
&gt; +    auto crossOriginRequest = ResourceRequest(request);

No need to write ResourceRequest() here. Just auto x = y will make a copy of y.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:146
&gt; +        m_preflightChecker = CrossOriginPreflightChecker(*this, WTFMove(request));

I think you could write this:

    m_preflightChecker = { *this, WTFMove(request) };

Might be better?

&gt; Source/WebCore/loader/DocumentThreadableLoader.h:58
&gt; +        friend CrossOriginPreflightChecker;

Doesn’t this need to be &quot;friend class&quot;? I’m surprised this syntax works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201221</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-10 05:52:03 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #5)
&gt; Comment on attachment 280606 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280606&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:55
&gt; &gt; +        m_resource-&gt;removeClient(this);
&gt; 
&gt; Seems clear this function should take a reference instead of a pointer. Some
&gt; day.

Right.

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:71
&gt; &gt; +    InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(frame);
&gt; 
&gt; I suggest auto here instead of this long type name.

OK

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:74
&gt; &gt; +    String accessControlErrorDescription;
&gt; 
&gt; I think this could just be named description, since this has a pretty narrow
&gt; scope here.

OK

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:80
&gt; &gt; +    auto preflightResult = std::make_unique&lt;CrossOriginPreflightResultCacheItem&gt;(loader.options().allowCredentials());
&gt; 
&gt; I think we could just call this result, since it’s in the scope of a
&gt; function that’s all about preflighting.

OK

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.cpp:104
&gt; &gt; +    ThreadableLoaderOptions options = m_loader.options();
&gt; 
&gt; I suggest using auto here.

OK

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.h:33
&gt; &gt; +#include &quot;CachedRawResource.h&quot;
&gt; 
&gt; Does this actually need to be included or would a forward declaration
&gt; suffice?

OK

&gt; &gt; Source/WebCore/loader/CrossOriginPreflightChecker.h:68
&gt; &gt; +} //  namespace WebCore
&gt; 
&gt; Extra space here after the &quot;//&quot;.

OK

&gt; &gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:115
&gt; &gt; +    auto crossOriginRequest = ResourceRequest(request);
&gt; 
&gt; No need to write ResourceRequest() here. Just auto x = y will make a copy of
&gt; y.

OK

&gt; &gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:146
&gt; &gt; +        m_preflightChecker = CrossOriginPreflightChecker(*this, WTFMove(request));
&gt; 
&gt; I think you could write this:
&gt; 
&gt;     m_preflightChecker = { *this, WTFMove(request) };
&gt; 
&gt; Might be better?

It is not working as preflightChecker is an Optional.
Maybe Optional should be upgraded to support that.

&gt; &gt; Source/WebCore/loader/DocumentThreadableLoader.h:58
&gt; &gt; +        friend CrossOriginPreflightChecker;
&gt; 
&gt; Doesn’t this need to be &quot;friend class&quot;? I’m surprised this syntax works.

I think it is a simplification introduced recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201222</commentid>
    <comment_count>7</comment_count>
      <attachid>281007</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-10 05:53:11 -0700</bug_when>
    <thetext>Created attachment 281007
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201226</commentid>
    <comment_count>8</comment_count>
      <attachid>281007</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-10 06:24:59 -0700</bug_when>
    <thetext>Comment on attachment 281007
Patch for landing

Clearing flags on attachment: 281007

Committed r201924: &lt;http://trac.webkit.org/changeset/201924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1201227</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-10 06:25:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280606</attachid>
            <date>2016-06-06 10:30:57 -0700</date>
            <delta_ts>2016-06-10 05:53:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158425-20160606193220.patch</filename>
            <type>text/plain</type>
            <size>34087</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc5ZjUyMjRmYmUwYWJk
NTQ4NGNhMTZhN2NkMGQxZTRiNTc5ZTcxMC4uZTFhZGI3YTI2ZjE4MDBhMTZhNGQ1ZGVmNGUyM2Ri
MmQzMGE3NmI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE2LTA2LTA2ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgTW92ZSBw
cmVmbGlnaHQgY2hlY2sgY29kZSBvdXRzaWRlIG9mIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4NDI1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHBy
ZWZsaWdodCBjaGVjayBjb2RlIGluIGl0cyBvd24gY2xhc3MuCisgICAgICAgIFRoaXMgYWxsb3dz
IGNvZGUgdG8gYmUgZWFzaWVyIHRvIHJlYWQsIHVzZS9yZXVzZSBhbmQgdXBkYXRlLgorCisgICAg
ICAgIEJlaGF2aW9yIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgZXhjZXB0IGluIHRoZSBj
YXNlIG9mIGEgcHJlZmxpZ2h0IHJlc3BvbnNlCisgICAgICAgIGJlaW5nIGEgM1hYIHJlZGlyZWN0
IHJlc3BvbnNlLgorICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIDNYWCByZXNwb25zZSB3
YXMgZGlyZWN0bHkgcGFzc2VkIHRvIHRoZSBjb2RlIHByb2Nlc3NpbmcgcmVndWxhciByZXNwb25z
ZXMuCisgICAgICAgIFRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRlc3RzLCBh
IGRpZEZhaWxSZWRpcmVjdENoZWNrIGNhbGxiYWNrIGlzIGNhbGxlZC4KKyAgICAgICAgVGhpcyBz
aG91bGQgYmUgY2hhbmdlIHRvIGEgcHJlZmxpZ2h0IGZhaWx1cmUuCisKKyAgICAgICAgQ292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tl
cik6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6On5Dcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5Q
cmVmbGlnaHRDaGVja2VyOjpoYW5kbGVMb2FkaW5nRmFpbHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OnZhbGlkYXRlUHJlZmxpZ2h0UmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyOjpub3RpZnlG
aW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6
OnN0YXJ0UHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0
Q2hlY2tlcjo6ZG9QcmVmbGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyOjpyZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3Nz
T3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OmlzWE1MSHR0cFJlcXVlc3QpOgorICAg
ICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDogQWRkZWQuCisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NP
cmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjbGVhclJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5p
c2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OnByZWZsaWdodEZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRCeUNv
bnRlbnRTZWN1cml0eVBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpvcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6aXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6ZG9jdW1lbnQpOgorCiAyMDE2LTA2LTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBzcHJpbmcgYmFzZWQg
Q1NTIGFuaW1hdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWMxODgxODBhYjk4MzM5MDU0
MWZmMzU2ZmY2YjdlZDU5ZmQwYmU1ZC4uZDQ2NTlhNjZkNTNlNTIyOTc2YzA4ZDY2YWY5ZmVjZmU0
N2U0ZmU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5MDAsNiArMTkwMCw3IEBAIHNldChX
ZWJDb3JlX1NPVVJDRVMKICAgICBsb2FkZXIvQ29udGVudEZpbHRlci5jcHAKICAgICBsb2FkZXIv
Q29va2llSmFyLmNwcAogICAgIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCisg
ICAgbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHAKICAgICBsb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKICAgICBsb2FkZXIvRG9jdW1lbnRMb2Fk
VGltaW5nLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlM2QyNjJlMTdk
MzgwMzU3NzI3NjQyMzYyZjhhMTk1M2Q4ZWU2NmZiLi5iZDhiZDBiMDcxYTA0ZGUwZDAzMDk4MzA1
MjE5ZWEzYjRhNmExYjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTY4LDYgKzE1NjgsOCBAQAogCQk0MTlCRTc1OTFCQzdG
NDJCMDBFMUM4NUIgLyogV2ViQ29yZUJ1aWx0aW5OYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE5QkU3NTIxQkM3RjNEQjAwRTFDODVCIC8qIFdl
YkNvcmVCdWlsdGluTmFtZXMuaCAqLzsgfTsKIAkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8q
IERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUEzRDU4QzEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29y
a2VyVGhyZWFkLmNwcCAqLzsgfTsKIAkJNDFBM0Q1OEYxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGlj
YXRlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFBM0Q1OEQxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVh
ZC5oICovOyB9OworCQk0MUFCRTY3QjFEMDU4MERCMDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MUFCRTY3QTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmggKi87IH07CisJCTQxQUJFNjdDMUQwNTgwRTAwMDZEODYyRCAvKiBDcm9zc09yaWdpblBy
ZWZsaWdodENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDFBQkU2NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0
Q2hlY2tlci5jcHAgKi87IH07CiAJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9w
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
QUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MUJGNzAwQzBGRTg2RjQ5MDA1RThE
RUMgLyogTWVzc2FnZVBvcnRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAwQTBGRTg2RjQ5MDA1RThERUMgLyogTWVzc2FnZVBvcnRD
aGFubmVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNDFCRjcwMEYwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3
MDBEMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi87
IH07CkBAIC05MDc0LDYgKzkwNzYsOCBAQAogCQk0MUEwMjNFRDFBMzlEQjc5MDBGNzIyREYgLyog
V3JpdGFibGVTdHJlYW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdyaXRhYmxlU3RyZWFt
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFBM0Q1OEMxMDFDMTUyRDAwMzE2
RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MUEzRDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2Vy
VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZGljYXRlZFdvcmtl
clRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUFCRTY3OTFEMDU4MEQ1
MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQUJFNjdBMUQwNTgwRDUwMDZEODYyRCAv
KiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkY3MDBBMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdl
UG9ydENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVBv
cnRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkY3MDBEMEZFODZG
NjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA7
IHBhdGggPSBkZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzM5LDYgKzIyNzQzLDggQEAKIAkJCQlFMTQyNEM5MjE2
NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi8sCiAJCQkJRTFDNDE2MTYwRjY1NjMxODAw
OTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgKi8sCiAJCQkJRTFDNDE2MTEw
RjY1NjJGRDAwOTJEMkZCIC8qIENyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oICovLAorCQkJCTQx
QUJFNjc5MUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3Bw
ICovLAorCQkJCTQxQUJFNjdBMUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdo
dENoZWNrZXIuaCAqLywKIAkJCQlFMUM0MTVERDBGNjU1RDdDMDA5MkQyRkIgLyogQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgKi8sCiAJCQkJRTFDNDE1RDkwRjY1NUQ2RjAwOTJE
MkZCIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCAqLywKIAkJCQk5M0UyMjdE
QjBBRjU4OUFEMDBENDgzMjQgLyogRG9jdW1lbnRMb2FkZXIuY3BwICovLApAQCAtMjU1NzUsNiAr
MjU1ODEsNyBAQAogCQkJCTVDRDlGNTY4MUFBMEY3NDYwMERBNDVGRiAvKiBERkFCeXRlY29kZUlu
dGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkE4MDc4NTFCMThGOTc3MDBFMjE5QkUg
LyogREZBQ29tYmluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2QTUxN0ZFMUFCOTIyMzgwMDYz
MzVERiAvKiBERkFNaW5pbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxQUJFNjdCMUQwNTgw
REIwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2NzcyNUZGMUE1QjNBRDkwMDNDMjRERCAvKiBERkFOb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDE5QTI2ODFBMTNFNzAwMDA4RDY1MEUgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RkNCNjE4MUE3MDgyMEUwMEM1QTIxRSAvKiBEaWFn
bm9zdGljTG9nZ2luZ0tleXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2NzUsNiArMjk2ODIsNyBA
QAogCQkJCTE1RkNDOUZDMUI0REY3RjIwMEU3MjMyNiAvKiBET01VUkxNZWRpYVN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzFBMzdCRjA5N0M3MTVGMDAxOUYzRDggLyogRE9NVXRpbGl0
eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MEE1MTAwRDQxQ0QwMDVCQTI2NyAvKiBET01W
YWxpZGl0eVN0YXRlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDFBQkU2N0MxRDA1ODBFMDAwNkQ4
NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMUMwRkY0QTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQkzMTA2MDM3QTE0MzI4MUNEMDBBQkY0QkEgLyogRE9NV2ViS2l0
Q1NTRmlsdGVyVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk0OTgzOTE1MTBGMUU3NkI0MDBD
MjM3ODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg3MTUyNzhiZjI0ZmZjMmE0ZDc1ZGRkMzVlM2UxNjdjNmVmZTgwYWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRD
aGVja2VyLmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5oIgorI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKKyNp
bmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisj
aW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyKERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciYgbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmJiBy
ZXF1ZXN0KQorICAgIDogbV9sb2FkZXIobG9hZGVyKQorICAgICwgbV9yZXF1ZXN0KFdURk1vdmUo
cmVxdWVzdCkpCit7Cit9CisKK0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6fkNyb3NzT3Jp
Z2luUHJlZmxpZ2h0Q2hlY2tlcigpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1f
cmVzb3VyY2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBDcm9zc09yaWdpblByZWZs
aWdodENoZWNrZXI6OmhhbmRsZUxvYWRpbmdGYWlsdXJlKERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ciYgbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQoreworICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGNhbGwgcHJlZmxpZ2h0
RmFpbHVyZSBpbnN0ZWFkLgorICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRlci5kb2N1bWVudCgpLmZy
YW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZhaWxMb2FkaW5nKGZyYW1lLCBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSwg
aWRlbnRpZmllciwgZXJyb3IpOworICAgIGxvYWRlci5kaWRGYWlsKGlkZW50aWZpZXIsIGVycm9y
KTsKK30KKwordm9pZCBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OnZhbGlkYXRlUHJlZmxp
Z2h0UmVzcG9uc2UoRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiBsb2FkZXIsIFJlc291cmNlUmVx
dWVzdCYmIHJlcXVlc3QsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbG9hZGVyLmRvY3VtZW50
KCkuZnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNlaXZl
UmVzb3VyY2VSZXNwb25zZShmcmFtZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNlaXZlUmVzb3VyY2VSZXNwb25zZShjb29raWUsIGlkZW50aWZpZXIsIGZyYW1lLT5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpLCByZXNwb25zZSwgMCk7CisKKyAgICBTdHJpbmcgYWNjZXNz
Q29udHJvbEVycm9yRGVzY3JpcHRpb247CisgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hl
Y2socmVzcG9uc2UsIGxvYWRlci5vcHRpb25zKCkuYWxsb3dDcmVkZW50aWFscygpLCBsb2FkZXIu
c2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CisgICAg
ICAgIGxvYWRlci5wcmVmbGlnaHRGYWlsdXJlKGlkZW50aWZpZXIsIFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xF
cnJvckRlc2NyaXB0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHBy
ZWZsaWdodFJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZUl0ZW0+KGxvYWRlci5vcHRpb25zKCkuYWxsb3dDcmVkZW50aWFscygpKTsKKyAgICBp
ZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UsIGFjY2Vzc0NvbnRyb2xFcnJvckRl
c2NyaXB0aW9uKQorICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdp
bk1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRp
b24pCisgICAgICAgIHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVy
cyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRp
b24pKSB7CisgICAgICAgIGxvYWRlci5wcmVmbGlnaHRGYWlsdXJlKGlkZW50aWZpZXIsIFJlc291
cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksIGFj
Y2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5hcHBlbmRF
bnRyeShsb2FkZXIuc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgcmVxdWVzdC51cmwoKSwg
V1RGTW92ZShwcmVmbGlnaHRSZXN1bHQpKTsKKyAgICBsb2FkZXIucHJlZmxpZ2h0U3VjY2VzcyhX
VEZNb3ZlKHJlcXVlc3QpKTsKK30KKwordm9pZCBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6
Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKKyAgICBpZiAobV9yZXNv
dXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSkgeworICAgICAgICBoYW5kbGVMb2FkaW5nRmFp
bHVyZShtX2xvYWRlciwgbV9yZXNvdXJjZS0+aWRlbnRpZmllcigpLCBtX3Jlc291cmNlLT5yZXNv
dXJjZUVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhbGlkYXRlUHJlZmxp
Z2h0UmVzcG9uc2UobV9sb2FkZXIsIFdURk1vdmUobV9yZXF1ZXN0KSwgbV9yZXNvdXJjZS0+aWRl
bnRpZmllcigpLCBtX3Jlc291cmNlLT5yZXNwb25zZSgpKTsKK30KKwordm9pZCBDcm9zc09yaWdp
blByZWZsaWdodENoZWNrZXI6OnN0YXJ0UHJlZmxpZ2h0KCkKK3sKKyAgICBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zID0gbV9sb2FkZXIub3B0aW9ucygpOworICAgIG9wdGlvbnMuc2V0
Q2xpZW50Q3JlZGVudGlhbFBvbGljeShEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3JlZGVu
dGlhbHMpOworICAgIG9wdGlvbnMuc2V0U2VjdXJpdHlDaGVjayhEb1NlY3VyaXR5Q2hlY2spOwor
ICAgIC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhl
IHByZWZsaWdodCByZXF1ZXN0LgorICAgIG9wdGlvbnMuc2V0U2VuZExvYWRDYWxsYmFja3MoRG9O
b3RTZW5kQ2FsbGJhY2tzKTsKKyAgICBvcHRpb25zLnNldFNuaWZmQ29udGVudChEb05vdFNuaWZm
Q29udGVudCk7CisgICAgLy8gS2VlcCBidWZmZXJpbmcgdGhlIGRhdGEgZm9yIHRoZSBwcmVmbGln
aHQgcmVxdWVzdC4KKyAgICBvcHRpb25zLnNldERhdGFCdWZmZXJpbmdQb2xpY3koQnVmZmVyRGF0
YSk7CisKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdChjcmVhdGVB
Y2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChtX3JlcXVlc3QsIG1fbG9hZGVyLnNlY3VyaXR5
T3JpZ2luKCkpLCBvcHRpb25zKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkKKyAgICAgICAgcHJlZmxpZ2h0
UmVxdWVzdC5zZXRJbml0aWF0b3IobV9sb2FkZXIub3B0aW9ucygpLmluaXRpYXRvcik7CisKKyAg
ICBBU1NFUlQoIW1fcmVzb3VyY2UpOworICAgIG1fcmVzb3VyY2UgPSBtX2xvYWRlci5kb2N1bWVu
dCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdFJhd1Jlc291cmNlKHByZWZsaWdodFJl
cXVlc3QpOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5hZGRDbGll
bnQodGhpcyk7Cit9CisKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyOjpkb1ByZWZs
aWdodChEb2N1bWVudFRocmVhZGFibGVMb2FkZXImIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiYg
cmVxdWVzdCkKK3sKKyAgICBpZiAoIWxvYWRlci5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0ID0gY3JlYXRl
QWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVlc3QocmVxdWVzdCwgbG9hZGVyLnNlY3VyaXR5T3Jp
Z2luKCkpOworICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOworICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBsb2FkZXIuZG9jdW1lbnQoKS5mcmFtZSgpLT5sb2FkZXIoKS5sb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KHByZWZsaWdodFJlcXVlc3QsIGxvYWRlci5vcHRpb25zKCkuYWxsb3dD
cmVkZW50aWFscygpLCBsb2FkZXIub3B0aW9ucygpLmNsaWVudENyZWRlbnRpYWxQb2xpY3koKSwg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAwKSB7CisgICAgICAgIGhhbmRsZUxvYWRpbmdGYWls
dXJlKGxvYWRlciwgaWRlbnRpZmllciwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIHZhbGlkYXRlUHJlZmxpZ2h0UmVzcG9uc2UobG9hZGVyLCBXVEZNb3ZlKHJlcXVlc3QpLCBp
ZGVudGlmaWVyLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyOjpyZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjYWxs
IHByZWZsaWdodEZhaWx1cmUgb3Igc2V0IHJlZGlyZWN0IG1vZGUgdG8gZXJyb3IuCisgICAgQVNT
RVJUKG1fbG9hZGVyLm1fY2xpZW50KTsKKyAgICBtX2xvYWRlci5tX2NsaWVudC0+ZGlkRmFpbFJl
ZGlyZWN0Q2hlY2soKTsKK30KKwordm9pZCBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OnNl
dERlZmVyc0xvYWRpbmcoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAg
ICAgbV9yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7Cit9CisKK2Jvb2wgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRDaGVja2VyOjppc1hNTEh0dHBSZXF1ZXN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sb2FkZXIuaXNYTUxIdHRwUmVxdWVzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM0MzVlZWMxZThhYTJmODE4YWYzZTY2NjA5ZGU4Njkw
NzA2ZjRkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpblByZWZsaWdodENoZWNrZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2LCBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50
OworY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOworCitjbGFzcyBDcm9zc09yaWdpblBy
ZWZsaWdodENoZWNrZXIgZmluYWwgOiBwcml2YXRlIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBkb1ByZWZsaWdodChEb2N1bWVudFRocmVhZGFibGVM
b2FkZXImLCBSZXNvdXJjZVJlcXVlc3QmJik7CisKKyAgICBDcm9zc09yaWdpblByZWZsaWdodENo
ZWNrZXIoRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiwgUmVzb3VyY2VSZXF1ZXN0JiYpOworICAg
IH5Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIoKTsKKworICAgIHZvaWQgc3RhcnRQcmVmbGln
aHQoKTsKKworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgZmluYWw7CisgICAgdm9pZCBy
ZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpIGZpbmFsOworCisgICAgc3RhdGljIHZvaWQgaGFuZGxlTG9hZGlu
Z0ZhaWx1cmUoRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiwgdW5zaWduZWQgbG9uZywgY29uc3Qg
UmVzb3VyY2VFcnJvciYpOworICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRlUHJlZmxpZ2h0UmVzcG9u
c2UoRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIHVuc2lnbmVk
IGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKworICAgIGJvb2wgaXNYTUxIdHRwUmVx
dWVzdCgpIGNvbnN0IGZpbmFsOworCisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyJiBtX2xv
YWRlcjsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNv
dXJjZTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OworfTsKKworfSAvLyAgbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAKaW5kZXggOTBlNGJmYmMxMTIzODkzYWIxMzUyNDVmYjc0OTc3OGQzYjY5
OTVhZC4uMjFjZmUwZWIzYTkwYTVlN2RhMmEzYzYyMGMzN2M0OWUwZTY1NGVhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmgiCisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTcwLDcgKzcxLDcgQEAg
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
RG9jdW1lbnQmIGRvY3VtZW50LCBjb24KIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBzdGQ6OnVuaXF1ZV9w
dHI8Q29udGVudFNlY3VyaXR5UG9saWN5PiYmIGNvbnRlbnRTZWN1cml0eVBvbGljeSkKIHsKICAg
ICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25v
dXNseSwgcmVxdWVzdCwgb3B0aW9ucywgV1RGTW92ZShjb250ZW50U2VjdXJpdHlQb2xpY3kpKSk7
Ci0gICAgaWYgKCFsb2FkZXItPm1fcmVzb3VyY2UpCisgICAgaWYgKCFsb2FkZXItPmlzTG9hZGlu
ZygpKQogICAgICAgICBsb2FkZXIgPSBudWxscHRyOwogICAgIHJldHVybiBsb2FkZXI7CiB9CkBA
IC0xMTEsMTkgKzExMiwxNyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlcwogewogICAgIEFTU0VS
VChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wp
OwogCi0gICAgYXV0byBjcm9zc09yaWdpblJlcXVlc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291
cmNlUmVxdWVzdD4ocmVxdWVzdCk7Ci0gICAgdXBkYXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2wo
KmNyb3NzT3JpZ2luUmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMoKSk7CisgICAgYXV0byBjcm9zc09yaWdpblJlcXVlc3QgPSBSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdCk7CisgICAgdXBkYXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2woY3Jvc3NPcmln
aW5SZXF1ZXN0LCBzZWN1cml0eU9yaWdpbigpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygp
KTsKIAotICAgIGlmICgobV9vcHRpb25zLnByZWZsaWdodFBvbGljeSA9PSBDb25zaWRlclByZWZs
aWdodCAmJiBpc1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjcm9zc09yaWdpblJlcXVl
c3QtPmh0dHBNZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KSB8fCBtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IFByZXZlbnRQcmVmbGlnaHQpCi0gICAg
ICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoKmNyb3NzT3JpZ2luUmVxdWVz
dCk7CisgICAgaWYgKChtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IENvbnNpZGVyUHJlZmxp
Z2h0ICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNyb3NzT3JpZ2luUmVxdWVz
dC5odHRwTWV0aG9kKCksIGNyb3NzT3JpZ2luUmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKSB8
fCBtX29wdGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IFByZXZlbnRQcmVmbGlnaHQpCisgICAgICAg
IG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1ZXN0KTsK
ICAgICBlbHNlIHsKICAgICAgICAgbV9zaW1wbGVSZXF1ZXN0ID0gZmFsc2U7Ci0gICAgICAgIG1f
YWN0dWFsUmVxdWVzdCA9IFdURk1vdmUoY3Jvc3NPcmlnaW5SZXF1ZXN0KTsKLQotICAgICAgICBp
ZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuY2FuU2tpcFBy
ZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVy
bCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBN
ZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKQotICAgICAgICAg
ICAgcHJlZmxpZ2h0U3VjY2VzcygpOworICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuY2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigp
LT50b1N0cmluZygpLCBjcm9zc09yaWdpblJlcXVlc3QudXJsKCksIG1fb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzKCksIGNyb3NzT3JpZ2luUmVxdWVzdC5odHRwTWV0aG9kKCksIGNyb3NzT3JpZ2lu
UmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQorICAgICAgICAgICAgcHJlZmxpZ2h0U3VjY2Vz
cyhXVEZNb3ZlKGNyb3NzT3JpZ2luUmVxdWVzdCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCgqbV9hY3R1YWxSZXF1
ZXN0KTsKKyAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxp
Z2h0KFdURk1vdmUoY3Jvc3NPcmlnaW5SZXF1ZXN0KSk7CiAgICAgfQogfQogCkBAIC0xNDEsMTAg
KzE0MCwxNCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZVNpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZQogICAgIGxvYWRSZXF1ZXN0KHJlcXVl
c3QsIERvU2VjdXJpdHlDaGVjayk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkKIHsKLSAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCA9IGNyZWF0ZUFj
Y2Vzc0NvbnRyb2xQcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luKCkpOwot
ICAgIGxvYWRSZXF1ZXN0KHByZWZsaWdodFJlcXVlc3QsIERvU2VjdXJpdHlDaGVjayk7CisgICAg
aWYgKG1fYXN5bmMpIHsKKyAgICAgICAgbV9wcmVmbGlnaHRDaGVja2VyID0gQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRDaGVja2VyKCp0aGlzLCBXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICAgICAgbV9wcmVm
bGlnaHRDaGVja2VyLT5zdGFydFByZWZsaWdodCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6ZG9QcmVmbGlnaHQoKnRoaXMsIFdURk1v
dmUocmVxdWVzdCkpOwogfQogCiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6On5Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIoKQpAQCAtMTcyLDYgKzE3NSw4IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKG1fcmVz
b3VyY2UpCiAgICAgICAgIG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOworICAg
IGlmIChtX3ByZWZsaWdodENoZWNrZXIpCisgICAgICAgIG1fcHJlZmxpZ2h0Q2hlY2tlci0+c2V0
RGVmZXJzTG9hZGluZyh2YWx1ZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpjbGVhclJlc291cmNlKCkKQEAgLTE4NCw2ICsxODksOCBAQCB2b2lkIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZSgpCiAgICAgICAgIG1fcmVzb3VyY2UgPSBudWxscHRy
OwogICAgICAgICByZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgIH0KKyAgICBpZiAo
bV9wcmVmbGlnaHRDaGVja2VyKQorICAgICAgICBtX3ByZWZsaWdodENoZWNrZXIgPSBOdWxsb3B0
OwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cmVkaXJlY3RSZWNlaXZlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKQEAgLTI2MSwzNiArMjY4LDE0IEBA
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zCiAgICAgQVNTRVJUKG1fY2xpZW50KTsKIAogICAgIFN0
cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbjsKLSAgICBpZiAobV9hY3R1YWxSZXF1
ZXN0KSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX2RvY3VtZW50LmZyYW1l
KCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZWNl
aXZlUmVzb3VyY2VSZXNwb25zZShtX2RvY3VtZW50LmZyYW1lKCkpOwotICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKGNvb2tpZSwgaWRl
bnRpZmllciwgbG9hZGVyLCByZXNwb25zZSwgMCk7Ci0KKyAgICBpZiAoIW1fc2FtZU9yaWdpblJl
cXVlc3QgJiYgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3ND
b250cm9sKSB7CiAgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNl
LCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygpLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nlc3ND
b250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAgICAgICAgIHByZWZsaWdodEZhaWx1cmUo
aWRlbnRpZmllciwgcmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrKFJlc291
cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksIGFj
Y2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQotICAgICAgICBTdG9yZWRDcmVkZW50aWFscyBhbGxvd0NyZWRlbnRpYWxzID0gbV9v
cHRpb25zLmFsbG93Q3JlZGVudGlhbHMoKTsKLSAgICAgICAgYXV0byBwcmVmbGlnaHRSZXN1bHQg
PSBzdGQ6Om1ha2VfdW5pcXVlPENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtPihh
bGxvd0NyZWRlbnRpYWxzKTsKLSAgICAgICAgaWYgKCFwcmVmbGlnaHRSZXN1bHQtPnBhcnNlKHJl
c3BvbnNlLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikKLSAgICAgICAgICAgIHx8ICFw
cmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKG1fYWN0dWFsUmVxdWVzdC0+
aHR0cE1ldGhvZCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikKLSAgICAgICAgICAg
IHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhtX2FjdHVhbFJl
cXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24p
KSB7Ci0gICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKGlkZW50aWZpZXIsIHJlc3BvbnNlLnVy
bCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpz
aW5nbGV0b24oKS5hcHBlbmRFbnRyeShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2Fj
dHVhbFJlcXVlc3QtPnVybCgpLCBXVEZNb3ZlKHByZWZsaWdodFJlc3VsdCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NP
cmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKLSAgICAgICAgICAgIGlm
ICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscygpLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlv
bikpIHsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbEFjY2Vzc0NvbnRyb2xDaGVj
ayhSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlc3BvbnNlLnVy
bCgpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9uc2UpOwogICAgIH0KKworICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9uc2UpOwogfQogCiB2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCkBAIC0yOTksMTYgKzI4
NCwxMCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVJlY2VpdmVkKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhcgogICAgIGRpZFJlY2VpdmVEYXRhKG1fcmVz
b3VyY2UtPmlkZW50aWZpZXIoKSwgZGF0YSwgZGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBkYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAKLSAgICAvLyBQ
cmVmbGlnaHQgZGF0YSBzaG91bGQgYmUgaW52aXNpYmxlIHRvIGNsaWVudHMuCi0gICAgaWYgKG1f
YWN0dWFsUmVxdWVzdCkgewotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJl
Y2VpdmVEYXRhKG1fZG9jdW1lbnQuZnJhbWUoKSwgaWRlbnRpZmllciwgMCwgMCwgZGF0YUxlbmd0
aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoZGF0YSwgZGF0YUxlbmd0aCk7CiB9CiAKQEAgLTMxNiw3ICsyOTUsNyBAQCB2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJj
ZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7Ci0gICAgICAgIAorCiAgICAgaWYgKG1fcmVzb3Vy
Y2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgZGlkRmFpbChtX3Jlc291cmNlLT5pZGVudGlm
aWVyKCksIG1fcmVzb3VyY2UtPnJlc291cmNlRXJyb3IoKSk7CiAgICAgZWxzZQpAQCAtMzI1LDQ0
ICszMDQsMzQgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Ci0gICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoTG9hZGluZyhtX2RvY3VtZW50LmZyYW1lKCksIG1f
ZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllciwg
ZmluaXNoVGltZSk7Ci0KLSAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLSAg
ICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNj
ZXNzQ29udHJvbCk7Ci0gICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllciwgZmluaXNoVGltZSk7
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhp
ZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZEZhaWwodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKHVuc2lnbmVk
IGxvbmcsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIGlmIChtX2FjdHVhbFJl
cXVlc3QpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmco
bV9kb2N1bWVudC5mcmFtZSgpLCBtX2RvY3VtZW50LmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCksIGlkZW50aWZpZXIsIGVycm9yKTsKLQorICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoZXJyb3IpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6cHJlZmxpZ2h0U3VjY2VzcygpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6cHJlZmxpZ2h0U3VjY2VzcyhSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQogewotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVJlcXVlc3Q+IGFjdHVhbFJlcXVlc3Q7Ci0gICAgYWN0dWFs
UmVxdWVzdC5zd2FwKG1fYWN0dWFsUmVxdWVzdCk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVh
bFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgYWN0dWFsUmVxdWVzdC5zZXRIVFRQT3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogCi0gICAgYWN0dWFsUmVxdWVzdC0+
c2V0SFRUUE9yaWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLQotICAgIGNsZWFy
UmVzb3VyY2UoKTsKKyAgICBtX3ByZWZsaWdodENoZWNrZXIgPSBOdWxsb3B0OwogCiAgICAgLy8g
SXQgc2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5IGNoZWNrIHNpbmNlIHdlIGFscmVh
ZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgIGxvYWRSZXF1ZXN0KCph
Y3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CisgICAgbG9hZFJlcXVlc3QoYWN0dWFs
UmVxdWVzdCwgU2tpcFNlY3VyaXR5Q2hlY2spOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGVycm9yRGVzY3JpcHRpb24pCit2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIFJlc291cmNlRXJyb3IgZXJy
b3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgdXJsLCBlcnJvckRlc2NyaXB0aW9uKTsK
LSAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEZhaWxMb2FkaW5nKG1fZG9jdW1lbnQuZnJhbWUoKSwgbV9kb2N1bWVudC5mcmFtZSgp
LT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyLCBlcnJvcik7CisgICAgbV9w
cmVmbGlnaHRDaGVja2VyID0gTnVsbG9wdDsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkRmFpbExvYWRpbmcobV9kb2N1bWVudC5mcmFtZSgpLCBtX2RvY3VtZW50LmZyYW1lKCkt
PmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIsIGVycm9yKTsKIAotICAgIG1f
YWN0dWFsUmVxdWVzdCA9IG51bGxwdHI7IC8vIFByZXZlbnQgZGlkRmluaXNoTG9hZGluZygpIGZy
b20gYnlwYXNzaW5nIGFjY2VzcyBjaGVjay4KKyAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIG1f
Y2xpZW50LT5kaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrKGVycm9yKTsKIH0KIApAQCAtMzc3LDEz
ICszNDYsNiBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cgogICAgIGlmIChtX2FzeW5jKSB7CiAg
ICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBtX29wdGlvbnM7CiAgICAg
ICAgIG9wdGlvbnMuc2V0Q2xpZW50Q3JlZGVudGlhbFBvbGljeShEb05vdEFza0NsaWVudEZvckNy
b3NzT3JpZ2luQ3JlZGVudGlhbHMpOwotICAgICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Ci0g
ICAgICAgICAgICAvLyBEb24ndCBzbmlmZiBjb250ZW50IG9yIHNlbmQgbG9hZCBjYWxsYmFja3Mg
Zm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KLSAgICAgICAgICAgIG9wdGlvbnMuc2V0U2VuZExv
YWRDYWxsYmFja3MoRG9Ob3RTZW5kQ2FsbGJhY2tzKTsKLSAgICAgICAgICAgIG9wdGlvbnMuc2V0
U25pZmZDb250ZW50KERvTm90U25pZmZDb250ZW50KTsKLSAgICAgICAgICAgIC8vIEtlZXAgYnVm
ZmVyaW5nIHRoZSBkYXRhIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCi0gICAgICAgICAgICBv
cHRpb25zLnNldERhdGFCdWZmZXJpbmdQb2xpY3koQnVmZmVyRGF0YSk7Ci0gICAgICAgIH0KIAog
ICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0LCBvcHRpb25z
KTsKICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
cmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCkBAIC0zOTUsNyArMzU3LDcgQEAgdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU2VjdXIKIAogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gRklY
TUU6IFRocmVhZGFibGVMb2FkZXJPcHRpb25zLnNuaWZmQ29udGVudCBpcyBub3Qgc3VwcG9ydGVk
IGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cy4KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
OwogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKaW5kZXggNDZkZmM1MjhjZGQ5OWUxZTI2ZDY3YjUy
NzRlMzQzZmNhNWZhMWVjNi4uMTJmODMzNmEwMjUxNjMyYzVkMzA3NjFlNzc2MTAxMTUxZWMzYTRl
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuaApAQCAtMzEsMTYgKzMxLDEzIEBACiAjaWZuZGVmIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cl9oCiAjZGVmaW5lIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcl9oCiAKLSNpbmNsdWRlICJDYWNo
ZWRSYXdSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgi
CisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkYWJsZUxvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2FjaGVk
UmF3UmVzb3VyY2U7CiAgICAgY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5OwogICAgIGNsYXNz
IERvY3VtZW50OwotICAgIGNsYXNzIFVSTDsKLSAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAg
ICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dDsKIApAQCAtNTgsNiArNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
Y2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5n
KGJvb2wpOwogCisgICAgICAgIGZyaWVuZCBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI7CisK
ICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+OjpyZWY7
CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPjo6ZGVy
ZWY7CiAKQEAgLTg3LDEwICs4NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5p
c2hUaW1lKTsKICAgICAgICAgdm9pZCBkaWRGYWlsKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgICAgIHZvaWQgbWFrZVNpbXBs
ZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
OwotICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAgICAgIHZvaWQgcHJlZmxpZ2h0
U3VjY2VzcygpOwotICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1cmUodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGVycm9yRGVzY3JpcHRpb24pOwor
ICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dFdpdGhQcmVmbGlnaHQoUmVzb3VyY2VSZXF1ZXN0JiYpOworICAgICAgICB2b2lkIHByZWZsaWdo
dFN1Y2Nlc3MoUmVzb3VyY2VSZXF1ZXN0JiYpOworICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1
cmUodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAg
ICAgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNo
ZWNrUG9saWN5KTsKICAgICAgICAgYm9vbCBpc0FsbG93ZWRSZWRpcmVjdChjb25zdCBVUkwmKTsK
QEAgLTEwMSw2ICsxMDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKICAgICAgICAgY29uc3QgQ29udGVudFNl
Y3VyaXR5UG9saWN5JiBjb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdDsKIAorICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CisgICAgICAgIGNvbnN0
IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zOyB9CisgICAgICAgIGJvb2wgaXNMb2FkaW5nKCkgeyByZXR1cm4gbV9yZXNvdXJjZSB8fCBt
X3ByZWZsaWdodENoZWNrZXI7IH0KKwogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRSYXdSZXNvdXJjZT4gbV9yZXNvdXJjZTsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dCogbV9jbGllbnQ7CiAgICAgICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwpAQCAtMTA4LDggKzEx
MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5SZXF1
ZXN0OwogICAgICAgICBib29sIG1fc2ltcGxlUmVxdWVzdDsKICAgICAgICAgYm9vbCBtX2FzeW5j
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0PiBtX2FjdHVhbFJlcXVl
c3Q7IC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBwcmVmbGlnaHQgY2hlY2tzCiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50U2VjdXJpdHlQb2xpY3k+IG1fY29udGVudFNl
Y3VyaXR5UG9saWN5OworICAgICAgICBPcHRpb25hbDxDcm9zc09yaWdpblByZWZsaWdodENoZWNr
ZXI+IG1fcHJlZmxpZ2h0Q2hlY2tlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281007</attachid>
            <date>2016-06-10 05:53:11 -0700</date>
            <delta_ts>2016-06-10 06:24:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-158425-20160610145439.patch</filename>
            <type>text/plain</type>
            <size>33954</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxOTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE1MGI3MGI4ZmE0Y2Jm
YjljYTA5NTgyYzkyNWQ1MDlhNzE1M2MwZS4uZWY4MDdhYjVkYTAyNGI2NjI4NTUzNWIzNDBkZDY0
M2YwZjc5ZDkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE2LTA2LTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgTW92ZSBw
cmVmbGlnaHQgY2hlY2sgY29kZSBvdXRzaWRlIG9mIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4NDI1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTW92aW5nIHByZWZs
aWdodCBjaGVjayBjb2RlIGluIGl0cyBvd24gY2xhc3MuCisgICAgICAgIFRoaXMgYWxsb3dzIGNv
ZGUgdG8gYmUgZWFzaWVyIHRvIHJlYWQsIHVzZS9yZXVzZSBhbmQgdXBkYXRlLgorCisgICAgICAg
IEJlaGF2aW9yIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgZXhjZXB0IGluIHRoZSBjYXNl
IG9mIGEgcHJlZmxpZ2h0IHJlc3BvbnNlCisgICAgICAgIGJlaW5nIGEgM1hYIHJlZGlyZWN0IHJl
c3BvbnNlLgorICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIDNYWCByZXNwb25zZSB3YXMg
ZGlyZWN0bHkgcGFzc2VkIHRvIHRoZSBjb2RlIHByb2Nlc3NpbmcgcmVndWxhciByZXNwb25zZXMu
CisgICAgICAgIFRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRlc3RzLCBhIGRp
ZEZhaWxSZWRpcmVjdENoZWNrIGNhbGxiYWNrIGlzIGNhbGxlZC4KKyAgICAgICAgVGhpcyBzaG91
bGQgYmUgY2hhbmdlIHRvIGEgcHJlZmxpZ2h0IGZhaWx1cmUuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
cm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6On5Dcm9zc09y
aWdpblByZWZsaWdodENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyOjpoYW5kbGVMb2FkaW5nRmFpbHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OnZhbGlkYXRlUHJlZmxpZ2h0UmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyOjpub3RpZnlGaW5p
c2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OnN0
YXJ0UHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hl
Y2tlcjo6ZG9QcmVmbGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGln
aHRDaGVja2VyOjpyZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzT3Jp
Z2luUHJlZmxpZ2h0Q2hlY2tlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXI6OmlzWE1MSHR0cFJlcXVlc3QpOgorICAgICAg
ICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDogQWRkZWQuCisgICAgICAg
ICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjbGVhclJlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5pc2hl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlz
aExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJl
ZmxpZ2h0U3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnByZWZsaWdodEZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRCeUNvbnRl
bnRTZWN1cml0eVBvbGljeSk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpvcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6aXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZG9jdW1lbnQpOgorCiAyMDE2LTA2LTA4ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxh
ckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gQ1JBU0ggd2hlbiBnZXR0aW5nIHRo
ZSBjb21wdXRlZCBzdHlsZSBvZiBhIGdyaWQgd2l0aCBvbmx5IGFic29sdXRlbHkgcG9zaXRpb25l
ZCBjaGlsZHJlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2NzJjNGIyNjRiMjJmZTRiMTZiNzlj
NzMwMWYyNjUxMjc3ZjA0ZDlkLi43M2U2MjU1ZDU0Nzk5OGExNGMwZmYxYmQ2OTg3MTRkZTU4NGQ3
MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTkwMCw2ICsxOTAwLDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcAogICAgIGxvYWRlci9Db29r
aWVKYXIuY3BwCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKKyAgICBs
b2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcAogICAgIGxvYWRlci9Dcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRUaW1p
bmcuY3BwCiAgICAgbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI0OWE4M2NlM2M2ZDlj
ZWY2NmQ1OGUyZWQ1MDJhMmZiNDAzOTUzYWIuLjc0MDE0MjVhZDI1M2FlN2M0YmVkN2YzYTAzZTQ3
Y2I3MzcxMjRiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE1NjksNiArMTU2OSw4IEBACiAJCTQxOUJFNzU5MUJDN0Y0MkIw
MEUxQzg1QiAvKiBXZWJDb3JlQnVpbHRpbk5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTlCRTc1MjFCQzdGM0RCMDBFMUM4NUIgLyogV2ViQ29y
ZUJ1aWx0aW5OYW1lcy5oICovOyB9OwogCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVk
aWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxQTNENThDMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQuY3BwICovOyB9OwogCQk0MUEzRDU4RjEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVk
V29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MUEzRDU4RDEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmgg
Ki87IH07CisJCTQxQUJFNjdCMUQwNTgwREIwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdo
dENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxQUJFNjdBMUQwNTgwRDUwMDZEODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIu
aCAqLzsgfTsKKwkJNDFBQkU2N0MxRDA1ODBFMDAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxp
Z2h0Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MUFCRTY3OTFEMDU4MEQ1MDA2RDg2MkQgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmNwcCAqLzsgfTsKIAkJNDFBRDc1M0ExQ0VGNkJEMTAwQTMxNDg2IC8qIEZldGNoT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFBRDc1
MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAv
KiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5u
ZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMEQw
RkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLzsgfTsK
QEAgLTkwODMsNiArOTA4NSw4IEBACiAJCTQxQTAyM0VEMUEzOURCNzkwMEY3MjJERiAvKiBXcml0
YWJsZVN0cmVhbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV3JpdGFibGVTdHJlYW0uaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUEzRDU4QzEwMUMxNTJEMDAzMTZEMDcg
LyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlZGljYXRlZFdvcmtlclRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxQTNENThEMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJl
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVkaWNhdGVkV29ya2VyVGhy
ZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQUJFNjc5MUQwNTgwRDUwMDZE
ODYyRCAvKiBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFBQkU2N0ExRDA1ODBENTAwNkQ4NjJEIC8qIENy
b3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFBRDc1MzkxQ0VGNkJDRTAwQTMxNDg2IC8qIEZldGNoT3B0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaE9wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0
Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlUG9ydENo
YW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCRjcwMEQwRkU4NkY2MTAw
NUU4REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDsgcGF0
aCA9IGRlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjI3NjAsNiArMjI3NjQsOCBAQAogCQkJCUUxNDI0QzkyMTY0QjUy
QzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuaCAqLywKIAkJCQlFMUM0MTYxNjBGNjU2MzE4MDA5MkQy
RkIgLyogQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCAqLywKIAkJCQlFMUM0MTYxMTBGNjU2
MkZEMDA5MkQyRkIgLyogQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmggKi8sCisJCQkJNDFBQkU2
NzkxRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi8s
CisJCQkJNDFBQkU2N0ExRDA1ODBENTAwNkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hl
Y2tlci5oICovLAogCQkJCUUxQzQxNUREMEY2NTVEN0MwMDkyRDJGQiAvKiBDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcCAqLywKIAkJCQlFMUM0MTVEOTBGNjU1RDZGMDA5MkQyRkIg
LyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oICovLAogCQkJCTkzRTIyN0RCMEFG
NTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgKi8sCkBAIC0yNTU5OCw2ICsyNTYw
NCw3IEBACiAJCQkJNUNEOUY1NjgxQUEwRjc0NjAwREE0NUZGIC8qIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2QTgwNzg1MUIxOEY5NzcwMEUyMTlCRSAvKiBE
RkFDb21iaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZBNTE3RkUxQUI5MjIzODAwNjMzNURG
IC8qIERGQU1pbmltaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFBQkU2N0IxRDA1ODBEQjAw
NkQ4NjJEIC8qIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjY3NzI1RkYxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEMTlBMjY4MUExM0U3MDAwMDhENjUwRSAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDZGQ0I2MTgxQTcwODIwRTAwQzVBMjFFIC8qIERpYWdub3N0
aWNMb2dnaW5nS2V5cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTcwMiw2ICsyOTcwOSw3IEBACiAJ
CQkJMTVGQ0M5RkMxQjRERjdGMjAwRTcyMzI2IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMUEzN0JGMDk3QzcxNUYwMDE5RjNEOCAvKiBET01VdGlsaXR5Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTVDNzcwQTUxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlk
aXR5U3RhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk0MUFCRTY3QzFEMDU4MEUwMDA2RDg2MkQg
LyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
QzBGRjRBMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDYwMzdBMTQzMjgxQ0QwMEFCRjRCQSAvKiBET01XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODM5MTUxMEYxRTc2QjQwMEMyMzc4
MiAvKiBET01XZWJLaXRDU1NNYXRyaXgubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzI1YzEwMjBhMDY3Y2E1YTg4YzNkZGVkMjRkNGFlYTQxMzUyYmM0MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodENoZWNr
ZXIuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcm9z
c09yaWdpblByZWZsaWdodENoZWNrZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNl
LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNp
bmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGll
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcm9zc09yaWdpblByZWZsaWdodENoZWNr
ZXI6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcihEb2N1bWVudFRocmVhZGFibGVMb2FkZXIm
IGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICA6IG1fbG9hZGVyKGxvYWRl
cikKKyAgICAsIG1fcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQoreworfQorCitDcm9zc09yaWdp
blByZWZsaWdodENoZWNrZXI6On5Dcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIoKQoreworICAg
IGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7
Cit9CisKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyOjpoYW5kbGVMb2FkaW5nRmFp
bHVyZShEb2N1bWVudFRocmVhZGFibGVMb2FkZXImIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICAvLyBGSVhNRTogV2Ug
bWlnaHQgd2FudCB0byBjYWxsIHByZWZsaWdodEZhaWx1cmUgaW5zdGVhZC4KKyAgICBGcmFtZSog
ZnJhbWUgPSBsb2FkZXIuZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhmcmFtZSwgZnJhbWUt
PmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIsIGVycm9yKTsKKyAgICBsb2Fk
ZXIuZGlkRmFpbChpZGVudGlmaWVyLCBlcnJvcik7Cit9CisKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyOjp2YWxpZGF0ZVByZWZsaWdodFJlc3BvbnNlKERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlciYgbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEZy
YW1lKiBmcmFtZSA9IGxvYWRlci5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1l
KTsKKyAgICBhdXRvIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2Vp
dmVSZXNvdXJjZVJlc3BvbnNlKGZyYW1lKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNlKGNvb2tpZSwgaWRlbnRpZmllciwgZnJhbWUtPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCksIHJlc3BvbnNlLCAwKTsKKworICAgIFN0cmluZyBkZXNj
cmlwdGlvbjsKKyAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbG9h
ZGVyLm9wdGlvbnMoKS5hbGxvd0NyZWRlbnRpYWxzKCksIGxvYWRlci5zZWN1cml0eU9yaWdpbigp
LCBkZXNjcmlwdGlvbikpIHsKKyAgICAgICAgbG9hZGVyLnByZWZsaWdodEZhaWx1cmUoaWRlbnRp
ZmllciwgUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCByZXNwb25z
ZS51cmwoKSwgZGVzY3JpcHRpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlSXRlbT4obG9hZGVyLm9wdGlvbnMoKS5hbGxvd0NyZWRlbnRpYWxzKCkpOworICAgIGlmICgh
cmVzdWx0LT5wYXJzZShyZXNwb25zZSwgZGVzY3JpcHRpb24pCisgICAgICAgIHx8ICFyZXN1bHQt
PmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpLCBkZXNjcmlwdGlv
bikKKyAgICAgICAgfHwgIXJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKHJlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpLCBkZXNjcmlwdGlvbikpIHsKKyAgICAgICAgbG9hZGVyLnByZWZs
aWdodEZhaWx1cmUoaWRlbnRpZmllciwgUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdElu
dGVybmFsLCAwLCByZXNwb25zZS51cmwoKSwgZGVzY3JpcHRpb24pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRv
bigpLmFwcGVuZEVudHJ5KGxvYWRlci5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCByZXF1
ZXN0LnVybCgpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGxvYWRlci5wcmVmbGlnaHRTdWNjZXNz
KFdURk1vdmUocmVxdWVzdCkpOworfQorCit2b2lkIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tl
cjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOworICAgIGlmIChtX3Jl
c291cmNlLT5sb2FkRmFpbGVkT3JDYW5jZWxlZCgpKSB7CisgICAgICAgIGhhbmRsZUxvYWRpbmdG
YWlsdXJlKG1fbG9hZGVyLCBtX3Jlc291cmNlLT5pZGVudGlmaWVyKCksIG1fcmVzb3VyY2UtPnJl
c291cmNlRXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFsaWRhdGVQcmVm
bGlnaHRSZXNwb25zZShtX2xvYWRlciwgV1RGTW92ZShtX3JlcXVlc3QpLCBtX3Jlc291cmNlLT5p
ZGVudGlmaWVyKCksIG1fcmVzb3VyY2UtPnJlc3BvbnNlKCkpOworfQorCit2b2lkIENyb3NzT3Jp
Z2luUHJlZmxpZ2h0Q2hlY2tlcjo6c3RhcnRQcmVmbGlnaHQoKQoreworICAgIGF1dG8gb3B0aW9u
cyA9IG1fbG9hZGVyLm9wdGlvbnMoKTsKKyAgICBvcHRpb25zLnNldENsaWVudENyZWRlbnRpYWxQ
b2xpY3koRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzKTsKKyAgICBvcHRp
b25zLnNldFNlY3VyaXR5Q2hlY2soRG9TZWN1cml0eUNoZWNrKTsKKyAgICAvLyBEb24ndCBzbmlm
ZiBjb250ZW50IG9yIHNlbmQgbG9hZCBjYWxsYmFja3MgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVz
dC4KKyAgICBvcHRpb25zLnNldFNlbmRMb2FkQ2FsbGJhY2tzKERvTm90U2VuZENhbGxiYWNrcyk7
CisgICAgb3B0aW9ucy5zZXRTbmlmZkNvbnRlbnQoRG9Ob3RTbmlmZkNvbnRlbnQpOworICAgIC8v
IEtlZXAgYnVmZmVyaW5nIHRoZSBkYXRhIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCisgICAg
b3B0aW9ucy5zZXREYXRhQnVmZmVyaW5nUG9saWN5KEJ1ZmZlckRhdGEpOworCisgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0IHByZWZsaWdodFJlcXVlc3QoY3JlYXRlQWNjZXNzQ29udHJvbFByZWZs
aWdodFJlcXVlc3QobV9yZXF1ZXN0LCBtX2xvYWRlci5zZWN1cml0eU9yaWdpbigpKSwgb3B0aW9u
cyk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkucmVz
b3VyY2VUaW1pbmdFbmFibGVkKCkpCisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SW5pdGlh
dG9yKG1fbG9hZGVyLm9wdGlvbnMoKS5pbml0aWF0b3IpOworCisgICAgQVNTRVJUKCFtX3Jlc291
cmNlKTsKKyAgICBtX3Jlc291cmNlID0gbV9sb2FkZXIuZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLnJlcXVlc3RSYXdSZXNvdXJjZShwcmVmbGlnaHRSZXF1ZXN0KTsKKyAgICBpZiAo
bV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOworfQorCit2
b2lkIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6ZG9QcmVmbGlnaHQoRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyJiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAg
aWYgKCFsb2FkZXIuZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCA9IGNyZWF0ZUFjY2Vzc0NvbnRyb2xQcmVm
bGlnaHRSZXF1ZXN0KHJlcXVlc3QsIGxvYWRlci5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBSZXNv
dXJjZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbG9hZGVy
LmRvY3VtZW50KCkuZnJhbWUoKS0+bG9hZGVyKCkubG9hZFJlc291cmNlU3luY2hyb25vdXNseShw
cmVmbGlnaHRSZXF1ZXN0LCBsb2FkZXIub3B0aW9ucygpLmFsbG93Q3JlZGVudGlhbHMoKSwgbG9h
ZGVyLm9wdGlvbnMoKS5jbGllbnRDcmVkZW50aWFsUG9saWN5KCksIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CisKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmIHJlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgPD0gMCkgeworICAgICAgICBoYW5kbGVMb2FkaW5nRmFpbHVyZShsb2FkZXIsIGlkZW50
aWZpZXIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YWxpZGF0ZVByZWZs
aWdodFJlc3BvbnNlKGxvYWRlciwgV1RGTW92ZShyZXF1ZXN0KSwgaWRlbnRpZmllciwgcmVzcG9u
c2UpOworfQorCit2b2lkIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjo6cmVkaXJlY3RSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FsbCBwcmVmbGlnaHRGYWlsdXJl
IG9yIHNldCByZWRpcmVjdCBtb2RlIHRvIGVycm9yLgorICAgIEFTU0VSVChtX2xvYWRlci5tX2Ns
aWVudCk7CisgICAgbV9sb2FkZXIubV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7Cit9
CisKK3ZvaWQgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVja2VyOjpzZXREZWZlcnNMb2FkaW5nKGJv
b2wgdmFsdWUpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnNl
dERlZmVyc0xvYWRpbmcodmFsdWUpOworfQorCitib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hl
Y2tlcjo6aXNYTUxIdHRwUmVxdWVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9hZGVyLmlz
WE1MSHR0cFJlcXVlc3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJmNjdlNDg4OGRjYjJiZWM3OTQ4YTliOWJlYjE2YjU4OWUzMjViZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRDaGVj
a2VyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWRSYXdS
ZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FjaGVkUmF3UmVzb3VyY2U7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjsKK2NsYXNzIFJlc291cmNlRXJyb3I7CisKK2NsYXNzIENyb3NzT3JpZ2luUHJl
ZmxpZ2h0Q2hlY2tlciBmaW5hbCA6IHByaXZhdGUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGRvUHJlZmxpZ2h0KERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlciYsIFJlc291cmNlUmVxdWVzdCYmKTsKKworICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hl
Y2tlcihEb2N1bWVudFRocmVhZGFibGVMb2FkZXImLCBSZXNvdXJjZVJlcXVlc3QmJik7CisgICAg
fkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcigpOworCisgICAgdm9pZCBzdGFydFByZWZsaWdo
dCgpOworCisgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOworCitwcml2YXRlOgorICAg
IHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICB2b2lkIHJl
ZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgZmluYWw7CisKKyAgICBzdGF0aWMgdm9pZCBoYW5kbGVMb2FkaW5n
RmFpbHVyZShEb2N1bWVudFRocmVhZGFibGVMb2FkZXImLCB1bnNpZ25lZCBsb25nLCBjb25zdCBS
ZXNvdXJjZUVycm9yJik7CisgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVQcmVmbGlnaHRSZXNwb25z
ZShEb2N1bWVudFRocmVhZGFibGVMb2FkZXImLCBSZXNvdXJjZVJlcXVlc3QmJiwgdW5zaWduZWQg
bG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgYm9vbCBpc1hNTEh0dHBSZXF1
ZXN0KCkgY29uc3QgZmluYWw7CisKKyAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXImIG1fbG9h
ZGVyOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291
cmNlOworICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuY3BwCmluZGV4IGE1MGE2MzZiZDBiYTQyNTg2ZjFlNDhkYTY1Y2QyNDA5ZTIyYzQ2
OWMuLjAzYjRiY2I2M2M1ZmNlNzUzNmI5OTY2MWM0YjI0ZWZlMTViMzRhNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5o
IgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNyb3NzT3Jp
Z2luQWNjZXNzQ29udHJvbC5oIgorI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tl
ci5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC03MCw3ICs3MSw3IEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERv
Y3VtZW50JiBkb2N1bWVudCwgY29uCiBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgc3RkOjp1bmlxdWVfcHRy
PENvbnRlbnRTZWN1cml0eVBvbGljeT4mJiBjb250ZW50U2VjdXJpdHlQb2xpY3kpCiB7CiAgICAg
UmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgY2xpZW50LCBMb2FkQXN5bmNocm9ub3Vz
bHksIHJlcXVlc3QsIG9wdGlvbnMsIFdURk1vdmUoY29udGVudFNlY3VyaXR5UG9saWN5KSkpOwot
ICAgIGlmICghbG9hZGVyLT5tX3Jlc291cmNlKQorICAgIGlmICghbG9hZGVyLT5pc0xvYWRpbmco
KSkKICAgICAgICAgbG9hZGVyID0gbnVsbHB0cjsKICAgICByZXR1cm4gbG9hZGVyOwogfQpAQCAt
MTExLDE5ICsxMTIsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXMKIHsKICAgICBBU1NFUlQo
bV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsK
IAotICAgIGF1dG8gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJj
ZVJlcXVlc3Q+KHJlcXVlc3QpOwotICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKCpj
cm9zc09yaWdpblJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzKCkpOworICAgIGF1dG8gY3Jvc3NPcmlnaW5SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB1
cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbChjcm9zc09yaWdpblJlcXVlc3QsIHNlY3VyaXR5
T3JpZ2luKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKCkpOwogCi0gICAgaWYgKChtX29w
dGlvbnMucHJlZmxpZ2h0UG9saWN5ID09IENvbnNpZGVyUHJlZmxpZ2h0ICYmIGlzU2ltcGxlQ3Jv
c3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNyb3NzT3JpZ2luUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBj
cm9zc09yaWdpblJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpIHx8IG1fb3B0aW9ucy5wcmVm
bGlnaHRQb2xpY3kgPT0gUHJldmVudFByZWZsaWdodCkKLSAgICAgICAgbWFrZVNpbXBsZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdCgqY3Jvc3NPcmlnaW5SZXF1ZXN0KTsKKyAgICBpZiAoKG1fb3B0
aW9ucy5wcmVmbGlnaHRQb2xpY3kgPT0gQ29uc2lkZXJQcmVmbGlnaHQgJiYgaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1ZXN0Lmh0dHBNZXRob2QoKSwgY3Jv
c3NPcmlnaW5SZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpIHx8IG1fb3B0aW9ucy5wcmVmbGln
aHRQb2xpY3kgPT0gUHJldmVudFByZWZsaWdodCkKKyAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdChjcm9zc09yaWdpblJlcXVlc3QpOwogICAgIGVsc2UgewogICAgICAg
ICBtX3NpbXBsZVJlcXVlc3QgPSBmYWxzZTsKLSAgICAgICAgbV9hY3R1YWxSZXF1ZXN0ID0gV1RG
TW92ZShjcm9zc09yaWdpblJlcXVlc3QpOwotCi0gICAgICAgIGlmIChDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2FjdHVhbFJl
cXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCi0gICAgICAgICAgICBwcmVmbGlnaHRTdWNjZXNz
KCk7CisgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0
b24oKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIGNyb3Nz
T3JpZ2luUmVxdWVzdC51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMoKSwgY3Jvc3NP
cmlnaW5SZXF1ZXN0Lmh0dHBNZXRob2QoKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0Lmh0dHBIZWFkZXJG
aWVsZHMoKSkpCisgICAgICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKFdURk1vdmUoY3Jvc3NPcmln
aW5SZXF1ZXN0KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KCptX2FjdHVhbFJlcXVlc3QpOworICAgICAgICAgICAg
bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoV1RGTW92ZShjcm9zc09y
aWdpblJlcXVlc3QpKTsKICAgICB9CiB9CiAKQEAgLTE0MSwxMCArMTQwLDE0IEBAIHZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
KGNvbnN0IFJlc291cmNlCiAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgRG9TZWN1cml0eUNoZWNr
KTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1
ZXN0V2l0aFByZWZsaWdodChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQogewotICAgIFJlc291
cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0ID0gY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdo
dFJlcXVlc3QocmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgbG9hZFJlcXVlc3QocHJl
ZmxpZ2h0UmVxdWVzdCwgRG9TZWN1cml0eUNoZWNrKTsKKyAgICBpZiAobV9hc3luYykgeworICAg
ICAgICBtX3ByZWZsaWdodENoZWNrZXIgPSBDcm9zc09yaWdpblByZWZsaWdodENoZWNrZXIoKnRo
aXMsIFdURk1vdmUocmVxdWVzdCkpOworICAgICAgICBtX3ByZWZsaWdodENoZWNrZXItPnN0YXJ0
UHJlZmxpZ2h0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRDaGVja2VyOjpkb1ByZWZsaWdodCgqdGhpcywgV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAK
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCkBA
IC0xNzEsNiArMTc0LDggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9yZXNvdXJjZSkKICAgICAgICAgbV9y
ZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAgaWYgKG1fcHJlZmxpZ2h0Q2hl
Y2tlcikKKyAgICAgICAgbV9wcmVmbGlnaHRDaGVja2VyLT5zZXREZWZlcnNMb2FkaW5nKHZhbHVl
KTsKIH0KIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNsZWFyUmVzb3VyY2UoKQpA
QCAtMTgzLDYgKzE4OCw4IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjbGVhclJl
c291cmNlKCkKICAgICAgICAgbV9yZXNvdXJjZSA9IG51bGxwdHI7CiAgICAgICAgIHJlc291cmNl
LT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgfQorICAgIGlmIChtX3ByZWZsaWdodENoZWNrZXIp
CisgICAgICAgIG1fcHJlZmxpZ2h0Q2hlY2tlciA9IE51bGxvcHQ7CiB9CiAKIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpyZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZWRpcmVjdFJlc3BvbnNlKQpAQCAtMjYwLDM2ICsyNjcsMTQgQEAgdm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnMKICAgICBBU1NFUlQobV9jbGllbnQpOwogCiAgICAgU3RyaW5nIGFjY2Vzc0NvbnRyb2xF
cnJvckRlc2NyaXB0aW9uOwotICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKLSAgICAgICAgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tp
ZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2VpdmVSZXNvdXJjZVJlc3BvbnNl
KG1fZG9jdW1lbnQuZnJhbWUoKSk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVJlc291cmNlUmVzcG9uc2UoY29va2llLCBpZGVudGlmaWVyLCBsb2FkZXIsIHJl
c3BvbnNlLCAwKTsKLQorICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiBtX29wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpIHsKICAgICAgICAg
aWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzKCksIHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0
aW9uKSkgewotICAgICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZShpZGVudGlmaWVyLCByZXNwb25z
ZS51cmwoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWxBY2Nlc3NDb250cm9sQ2hlY2soUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bldlYktpdEludGVybmFsLCAwLCByZXNwb25zZS51cmwoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVz
Y3JpcHRpb24pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIFN0
b3JlZENyZWRlbnRpYWxzIGFsbG93Q3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVkZW50
aWFscygpOwotICAgICAgICBhdXRvIHByZWZsaWdodFJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+KGFsbG93Q3JlZGVudGlhbHMpOwot
ICAgICAgICBpZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UsIGFjY2Vzc0NvbnRy
b2xFcnJvckRlc2NyaXB0aW9uKQotICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxs
b3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIGFjY2Vz
c0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKQotICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3Vs
dC0+YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZp
ZWxkcygpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKLSAgICAgICAgICAgIHBy
ZWZsaWdodEZhaWx1cmUoaWRlbnRpZmllciwgcmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xF
cnJvckRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmFwcGVuZEVu
dHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCks
IFdURk1vdmUocHJlZmxpZ2h0UmVzdWx0KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFt
X3NhbWVPcmlnaW5SZXF1ZXN0ICYmIG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kg
PT0gVXNlQWNjZXNzQ29udHJvbCkgewotICAgICAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250
cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKCksIHNlY3VyaXR5
T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgewotICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrKFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksIGFjY2Vzc0NvbnRyb2xF
cnJvckRlc2NyaXB0aW9uKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShpZGVu
dGlmaWVyLCByZXNwb25zZSk7CiAgICAgfQorCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNw
b25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKQEAgLTI5OCwxNiArMjgzLDEwIEBAIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBjb25zdCBjaGFyCiAgICAgZGlkUmVjZWl2ZURhdGEobV9yZXNvdXJjZS0+aWRlbnRpZmllcigp
LCBkYXRhLCBkYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmRpZFJlY2VpdmVEYXRhKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgY2hhciogZGF0
YSwgaW50IGRhdGFMZW5ndGgpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVj
ZWl2ZURhdGEodW5zaWduZWQgbG9uZywgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgp
CiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKIAotICAgIC8vIFByZWZsaWdodCBkYXRhIHNob3Vs
ZCBiZSBpbnZpc2libGUgdG8gY2xpZW50cy4KLSAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Ci0g
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZURhdGEobV9kb2N1bWVu
dC5mcmFtZSgpLCBpZGVudGlmaWVyLCAwLCAwLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBkYXRhTGVuZ3Ro
KTsKIH0KIApAQCAtMzE1LDcgKzI5NCw3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAgICAgQVNTRVJU
KG1fY2xpZW50KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jl
c291cmNlKTsKLSAgICAgICAgCisKICAgICBpZiAobV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgp
KQogICAgICAgICBkaWRGYWlsKG1fcmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgbV9yZXNvdXJjZS0+
cmVzb3VyY2VFcnJvcigpKTsKICAgICBlbHNlCkBAIC0zMjQsNDQgKzMwMywzNCBAQCB2b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIGlm
IChtX2FjdHVhbFJlcXVlc3QpIHsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRGaW5pc2hMb2FkaW5nKG1fZG9jdW1lbnQuZnJhbWUoKSwgbV9kb2N1bWVudC5mcmFtZSgpLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKLQotICAg
ICAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotICAgICAgICBBU1NFUlQobV9vcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKLSAgICAg
ICAgcHJlZmxpZ2h0U3VjY2VzcygpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+ZGlk
RmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKKyAgICBBU1NFUlQobV9jbGll
bnQpOworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIGZpbmlzaFRp
bWUpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwodW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKLSAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhtX2RvY3VtZW50LmZyYW1lKCks
IG1fZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmll
ciwgZXJyb3IpOwotCisgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBtX2NsaWVudC0+ZGlkRmFp
bChlcnJvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRT
dWNjZXNzKCkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNz
KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlc291
cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKLSAgICBhY3R1YWxSZXF1ZXN0LnN3YXAobV9hY3R1
YWxSZXF1ZXN0KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgYWN0dWFsUmVxdWVzdChXVEZNb3ZlKHJl
cXVlc3QpKTsKKyAgICBhY3R1YWxSZXF1ZXN0LnNldEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSk7CiAKLSAgICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKHNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwotCi0gICAgY2xlYXJSZXNvdXJjZSgpOworICAgIG1f
cHJlZmxpZ2h0Q2hlY2tlciA9IE51bGxvcHQ7CiAKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8g
c2tpcCB0aGUgc2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUg
cHJlZmxpZ2h0IHJlcXVlc3QuCi0gICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBT
ZWN1cml0eUNoZWNrKTsKKyAgICBsb2FkUmVxdWVzdChhY3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJp
dHlDaGVjayk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRG
YWlsdXJlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgZXJyb3JEZXNjcmlwdGlvbikKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpw
cmVmbGlnaHRGYWlsdXJlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCiB7Ci0gICAgUmVzb3VyY2VFcnJvciBlcnJvcihlcnJvckRvbWFpbldlYktp
dEludGVybmFsLCAwLCB1cmwsIGVycm9yRGVzY3JpcHRpb24pOwotICAgIGlmIChtX2FjdHVhbFJl
cXVlc3QpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmco
bV9kb2N1bWVudC5mcmFtZSgpLCBtX2RvY3VtZW50LmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCksIGlkZW50aWZpZXIsIGVycm9yKTsKKyAgICBtX3ByZWZsaWdodENoZWNrZXIgPSBO
dWxsb3B0OworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyht
X2RvY3VtZW50LmZyYW1lKCksIG1fZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSwgaWRlbnRpZmllciwgZXJyb3IpOwogCi0gICAgbV9hY3R1YWxSZXF1ZXN0ID0gbnVs
bHB0cjsgLy8gUHJldmVudCBkaWRGaW5pc2hMb2FkaW5nKCkgZnJvbSBieXBhc3NpbmcgYWNjZXNz
IGNoZWNrLgorICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9jbGllbnQtPmRpZEZhaWxBY2Nl
c3NDb250cm9sQ2hlY2soZXJyb3IpOwogfQogCkBAIC0zNzYsMTMgKzM0NSw2IEBAIHZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFNlY3VyCiAgICAgaWYgKG1fYXN5bmMpIHsKICAgICAgICAgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMgb3B0aW9ucyA9IG1fb3B0aW9uczsKICAgICAgICAgb3B0aW9ucy5zZXRDbGll
bnRDcmVkZW50aWFsUG9saWN5KERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFs
cyk7Ci0gICAgICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKLSAgICAgICAgICAgIC8vIERvbid0
IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCBy
ZXF1ZXN0LgotICAgICAgICAgICAgb3B0aW9ucy5zZXRTZW5kTG9hZENhbGxiYWNrcyhEb05vdFNl
bmRDYWxsYmFja3MpOwotICAgICAgICAgICAgb3B0aW9ucy5zZXRTbmlmZkNvbnRlbnQoRG9Ob3RT
bmlmZkNvbnRlbnQpOwotICAgICAgICAgICAgLy8gS2VlcCBidWZmZXJpbmcgdGhlIGRhdGEgZm9y
IHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KLSAgICAgICAgICAgIG9wdGlvbnMuc2V0RGF0YUJ1ZmZl
cmluZ1BvbGljeShCdWZmZXJEYXRhKTsKLSAgICAgICAgfQogCiAgICAgICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCBuZXdSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMpOwogICAgICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJs
ZWQoKSkKQEAgLTM5NCw3ICszNTYsNyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
bG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cgogCiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBGSVhNRTogVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMuc25pZmZDb250ZW50IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN5bmNocm9ub3VzIHJl
cXVlc3RzLgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgUmVzb3VyY2VFcnJv
ciBlcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaAppbmRleCA0NmRmYzUyOGNkZDk5ZTFlMjZkNjdiNTI3NGUzNDNmY2E1ZmExZWM2Li4x
MmY4MzM2YTAyNTE2MzJjNWQzMDc2MWU3NzYxMDExNTFlYzNhNGVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCkBAIC0zMSwxNiArMzEs
MTMgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKICNkZWZpbmUgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDcm9zc09y
aWdpblByZWZsaWdodENoZWNrZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZTsKICAgICBj
bGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xh
c3MgVVJMOwotICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBTZWN1cml0eU9y
aWdpbjsKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OwogCkBAIC01OCw2ICs1NSw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAKKyAgICAgICAg
ZnJpZW5kIENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcjsKKwogICAgICAgICB1c2luZyBSZWZD
b3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj46OnJlZjsKICAgICAgICAgdXNpbmcgUmVm
Q291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+OjpkZXJlZjsKIApAQCAtODcsMTAgKzg2
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOwogICAgICAgICB2
b2lkIGRpZEZhaWwodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKLSAgICAgICAgdm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAgICAgIHZvaWQgbWFr
ZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KTsKLSAgICAgICAgdm9pZCBwcmVmbGlnaHRTdWNjZXNzKCk7Ci0gICAgICAg
IHZvaWQgcHJlZmxpZ2h0RmFpbHVyZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbik7CisgICAgICAgIHZvaWQgbWFrZVNp
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAg
ICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChSZXNv
dXJjZVJlcXVlc3QmJik7CisgICAgICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2VzcyhSZXNvdXJjZVJl
cXVlc3QmJik7CisgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZSh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAgICAgICB2b2lkIGxvYWRSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kpOwogICAgICAg
ICBib29sIGlzQWxsb3dlZFJlZGlyZWN0KGNvbnN0IFVSTCYpOwpAQCAtMTAxLDYgKzEwMCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwogICAgICAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIGNvbnRl
bnRTZWN1cml0eVBvbGljeSgpIGNvbnN0OwogCisgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCgp
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICAgICAgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KKyAgICAgICAgYm9v
bCBpc0xvYWRpbmcoKSB7IHJldHVybiBtX3Jlc291cmNlIHx8IG1fcHJlZmxpZ2h0Q2hlY2tlcjsg
fQorCiAgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jl
c291cmNlOwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAg
ICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CkBAIC0xMDgsOCArMTExLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIG1fc2FtZU9yaWdpblJlcXVlc3Q7CiAgICAgICAgIGJvb2wg
bV9zaW1wbGVSZXF1ZXN0OwogICAgICAgICBib29sIG1fYXN5bmM7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZXNvdXJjZVJlcXVlc3Q+IG1fYWN0dWFsUmVxdWVzdDsgLy8gbm9uLW51bGwgZHVy
aW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVja3MKICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENvbnRlbnRTZWN1cml0eVBvbGljeT4gbV9jb250ZW50U2VjdXJpdHlQb2xpY3k7CisgICAg
ICAgIE9wdGlvbmFsPENyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlcj4gbV9wcmVmbGlnaHRDaGVj
a2VyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>