<?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>32499</bug_id>
          
          <creation_ts>2009-12-13 15:43:17 -0800</creation_ts>
          <short_desc>Add client based Geolocation provider</short_desc>
          <delta_ts>2009-12-15 10:59:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171255</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 15:43:17 -0800</bug_when>
    <thetext>We should add a way to string geolocation information up through the client infrastructure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171256</commentid>
    <comment_count>1</comment_count>
      <attachid>44768</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 15:52:05 -0800</bug_when>
    <thetext>Created attachment 44768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171257</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-13 15:52:47 -0800</bug_when>
    <thetext>Attachment 44768 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/page/Geolocation.h:56:  Missing space after ,  [whitespace/comma] [3]
WebCore/page/Geolocation.cpp:62:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/page/GeolocationError.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/page/GeolocationPosition.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171267</commentid>
    <comment_count>3</comment_count>
      <attachid>44768</attachid>
    <who name="">mitz</who>
    <bug_when>2009-12-13 16:59:35 -0800</bug_when>
    <thetext>Comment on attachment 44768
Patch

CLIENT_BASED_GEOLOCATION is not a platform feature, so it’s not appropriate to guard it with USE(). Please use ENABLE(CLIENT_BASED_GEOLOCATION) (or maybe CLIENT_GEOLOCATION_PROVIDER).

&gt; +        Add client based Geolocation provider

Not sure Geolocation needs to be capitalized here.

&gt; +static PassRefPtr&lt;Geoposition&gt; createGeopositionFromGeolocationPosition(GeolocationPosition* position)

You can call this createGeoposition().

&gt; +static PassRefPtr&lt;PositionError&gt; createPositionErrorFromGeolocationError(GeolocationError* error)

You can call this createGeoposition().

&gt; +void Geolocation::positionChanged()

I think this method should take a PassRefPtr&lt;Geoposition&gt; and set m_currentPosition to it. Both call sites know the Geoposition.

&gt; +void Geolocation::positionChanged(GeolocationPosition* position)

I’d call this setPosition().

&gt; +void Geolocation::errorOccurred(GeolocationError* error)

And I’d call this setError().

&gt; +    RefPtr&lt;Geoposition&gt; m_lastPosition;

This variable isn’t necessary.

&gt; +    HashSet&lt;RefPtr&lt;Geolocation&gt; &gt;::const_iterator it = m_observers.begin();
&gt; +    HashSet&lt;RefPtr&lt;Geolocation&gt; &gt;::const_iterator end = m_observers.end();
&gt; +    for (; it != end; ++it)

Normally the loop variable is defined and initialized in the for statement.

&gt; +    enum ErrorCode {
&gt; +        PermissionDenied,
&gt; +        PositionUnavailable
&gt; +    };

It’s strange to call these “codes” but I don’t have a better suggestion.

&gt;  #if ENABLE(NOTIFICATIONS)
&gt;      class NotificationPresenter;
&gt;  #endif
&gt; +#if ENABLE(CLIENT_BASED_GEOLOCATION)
&gt; +    class NotificationPresenter;
&gt; +#endif

Please combine these into a single #if ENABLE(NOTIFICATIONS) || ENABLE(CLIENT_BASED_GEOLOCATION).

&gt; +#if USE(CLIENT_BASED_GEOLOCATION)
&gt; +        GeolocationController* geolocationController() const { return m_geolocationController.get(); }
&gt; +#endif

Can this return a GeolocationController&amp;? Seems like it should never be 0. Which makes me wonder why it’s referenced by pointer and allocated dynamically instead of being a member of Page. However, this is consistent with other clients so I’m not asking that you change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171268</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-13 17:02:11 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; +static PassRefPtr&lt;PositionError&gt; createPositionErrorFromGeolocationError(GeolocationError* error)
&gt; 
&gt; You can call this createGeoposition().

Sorry, I meant createPositionError().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171269</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 17:24:55 -0800</bug_when>
    <thetext>&gt; &gt;  #if ENABLE(NOTIFICATIONS)
&gt; &gt;      class NotificationPresenter;
&gt; &gt;  #endif
&gt; &gt; +#if ENABLE(CLIENT_BASED_GEOLOCATION)
&gt; &gt; +    class NotificationPresenter;
&gt; &gt; +#endif

This is not necessary, it was left in by mistake.  I have remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171272</commentid>
    <comment_count>6</comment_count>
      <attachid>44771</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 17:37:30 -0800</bug_when>
    <thetext>Created attachment 44771
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171275</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-13 17:39:52 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44771 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171484</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-14 11:27:19 -0800</bug_when>
    <thetext>Landed in r52103.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171915</commentid>
    <comment_count>9</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-15 10:25:15 -0800</bug_when>
    <thetext>Eric, thanks for adding me to the bug.

Sam, I have a few questions about the patch ...
- Can you explain the motivation behind adding an alternative to the current Geolocation service? What are the advantages of the client-based provider? Do you intend that we support both types in the future, or will the existing Geolocation service be deprecated?
- Why do you introduce new position and error types? Why can&apos;t the existing Geoposition and PositionError types be used with the client provider? I see you&apos;ve excluded the TIMEOUT error code from the new error type as it&apos;s not needed by the provider. Why have you left in the PERMISSION_DENIED code? This too is handled separately by the Geolocation class.
- What&apos;s the reason for making Geolocation::suspend/resume() private? These methods are used as public methods on Android, where we suspend the Geolocation service when the browser tab is in the background. Also, it looks like the implementation of these methods is missing.

Finally, could you CC me on all future Geolocation changes please? I&apos;m working on Geolocation in Android and have sent a number of patches recently.

Thanks,
Steve</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171928</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-15 10:54:49 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Eric, thanks for adding me to the bug.
&gt; 
&gt; Sam, I have a few questions about the patch ...
&gt; - Can you explain the motivation behind adding an alternative to the current
&gt; Geolocation service? What are the advantages of the client-based provider?

The intent of the client based provider is to allow an embedding layer more control of the geolocation implementation without egregious layering violations.

&gt; Do you intend that we support both types in the future, or will the existing
&gt; Geolocation service be deprecated?

It will only be deprecated if the new way works better for others.

&gt; - Why do you introduce new position and error types? Why can&apos;t the existing
&gt; Geoposition and PositionError types be used with the client provider? I see
&gt; you&apos;ve excluded the TIMEOUT error code from the new error type as it&apos;s not
&gt; needed by the provider. Why have you left in the PERMISSION_DENIED code? This
&gt; too is handled separately by the Geolocation class.

I did this because it is an existing layering violation for the platform layer to know about these DOM types.  In general, I don&apos;t think it is a good idea to conflate data coming from the platform and DOM types due to the caching behavior of JS objects.

&gt; - What&apos;s the reason for making Geolocation::suspend/resume() private? These
&gt; methods are used as public methods on Android, where we suspend the Geolocation
&gt; service when the browser tab is in the background. Also, it looks like the
&gt; implementation of these methods is missing.

I made them private to find out if anyone was using it, and since it compiled I assumed no one was.  I meant to remove them.  I will add them back if you are using them.

&gt; Finally, could you CC me on all future Geolocation changes please? I&apos;m working
&gt; on Geolocation in Android and have sent a number of patches recently.
&gt; 

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171929</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-12-15 10:59:18 -0800</bug_when>
    <thetext>&gt; I did this because it is an existing layering violation for the platform layer
&gt; to know about these DOM types.  In general, I don&apos;t think it is a good idea to
&gt; conflate data coming from the platform and DOM types due to the caching
&gt; behavior of JS objects.
I see.

&gt; I made them private to find out if anyone was using it, and since it compiled I
&gt; assumed no one was.  I meant to remove them.
We&apos;re upstreaming as fast as we can but I&apos;m afraid the relevant Android files aren&apos;t yet there.

&gt; I will add them back if you are using them.
Thanks</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44768</attachid>
            <date>2009-12-13 15:52:05 -0800</date>
            <delta_ts>2009-12-13 17:37:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>GeoWebCore.diff</filename>
            <type>text/plain</type>
            <size>56494</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMDktMTItMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjQ5OQorICAgICAgICBB
ZGQgY2xpZW50IGJhc2VkIEdlb2xvY2F0aW9uIHByb3ZpZGVyCisKKyAgICAgICAgQWRkIGZpcnN0
IGN1dCBvZiBhIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92aWRlci4gVGhpcyBpcyBndWFy
ZGVkIGJ5CisgICAgICAgIFVTRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pIGFuZCBpcyBvZmYg
YnkgZGVmYXVsdCBmb3Igbm93LiBUaGlzIGFkZHMgYQorICAgICAgICBHZW9sb2NhdGlvbkNvbnRy
b2xsZXJDbGllbnQgaW50ZXJmYWNlIHRoYXQgbm8tb25lIGN1cnJlbnRseSBpbXBsZW1lbnRzLAor
ICAgICAgICBidXQgd2lsbCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHBhZ2UvR2Vv
bG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2VvcG9zaXRpb25Gcm9tR2Vv
bG9jYXRpb25Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkVycm9y
RnJvbUdlb2xvY2F0aW9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdl
b2xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjp+R2VvbG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bGFzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9j
YXRpb246OmZhdGFsRXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bjo6cmVxdWVzdFRpbWVkT3V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpjbGVh
cldhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYW5kbGVFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvbjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFVwZGF0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAqIHBhZ2UvR2Vv
bG9jYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjpHZW9sb2NhdGlv
bkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjp+
R2VvbG9jYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29u
dHJvbGxlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250
cm9sbGVyOjpyZW1vdmVPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNv
bnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bkNvbnRyb2xsZXI6OmVycm9yT2NjdXJyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25Db250cm9sbGVyOjpsYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25D
b250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVy
Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVy
Q2xpZW50Ojp+R2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKiBwYWdlL0dl
b2xvY2F0aW9uRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkVy
cm9yOjopOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I6OmNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25FcnJvcjo6bWVzc2FnZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb246OnRpbWVz
dGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpsYXRpdHVkZSk6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpsb25naXR1ZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWNjdXJhY3kpOgorICAgICAgICAo
V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWx0aXR1ZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWx0aXR1ZGVBY2N1cmFjeSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpoZWFkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb246OnNwZWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
UG9zaXRpb246OmNhblByb3ZpZGVBbHRpdHVkZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlSGVhZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlU3BlZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6R2VvbG9jYXRpb25Qb3NpdGlvbik6CisgICAg
ICAgICogcGFnZS9HZW9wb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R2VvcG9zaXRpb246
OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6Z2VvbG9jYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKwogMjAw
OS0xMi0xMyAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ3LDYgKzEzNDcsMTEgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggXAogCVdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAgXAogCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oIFwK
KwlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCisJV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oIFwKKwlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250
cm9sbGVyQ2xpZW50LmggXAorCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkVycm9yLmggXAorCVdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmggXAogCVdlYkNvcmUvcGFnZS9HZW9wb3Np
dGlvbi5oIFwKIAlXZWJDb3JlL3BhZ2UvSGFsdGFibGVQbHVnaW4uaCBcCiAJV2ViQ29yZS9wYWdl
L0hpc3RvcnkuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDUxOTAyKQorKysgV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNiArMjkyLDcgQEAgX19a
TjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEycmVsZWFzZVBybwogX19aTjdXZWJDb3JlMTRSZXNv
dXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJj
ZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE5
c2V0U2hvdWxkQnVmZmVyRGF0YUViCitfX1pON1dlYkNvcmUxNFNWR1NNSUxFbGVtZW50MTNpc1NN
SUxFbGVtZW50RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNmNyZWF0
ZUZyb21TdHJpbmdFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4
c2V0TG9jYWxMb2FkUG9saWN5RU5TMF8xNUxvY2FsTG9hZFBvbGljeUUKIF9fWk43V2ViQ29yZTE0
U2VjdXJpdHlPcmlnaW4xOHNob3VsZEhpZGVSZWZlcnJlckVSS05TXzRLVVJMRVJLTlNfNlN0cmlu
Z0UKQEAgLTQxNCw2ICs0MTUsNyBAQCBfX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZl
cjIzcmVjCiBfX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjZzaGFyZWRFdgogX19a
TjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25FdmVu
dEVOUzBfNFR5cGVFYgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRDMUVQN05T
RXZlbnQKK19fWk43V2ViQ29yZTIxU1ZHRG9jdW1lbnRFeHRlbnNpb25zMjFzYW1wbGVBbmltYXRp
b25BdFRpbWVFUktOU182U3RyaW5nRVBOU18xNFNWR1NNSUxFbGVtZW50RWQKIF9fWk43V2ViQ29y
ZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlMTFkZXNlcmlhbGl6ZUVQSzE1T3BhcXVlSlNDb250ZXh0
UFBLMTNPcGFxdWVKU1ZhbHVlCiBfX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTZj
cmVhdGVFUEsxNU9wYXF1ZUpTQ29udGV4dFBLMTNPcGFxdWVKU1ZhbHVlUFM2XwogX19aTjdXZWJD
b3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWVEMUV2CkBAIC00OTUsNyArNDk3LDcgQEAgX19aTjdX
ZWJDb3JlNFBhZ2U2Z29CYWNrRXYKIF9fWk43V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVBOU18xMUhp
c3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43V2ViQ29yZTRQYWdlOWdvRm9yd2Fy
ZEV2CiBfX1pON1dlYkNvcmU0UGFnZTlpbml0R3JvdXBFdgotX19aTjdXZWJDb3JlNFBhZ2VDMUVQ
TlNfMTJDaHJvbWVDbGllbnRFUE5TXzE3Q29udGV4dE1lbnVDbGllbnRFUE5TXzEyRWRpdG9yQ2xp
ZW50RVBOU18xMERyYWdDbGllbnRFUE5TXzE1SW5zcGVjdG9yQ2xpZW50RVBOU18xOFBsdWdpbkhh
bHRlckNsaWVudEUKK19fWk43V2ViQ29yZTRQYWdlQzFFUE5TXzEyQ2hyb21lQ2xpZW50RVBOU18x
N0NvbnRleHRNZW51Q2xpZW50RVBOU18xMkVkaXRvckNsaWVudEVQTlNfMTBEcmFnQ2xpZW50RVBO
U18xNUluc3BlY3RvckNsaWVudEVQTlNfMThQbHVnaW5IYWx0ZXJDbGllbnRFUE5TXzI3R2VvbG9j
YXRpb25Db250cm9sbGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2CiBfX1pON1dlYkNv
cmU0Y29yZUVQMjBOU1VSTFByb3RlY3Rpb25TcGFjZQogX19aTjdXZWJDb3JlNUNhY2hlMTFzZXRE
aXNhYmxlZEViCkBAIC02MDEsOCArNjAzLDEwIEBAIF9fWk43V2ViQ29yZTdjb29raWVzRVBLTlNf
OERvY3VtZW50RVJLTlMKIF9fWk43V2ViQ29yZTduc0NvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdX
ZWJDb3JlOERvY3VtZW50MTFjcmVhdGVSYW5nZUV2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxM3Jl
bW92ZU1hcmtlcnNFTlNfMTREb2N1bWVudE1hcmtlcjEwTWFya2VyVHlwZUUKK19fWk43V2ViQ29y
ZThEb2N1bWVudDEzc3ZnRXh0ZW5zaW9uc0V2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxNHNldEZv
Y3VzZWROb2RlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmU4RG9j
dW1lbnQxN2dldEZvY3VzYWJsZU5vZGVzRVJOM1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNfNE5v
ZGVFRUVMbTBFRUUKK19fWk43V2ViQ29yZThEb2N1bWVudDE5YWNjZXNzU1ZHRXh0ZW5zaW9uc0V2
CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyMmNyZWF0ZURvY3VtZW50RnJhZ21lbnRFdgogX19aTjdX
ZWJDb3JlOERvY3VtZW50MjNyZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0VOU18xNERvY3VtZW50TWFy
a2VyMTBNYXJrZXJUeXBlRQogX19aTjdXZWJDb3JlOERvY3VtZW50MjRzZXRTaG91bGRDcmVhdGVS
ZW5kZXJlcnNFYgpAQCAtNjI3LDkgKzYzMSw5IEBAIF9fWk43V2ViQ29yZThTZXR0aW5nczIwc2V0
Q3Vyc2l2ZUZvbnRGYW0KIF9fWk43V2ViQ29yZThTZXR0aW5nczIwc2V0RmFudGFzeUZvbnRGYW1p
bHlFUktOU18xMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZThTZXR0aW5nczIwc2V0SmF2YVNj
cmlwdEVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjBzZXRYU1NBdWRpdG9yRW5hYmxl
ZEViCitfX1pON1dlYkNvcmU4U2V0dGluZ3MyMXNldFNob3dSZXBhaW50Q291bnRlckViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MyMXNldFN0YW5kYXJkRm9udEZhbWlseUVSS05TXzEyQXRvbWljU3Ry
aW5nRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMjFzZXRXZWJTZWN1cml0eUVuYWJsZWRFYgotX19a
TjdXZWJDb3JlOFNldHRpbmdzMjFzZXRTaG93UmVwYWludENvdW50ZXJFYgogX19aTjdXZWJDb3Jl
OFNldHRpbmdzMjJzZXRMb2NhbFN0b3JhZ2VFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czIyc2V0U2Fuc1NlcmlmRm9udEZhbWlseUVSS05TXzEyQXRvbWljU3RyaW5nRQogX19aTjdXZWJD
b3JlOFNldHRpbmdzMjJzZXRTaG93c1VSTHNJblRvb2xUaXBzRWIKQEAgLTk2MSw5ICs5NjUsOSBA
QCBfX1pOSzdXZWJDb3JlOERvY3VtZW50MzFkaXNwbGF5U3RyaW5nTW9kCiBfX1pOSzdXZWJDb3Jl
OERvY3VtZW50NGJvZHlFdgogX19aTks3V2ViQ29yZThEb2N1bWVudDZkb21haW5FdgogX19aTks3
V2ViQ29yZThJbnRQb2ludGN2OF9OU1BvaW50RXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24xMGRv
d25zdHJlYW1FTlMwXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2ViQ29y
ZThQb3NpdGlvbjI1bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5RWIKIF9f
Wk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlFQWZm
aW5pdHlFYgotX19aTks3V2ViQ29yZThQb3NpdGlvbjEwZG93bnN0cmVhbUVOUzBfMjdFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uOHVwc3RyZWFtRU5T
MF8yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2luZG93
MjdwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgogX19aTks3V2ViQ29yZTlGbG9hdFJlY3Rj
djdfTlNSZWN0RXYKQEAgLTk4MiwxMCArOTg2LDYgQEAgX19aVFZON1dlYkNvcmUxMkNocm9tZUNs
aWVudEUKIF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hvb3NlckNsaWVudEUKIF9fWlRWTjdXZWJDb3Jl
MTdGcmFtZUxvYWRlckNsaWVudEUKIF9fWlRWTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0
V3JpdGVyRQotX19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQTlNf
NE5vZGVFCi1fX1pON1dlYkNvcmUyMVNWR0RvY3VtZW50RXh0ZW5zaW9uczIxc2FtcGxlQW5pbWF0
aW9uQXRUaW1lRVJLTlNfNlN0cmluZ0VQTlNfMTRTVkdTTUlMRWxlbWVudEVkCi1fX1pON1dlYkNv
cmU4RG9jdW1lbnQxOWFjY2Vzc1NWR0V4dGVuc2lvbnNFdgotX19aTjdXZWJDb3JlOERvY3VtZW50
MTNzdmdFeHRlbnNpb25zRXYKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMKIF9o
YXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgzLDYgKzE3ODMsMTEgQEAKICAgICAgICAgICAgICdwYWdlL0ZyYW1lVmlldy5o
JywKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGFn
ZS9HZW9sb2NhdGlvbi5oJywKKyAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxl
ci5jcHAnCisgICAgICAgICAgICAncGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCcKKyAgICAg
ICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5oJworICAgICAgICAgICAg
J3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oJworICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbi5oJwogICAgICAgICAgICAgJ3BhZ2UvR2VvcG9zaXRpb24uaCcsCiAgICAgICAgICAg
ICAncGFnZS9IYWx0YWJsZVBsdWdpbi5oJywKICAgICAgICAgICAgICdwYWdlL0hpc3RvcnkuY3Bw
JywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnBybwkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU1LDYgKzExNTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL0ZyYW1l
VHJlZS5jcHAgXAogICAgIHBhZ2UvRnJhbWVWaWV3LmNwcCBcCiAgICAgcGFnZS9HZW9sb2NhdGlv
bi5jcHAgXAorICAgIHBhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9I
aXN0b3J5LmNwcCBcCiAgICAgcGFnZS9Mb2NhdGlvbi5jcHAgXAogICAgIHBhZ2UvTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDUx
OTAyKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTc3
Nyw2ICs3NzcsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAg
ICAgICAgIHBhZ2UvRnJhbWVUcmVlLmNwcAogICAgICAgICBwYWdlL0ZyYW1lVmlldy5jcHAKICAg
ICAgICAgcGFnZS9HZW9sb2NhdGlvbi5jcHAKKyAgICAgICAgcGFnZS9HZW9sb2NhdGlvbkNvbnRy
b2xsZXIuY3BwCiAgICAgICAgIHBhZ2UvSGlzdG9yeS5jcHAKICAgICAgICAgcGFnZS9Mb2NhdGlv
bi5jcHAKICAgICAgICAgcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1MTkwMikKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIwNjUxLDYgKzIwNjUxLDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2Vv
bG9jYXRpb25Db250cm9sbGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFn
ZVxHZW9sb2NhdGlvbkVycm9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uUG9zaXRpb24uaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvcG9z
aXRpb24uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTIwNzEpCisrKyBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDE4OSw2ICs0
MTg5LDExIEBACiAJCUJDNTNDNjA4MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUzQzYwNzBEQTU2
QzU3MDAyMUVCNUQgLyogR3JhZGllbnQuY3BwICovOyB9OwogCQlCQzUzQzYwQjBEQTU2Q0YxMDAy
MUVCNUQgLyogR3JhZGllbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzUzQzYwQTBEQTU2Q0YxMDAyMUVCNUQgLyogR3JhZGllbnRDRy5jcHAg
Ki87IH07CiAJCUJDNTNDNjkyMERBNTkxMTQwMDIxRUI1RCAvKiBDU1NHcmFkaWVudFZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUzQzY5MTBE
QTU5MTE0MDAyMUVCNUQgLyogQ1NTR3JhZGllbnRWYWx1ZS5oICovOyB9OworCQlCQzU2Q0IyMTEw
RDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFDMTBENUFDODAwMEE3N0M2
NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlCQzU2Q0IyMjEwRDVBQzgw
MDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU2Q0IxRDEwRDVBQzgwMDBBNzdDNjQgLyogR2Vv
bG9jYXRpb25Db250cm9sbGVyLmggKi87IH07CisJCUJDNTZDQjIzMTBENUFDODAwMEE3N0M2NCAv
KiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2Nh
dGlvbkNvbnRyb2xsZXJDbGllbnQuaCAqLzsgfTsKKwkJQkM1NkNCMjQxMEQ1QUM4MDAwQTc3QzY0
IC8qIEdlb2xvY2F0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNTZDQjFGMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9y
LmggKi87IH07CisJCUJDNTZDQjI1MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU2
Q0IyMDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oICovOyB9OwogCQlC
QzU4MjNGNTBDMEE5OERGMDA1M0YxQjUgLyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4MjNGNDBDMEE5OERG
MDA1M0YxQjUgLyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTgyNUYzMEMw
Qjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODI1RjIwQzBCODkzODAw
NTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTg4
QUYwMEJGQTZDRjkwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODhBRUYwQkZBNkNGOTAwRUU2
NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi87IH07CkBAIC05MzU2LDYgKzkzNjEsMTEg
QEAKIAkJQkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdyYWRpZW50Q0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGllbnRDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTNDNjkxMERBNTkxMTQwMDIxRUI1RCAvKiBD
U1NHcmFkaWVudFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0dy
YWRpZW50VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NkNCMUMxMEQ1
QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2Q0IxRDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9j
YXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xv
Y2F0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2Q0Ix
RTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2Q0IxRjEwRDVBQzgwMDBBNzdDNjQg
LyogR2VvbG9jYXRpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZW9sb2NhdGlvbkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNTZDQjIw
MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uUG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM1ODIzRjQwQzBBOThERjAwNTNGMUI1IC8qIEpTSFRNTEVsZW1lbnRD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRWxl
bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTgyNUYyMEMw
Qjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhBRUYwQkZBNkNGOTAwRUU2
NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTEyNzUsNiArMTEyODUsMTEgQEAKIAkJCQlGRTgwRDdCNzBFOUMxRjI1MDAwRDZGNzUg
LyogR2VvbG9jYXRpb24uY3BwICovLAogCQkJCUZFODBEN0I4MEU5QzFGMjUwMDBENkY3NSAvKiBH
ZW9sb2NhdGlvbi5oICovLAogCQkJCUZFODBEN0I5MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2Nh
dGlvbi5pZGwgKi8sCisJCQkJQkM1NkNCMUMxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9u
Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQkM1NkNCMUQxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xv
Y2F0aW9uQ29udHJvbGxlci5oICovLAorCQkJCUJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAvKiBH
ZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCAqLywKKwkJCQlCQzU2Q0IxRjEwRDVBQzgwMDBB
NzdDNjQgLyogR2VvbG9jYXRpb25FcnJvci5oICovLAorCQkJCUJDNTZDQjIwMTBENUFDODAwMEE3
N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8sCiAJCQkJRkU4MEQ3QkIwRTlDMUYyNTAw
MEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmggKi8sCiAJCQkJRkU4MEQ3QkMwRTlDMUYyNTAwMEQ2Rjc1
IC8qIEdlb3Bvc2l0aW9uLmlkbCAqLywKIAkJCQk3NjkzQkFDRTEwNkMyRENBMDA3QjA4MjMgLyog
SGFsdGFibGVQbHVnaW4uaCAqLywKQEAgLTE4MjQ2LDYgKzE4MjYxLDEwIEBACiAJCQkJN0FERTcy
MjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBDM0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xV
bmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDNTZDQjIyMTBENUFDODAwMEE3
N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDNTZD
QjIzMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDNTZDQjI0MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVy
cm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyogR2Vv
bG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDQwMyw2ICsyMDQyMiw3IEBA
CiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBDNDUzNDI3MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJD
NTZDQjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDUxOTAyKQorKysgV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDQ1
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAKKyNpZiBVU0UoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5o
IgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKKyNpbmNsdWRlICJHZW9wb3NpdGlv
bi5oIgorI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2Vb
XSA9ICJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiI7CiAKKyNpZiBVU0UoQ0xJRU5UX0JBU0VEX0dF
T0xPQ0FUSU9OKQorCitzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3JlYXRlR2VvcG9z
aXRpb25Gcm9tR2VvbG9jYXRpb25Qb3NpdGlvbihHZW9sb2NhdGlvblBvc2l0aW9uKiBwb3NpdGlv
bikKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzID0gQ29vcmRpbmF0ZXM6
OmNyZWF0ZShwb3NpdGlvbi0+bGF0aXR1ZGUoKSwgcG9zaXRpb24tPmxvbmdpdHVkZSgpLCBwb3Np
dGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRlKCksIHBvc2l0aW9uLT5hbHRpdHVkZSgpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbi0+YWNjdXJhY3koKSwgcG9zaXRpb24tPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCks
IHBvc2l0aW9uLT5hbHRpdHVkZUFjY3VyYWN5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPmNhblByb3ZpZGVIZWFk
aW5nKCksIHBvc2l0aW9uLT5oZWFkaW5nKCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlU3BlZWQoKSwg
cG9zaXRpb24tPnNwZWVkKCkpOworICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3Jk
aW5hdGVzLnJlbGVhc2UoKSwgcG9zaXRpb24tPnRpbWVzdGFtcCgpKTsKK30KKworc3RhdGljIFBh
c3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gY3JlYXRlUG9zaXRpb25FcnJvckZyb21HZW9sb2NhdGlv
bkVycm9yKEdlb2xvY2F0aW9uRXJyb3IqIGVycm9yKQoreworICAgIFBvc2l0aW9uRXJyb3I6OkVy
cm9yQ29kZSBjb2RlID0gUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEU7CisgICAg
c3dpdGNoIChlcnJvci0+Y29kZSgpKSB7CisgICAgICAgIGNhc2UgR2VvbG9jYXRpb25FcnJvcjo6
UGVybWlzc2lvbkRlbmllZDoKKyAgICAgICAgICAgIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQRVJN
SVNTSU9OX0RFTklFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdlb2xvY2F0
aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGU6CisgICAgICAgICAgICBjb2RlID0gUG9zaXRp
b25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKGNvZGUsIGVycm9yLT5tZXNzYWdl
KCkpOworfQorI2VuZGlmCisKIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIo
R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQogICAgIDogbV9nZW9s
b2NhdGlvbihnZW9sb2NhdGlvbikKICAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxs
YmFjaykKQEAgLTEzNiw3ICsxNzEsOSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Z2V0
Tm90aWZpZXJzCiAKIEdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSogZnJhbWUpCiAgICAg
OiBtX2ZyYW1lKGZyYW1lKQorI2lmICFVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQogICAg
ICwgbV9zZXJ2aWNlKEdlb2xvY2F0aW9uU2VydmljZTo6Y3JlYXRlKHRoaXMpKQorI2VuZGlmCiAg
ICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93bikKICAgICAsIG1fc2hvdWxkQ2xlYXJDYWNo
ZShmYWxzZSkKIHsKQEAgLTE0NiwxNCArMTgzLDM2IEBAIEdlb2xvY2F0aW9uOjpHZW9sb2NhdGlv
bihGcmFtZSogZnJhbWUpCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9sb2Nh
dGlvbih0cnVlKTsKIH0KIAorR2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpCit7Cit9CisKIHZv
aWQgR2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSgpCiB7Ci0gICAgbV9zZXJ2aWNlLT5zdG9w
VXBkYXRpbmcoKTsKKyAgICBzdG9wVXBkYXRpbmcoKTsKICAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT5kb2N1bWVudCgpKQogICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dl
b2xvY2F0aW9uKGZhbHNlKTsKICAgICBtX2ZyYW1lID0gMDsKIH0KIAorR2VvcG9zaXRpb24qIEdl
b2xvY2F0aW9uOjpsYXN0UG9zaXRpb24oKQoreworI2lmIFVTRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIG1fbGFzdFBvc2l0aW9uID0gY3JlYXRlR2VvcG9zaXRpb25Gcm9tR2VvbG9jYXRp
b25Qb3NpdGlvbihwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+bGFzdFBvc2l0aW9uKCkp
OworI2Vsc2UKKyAgICBtX2xhc3RQb3NpdGlvbiA9IG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCk7
CisjZW5kaWYKKworICAgIHJldHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsKK30KKwogdm9pZCBH
ZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiB7CiAgICAg
UmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChzdWNjZXNzQ2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOwpAQCAtMTg0LDcgKzI0Myw3IEBAIFBhc3NSZWZQ
dHI8R2VvbG9jYXRpb246Okdlb05vdGlmaWVyPiBHZW8KICAgICBpZiAoaXNEZW5pZWQoKSkKICAg
ICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0
aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdl
KSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8
fCBtX3NlcnZpY2UtPnN0YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisg
ICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5nKG5v
dGlmaWVyLT5tX29wdGlvbnMuZ2V0KCkpKQogICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGlt
ZXJJZk5lZWRlZCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0
YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5B
VkFJTEFCTEUsICJGYWlsZWQgdG8gc3RhcnQgR2VvbG9jYXRpb24gc2VydmljZSIpKTsKQEAgLTIw
MCw3ICsyNTksNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQoR2VvCiAg
ICAgbV93YXRjaGVycy5yZW1vdmUobm90aWZpZXIpOwogCiAgICAgaWYgKCFoYXNMaXN0ZW5lcnMo
KSkKLSAgICAgICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKKyAgICAgICAgc3RvcFVwZGF0
aW5nKCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmll
ciogbm90aWZpZXIpCkBAIC0yMDksNyArMjY4LDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVz
dFRpbWVkT3V0KEdlb05vdAogICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyKTsKIAogICAg
IGlmICghaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIG1fc2VydmljZS0+c3RvcFVwZGF0aW5nKCk7
CisgICAgICAgIHN0b3BVcGRhdGluZygpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldh
dGNoKGludCB3YXRjaElkKQpAQCAtMjE3LDE5ICsyNzYsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpj
bGVhcldhdGNoKGludCB3YXRjaElkCiAgICAgbV93YXRjaGVycy5yZW1vdmUod2F0Y2hJZCk7CiAg
ICAgCiAgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAgbV9zZXJ2aWNlLT5zdG9wVXBk
YXRpbmcoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6c3VzcGVuZCgpCi17Ci0gICAgaWYgKGhh
c0xpc3RlbmVycygpKQotICAgICAgICBtX3NlcnZpY2UtPnN1c3BlbmQoKTsKLX0KLQotdm9pZCBH
ZW9sb2NhdGlvbjo6cmVzdW1lKCkKLXsKLSAgICBpZiAoaGFzTGlzdGVuZXJzKCkpCi0gICAgICAg
IG1fc2VydmljZS0+cmVzdW1lKCk7CisgICAgICAgIHN0b3BVcGRhdGluZygpOwogfQogCiB2b2lk
IEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKQpAQCAtMzE5LDcgKzM2Niw3
IEBAIHZvaWQgR2VvbG9jYXRpb246OmhhbmRsZUVycm9yKFBvc2l0aW9uRXIKICAgICBzZW5kRXJy
b3Iod2F0Y2hlcnNDb3B5LCBlcnJvcik7CiAKICAgICBpZiAoIWhhc0xpc3RlbmVycygpKQotICAg
ICAgICBtX3NlcnZpY2UtPnN0b3BVcGRhdGluZygpOworICAgICAgICBzdG9wVXBkYXRpbmcoKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFBlcm1pc3Npb24oKQpAQCAtMzQwLDEwICsz
ODcsOSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbigpCiAgICAgcGFnZS0+
Y2hyb21lKCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShtX2ZyYW1lLCB0
aGlzKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25D
aGFuZ2VkKEdlb2xvY2F0aW9uU2VydmljZSogc2VydmljZSkKK3ZvaWQgR2VvbG9jYXRpb246OnBv
c2l0aW9uQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChzZXJ2aWNlLCBzZXJ2aWNlID09
IG1fc2VydmljZSk7Ci0gICAgQVNTRVJUKG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOworICAg
IEFTU0VSVChtX2N1cnJlbnRQb3NpdGlvbik7CiAKICAgICAvLyBTdG9wIGFsbCBjdXJyZW50bHkg
cnVubmluZyB0aW1lcnMuCiAgICAgc3RvcFRpbWVycygpOwpAQCAtMzYyLDcgKzQwOCw3IEBAIHZv
aWQgR2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2VydmljZVBvc2kKIAogdm9pZCBHZW9sb2NhdGlv
bjo6bWFrZVN1Y2Nlc3NDYWxsYmFja3MoKQogewotICAgIEFTU0VSVChtX3NlcnZpY2UtPmxhc3RQ
b3NpdGlvbigpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50UG9zaXRpb24pOwogICAgIEFTU0VSVChp
c0FsbG93ZWQoKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBvbmVT
aG90c0NvcHk7CkBAIC0zNzYsMTggKzQyMiw4MiBAQCB2b2lkIEdlb2xvY2F0aW9uOjptYWtlU3Vj
Y2Vzc0NhbGxiYWNrcygpCiAgICAgLy8gZnVydGhlciBjYWxsYmFja3MgdG8gdGhlc2Ugbm90aWZp
ZXJzLgogICAgIG1fb25lU2hvdHMuY2xlYXIoKTsKIAotICAgIHNlbmRQb3NpdGlvbihvbmVTaG90
c0NvcHksIG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOwotICAgIHNlbmRQb3NpdGlvbih3YXRj
aGVyc0NvcHksIG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOworICAgIHNlbmRQb3NpdGlvbihv
bmVTaG90c0NvcHksIG1fY3VycmVudFBvc2l0aW9uLmdldCgpKTsKKyAgICBzZW5kUG9zaXRpb24o
d2F0Y2hlcnNDb3B5LCBtX2N1cnJlbnRQb3NpdGlvbi5nZXQoKSk7CiAKICAgICBpZiAoIWhhc0xp
c3RlbmVycygpKQotICAgICAgICBtX3NlcnZpY2UtPnN0b3BVcGRhdGluZygpOworICAgICAgICBz
dG9wVXBkYXRpbmcoKTsKK30KKworI2lmIFVTRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisK
K3ZvaWQgR2VvbG9jYXRpb246OnBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblBvc2l0aW9uKiBw
b3NpdGlvbikKK3sKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IGNyZWF0ZUdlb3Bvc2l0aW9uRnJv
bUdlb2xvY2F0aW9uUG9zaXRpb24ocG9zaXRpb24pOworICAgIHBvc2l0aW9uQ2hhbmdlZCgpOwor
fQorCit2b2lkIEdlb2xvY2F0aW9uOjplcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uRXJyb3IqIGVy
cm9yKQoreworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBwb3NpdGlvbkVycm9yID0gY3JlYXRl
UG9zaXRpb25FcnJvckZyb21HZW9sb2NhdGlvbkVycm9yKGVycm9yKTsKKyAgICBoYW5kbGVFcnJv
cihwb3NpdGlvbkVycm9yLmdldCgpKTsKK30KKworI2Vsc2UKKwordm9pZCBHZW9sb2NhdGlvbjo6
Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uU2VydmljZSogc2Vy
dmljZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlcnZpY2UsIHNlcnZpY2UgPT0gbV9zZXJ2aWNl
KTsKKyAgICBBU1NFUlQobV9zZXJ2aWNlLT5sYXN0UG9zaXRpb24oKSk7CisKKyAgICBtX2N1cnJl
bnRQb3NpdGlvbiA9IG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCk7CisgICAgcG9zaXRpb25DaGFu
Z2VkKCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2VydmljZUVycm9yT2Nj
dXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKiBzZXJ2aWNlKQogewogICAgIEFTU0VSVChzZXJ2aWNl
LT5sYXN0RXJyb3IoKSk7Ci0gICAgCisKICAgICBoYW5kbGVFcnJvcihzZXJ2aWNlLT5sYXN0RXJy
b3IoKSk7CiB9CiAKKyNlbmRpZgorCitib29sIEdlb2xvY2F0aW9uOjpzdGFydFVwZGF0aW5nKFBv
c2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK3sKKyNpZiBVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FU
SU9OKQorICAgIC8vIEZJWE1FOiBQYXNzIG9wdGlvbnMgdG8gY2xpZW50LgorICAgIFVOVVNFRF9Q
QVJBTShvcHRpb25zKTsKKworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigp
LT5hZGRPYnNlcnZlcih0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJu
IG1fc2VydmljZS0+c3RhcnRVcGRhdGluZyhvcHRpb25zKTsKKyNlbmRpZgorfQorCit2b2lkIEdl
b2xvY2F0aW9uOjpzdG9wVXBkYXRpbmcoKQoreworI2lmIFVTRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlKiBw
YWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPnJlbW92ZU9ic2VydmVyKHRoaXMp
OworI2Vsc2UKKyAgICBtX3NlcnZpY2UtPnN0b3BVcGRhdGluZygpOworI2VuZGlmCisKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9uIDUxOTAy
KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDIy
ICs0NiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEdlb3Bv
c2l0aW9uOwogCi1jbGFzcyBHZW9sb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb2xvY2F0
aW9uPiwgcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCB7CisjaWYgVVNFKENMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTikKK2NsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb247CitjbGFzcyBHZW9s
b2NhdGlvbkVycm9yOworI2VuZGlmCisKK2NsYXNzIEdlb2xvY2F0aW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8R2VvbG9jYXRpb24+CisjaWYgIVVTRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisg
ICAgLHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQKKyNlbmRpZgorICAgIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFt
ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb2xvY2F0aW9uKGZyYW1lKSk7IH0KIAotICAgIHZp
cnR1YWwgfkdlb2xvY2F0aW9uKCkge30KKyAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvbigpOwogCiAg
ICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKICAgICAKLSAgICBHZW9wb3NpdGlvbiogbGFzdFBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlLT5sYXN0UG9zaXRpb24oKTsgfQorICAg
IEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsKIAogICAgIHZvaWQgZ2V0Q3VycmVudFBvc2l0
aW9uKFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJv
ckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKICAgICBpbnQgd2F0Y2hQ
b3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9u
RXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CiAgICAgdm9pZCBj
bGVhcldhdGNoKGludCB3YXRjaElkKTsKLQotICAgIHZvaWQgc3VzcGVuZCgpOwotICAgIHZvaWQg
cmVzdW1lKCk7CiAgICAgCiAgICAgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7CiAgICAgYm9vbCBp
c0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24gPT0gWWVzOyB9CkBA
IC03MCw2ICs3NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG91bGRDbGVhckNhY2hlKGJv
b2wgc2hvdWxkQ2xlYXJDYWNoZSkgeyBtX3Nob3VsZENsZWFyQ2FjaGUgPSBzaG91bGRDbGVhckNh
Y2hlOyB9CiAgICAgYm9vbCBzaG91bGRDbGVhckNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRDbGVhckNhY2hlOyB9CiAKKyNpZiBVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAg
IHZvaWQgcG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24qKTsKKyAgICB2b2lkIGVy
cm9yT2NjdXJyZWQoR2VvbG9jYXRpb25FcnJvciopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
R2VvbG9jYXRpb24oRnJhbWUqKTsKIApAQCAtMTE4LDE0ICsxMjksMjIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN0b3BUaW1lcnNGb3JXYXRjaGVycygpOwogICAgIHZvaWQgc3RvcFRpbWVycygpOwog
ICAgIAorICAgIHZvaWQgcG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgdm9pZCBtYWtlU3VjY2Vzc0Nh
bGxiYWNrcygpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOwogCiAgICAg
dm9pZCByZXF1ZXN0UGVybWlzc2lvbigpOwogCisgICAgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0
aW9uT3B0aW9ucyopOworICAgIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAgdm9pZCBzdXNwZW5k
KCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworI2lmICFVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FU
SU9OKQogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBn
ZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CiAg
ICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9yT2NjdXJyZWQoR2VvbG9jYXRp
b25TZXJ2aWNlKik7CisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8R2VvTm90aWZpZXI+IHN0YXJ0
UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9u
RXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CiAKQEAgLTEzNyw3
ICsxNTYsMTEgQEAgcHJpdmF0ZToKICAgICBHZW9Ob3RpZmllclNldCBtX29uZVNob3RzOwogICAg
IFdhdGNoZXJzIG1fd2F0Y2hlcnM7CiAgICAgRnJhbWUqIG1fZnJhbWU7CisjaWYgIVVTRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCiAgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZT4gbV9z
ZXJ2aWNlOworI2VuZGlmCisgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsK
KyAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY3VycmVudFBvc2l0aW9uOwogCiAgICAgZW51bSB7
CiAgICAgICAgIFVua25vd24sCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgorCisjaWYgVVNF
KENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJv
bGxlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dlb2xvY2F0aW9uQ29udHJv
bGxlcjo6R2VvbG9jYXRpb25Db250cm9sbGVyKFBhZ2UqIHBhZ2UsIEdlb2xvY2F0aW9uQ29udHJv
bGxlckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCit7Cit9CisKK0dlb2xvY2F0aW9uQ29udHJvbGxlcjo6fkdlb2xvY2F0aW9uQ29udHJv
bGxlcigpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjphZGRPYnNlcnZlcihH
ZW9sb2NhdGlvbiogb2JzZXJ2ZXIpCit7CisgICAgQVNTRVJUKCFtX29ic2VydmVycy5jb250YWlu
cyhvYnNlcnZlcikpOworCisgICAgYm9vbCB3YXNFbXB0eSA9IG1fb2JzZXJ2ZXJzLmlzRW1wdHko
KTsKKyAgICBtX29ic2VydmVycy5hZGQob2JzZXJ2ZXIpOworICAgIGlmICh3YXNFbXB0eSkKKyAg
ICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNv
bnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlcikKK3sKKyAgICBB
U1NFUlQobV9vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpKTsKKworICAgIG1fb2JzZXJ2ZXJz
LnJlbW92ZShvYnNlcnZlcik7CisgICAgaWYgKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ29udHJv
bGxlcjo6cG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24qIHBvc2l0aW9uKQorewor
ICAgIEhhc2hTZXQ8UmVmUHRyPEdlb2xvY2F0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
b2JzZXJ2ZXJzLmJlZ2luKCk7CisgICAgSGFzaFNldDxSZWZQdHI8R2VvbG9jYXRpb24+ID46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5wb3NpdGlvbkNoYW5nZWQocG9zaXRpb24pOworfQor
Cit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVy
cm9yKiBlcnJvcikKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxHZW9sb2NhdGlvbj4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX29ic2VydmVycy5iZWdpbigpOworICAgIEhhc2hTZXQ8UmVmUHRyPEdl
b2xvY2F0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29ic2VydmVycy5lbmQoKTsKKyAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+ZXJyb3JPY2N1cnJlZChl
cnJvcik7Cit9CisKK0dlb2xvY2F0aW9uUG9zaXRpb24qIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6
bGFzdFBvc2l0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmxhc3RQb3NpdGlvbigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25D
b250cm9sbGVyX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25Db250cm9sbGVyX2gKKworI2lmIFVTRShD
TElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xv
Y2F0aW9uQ29udHJvbGxlckNsaWVudDsKK2NsYXNzIEdlb2xvY2F0aW9uRXJyb3I7CitjbGFzcyBH
ZW9sb2NhdGlvblBvc2l0aW9uOworY2xhc3MgUGFnZTsKKworY2xhc3MgR2VvbG9jYXRpb25Db250
cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBHZW9sb2NhdGlvbkNv
bnRyb2xsZXIoUGFnZSosIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCopOworICAgIH5HZW9s
b2NhdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkT2JzZXJ2ZXIoR2VvbG9jYXRpb24q
KTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKik7CisKKyAgICB2b2lkIHBv
c2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblBvc2l0aW9uKik7CisgICAgdm9pZCBlcnJvck9jY3Vy
cmVkKEdlb2xvY2F0aW9uRXJyb3IqKTsKKworICAgIEdlb2xvY2F0aW9uUG9zaXRpb24qIGxhc3RQ
b3NpdGlvbigpOworCitwcml2YXRlOgorICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBHZW9sb2NhdGlv
bkNvbnRyb2xsZXJDbGllbnQqIG1fY2xpZW50OworCisgICAgSGFzaFNldDxSZWZQdHI8R2VvbG9j
YXRpb24+ID4gbV9vYnNlcnZlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjZW5kaWYgLy8gR2VvbG9j
YXRpb25Db250cm9sbGVyX2gKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xs
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9s
bGVyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250
cm9sbGVyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudF9oCisjZGVmaW5lIEdlb2xvY2F0
aW9uQ29udHJvbGxlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2Vv
bG9jYXRpb25Qb3NpdGlvbjsKKworY2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgPSAwOworICAgIHZpcnR1YWwgR2VvbG9jYXRpb25Qb3Np
dGlvbiogbGFzdFBvc2l0aW9uKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+R2Vv
bG9jYXRpb25Db250cm9sbGVyQ2xpZW50KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnRfaApJbmRleDogV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25FcnJvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uRXJyb3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgR2VvbG9jYXRpb25FcnJvcl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uRXJyb3JfaAorCisj
aWYgVVNFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2VvbG9jYXRpb25FcnJvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEdlb2xvY2F0aW9uRXJyb3I+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEVy
cm9yQ29kZSB7CisgICAgICAgIFBlcm1pc3Npb25EZW5pZWQsCisgICAgICAgIFBvc2l0aW9uVW5h
dmFpbGFibGUKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25FcnJv
cj4gY3JlYXRlKEVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHZW9sb2NhdGlvbkVycm9yKGNvZGUsIG1lc3NhZ2UpKTsgfQorCisgICAg
RXJyb3JDb2RlIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KKyAgICBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KKworcHJpdmF0ZToKKyAg
ICBHZW9sb2NhdGlvbkVycm9yKEVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworCisgICAgRXJyb3JDb2RlIG1fY29kZTsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOyAKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDTElFTlRfQkFTRURfR0VP
TE9DQVRJT04pCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvbkVycm9yX2gKSW5kZXg6IFdlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uUG9zaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBHZW9sb2NhdGlvblBvc2l0aW9uX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25Qb3Np
dGlvbl9oCisKKyNpZiBVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PEdlb2xvY2F0aW9uUG9zaXRpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
ZW9sb2NhdGlvblBvc2l0aW9uPiBjcmVhdGUoZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0
dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHZW9sb2NhdGlvblBvc2l0aW9uKHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwg
YWNjdXJhY3kpKTsgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlv
bj4gY3JlYXRlKGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25Qb3Np
dGlvbih0aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0Fs
dGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3Vy
YWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKSk7IH0K
KworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQor
CisgICAgZG91YmxlIGxhdGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXRpdHVkZTsgfQorICAg
IGRvdWJsZSBsb25naXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2xvbmdpdHVkZTsgfQorICAgIGRv
dWJsZSBhY2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjdXJhY3k7IH0KKyAgICBkb3VibGUg
YWx0aXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2FsdGl0dWRlOyB9CisgICAgZG91YmxlIGFsdGl0
dWRlQWNjdXJhY3koKSBjb25zdCB7IHJldHVybiBtX2FsdGl0dWRlQWNjdXJhY3k7IH0KKyAgICBk
b3VibGUgaGVhZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGluZzsgfQorICAgIGRvdWJsZSBz
cGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWQ7IH0KKworICAgIGJvb2wgY2FuUHJvdmlkZUFs
dGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlQWx0aXR1ZGU7IH0KKyAgICBib29s
IGNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRl
QWx0aXR1ZGVBY2N1cmFjeTsgfQorICAgIGJvb2wgY2FuUHJvdmlkZUhlYWRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2NhblByb3ZpZGVIZWFkaW5nOyB9CisgICAgYm9vbCBjYW5Qcm92aWRlU3BlZWQo
KSBjb25zdCB7IHJldHVybiBtX2NhblByb3ZpZGVTcGVlZDsgfQorCitwcml2YXRlOgorICAgIEdl
b2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3Vi
bGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpCisgICAgICAgIDogbV90aW1lc3RhbXAodGlt
ZXN0YW1wKQorICAgICAgICAsIG1fbGF0aXR1ZGUobGF0aXR1ZGUpCisgICAgICAgICwgbV9sb25n
aXR1ZGUobG9uZ2l0dWRlKQorICAgICAgICAsIG1fYWNjdXJhY3koYWNjdXJhY3kpCisgICAgICAg
ICwgbV9hbHRpdHVkZSgwKQorICAgICAgICAsIG1fYWx0aXR1ZGVBY2N1cmFjeSgwKQorICAgICAg
ICAsIG1faGVhZGluZygwKQorICAgICAgICAsIG1fc3BlZWQoMCkKKyAgICAgICAgLCBtX2NhblBy
b3ZpZGVBbHRpdHVkZShmYWxzZSkKKyAgICAgICAgLCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3Vy
YWN5KGZhbHNlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZUhlYWRpbmcoZmFsc2UpCisgICAgICAg
ICwgbV9jYW5Qcm92aWRlU3BlZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIEdlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFs
dGl0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRl
c1NwZWVkLCBkb3VibGUgc3BlZWQpCisgICAgICAgIDogbV90aW1lc3RhbXAodGltZXN0YW1wKQor
ICAgICAgICAsIG1fbGF0aXR1ZGUobGF0aXR1ZGUpCisgICAgICAgICwgbV9sb25naXR1ZGUobG9u
Z2l0dWRlKQorICAgICAgICAsIG1fYWNjdXJhY3koYWNjdXJhY3kpCisgICAgICAgICwgbV9hbHRp
dHVkZShhbHRpdHVkZSkKKyAgICAgICAgLCBtX2FsdGl0dWRlQWNjdXJhY3koYWx0aXR1ZGVBY2N1
cmFjeSkKKyAgICAgICAgLCBtX2hlYWRpbmcoaGVhZGluZykKKyAgICAgICAgLCBtX3NwZWVkKHNw
ZWVkKQorICAgICAgICAsIG1fY2FuUHJvdmlkZUFsdGl0dWRlKHByb3ZpZGVzQWx0aXR1ZGUpCisg
ICAgICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeShwcm92aWRlc0FsdGl0dWRlQWNj
dXJhY3kpCisgICAgICAgICwgbV9jYW5Qcm92aWRlSGVhZGluZyhwcm92aWRlc0hlYWRpbmcpCisg
ICAgICAgICwgbV9jYW5Qcm92aWRlU3BlZWQocHJvdmlkZXNTcGVlZCkKKyAgICB7CisgICAgfQor
CisgICAgZG91YmxlIG1fdGltZXN0YW1wOworCisgICAgZG91YmxlIG1fbGF0aXR1ZGU7CisgICAg
ZG91YmxlIG1fbG9uZ2l0dWRlOworICAgIGRvdWJsZSBtX2FjY3VyYWN5OworICAgIGRvdWJsZSBt
X2FsdGl0dWRlOworICAgIGRvdWJsZSBtX2FsdGl0dWRlQWNjdXJhY3k7CisgICAgZG91YmxlIG1f
aGVhZGluZzsKKyAgICBkb3VibGUgbV9zcGVlZDsKKworICAgIGJvb2wgbV9jYW5Qcm92aWRlQWx0
aXR1ZGU7CisgICAgYm9vbCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5OworICAgIGJvb2wg
bV9jYW5Qcm92aWRlSGVhZGluZzsKKyAgICBib29sIG1fY2FuUHJvdmlkZVNwZWVkOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTikKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uUG9zaXRpb25faApJbmRleDogV2ViQ29y
ZS9wYWdlL0dlb3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb3Bvc2l0
aW9uLmgJKHJldmlzaW9uIDUxOTAyKQorKysgV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDExIEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKIGNsYXNzIEdlb3Bvc2l0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2VvcG9zaXRpb24+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzLCBET01UaW1lU3RhbXAgdGltZXN0YW1wKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgR2VvcG9zaXRpb24oY29vcmRpbmF0ZXMsIHRpbWVzdGFtcCkp
OyB9Ci0gICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcywgRE9NVGltZVN0YW1wIHRpbWVzdGFtcCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VvcG9zaXRpb24oY29vcmRpbmF0
ZXMsIHRpbWVzdGFtcCkpOworICAgIH0KKwogICAgIERPTVRpbWVTdGFtcCB0aW1lc3RhbXAoKSBj
b25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQogICAgIENvb3JkaW5hdGVzKiBjb29yZHMoKSBj
b25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGVzLmdldCgpOyB9CiAgICAgCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZp
c2lvbiA1MTkwMikKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsMTAgQEAKICNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKICNlbmRpZgogCisjaWYg
VVNFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRy
b2xsZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0
PFBhZ2UqPiogYWxsUGFnZXM7CkBAIC0xMDEsNyArMTA1LDcgQEAgc3RhdGljIHZvaWQgbmV0d29y
a1N0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hX
aW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKSk7CiB9CiAK
LVBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIENvbnRleHRNZW51Q2xpZW50
KiBjb250ZXh0TWVudUNsaWVudCwgRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQsIERyYWdDbGll
bnQqIGRyYWdDbGllbnQsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50LCBQbHVnaW5I
YWx0ZXJDbGllbnQqIHBsdWdpbkhhbHRlckNsaWVudCkKK1BhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50
KiBjaHJvbWVDbGllbnQsIENvbnRleHRNZW51Q2xpZW50KiBjb250ZXh0TWVudUNsaWVudCwgRWRp
dG9yQ2xpZW50KiBlZGl0b3JDbGllbnQsIERyYWdDbGllbnQqIGRyYWdDbGllbnQsIEluc3BlY3Rv
ckNsaWVudCogaW5zcGVjdG9yQ2xpZW50LCBQbHVnaW5IYWx0ZXJDbGllbnQqIHBsdWdpbkhhbHRl
ckNsaWVudCwgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50KiBnZW9sb2NhdGlvbkNvbnRyb2xs
ZXJDbGllbnQpCiAgICAgOiBtX2Nocm9tZShuZXcgQ2hyb21lKHRoaXMsIGNocm9tZUNsaWVudCkp
CiAgICAgLCBtX2RyYWdDYXJldENvbnRyb2xsZXIobmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoMCwg
dHJ1ZSkpCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKQEAgLTExNCw2ICsxMTgsOSBAQCBQYWdl
OjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICAsIG1faW5zcGVjdG9yQ29udHJvbGxlcihuZXcgSW5zcGVjdG9yQ29udHJvbGxlcih0
aGlzLCBpbnNwZWN0b3JDbGllbnQpKQogI2VuZGlmCisjaWYgVVNFKENMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTikKKyAgICAsIG1fZ2VvbG9jYXRpb25Db250cm9sbGVyKG5ldyBHZW9sb2NhdGlvbkNv
bnRyb2xsZXIodGhpcywgZ2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50KSkKKyNlbmRpZgogICAg
ICwgbV9zZXR0aW5ncyhuZXcgU2V0dGluZ3ModGhpcykpCiAgICAgLCBtX3Byb2dyZXNzKG5ldyBQ
cm9ncmVzc1RyYWNrZXIpCiAgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChCYWNrRm9yd2FyZExpc3Q6
OmNyZWF0ZSh0aGlzKSkKQEAgLTE0OCw2ICsxNTUsMTAgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGll
bnQqIGNocm9tZUNsaWVudCwgQwogI2lmICFFTkFCTEUoSU5TUEVDVE9SKQogICAgIFVOVVNFRF9Q
QVJBTShpbnNwZWN0b3JDbGllbnQpOwogI2VuZGlmCisjaWYgIVVTRShDTElFTlRfQkFTRURfR0VP
TE9DQVRJT04pCisgICAgVU5VU0VEX1BBUkFNKGdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCk7
CisjZW5kaWYKKwogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcg
SGFzaFNldDxQYWdlKj47CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNv
cmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudDsKICAgICBjbGFzcyBGb2N1c0NvbnRy
b2xsZXI7CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVy
OworICAgIGNsYXNzIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudDsKICAgICBjbGFzcyBIYWx0
YWJsZVBsdWdpbjsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiAgICAgY2xhc3MgSW5zcGVj
dG9yQ29udHJvbGxlcjsKQEAgLTc4LDYgKzgwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlcjsK
ICNlbmRpZgorI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgY2xhc3Mg
Tm90aWZpY2F0aW9uUHJlc2VudGVyOworI2VuZGlmCiAKICAgICBlbnVtIEZpbmREaXJlY3Rpb24g
eyBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CiAKQEAgLTg1
LDcgKzkwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgc3Rh
dGljIHZvaWQgc2V0TmVlZHNSZWFwcGx5U3R5bGVzKCk7CiAKLSAgICAgICAgUGFnZShDaHJvbWVD
bGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJ
bnNwZWN0b3JDbGllbnQqLCBQbHVnaW5IYWx0ZXJDbGllbnQqKTsKKyAgICAgICAgUGFnZShDaHJv
bWVDbGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQq
LCBJbnNwZWN0b3JDbGllbnQqLCBQbHVnaW5IYWx0ZXJDbGllbnQqLCBHZW9sb2NhdGlvbkNvbnRy
b2xsZXJDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKIAogICAgICAgICBSZW5kZXJUaGVtZSog
dGhlbWUoKSBjb25zdCB7IHJldHVybiBtX3RoZW1lLmdldCgpOyB9OwpAQCAtMTQ0LDYgKzE0OSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4g
bV9pbnNwZWN0b3JDb250cm9sbGVyLmdldCgpOyB9CiAjZW5kaWYKKyNpZiBVU0UoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQorICAgICAgICBHZW9sb2NhdGlvbkNvbnRyb2xsZXIqIGdlb2xvY2F0
aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbG9jYXRpb25Db250cm9sbGVyLmdl
dCgpOyB9CisjZW5kaWYKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3QgeyByZXR1
cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgICAgICBQcm9ncmVzc1RyYWNrZXIqIHByb2dyZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmVzcy5nZXQoKTsgfQogCkBAIC0yNTAsNiArMjU4LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIE93
blB0cjxJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAjZW5kaWYK
KyNpZiBVU0UoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgICAgICBPd25QdHI8R2VvbG9j
YXRpb25Db250cm9sbGVyPiBtX2dlb2xvY2F0aW9uQ29udHJvbGxlcjsKKyNlbmRpZgogICAgICAg
ICBPd25QdHI8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAgICAgIE93blB0cjxQcm9ncmVzc1Ry
YWNrZXI+IG1fcHJvZ3Jlc3M7CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBib29sIFNWR0ltYWdlOjpkYXRh
Q2hhbmdlZChib29sIGFsbERhdGFSCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIFNWRyBlbmRz
IHVwIGxvYWRpbmcgaXRzZWxmLCB3ZSBtaWdodCBsZWFrIHRoZSB3b3JsZC4KICAgICAgICAgLy8g
VGhlIGNvbW1lbnQgc2FpZCB0aGF0IHRoZSBDYWNoZSBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQg
Q2FjaGVkSW1hZ2VzCiAgICAgICAgIC8vIGhvbGRpbmcgRnJhbWVzIGFuZCB3b24ndCBrbm93IHRv
IGJyZWFrIHRoZSBjeWNsZS4gQnV0IAotICAgICAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKG1fY2hy
b21lQ2xpZW50LmdldCgpLCBkdW1teUNvbnRleHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVu
dCwgZHVtbXlEcmFnQ2xpZW50LCBkdW1teUluc3BlY3RvckNsaWVudCwgMCkpOworICAgICAgICBt
X3BhZ2Uuc2V0KG5ldyBQYWdlKG1fY2hyb21lQ2xpZW50LmdldCgpLCBkdW1teUNvbnRleHRNZW51
Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFnQ2xpZW50LCBkdW1teUluc3BlY3Rv
ckNsaWVudCwgMCwgMCkpOwogICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEphdmFTY3Jp
cHRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRQbHVnaW5z
RW5hYmxlZChmYWxzZSk7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTIwNzEpCisrKyBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMDktMTItMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjQ5OQorICAgICAgICBBZGQgY2xpZW50IGJhc2Vk
IEdlb2xvY2F0aW9uIHByb3ZpZGVyCisKKyAgICAgICAgQWRkIGZpcnN0IGN1dCBvZiBhIGNsaWVu
dCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92aWRlci4gVGhpcyBpcyBndWFyZGVkIGJ5CisgICAgICAg
IFVTRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pIGFuZCBpcyBvZmYgYnkgZGVmYXVsdCBmb3Ig
bm93LiBUaGlzIGFkZHMgYQorICAgICAgICBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQgaW50
ZXJmYWNlIHRoYXQgbm8tb25lIGN1cnJlbnRseSBpbXBsZW1lbnRzLAorICAgICAgICBidXQgd2ls
bCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorCiAyMDA5LTEy
LTExICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHJldmlzaW9uIDUxOTAyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0lt
cGwoV2ViVmlld0NsaWVudCogCiAgICAgICAgICAgICAgICAgICAgICAgICAmbV9lZGl0b3JDbGll
bnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgJm1fZHJhZ0NsaWVudEltcGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmbV9pbnNwZWN0b3JDbGllbnRJbXBsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKIAogICAgIG1fcGFn
ZS0+YmFja0ZvcndhcmRMaXN0KCktPnNldENsaWVudCgmbV9iYWNrRm9yd2FyZExpc3RDbGllbnRJ
bXBsKTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjA3MSkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTItMTMgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MjQ5OQorICAgICAgICBBZGQgY2xpZW50IGJhc2VkIEdlb2xvY2F0aW9uIHByb3ZpZGVyCisKKyAg
ICAgICAgQWRkIGZpcnN0IGN1dCBvZiBhIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92aWRl
ci4gVGhpcyBpcyBndWFyZGVkIGJ5CisgICAgICAgIFVTRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pIGFuZCBpcyBvZmYgYnkgZGVmYXVsdCBmb3Igbm93LiBUaGlzIGFkZHMgYQorICAgICAgICBH
ZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQgaW50ZXJmYWNlIHRoYXQgbm8tb25lIGN1cnJlbnRs
eSBpbXBsZW1lbnRzLAorICAgICAgICBidXQgd2lsbCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisK
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfaW5pdCk6CisKIDIwMDktMTItMTMgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpJbmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDUxOTAy
KQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1NTksNyArMjU1OSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdl
YktpdFcKICAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0X25ldygpOwog
CiAgICAgV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCA9IG5ldyBXZWJL
aXQ6Okluc3BlY3RvckNsaWVudCh3ZWJWaWV3KTsKLSAgICBwcml2LT5jb3JlUGFnZSA9IG5ldyBQ
YWdlKG5ldyBXZWJLaXQ6OkNocm9tZUNsaWVudCh3ZWJWaWV3KSwgbmV3IFdlYktpdDo6Q29udGV4
dE1lbnVDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkVkaXRvckNsaWVudCh3ZWJWaWV3KSwg
bmV3IFdlYktpdDo6RHJhZ0NsaWVudCh3ZWJWaWV3KSwgaW5zcGVjdG9yQ2xpZW50LCAwKTsKKyAg
ICBwcml2LT5jb3JlUGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJLaXQ6OkNocm9tZUNsaWVudCh3ZWJW
aWV3KSwgbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6
OkVkaXRvckNsaWVudCh3ZWJWaWV3KSwgbmV3IFdlYktpdDo6RHJhZ0NsaWVudCh3ZWJWaWV3KSwg
aW5zcGVjdG9yQ2xpZW50LCAwLCAwKTsKIAogICAgIC8vIFdlIGFsc28gYWRkIGEgc2ltcGxlIHdy
YXBwZXIgY2xhc3MgdG8gcHJvdmlkZSB0aGUgcHVibGljCiAgICAgLy8gaW50ZXJmYWNlIGZvciB0
aGUgV2ViIEluc3BlY3Rvci4KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjA3MSkKKysrIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTItMTMgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjQ5OQorICAgICAgICBBZGQgY2xpZW50IGJhc2VkIEdlb2xvY2F0aW9uIHBy
b3ZpZGVyCisKKyAgICAgICAgQWRkIGZpcnN0IGN1dCBvZiBhIGNsaWVudCBiYXNlZCBHZW9sb2Nh
dGlvbiBwcm92aWRlci4gVGhpcyBpcyBndWFyZGVkIGJ5CisgICAgICAgIFVTRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pIGFuZCBpcyBvZmYgYnkgZGVmYXVsdCBmb3Igbm93LiBUaGlzIGFkZHMg
YQorICAgICAgICBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQgaW50ZXJmYWNlIHRoYXQgbm8t
b25lIGN1cnJlbnRseSBpbXBsZW1lbnRzLAorICAgICAgICBidXQgd2lsbCBpbiBhIHN1YnNlcXVl
bnQgcGF0Y2guCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dl
YlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6dXNlc0Rv
Y3VtZW50Vmlld3M6XSk6CisKIDIwMDktMTItMTAgIEpvbiBIb25leWN1dHQgIDxqaG9uZXljdXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWMgYnVpbGQgZml4LiBVbnJldmlld2VkLgpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDUxOTAyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCBzdGF0aWMgYm9v
bCBydW5uaW5nVGlnZXJNYWlsKCkKICAgICAgICAgZGlkT25lVGltZUluaXRpYWxpemF0aW9uID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBfcHJpdmF0ZS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJDaHJv
bWVDbGllbnQoc2VsZiksIG5ldyBXZWJDb250ZXh0TWVudUNsaWVudChzZWxmKSwgbmV3IFdlYkVk
aXRvckNsaWVudChzZWxmKSwgbmV3IFdlYkRyYWdDbGllbnQoc2VsZiksIG5ldyBXZWJJbnNwZWN0
b3JDbGllbnQoc2VsZiksIG5ldyBXZWJQbHVnaW5IYWx0ZXJDbGllbnQoc2VsZikpOworICAgIF9w
cml2YXRlLT5wYWdlID0gbmV3IFBhZ2UobmV3IFdlYkNocm9tZUNsaWVudChzZWxmKSwgbmV3IFdl
YkNvbnRleHRNZW51Q2xpZW50KHNlbGYpLCBuZXcgV2ViRWRpdG9yQ2xpZW50KHNlbGYpLCBuZXcg
V2ViRHJhZ0NsaWVudChzZWxmKSwgbmV3IFdlYkluc3BlY3RvckNsaWVudChzZWxmKSwgbmV3IFdl
YlBsdWdpbkhhbHRlckNsaWVudChzZWxmKSwgMCk7CiAKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0
dGluZ3MoKS0+c2V0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKFtbc2VsZiBwcmVmZXJlbmNlc10g
X2xvY2FsU3RvcmFnZURhdGFiYXNlUGF0aF0pOwogCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDcxKQorKysg
V2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5
LTEyLTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI0OTkKKyAgICAgICAgQWRkIGNsaWVudCBiYXNlZCBHZW9s
b2NhdGlvbiBwcm92aWRlcgorCisgICAgICAgIEFkZCBmaXJzdCBjdXQgb2YgYSBjbGllbnQgYmFz
ZWQgR2VvbG9jYXRpb24gcHJvdmlkZXIuIFRoaXMgaXMgZ3VhcmRlZCBieQorICAgICAgICBVU0Uo
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKSBhbmQgaXMgb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4g
VGhpcyBhZGRzIGEKKyAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50IGludGVyZmFj
ZSB0aGF0IG5vLW9uZSBjdXJyZW50bHkgaW1wbGVtZW50cywKKyAgICAgICAgYnV0IHdpbGwgaW4g
YSBzdWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAg
ICAgKFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKToKKwogMjAwOS0xMi0xMyAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDUx
OTAyKQorKysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
Niw3ICszNzYsNyBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnCiAg
ICAgY29udGV4dE1lbnVDbGllbnQgPSBuZXcgQ29udGV4dE1lbnVDbGllbnRRdCgpOwogICAgIGVk
aXRvckNsaWVudCA9IG5ldyBFZGl0b3JDbGllbnRRdChxKTsKICAgICBwYWdlID0gbmV3IFBhZ2Uo
Y2hyb21lQ2xpZW50LCBjb250ZXh0TWVudUNsaWVudCwgZWRpdG9yQ2xpZW50LAotICAgICAgICAg
ICAgICAgICAgICBuZXcgRHJhZ0NsaWVudFF0KHEpLCBuZXcgSW5zcGVjdG9yQ2xpZW50UXQocSks
IDApOworICAgICAgICAgICAgICAgICAgICBuZXcgRHJhZ0NsaWVudFF0KHEpLCBuZXcgSW5zcGVj
dG9yQ2xpZW50UXQocSksIDAsIDApOwogCiAgICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdz
KHBhZ2UtPnNldHRpbmdzKCkpOwogCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNTIwNzEpCisrKyBXZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTEyLTEz
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzI0OTkKKyAgICAgICAgQWRkIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlv
biBwcm92aWRlcgorCisgICAgICAgIEFkZCBmaXJzdCBjdXQgb2YgYSBjbGllbnQgYmFzZWQgR2Vv
bG9jYXRpb24gcHJvdmlkZXIuIFRoaXMgaXMgZ3VhcmRlZCBieQorICAgICAgICBVU0UoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKSBhbmQgaXMgb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4gVGhpcyBh
ZGRzIGEKKyAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50IGludGVyZmFjZSB0aGF0
IG5vLW9uZSBjdXJyZW50bHkgaW1wbGVtZW50cywKKyAgICAgICAgYnV0IHdpbGwgaW4gYSBzdWJz
ZXF1ZW50IHBhdGNoLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3
Ojppbml0V2l0aEZyYW1lKToKKwogMjAwOS0xMi0xMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KSW5kZXg6IFdl
YktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzk1LDcgKzIzOTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZp
ZXc6OmluaXRXCiAgICAgaWYgKFNVQ0NFRURFRChtX3ByZWZlcmVuY2VzLT5zaG91bGRVc2VIaWdo
UmVzb2x1dGlvblRpbWVycygmdXNlSGlnaFJlc29sdXRpb25UaW1lcikpKQogICAgICAgICBTZXR0
aW5nczo6c2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnModXNlSGlnaFJlc29sdXRpb25U
aW1lcik7CiAKLSAgICBtX3BhZ2UgPSBuZXcgUGFnZShuZXcgV2ViQ2hyb21lQ2xpZW50KHRoaXMp
LCBuZXcgV2ViQ29udGV4dE1lbnVDbGllbnQodGhpcyksIG5ldyBXZWJFZGl0b3JDbGllbnQodGhp
cyksIG5ldyBXZWJEcmFnQ2xpZW50KHRoaXMpLCBuZXcgV2ViSW5zcGVjdG9yQ2xpZW50KHRoaXMp
LCBuZXcgV2ViUGx1Z2luSGFsdGVyQ2xpZW50KHRoaXMpKTsKKyAgICBtX3BhZ2UgPSBuZXcgUGFn
ZShuZXcgV2ViQ2hyb21lQ2xpZW50KHRoaXMpLCBuZXcgV2ViQ29udGV4dE1lbnVDbGllbnQodGhp
cyksIG5ldyBXZWJFZGl0b3JDbGllbnQodGhpcyksIG5ldyBXZWJEcmFnQ2xpZW50KHRoaXMpLCBu
ZXcgV2ViSW5zcGVjdG9yQ2xpZW50KHRoaXMpLCBuZXcgV2ViUGx1Z2luSGFsdGVyQ2xpZW50KHRo
aXMpLCAwKTsKIAogICAgIEJTVFIgbG9jYWxTdG9yYWdlUGF0aDsKICAgICBpZiAoU1VDQ0VFREVE
KG1fcHJlZmVyZW5jZXMtPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgmbG9jYWxTdG9yYWdlUGF0
aCkpKSB7Cg==
</data>
<flag name="review"
          id="26674"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44771</attachid>
            <date>2009-12-13 17:37:30 -0800</date>
            <delta_ts>2009-12-13 23:08:45 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>GeoWebCore2.diff</filename>
            <type>text/plain</type>
            <size>56159</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMDktMTItMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjQ5OQorICAgICAgICBB
ZGQgY2xpZW50IGJhc2VkIEdlb2xvY2F0aW9uIHByb3ZpZGVyCisKKyAgICAgICAgQWRkIGZpcnN0
IGN1dCBvZiBhIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92aWRlci4gVGhpcyBpcyBndWFy
ZGVkIGJ5CisgICAgICAgIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pIGFuZCBpcyBv
ZmYgYnkgZGVmYXVsdCBmb3Igbm93LiBUaGlzIGFkZHMgYQorICAgICAgICBHZW9sb2NhdGlvbkNv
bnRyb2xsZXJDbGllbnQgaW50ZXJmYWNlIHRoYXQgbm8tb25lIGN1cnJlbnRseSBpbXBsZW1lbnRz
LAorICAgICAgICBidXQgd2lsbCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHBhZ2Uv
R2VvbG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2VvcG9zaXRpb25Gcm9t
R2VvbG9jYXRpb25Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkVy
cm9yRnJvbUdlb2xvY2F0aW9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246
Okdlb2xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjp+R2VvbG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bGFzdFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb246OmZhdGFsRXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbjo6cmVxdWVzdFRpbWVkT3V0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpj
bGVhcldhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYW5kbGVFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcyk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVk
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFVwZGF0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAqIHBhZ2Uv
R2VvbG9jYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVyOjpHZW9sb2Nh
dGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9sbGVy
Ojp+R2VvbG9jYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
Q29udHJvbGxlcjo6YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25D
b250cm9sbGVyOjpyZW1vdmVPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbkNvbnRyb2xsZXI6OmVycm9yT2NjdXJyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9j
YXRpb25Db250cm9sbGVyOjpsYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRp
b25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Db250cm9s
bGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9s
bGVyQ2xpZW50Ojp+R2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKiBwYWdl
L0dlb2xvY2F0aW9uRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
bkVycm9yOjopOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I6OmNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25FcnJvcjo6bWVzc2FnZSk6CisgICAgICAgICogcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3Np
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb246OnRp
bWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpsYXRpdHVk
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpsb25naXR1ZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWNjdXJhY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWx0aXR1ZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6YWx0aXR1ZGVBY2N1cmFjeSk6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpoZWFkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uUG9zaXRpb246OnNwZWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uUG9zaXRpb246OmNhblByb3ZpZGVBbHRpdHVkZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSk6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlSGVhZGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uOjpjYW5Qcm92aWRlU3BlZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbjo6R2VvbG9jYXRpb25Qb3NpdGlvbik6Cisg
ICAgICAgICogcGFnZS9HZW9wb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R2VvcG9zaXRp
b246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6Z2VvbG9jYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKwog
MjAwOS0xMi0xMyAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTE5MDIpCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ3LDYgKzEzNDcsMTEg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggXAogCVdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAgXAogCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5o
IFwKKwlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCisJV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oIFwKKwlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25D
b250cm9sbGVyQ2xpZW50LmggXAorCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkVycm9yLmggXAor
CVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmggXAogCVdlYkNvcmUvcGFnZS9HZW9w
b3NpdGlvbi5oIFwKIAlXZWJDb3JlL3BhZ2UvSGFsdGFibGVQbHVnaW4uaCBcCiAJV2ViQ29yZS9w
YWdlL0hpc3RvcnkuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDUxOTAyKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNiArMjkyLDcgQEAg
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEycmVsZWFzZVBybwogX19aTjdXZWJDb3JlMTRS
ZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgogX19aTjdXZWJDb3JlMTRSZXNv
dXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRl
cjE5c2V0U2hvdWxkQnVmZmVyRGF0YUViCitfX1pON1dlYkNvcmUxNFNWR1NNSUxFbGVtZW50MTNp
c1NNSUxFbGVtZW50RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNmNy
ZWF0ZUZyb21TdHJpbmdFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdp
bjE4c2V0TG9jYWxMb2FkUG9saWN5RU5TMF8xNUxvY2FsTG9hZFBvbGljeUUKIF9fWk43V2ViQ29y
ZTE0U2VjdXJpdHlPcmlnaW4xOHNob3VsZEhpZGVSZWZlcnJlckVSS05TXzRLVVJMRVJLTlNfNlN0
cmluZ0UKQEAgLTQxNCw2ICs0MTUsNyBAQCBfX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjIzcmVjCiBfX1pON1dlYkNvcmUyMUphdmFTY3JpcHREZWJ1Z1NlcnZlcjZzaGFyZWRFdgog
X19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25F
dmVudEVOUzBfNFR5cGVFYgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRDMUVQ
N05TRXZlbnQKK19fWk43V2ViQ29yZTIxU1ZHRG9jdW1lbnRFeHRlbnNpb25zMjFzYW1wbGVBbmlt
YXRpb25BdFRpbWVFUktOU182U3RyaW5nRVBOU18xNFNWR1NNSUxFbGVtZW50RWQKIF9fWk43V2Vi
Q29yZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlMTFkZXNlcmlhbGl6ZUVQSzE1T3BhcXVlSlNDb250
ZXh0UFBLMTNPcGFxdWVKU1ZhbHVlCiBfX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTZjcmVhdGVFUEsxNU9wYXF1ZUpTQ29udGV4dFBLMTNPcGFxdWVKU1ZhbHVlUFM2XwogX19aTjdX
ZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWVEMUV2CkBAIC00OTUsNyArNDk3LDcgQEAgX19a
TjdXZWJDb3JlNFBhZ2U2Z29CYWNrRXYKIF9fWk43V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVBOU18x
MUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43V2ViQ29yZTRQYWdlOWdvRm9y
d2FyZEV2CiBfX1pON1dlYkNvcmU0UGFnZTlpbml0R3JvdXBFdgotX19aTjdXZWJDb3JlNFBhZ2VD
MUVQTlNfMTJDaHJvbWVDbGllbnRFUE5TXzE3Q29udGV4dE1lbnVDbGllbnRFUE5TXzEyRWRpdG9y
Q2xpZW50RVBOU18xMERyYWdDbGllbnRFUE5TXzE1SW5zcGVjdG9yQ2xpZW50RVBOU18xOFBsdWdp
bkhhbHRlckNsaWVudEUKK19fWk43V2ViQ29yZTRQYWdlQzFFUE5TXzEyQ2hyb21lQ2xpZW50RVBO
U18xN0NvbnRleHRNZW51Q2xpZW50RVBOU18xMkVkaXRvckNsaWVudEVQTlNfMTBEcmFnQ2xpZW50
RVBOU18xNUluc3BlY3RvckNsaWVudEVQTlNfMThQbHVnaW5IYWx0ZXJDbGllbnRFUE5TXzI3R2Vv
bG9jYXRpb25Db250cm9sbGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2CiBfX1pON1dl
YkNvcmU0Y29yZUVQMjBOU1VSTFByb3RlY3Rpb25TcGFjZQogX19aTjdXZWJDb3JlNUNhY2hlMTFz
ZXREaXNhYmxlZEViCkBAIC02MDEsOCArNjAzLDEwIEBAIF9fWk43V2ViQ29yZTdjb29raWVzRVBL
TlNfOERvY3VtZW50RVJLTlMKIF9fWk43V2ViQ29yZTduc0NvbG9yRVJLTlNfNUNvbG9yRQogX19a
TjdXZWJDb3JlOERvY3VtZW50MTFjcmVhdGVSYW5nZUV2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQx
M3JlbW92ZU1hcmtlcnNFTlNfMTREb2N1bWVudE1hcmtlcjEwTWFya2VyVHlwZUUKK19fWk43V2Vi
Q29yZThEb2N1bWVudDEzc3ZnRXh0ZW5zaW9uc0V2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxNHNl
dEZvY3VzZWROb2RlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmU4
RG9jdW1lbnQxN2dldEZvY3VzYWJsZU5vZGVzRVJOM1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJTlNf
NE5vZGVFRUVMbTBFRUUKK19fWk43V2ViQ29yZThEb2N1bWVudDE5YWNjZXNzU1ZHRXh0ZW5zaW9u
c0V2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyMmNyZWF0ZURvY3VtZW50RnJhZ21lbnRFdgogX19a
TjdXZWJDb3JlOERvY3VtZW50MjNyZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0VOU18xNERvY3VtZW50
TWFya2VyMTBNYXJrZXJUeXBlRQogX19aTjdXZWJDb3JlOERvY3VtZW50MjRzZXRTaG91bGRDcmVh
dGVSZW5kZXJlcnNFYgpAQCAtNjI3LDkgKzYzMSw5IEBAIF9fWk43V2ViQ29yZThTZXR0aW5nczIw
c2V0Q3Vyc2l2ZUZvbnRGYW0KIF9fWk43V2ViQ29yZThTZXR0aW5nczIwc2V0RmFudGFzeUZvbnRG
YW1pbHlFUktOU18xMkF0b21pY1N0cmluZ0UKIF9fWk43V2ViQ29yZThTZXR0aW5nczIwc2V0SmF2
YVNjcmlwdEVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjBzZXRYU1NBdWRpdG9yRW5h
YmxlZEViCitfX1pON1dlYkNvcmU4U2V0dGluZ3MyMXNldFNob3dSZXBhaW50Q291bnRlckViCiBf
X1pON1dlYkNvcmU4U2V0dGluZ3MyMXNldFN0YW5kYXJkRm9udEZhbWlseUVSS05TXzEyQXRvbWlj
U3RyaW5nRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMjFzZXRXZWJTZWN1cml0eUVuYWJsZWRFYgot
X19aTjdXZWJDb3JlOFNldHRpbmdzMjFzZXRTaG93UmVwYWludENvdW50ZXJFYgogX19aTjdXZWJD
b3JlOFNldHRpbmdzMjJzZXRMb2NhbFN0b3JhZ2VFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0
aW5nczIyc2V0U2Fuc1NlcmlmRm9udEZhbWlseUVSS05TXzEyQXRvbWljU3RyaW5nRQogX19aTjdX
ZWJDb3JlOFNldHRpbmdzMjJzZXRTaG93c1VSTHNJblRvb2xUaXBzRWIKQEAgLTk2MSw5ICs5NjUs
OSBAQCBfX1pOSzdXZWJDb3JlOERvY3VtZW50MzFkaXNwbGF5U3RyaW5nTW9kCiBfX1pOSzdXZWJD
b3JlOERvY3VtZW50NGJvZHlFdgogX19aTks3V2ViQ29yZThEb2N1bWVudDZkb21haW5FdgogX19a
Tks3V2ViQ29yZThJbnRQb2ludGN2OF9OU1BvaW50RXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24x
MGRvd25zdHJlYW1FTlMwXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2Vi
Q29yZThQb3NpdGlvbjI1bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5RWIK
IF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlF
QWZmaW5pdHlFYgotX19aTks3V2ViQ29yZThQb3NpdGlvbjEwZG93bnN0cmVhbUVOUzBfMjdFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uOHVwc3RyZWFt
RU5TMF8yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2lu
ZG93MjdwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgogX19aTks3V2ViQ29yZTlGbG9hdFJl
Y3RjdjdfTlNSZWN0RXYKQEAgLTk4MiwxMCArOTg2LDYgQEAgX19aVFZON1dlYkNvcmUxMkNocm9t
ZUNsaWVudEUKIF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hvb3NlckNsaWVudEUKIF9fWlRWTjdXZWJD
b3JlMTdGcmFtZUxvYWRlckNsaWVudEUKIF9fWlRWTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlM
aXN0V3JpdGVyRQotX19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDEzaXNTTUlMRWxlbWVudEVQ
TlNfNE5vZGVFCi1fX1pON1dlYkNvcmUyMVNWR0RvY3VtZW50RXh0ZW5zaW9uczIxc2FtcGxlQW5p
bWF0aW9uQXRUaW1lRVJLTlNfNlN0cmluZ0VQTlNfMTRTVkdTTUlMRWxlbWVudEVkCi1fX1pON1dl
YkNvcmU4RG9jdW1lbnQxOWFjY2Vzc1NWR0V4dGVuc2lvbnNFdgotX19aTjdXZWJDb3JlOERvY3Vt
ZW50MTNzdmdFeHRlbnNpb25zRXYKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMK
IF9oYXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgzLDYgKzE3ODMsMTEgQEAKICAgICAgICAgICAgICdwYWdlL0ZyYW1lVmll
dy5oJywKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uLmNwcCcsCiAgICAgICAgICAgICAn
cGFnZS9HZW9sb2NhdGlvbi5oJywKKyAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ29udHJv
bGxlci5jcHAnCisgICAgICAgICAgICAncGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCcKKyAg
ICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5oJworICAgICAgICAg
ICAgJ3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oJworICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRp
b25Qb3NpdGlvbi5oJwogICAgICAgICAgICAgJ3BhZ2UvR2VvcG9zaXRpb24uaCcsCiAgICAgICAg
ICAgICAncGFnZS9IYWx0YWJsZVBsdWdpbi5oJywKICAgICAgICAgICAgICdwYWdlL0hpc3Rvcnku
Y3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTU1LDYgKzExNTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL0Zy
YW1lVHJlZS5jcHAgXAogICAgIHBhZ2UvRnJhbWVWaWV3LmNwcCBcCiAgICAgcGFnZS9HZW9sb2Nh
dGlvbi5jcHAgXAorICAgIHBhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCiAgICAgcGFn
ZS9IaXN0b3J5LmNwcCBcCiAgICAgcGFnZS9Mb2NhdGlvbi5jcHAgXAogICAgIHBhZ2UvTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9u
IDUxOTAyKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTc3Nyw2ICs3NzcsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVl
CiAgICAgICAgIHBhZ2UvRnJhbWVUcmVlLmNwcAogICAgICAgICBwYWdlL0ZyYW1lVmlldy5jcHAK
ICAgICAgICAgcGFnZS9HZW9sb2NhdGlvbi5jcHAKKyAgICAgICAgcGFnZS9HZW9sb2NhdGlvbkNv
bnRyb2xsZXIuY3BwCiAgICAgICAgIHBhZ2UvSGlzdG9yeS5jcHAKICAgICAgICAgcGFnZS9Mb2Nh
dGlvbi5jcHAKICAgICAgICAgcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA1MTkwMikK
KysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIwNjUxLDYgKzIwNjUxLDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2Vc
R2VvbG9jYXRpb25Db250cm9sbGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGFnZVxHZW9sb2NhdGlvbkVycm9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uUG9zaXRpb24uaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2Vv
cG9zaXRpb24uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTIwNzEpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDE4OSw2
ICs0MTg5LDExIEBACiAJCUJDNTNDNjA4MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUzQzYwNzBE
QTU2QzU3MDAyMUVCNUQgLyogR3JhZGllbnQuY3BwICovOyB9OwogCQlCQzUzQzYwQjBEQTU2Q0Yx
MDAyMUVCNUQgLyogR3JhZGllbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzUzQzYwQTBEQTU2Q0YxMDAyMUVCNUQgLyogR3JhZGllbnRDRy5j
cHAgKi87IH07CiAJCUJDNTNDNjkyMERBNTkxMTQwMDIxRUI1RCAvKiBDU1NHcmFkaWVudFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUzQzY5
MTBEQTU5MTE0MDAyMUVCNUQgLyogQ1NTR3JhZGllbnRWYWx1ZS5oICovOyB9OworCQlCQzU2Q0Iy
MTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFDMTBENUFDODAwMEE3
N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQlCQzU2Q0IyMjEwRDVB
QzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU2Q0IxRDEwRDVBQzgwMDBBNzdDNjQgLyog
R2VvbG9jYXRpb25Db250cm9sbGVyLmggKi87IH07CisJCUJDNTZDQjIzMTBENUFDODAwMEE3N0M2
NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAvKiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCAqLzsgfTsKKwkJQkM1NkNCMjQxMEQ1QUM4MDAwQTc3
QzY0IC8qIEdlb2xvY2F0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFGMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVy
cm9yLmggKi87IH07CisJCUJDNTZDQjI1MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzU2Q0IyMDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oICovOyB9Owog
CQlCQzU4MjNGNTBDMEE5OERGMDA1M0YxQjUgLyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4MjNGNDBDMEE5
OERGMDA1M0YxQjUgLyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTgyNUYz
MEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODI1RjIwQzBCODkz
ODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCUJD
NTg4QUYwMEJGQTZDRjkwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODhBRUYwQkZBNkNGOTAw
RUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi87IH07CkBAIC05MzU2LDYgKzkzNjEs
MTEgQEAKIAkJQkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdyYWRpZW50Q0cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhZGllbnRDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTNDNjkxMERBNTkxMTQwMDIxRUI1RCAv
KiBDU1NHcmFkaWVudFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0dyYWRpZW50VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM1NkNCMUMx
MEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2Q0IxRDEwRDVBQzgwMDBBNzdDNjQgLyogR2Vv
bG9jYXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdl
b2xvY2F0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2
Q0IxRTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzU2Q0IxRjEwRDVBQzgwMDBBNzdD
NjQgLyogR2VvbG9jYXRpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHZW9sb2NhdGlvbkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNTZD
QjIwMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uUG9zaXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODIzRjQwQzBBOThERjAwNTNGMUI1IC8qIEpTSFRNTEVsZW1l
bnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1M
RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTgyNUYy
MEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhBRUYwQkZBNkNGOTAw
RUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTEyNzUsNiArMTEyODUsMTEgQEAKIAkJCQlGRTgwRDdCNzBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvbG9jYXRpb24uY3BwICovLAogCQkJCUZFODBEN0I4MEU5QzFGMjUwMDBENkY3NSAv
KiBHZW9sb2NhdGlvbi5oICovLAogCQkJCUZFODBEN0I5MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9s
b2NhdGlvbi5pZGwgKi8sCisJCQkJQkM1NkNCMUMxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0
aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQkM1NkNCMUQxMEQ1QUM4MDAwQTc3QzY0IC8qIEdl
b2xvY2F0aW9uQ29udHJvbGxlci5oICovLAorCQkJCUJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAv
KiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCAqLywKKwkJCQlCQzU2Q0IxRjEwRDVBQzgw
MDBBNzdDNjQgLyogR2VvbG9jYXRpb25FcnJvci5oICovLAorCQkJCUJDNTZDQjIwMTBENUFDODAw
MEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8sCiAJCQkJRkU4MEQ3QkIwRTlDMUYy
NTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmggKi8sCiAJCQkJRkU4MEQ3QkMwRTlDMUYyNTAwMEQ2
Rjc1IC8qIEdlb3Bvc2l0aW9uLmlkbCAqLywKIAkJCQk3NjkzQkFDRTEwNkMyRENBMDA3QjA4MjMg
LyogSGFsdGFibGVQbHVnaW4uaCAqLywKQEAgLTE4MjQ2LDYgKzE4MjYxLDEwIEBACiAJCQkJN0FE
RTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBDM0YxRjVCMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3IC8qIEpTV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDNTZDQjIyMTBENUFDODAw
MEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
NTZDQjIzMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDNTZDQjI0MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlv
bkVycm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyog
R2VvbG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDQwMyw2ICsyMDQyMiw3
IEBACiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBDNDUzNDI3MTBDREJCRkEw
MDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUJDNTZDQjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDUxOTAyKQorKysg
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDQ1IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAKKyNpZiBFTkFC
TEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25F
cnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKKyNpbmNsdWRlICJHZW9w
b3NpdGlvbi5oIgorI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHBlcm1pc3Npb25EZW5pZWRFcnJvck1l
c3NhZ2VbXSA9ICJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiI7CiAKKyNpZiBFTkFCTEUoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKQorCitzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3Jl
YXRlR2VvcG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbiogcG9zaXRpb24pCit7CisgICAgUmVm
UHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcyA9IENvb3JkaW5hdGVzOjpjcmVhdGUocG9zaXRp
b24tPmxhdGl0dWRlKCksIHBvc2l0aW9uLT5sb25naXR1ZGUoKSwgcG9zaXRpb24tPmNhblByb3Zp
ZGVBbHRpdHVkZSgpLCBwb3NpdGlvbi0+YWx0aXR1ZGUoKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPmFjY3VyYWN5
KCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpLCBwb3NpdGlvbi0+YWx0
aXR1ZGVBY2N1cmFjeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLT5jYW5Qcm92aWRlSGVhZGluZygpLCBwb3NpdGlv
bi0+aGVhZGluZygpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZVNwZWVkKCksIHBvc2l0aW9uLT5zcGVl
ZCgpKTsKKyAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNl
KCksIHBvc2l0aW9uLT50aW1lc3RhbXAoKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0
aW9uRXJyb3I+IGNyZWF0ZVBvc2l0aW9uRXJyb3IoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCit7
CisgICAgUG9zaXRpb25FcnJvcjo6RXJyb3JDb2RlIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQT1NJ
VElPTl9VTkFWQUlMQUJMRTsKKyAgICBzd2l0Y2ggKGVycm9yLT5jb2RlKCkpIHsKKyAgICBjYXNl
IEdlb2xvY2F0aW9uRXJyb3I6OlBlcm1pc3Npb25EZW5pZWQ6CisgICAgICAgIGNvZGUgPSBQb3Np
dGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
ZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlOgorICAgICAgICBjb2RlID0gUG9z
aXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEU7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBQb3NpdGlvbkVycm9yOjpjcmVhdGUoY29kZSwgZXJyb3ItPm1lc3NhZ2Uo
KSk7Cit9CisjZW5kaWYKKwogR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihH
ZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24sIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiAgICAgOiBtX2dlb2xv
Y2F0aW9uKGdlb2xvY2F0aW9uKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxi
YWNrKQpAQCAtMTM2LDcgKzE3MSw5IEBAIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpnZXRO
b3RpZmllcnMKIAogR2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKEZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisjaWYgIUVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCiAg
ICAgLCBtX3NlcnZpY2UoR2VvbG9jYXRpb25TZXJ2aWNlOjpjcmVhdGUodGhpcykpCisjZW5kaWYK
ICAgICAsIG1fYWxsb3dHZW9sb2NhdGlvbihVbmtub3duKQogICAgICwgbV9zaG91bGRDbGVhckNh
Y2hlKGZhbHNlKQogewpAQCAtMTQ2LDE0ICsxODMsMzYgQEAgR2VvbG9jYXRpb246Okdlb2xvY2F0
aW9uKEZyYW1lKiBmcmFtZSkKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dlb2xv
Y2F0aW9uKHRydWUpOwogfQogCitHZW9sb2NhdGlvbjo6fkdlb2xvY2F0aW9uKCkKK3sKK30KKwog
dm9pZCBHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkKIHsKLSAgICBtX3NlcnZpY2UtPnN0
b3BVcGRhdGluZygpOworICAgIHN0b3BVcGRhdGluZygpOwogICAgIGlmIChtX2ZyYW1lICYmIG1f
ZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnNldFVzaW5n
R2VvbG9jYXRpb24oZmFsc2UpOwogICAgIG1fZnJhbWUgPSAwOwogfQogCitHZW9wb3NpdGlvbiog
R2VvbG9jYXRpb246Omxhc3RQb3NpdGlvbigpCit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9H
RU9MT0NBVElPTikKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgbV9sYXN0UG9zaXRpb24gPSBjcmVhdGVHZW9wb3NpdGlvbihwYWdlLT5n
ZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+bGFzdFBvc2l0aW9uKCkpOworI2Vsc2UKKyAgICBtX2xh
c3RQb3NpdGlvbiA9IG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCk7CisjZW5kaWYKKworICAgIHJl
dHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsKK30KKwogdm9pZCBHZW9sb2NhdGlvbjo6Z2V0Q3Vy
cmVudFBvc2l0aW9uKFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1Jl
ZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPEdlb05vdGlmaWVy
PiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpOwpAQCAtMTg0LDcgKzI0Myw3IEBAIFBhc3NSZWZQdHI8R2VvbG9jYXRpb246Okdl
b05vdGlmaWVyPiBHZW8KICAgICBpZiAoaXNEZW5pZWQoKSkKICAgICAgICAgbm90aWZpZXItPnNl
dEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJ
T05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlKSk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBtX3NlcnZpY2UtPnN0YXJ0
VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisgICAgICAgIGlmIChub3RpZmll
ci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVyLT5tX29wdGlvbnMu
Z2V0KCkpKQogICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVy
cm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsICJGYWlsZWQg
dG8gc3RhcnQgR2VvbG9jYXRpb24gc2VydmljZSIpKTsKQEAgLTIwMCw3ICsyNTksNyBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQoR2VvCiAgICAgbV93YXRjaGVycy5yZW1v
dmUobm90aWZpZXIpOwogCiAgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAgbV9zZXJ2
aWNlLT5zdG9wVXBkYXRpbmcoKTsKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7CiB9CiAKIHZvaWQg
R2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90aWZpZXIpCkBAIC0y
MDksNyArMjY4LDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFRpbWVkT3V0KEdlb05vdAog
ICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyKTsKIAogICAgIGlmICghaGFzTGlzdGVuZXJz
KCkpCi0gICAgICAgIG1fc2VydmljZS0+c3RvcFVwZGF0aW5nKCk7CisgICAgICAgIHN0b3BVcGRh
dGluZygpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQpA
QCAtMjE3LDE5ICsyNzYsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRj
aElkCiAgICAgbV93YXRjaGVycy5yZW1vdmUod2F0Y2hJZCk7CiAgICAgCiAgICAgaWYgKCFoYXNM
aXN0ZW5lcnMoKSkKLSAgICAgICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKLX0KLQotdm9p
ZCBHZW9sb2NhdGlvbjo6c3VzcGVuZCgpCi17Ci0gICAgaWYgKGhhc0xpc3RlbmVycygpKQotICAg
ICAgICBtX3NlcnZpY2UtPnN1c3BlbmQoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6cmVzdW1l
KCkKLXsKLSAgICBpZiAoaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIG1fc2VydmljZS0+cmVzdW1l
KCk7CisgICAgICAgIHN0b3BVcGRhdGluZygpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKQpAQCAtMzE5LDcgKzM2Niw3IEBAIHZvaWQgR2VvbG9jYXRp
b246OmhhbmRsZUVycm9yKFBvc2l0aW9uRXIKICAgICBzZW5kRXJyb3Iod2F0Y2hlcnNDb3B5LCBl
cnJvcik7CiAKICAgICBpZiAoIWhhc0xpc3RlbmVycygpKQotICAgICAgICBtX3NlcnZpY2UtPnN0
b3BVcGRhdGluZygpOworICAgICAgICBzdG9wVXBkYXRpbmcoKTsKIH0KIAogdm9pZCBHZW9sb2Nh
dGlvbjo6cmVxdWVzdFBlcm1pc3Npb24oKQpAQCAtMzQwLDEwICszODcsOSBAQCB2b2lkIEdlb2xv
Y2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbigpCiAgICAgcGFnZS0+Y2hyb21lKCktPnJlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShtX2ZyYW1lLCB0aGlzKTsKIH0KIAotdm9pZCBH
ZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9u
U2VydmljZSogc2VydmljZSkKK3ZvaWQgR2VvbG9jYXRpb246OnBvc2l0aW9uQ2hhbmdlZChQYXNz
UmVmUHRyPEdlb3Bvc2l0aW9uPiBuZXdQb3NpdGlvbikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHNl
cnZpY2UsIHNlcnZpY2UgPT0gbV9zZXJ2aWNlKTsKLSAgICBBU1NFUlQobV9zZXJ2aWNlLT5sYXN0
UG9zaXRpb24oKSk7CisgICAgbV9jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKIAogICAg
IC8vIFN0b3AgYWxsIGN1cnJlbnRseSBydW5uaW5nIHRpbWVycy4KICAgICBzdG9wVGltZXJzKCk7
CkBAIC0zNjIsNyArNDA4LDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNl
UG9zaQogCiB2b2lkIEdlb2xvY2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcygpCiB7Ci0gICAg
QVNTRVJUKG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOworICAgIEFTU0VSVChtX2N1cnJlbnRQ
b3NpdGlvbik7CiAgICAgQVNTRVJUKGlzQWxsb3dlZCgpKTsKICAgICAKICAgICBWZWN0b3I8UmVm
UHRyPEdlb05vdGlmaWVyPiA+IG9uZVNob3RzQ29weTsKQEAgLTM3NiwxOCArNDIyLDgwIEBAIHZv
aWQgR2VvbG9jYXRpb246Om1ha2VTdWNjZXNzQ2FsbGJhY2tzKCkKICAgICAvLyBmdXJ0aGVyIGNh
bGxiYWNrcyB0byB0aGVzZSBub3RpZmllcnMuCiAgICAgbV9vbmVTaG90cy5jbGVhcigpOwogCi0g
ICAgc2VuZFBvc2l0aW9uKG9uZVNob3RzQ29weSwgbV9zZXJ2aWNlLT5sYXN0UG9zaXRpb24oKSk7
Ci0gICAgc2VuZFBvc2l0aW9uKHdhdGNoZXJzQ29weSwgbV9zZXJ2aWNlLT5sYXN0UG9zaXRpb24o
KSk7CisgICAgc2VuZFBvc2l0aW9uKG9uZVNob3RzQ29weSwgbV9jdXJyZW50UG9zaXRpb24uZ2V0
KCkpOworICAgIHNlbmRQb3NpdGlvbih3YXRjaGVyc0NvcHksIG1fY3VycmVudFBvc2l0aW9uLmdl
dCgpKTsKIAogICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIG1fc2VydmljZS0+c3Rv
cFVwZGF0aW5nKCk7CisgICAgICAgIHN0b3BVcGRhdGluZygpOworfQorCisjaWYgRU5BQkxFKENM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKwordm9pZCBHZW9sb2NhdGlvbjo6c2V0UG9zaXRpb24o
R2VvbG9jYXRpb25Qb3NpdGlvbiogcG9zaXRpb24pCit7CisgICAgcG9zaXRpb25DaGFuZ2VkKGNy
ZWF0ZUdlb3Bvc2l0aW9uKHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNldEVy
cm9yKEdlb2xvY2F0aW9uRXJyb3IqIGVycm9yKQoreworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9y
PiBwb3NpdGlvbkVycm9yID0gY3JlYXRlUG9zaXRpb25FcnJvcihlcnJvcik7CisgICAgaGFuZGxl
RXJyb3IocG9zaXRpb25FcnJvci5nZXQoKSk7Cit9CisKKyNlbHNlCisKK3ZvaWQgR2VvbG9jYXRp
b246Omdlb2xvY2F0aW9uU2VydmljZVBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblNlcnZpY2Uq
IHNlcnZpY2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChzZXJ2aWNlLCBzZXJ2aWNlID09IG1fc2Vy
dmljZSk7CisgICAgQVNTRVJUKG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOworCisgICAgcG9z
aXRpb25DaGFuZ2VkKG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOwogfQogCiB2b2lkIEdlb2xv
Y2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uU2Vydmlj
ZSogc2VydmljZSkKIHsKICAgICBBU1NFUlQoc2VydmljZS0+bGFzdEVycm9yKCkpOwotICAgIAor
CiAgICAgaGFuZGxlRXJyb3Ioc2VydmljZS0+bGFzdEVycm9yKCkpOwogfQogCisjZW5kaWYKKwor
Ym9vbCBHZW9sb2NhdGlvbjo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIG9wdGlvbnMp
Cit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICAvLyBGSVhNRTog
UGFzcyBvcHRpb25zIHRvIGNsaWVudC4KKyAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisKKyAg
ICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+YWRkT2JzZXJ2ZXIodGhpcyk7
CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBtX3NlcnZpY2UtPnN0YXJ0VXBk
YXRpbmcob3B0aW9ucyk7CisjZW5kaWYKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6c3RvcFVwZGF0
aW5nKCkKK3sKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIGlmICgh
bV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHBhZ2UtPmdlb2xv
Y2F0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKKyNlbHNlCisgICAgbV9z
ZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKKyNlbmRpZgorCit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwyMiArNDYsMjggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBHZW9wb3NpdGlvbjsKIAotY2xhc3Mg
R2VvbG9jYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvbj4sIHB1YmxpYyBHZW9s
b2NhdGlvblNlcnZpY2VDbGllbnQgeworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pCitjbGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOworY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsK
KyNlbmRpZgorCitjbGFzcyBHZW9sb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb2xvY2F0
aW9uPgorI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgICwgcHVibGlj
IEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAorI2VuZGlmCisgICAgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb24oZnJhbWUpKTsgfQogCi0gICAgdmlydHVhbCB+R2Vv
bG9jYXRpb24oKSB7fQorICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uKCk7CiAKICAgICB2b2lkIGRp
c2Nvbm5lY3RGcmFtZSgpOwogICAgIAotICAgIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3NlcnZpY2UtPmxhc3RQb3NpdGlvbigpOyB9CisgICAgR2VvcG9zaXRp
b24qIGxhc3RQb3NpdGlvbigpOwogCiAgICAgdm9pZCBnZXRDdXJyZW50UG9zaXRpb24oUGFzc1Jl
ZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4pOwogICAgIGludCB3YXRjaFBvc2l0aW9uKFBh
c3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKICAgICB2b2lkIGNsZWFyV2F0Y2go
aW50IHdhdGNoSWQpOwotCi0gICAgdm9pZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCByZXN1bWUoKTsK
ICAgICAKICAgICB2b2lkIHNldElzQWxsb3dlZChib29sKTsKICAgICBib29sIGlzQWxsb3dlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dHZW9sb2NhdGlvbiA9PSBZZXM7IH0KQEAgLTcwLDYgKzc2
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNob3VsZENsZWFyQ2FjaGUoYm9vbCBzaG91bGRD
bGVhckNhY2hlKSB7IG1fc2hvdWxkQ2xlYXJDYWNoZSA9IHNob3VsZENsZWFyQ2FjaGU7IH0KICAg
ICBib29sIHNob3VsZENsZWFyQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsZWFyQ2Fj
aGU7IH0KIAorI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgdm9pZCBz
ZXRQb3N0aW9uKEdlb2xvY2F0aW9uUG9zaXRpb24qKTsKKyAgICB2b2lkIHNldEVycm9yKEdlb2xv
Y2F0aW9uRXJyb3IqKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEdlb2xvY2F0aW9uKEZyYW1l
Kik7CiAKQEAgLTExOCwxNCArMTI5LDIyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGltZXJz
Rm9yV2F0Y2hlcnMoKTsKICAgICB2b2lkIHN0b3BUaW1lcnMoKTsKICAgICAKKyAgICB2b2lkIHBv
c2l0aW9uQ2hhbmdlZChQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPik7CiAgICAgdm9pZCBtYWtlU3Vj
Y2Vzc0NhbGxiYWNrcygpOwogICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOwog
CiAgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigpOwogCisgICAgYm9vbCBzdGFydFVwZGF0aW5n
KFBvc2l0aW9uT3B0aW9ucyopOworICAgIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAgdm9pZCBz
dXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAogICAgIHZpcnR1
YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRpb25TZXJ2
aWNlKik7CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9yT2NjdXJyZWQo
R2VvbG9jYXRpb25TZXJ2aWNlKik7CisjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8R2VvTm90aWZp
ZXI+IHN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CiAK
QEAgLTEzNyw3ICsxNTYsMTEgQEAgcHJpdmF0ZToKICAgICBHZW9Ob3RpZmllclNldCBtX29uZVNo
b3RzOwogICAgIFdhdGNoZXJzIG1fd2F0Y2hlcnM7CiAgICAgRnJhbWUqIG1fZnJhbWU7CisjaWYg
IUVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCiAgICAgT3duUHRyPEdlb2xvY2F0aW9u
U2VydmljZT4gbV9zZXJ2aWNlOworI2VuZGlmCisgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xh
c3RQb3NpdGlvbjsKKyAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY3VycmVudFBvc2l0aW9uOwog
CiAgICAgZW51bSB7CiAgICAgICAgIFVua25vd24sCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5o
IgorCisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2luY2x1ZGUgIkdl
b2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dl
b2xvY2F0aW9uQ29udHJvbGxlcjo6R2VvbG9jYXRpb25Db250cm9sbGVyKFBhZ2UqIHBhZ2UsIEdl
b2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisg
ICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK0dlb2xvY2F0aW9uQ29udHJvbGxlcjo6fkdl
b2xvY2F0aW9uQ29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVy
OjphZGRPYnNlcnZlcihHZW9sb2NhdGlvbiogb2JzZXJ2ZXIpCit7CisgICAgQVNTRVJUKCFtX29i
c2VydmVycy5jb250YWlucyhvYnNlcnZlcikpOworCisgICAgYm9vbCB3YXNFbXB0eSA9IG1fb2Jz
ZXJ2ZXJzLmlzRW1wdHkoKTsKKyAgICBtX29ic2VydmVycy5hZGQob2JzZXJ2ZXIpOworICAgIGlm
ICh3YXNFbXB0eSkKKyAgICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKK30KKwordm9p
ZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKiBvYnNl
cnZlcikKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpKTsKKwor
ICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7CisgICAgaWYgKG1fb2JzZXJ2ZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEdl
b2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24q
IHBvc2l0aW9uKQoreworICAgIEhhc2hTZXQ8UmVmUHRyPEdlb2xvY2F0aW9uPiA+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX29ic2VydmVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRy
PEdlb2xvY2F0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsK
K30KKwordm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmVycm9yT2NjdXJyZWQoR2VvbG9jYXRp
b25FcnJvciogZXJyb3IpCit7CisgICAgSGFzaFNldDxSZWZQdHI8R2VvbG9jYXRpb24+ID46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxS
ZWZQdHI8R2VvbG9jYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYnNlcnZlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c2V0RXJyb3IoZXJyb3IpOwor
fQorCitHZW9sb2NhdGlvblBvc2l0aW9uKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6Omxhc3RQb3Np
dGlvbigpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5sYXN0UG9zaXRpb24oKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTikKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uQ29udHJv
bGxlcl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2Nh
dGlvbkNvbnRyb2xsZXJDbGllbnQ7CitjbGFzcyBHZW9sb2NhdGlvbkVycm9yOworY2xhc3MgR2Vv
bG9jYXRpb25Qb3NpdGlvbjsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEdlb2xvY2F0aW9uQ29udHJv
bGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25Db250
cm9sbGVyKFBhZ2UqLCBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQqKTsKKyAgICB+R2VvbG9j
YXRpb25Db250cm9sbGVyKCk7CisKKyAgICB2b2lkIGFkZE9ic2VydmVyKEdlb2xvY2F0aW9uKik7
CisgICAgdm9pZCByZW1vdmVPYnNlcnZlcihHZW9sb2NhdGlvbiopOworCisgICAgdm9pZCBwb3Np
dGlvbkNoYW5nZWQoR2VvbG9jYXRpb25Qb3NpdGlvbiopOworICAgIHZvaWQgZXJyb3JPY2N1cnJl
ZChHZW9sb2NhdGlvbkVycm9yKik7CisKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9z
aXRpb24oKTsKKworcHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgR2VvbG9jYXRpb25D
b250cm9sbGVyQ2xpZW50KiBtX2NsaWVudDsKKworICAgIEhhc2hTZXQ8UmVmUHRyPEdlb2xvY2F0
aW9uPiA+IG1fb2JzZXJ2ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2VuZGlmIC8vIEdlb2xv
Y2F0aW9uQ29udHJvbGxlcl9oCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9s
bGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJv
bGxlckNsaWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29u
dHJvbGxlckNsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnRfaAorI2RlZmluZSBHZW9sb2Nh
dGlvbkNvbnRyb2xsZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdl
b2xvY2F0aW9uUG9zaXRpb247CisKK2NsYXNzIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN0b3BVcGRhdGluZygpID0gMDsKKyAgICB2aXJ0dWFsIEdlb2xvY2F0aW9uUG9z
aXRpb24qIGxhc3RQb3NpdGlvbigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkdl
b2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50X2gKSW5kZXg6IFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbkVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uRXJyb3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvbkVycm9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdlb2xvY2F0aW9uRXJyb3JfaAorI2RlZmluZSBHZW9sb2NhdGlvbkVycm9yX2gKKwor
I2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0aW9uRXJyb3Ig
OiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvbkVycm9yPiB7CitwdWJsaWM6CisgICAgZW51
bSBFcnJvckNvZGUgeworICAgICAgICBQZXJtaXNzaW9uRGVuaWVkLAorICAgICAgICBQb3NpdGlv
blVuYXZhaWxhYmxlCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9u
RXJyb3I+IGNyZWF0ZShFcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25FcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KKwor
ICAgIEVycm9yQ29kZSBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisKK3ByaXZhdGU6
CisgICAgR2VvbG9jYXRpb25FcnJvcihFcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKKworICAgIEVycm9yQ29kZSBtX2NvZGU7CisgICAgU3RyaW5nIG1fbWVzc2FnZTsgCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25FcnJvcl9oCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Qb3NpdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25Qb3NpdGlvbl9oCisjZGVmaW5lIEdlb2xvY2F0
aW9uUG9zaXRpb25faAorCisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxHZW9sb2NhdGlvblBvc2l0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gY3JlYXRlKGRvdWJsZSB0aW1lc3RhbXAsIGRv
dWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KSB7IHJldHVy
biBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbih0aW1lc3RhbXAsIGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5KSk7IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0
aW9uUG9zaXRpb24+IGNyZWF0ZShkb3VibGUgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBk
b3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0
aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29s
IHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb2xv
Y2F0aW9uUG9zaXRpb24odGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwg
cHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCkpOyB9CisKKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV90aW1l
c3RhbXA7IH0KKworICAgIGRvdWJsZSBsYXRpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF0aXR1
ZGU7IH0KKyAgICBkb3VibGUgbG9uZ2l0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9sb25naXR1ZGU7
IH0KKyAgICBkb3VibGUgYWNjdXJhY3koKSBjb25zdCB7IHJldHVybiBtX2FjY3VyYWN5OyB9Cisg
ICAgZG91YmxlIGFsdGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRpdHVkZTsgfQorICAgIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRpdHVkZUFjY3VyYWN5
OyB9CisgICAgZG91YmxlIGhlYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2hlYWRpbmc7IH0KKyAg
ICBkb3VibGUgc3BlZWQoKSBjb25zdCB7IHJldHVybiBtX3NwZWVkOyB9CisKKyAgICBib29sIGNh
blByb3ZpZGVBbHRpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUHJvdmlkZUFsdGl0dWRlOyB9
CisgICAgYm9vbCBjYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3k7IH0KKyAgICBib29sIGNhblByb3ZpZGVIZWFkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlSGVhZGluZzsgfQorICAgIGJvb2wgY2FuUHJv
dmlkZVNwZWVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlU3BlZWQ7IH0KKworcHJpdmF0
ZToKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQorICAgICAgICA6IG1fdGlt
ZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0dWRlKGxhdGl0dWRlKQorICAgICAg
ICAsIG1fbG9uZ2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAgLCBtX2FjY3VyYWN5KGFjY3VyYWN5
KQorICAgICAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAgICAgLCBtX2FsdGl0dWRlQWNjdXJhY3ko
MCkKKyAgICAgICAgLCBtX2hlYWRpbmcoMCkKKyAgICAgICAgLCBtX3NwZWVkKDApCisgICAgICAg
ICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUoZmFsc2UpCisgICAgICAgICwgbV9jYW5Qcm92aWRlQWx0
aXR1ZGVBY2N1cmFjeShmYWxzZSkKKyAgICAgICAgLCBtX2NhblByb3ZpZGVIZWFkaW5nKGZhbHNl
KQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAg
ICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUs
IGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQorICAgICAgICA6IG1fdGltZXN0YW1wKHRp
bWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0dWRlKGxhdGl0dWRlKQorICAgICAgICAsIG1fbG9u
Z2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAgLCBtX2FjY3VyYWN5KGFjY3VyYWN5KQorICAgICAg
ICAsIG1fYWx0aXR1ZGUoYWx0aXR1ZGUpCisgICAgICAgICwgbV9hbHRpdHVkZUFjY3VyYWN5KGFs
dGl0dWRlQWNjdXJhY3kpCisgICAgICAgICwgbV9oZWFkaW5nKGhlYWRpbmcpCisgICAgICAgICwg
bV9zcGVlZChzcGVlZCkKKyAgICAgICAgLCBtX2NhblByb3ZpZGVBbHRpdHVkZShwcm92aWRlc0Fs
dGl0dWRlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3kocHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5KQorICAgICAgICAsIG1fY2FuUHJvdmlkZUhlYWRpbmcocHJvdmlkZXNI
ZWFkaW5nKQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVkKHByb3ZpZGVzU3BlZWQpCisgICAg
eworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsKKworICAgIGRvdWJsZSBtX2xhdGl0
dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsKKyAgICBkb3VibGUgbV9hY2N1cmFjeTsKKyAg
ICBkb3VibGUgbV9hbHRpdHVkZTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZUFjY3VyYWN5OworICAg
IGRvdWJsZSBtX2hlYWRpbmc7CisgICAgZG91YmxlIG1fc3BlZWQ7CisKKyAgICBib29sIG1fY2Fu
UHJvdmlkZUFsdGl0dWRlOworICAgIGJvb2wgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeTsK
KyAgICBib29sIG1fY2FuUHJvdmlkZUhlYWRpbmc7CisgICAgYm9vbCBtX2NhblByb3ZpZGVTcGVl
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvblBvc2l0aW9uX2gK
SW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9HZW9wb3NpdGlvbi5oCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYkNvcmUvcGFnZS9HZW9w
b3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMSBAQCB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCiBjbGFzcyBHZW9wb3NpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdl
b3Bvc2l0aW9uPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcywgRE9NVGltZVN0YW1w
IHRpbWVzdGFtcCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb3Bvc2l0aW9uKGNvb3JkaW5hdGVz
LCB0aW1lc3RhbXApKTsgfQotICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMsIERPTVRpbWVTdGFt
cCB0aW1lc3RhbXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlb3Bvc2l0
aW9uKGNvb3JkaW5hdGVzLCB0aW1lc3RhbXApKTsKKyAgICB9CisKICAgICBET01UaW1lU3RhbXAg
dGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KICAgICBDb29yZGluYXRl
cyogY29vcmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy5nZXQoKTsgfQogICAgIApJ
bmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Q
YWdlLmNwcAkocmV2aXNpb24gNTE5MDIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDEwIEBACiAjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgSGFzaFNldDxQYWdlKj4qIGFsbFBhZ2VzOwpAQCAtMTAxLDcgKzEwNSw3IEBAIHN0
YXRpYyB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogICAgICAgICBmcmFtZXNbaV0tPmRvY3Vt
ZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNl
LCBmYWxzZSkpOwogfQogCi1QYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBD
b250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaXRvckNsaWVudCogZWRpdG9y
Q2xpZW50LCBEcmFnQ2xpZW50KiBkcmFnQ2xpZW50LCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3Rv
ckNsaWVudCwgUGx1Z2luSGFsdGVyQ2xpZW50KiBwbHVnaW5IYWx0ZXJDbGllbnQpCitQYWdlOjpQ
YWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDb250ZXh0TWVudUNsaWVudCogY29udGV4
dE1lbnVDbGllbnQsIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50LCBEcmFnQ2xpZW50KiBkcmFn
Q2xpZW50LCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCwgUGx1Z2luSGFsdGVyQ2xp
ZW50KiBwbHVnaW5IYWx0ZXJDbGllbnQsIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCogZ2Vv
bG9jYXRpb25Db250cm9sbGVyQ2xpZW50KQogICAgIDogbV9jaHJvbWUobmV3IENocm9tZSh0aGlz
LCBjaHJvbWVDbGllbnQpKQogICAgICwgbV9kcmFnQ2FyZXRDb250cm9sbGVyKG5ldyBTZWxlY3Rp
b25Db250cm9sbGVyKDAsIHRydWUpKQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0xMTQs
NiArMTE4LDkgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAgICAgLCBtX2luc3BlY3RvckNvbnRyb2xsZXIobmV3IEluc3Bl
Y3RvckNvbnRyb2xsZXIodGhpcywgaW5zcGVjdG9yQ2xpZW50KSkKICNlbmRpZgorI2lmIEVOQUJM
RShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgLCBtX2dlb2xvY2F0aW9uQ29udHJvbGxl
cihuZXcgR2VvbG9jYXRpb25Db250cm9sbGVyKHRoaXMsIGdlb2xvY2F0aW9uQ29udHJvbGxlckNs
aWVudCkpCisjZW5kaWYKICAgICAsIG1fc2V0dGluZ3MobmV3IFNldHRpbmdzKHRoaXMpKQogICAg
ICwgbV9wcm9ncmVzcyhuZXcgUHJvZ3Jlc3NUcmFja2VyKQogICAgICwgbV9iYWNrRm9yd2FyZExp
c3QoQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodGhpcykpCkBAIC0xNDgsNiArMTU1LDEwIEBAIFBh
Z2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICNpZiAhRU5BQkxFKElOU1BF
Q1RPUikKICAgICBVTlVTRURfUEFSQU0oaW5zcGVjdG9yQ2xpZW50KTsKICNlbmRpZgorI2lmICFF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgIFVOVVNFRF9QQVJBTShnZW9sb2Nh
dGlvbkNvbnRyb2xsZXJDbGllbnQpOworI2VuZGlmCisKICAgICBpZiAoIWFsbFBhZ2VzKSB7CiAg
ICAgICAgIGFsbFBhZ2VzID0gbmV3IEhhc2hTZXQ8UGFnZSo+OwogICAgICAgICAKSW5kZXg6IFdl
YkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2
aXNpb24gNTE5MDIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw2ICs1NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0b3JDbGllbnQ7
CiAgICAgY2xhc3MgRm9jdXNDb250cm9sbGVyOwogICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNz
IEdlb2xvY2F0aW9uQ29udHJvbGxlcjsKKyAgICBjbGFzcyBHZW9sb2NhdGlvbkNvbnRyb2xsZXJD
bGllbnQ7CiAgICAgY2xhc3MgSGFsdGFibGVQbHVnaW47CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xp
ZW50OwogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CkBAIC04NSw3ICs4Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE5l
ZWRzUmVhcHBseVN0eWxlcygpOwogCi0gICAgICAgIFBhZ2UoQ2hyb21lQ2xpZW50KiwgQ29udGV4
dE1lbnVDbGllbnQqLCBFZGl0b3JDbGllbnQqLCBEcmFnQ2xpZW50KiwgSW5zcGVjdG9yQ2xpZW50
KiwgUGx1Z2luSGFsdGVyQ2xpZW50Kik7CisgICAgICAgIFBhZ2UoQ2hyb21lQ2xpZW50KiwgQ29u
dGV4dE1lbnVDbGllbnQqLCBFZGl0b3JDbGllbnQqLCBEcmFnQ2xpZW50KiwgSW5zcGVjdG9yQ2xp
ZW50KiwgUGx1Z2luSGFsdGVyQ2xpZW50KiwgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50Kik7
CiAgICAgICAgIH5QYWdlKCk7CiAKICAgICAgICAgUmVuZGVyVGhlbWUqIHRoZW1lKCkgY29uc3Qg
eyByZXR1cm4gbV90aGVtZS5nZXQoKTsgfTsKQEAgLTE0NCw2ICsxNDYsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ29u
dHJvbGxlci5nZXQoKTsgfQogI2VuZGlmCisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NB
VElPTikKKyAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyKiBnZW9sb2NhdGlvbkNvbnRyb2xs
ZXIoKSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorI2Vu
ZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGlu
Z3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2VyKiBwcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KIApAQCAtMjUwLDYgKzI1NSw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBPd25QdHI8SW5zcGVj
dG9yQ29udHJvbGxlcj4gbV9pbnNwZWN0b3JDb250cm9sbGVyOwogI2VuZGlmCisjaWYgRU5BQkxF
KENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICAgICAgT3duUHRyPEdlb2xvY2F0aW9uQ29u
dHJvbGxlcj4gbV9nZW9sb2NhdGlvbkNvbnRyb2xsZXI7CisjZW5kaWYKICAgICAgICAgT3duUHRy
PFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBt
X3Byb2dyZXNzOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJl
dmlzaW9uIDUxOTAyKQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUgogICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1cCBsb2Fk
aW5nIGl0c2VsZiwgd2UgbWlnaHQgbGVhayB0aGUgd29ybGQuCiAgICAgICAgIC8vIFRoZSBjb21t
ZW50IHNhaWQgdGhhdCB0aGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hlZElt
YWdlcwogICAgICAgICAvLyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0
aGUgY3ljbGUuIEJ1dCAKLSAgICAgICAgbV9wYWdlLnNldChuZXcgUGFnZShtX2Nocm9tZUNsaWVu
dC5nZXQoKSwgZHVtbXlDb250ZXh0TWVudUNsaWVudCwgZHVtbXlFZGl0b3JDbGllbnQsIGR1bW15
RHJhZ0NsaWVudCwgZHVtbXlJbnNwZWN0b3JDbGllbnQsIDApKTsKKyAgICAgICAgbV9wYWdlLnNl
dChuZXcgUGFnZShtX2Nocm9tZUNsaWVudC5nZXQoKSwgZHVtbXlDb250ZXh0TWVudUNsaWVudCwg
ZHVtbXlFZGl0b3JDbGllbnQsIGR1bW15RHJhZ0NsaWVudCwgZHVtbXlJbnNwZWN0b3JDbGllbnQs
IDAsIDApKTsKICAgICAgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxl
ZChmYWxzZSk7CiAgICAgICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0UGx1Z2luc0VuYWJsZWQo
ZmFsc2UpOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDcxKQorKysgV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTEy
LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzI0OTkKKyAgICAgICAgQWRkIGNsaWVudCBiYXNlZCBHZW9sb2Nh
dGlvbiBwcm92aWRlcgorCisgICAgICAgIEFkZCBmaXJzdCBjdXQgb2YgYSBjbGllbnQgYmFzZWQg
R2VvbG9jYXRpb24gcHJvdmlkZXIuIFRoaXMgaXMgZ3VhcmRlZCBieQorICAgICAgICBFTkFCTEUo
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKSBhbmQgaXMgb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4g
VGhpcyBhZGRzIGEKKyAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50IGludGVyZmFj
ZSB0aGF0IG5vLW9uZSBjdXJyZW50bHkgaW1wbGVtZW50cywKKyAgICAgICAgYnV0IHdpbGwgaW4g
YSBzdWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKwogMjAwOS0xMi0xMSAg
TmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZp
c2lvbiA1MTkwMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjksNiArMjI5LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdl
YlZpZXdDbGllbnQqIAogICAgICAgICAgICAgICAgICAgICAgICAgJm1fZWRpdG9yQ2xpZW50SW1w
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICZtX2RyYWdDbGllbnRJbXBsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgJm1faW5zcGVjdG9yQ2xpZW50SW1wbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAwKSk7CiAKICAgICBtX3BhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpLT5zZXRDbGllbnQoJm1fYmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbCk7
CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0No
YW5nZUxvZwkocmV2aXNpb24gNTIwNzEpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTEyLTEzICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI0OTkK
KyAgICAgICAgQWRkIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92aWRlcgorCisgICAgICAg
IEFkZCBmaXJzdCBjdXQgb2YgYSBjbGllbnQgYmFzZWQgR2VvbG9jYXRpb24gcHJvdmlkZXIuIFRo
aXMgaXMgZ3VhcmRlZCBieQorICAgICAgICBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9O
KSBhbmQgaXMgb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4gVGhpcyBhZGRzIGEKKyAgICAgICAgR2Vv
bG9jYXRpb25Db250cm9sbGVyQ2xpZW50IGludGVyZmFjZSB0aGF0IG5vLW9uZSBjdXJyZW50bHkg
aW1wbGVtZW50cywKKyAgICAgICAgYnV0IHdpbGwgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorCisg
ICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2luaXQpOgorCiAyMDA5LTEyLTEzICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZv
Lm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Bl
ei4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA1MTkwMikK
KysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTU5LDcgKzI1NTksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJL
aXRXCiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKTsKIAog
ICAgIFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQgPSBuZXcgV2ViS2l0
OjpJbnNwZWN0b3JDbGllbnQod2ViVmlldyk7Ci0gICAgcHJpdi0+Y29yZVBhZ2UgPSBuZXcgUGFn
ZShuZXcgV2ViS2l0OjpDaHJvbWVDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkNvbnRleHRN
ZW51Q2xpZW50KHdlYlZpZXcpLCBuZXcgV2ViS2l0OjpFZGl0b3JDbGllbnQod2ViVmlldyksIG5l
dyBXZWJLaXQ6OkRyYWdDbGllbnQod2ViVmlldyksIGluc3BlY3RvckNsaWVudCwgMCk7CisgICAg
cHJpdi0+Y29yZVBhZ2UgPSBuZXcgUGFnZShuZXcgV2ViS2l0OjpDaHJvbWVDbGllbnQod2ViVmll
dyksIG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50KHdlYlZpZXcpLCBuZXcgV2ViS2l0OjpF
ZGl0b3JDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkRyYWdDbGllbnQod2ViVmlldyksIGlu
c3BlY3RvckNsaWVudCwgMCwgMCk7CiAKICAgICAvLyBXZSBhbHNvIGFkZCBhIHNpbXBsZSB3cmFw
cGVyIGNsYXNzIHRvIHByb3ZpZGUgdGhlIHB1YmxpYwogICAgIC8vIGludGVyZmFjZSBmb3IgdGhl
IFdlYiBJbnNwZWN0b3IuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNTIwNzEpCisrKyBXZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTEyLTEzICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI0OTkKKyAgICAgICAgQWRkIGNsaWVudCBiYXNlZCBHZW9sb2NhdGlvbiBwcm92
aWRlcgorCisgICAgICAgIEFkZCBmaXJzdCBjdXQgb2YgYSBjbGllbnQgYmFzZWQgR2VvbG9jYXRp
b24gcHJvdmlkZXIuIFRoaXMgaXMgZ3VhcmRlZCBieQorICAgICAgICBFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKSBhbmQgaXMgb2ZmIGJ5IGRlZmF1bHQgZm9yIG5vdy4gVGhpcyBhZGRz
IGEKKyAgICAgICAgR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50IGludGVyZmFjZSB0aGF0IG5v
LW9uZSBjdXJyZW50bHkgaW1wbGVtZW50cywKKyAgICAgICAgYnV0IHdpbGwgaW4gYSBzdWJzZXF1
ZW50IHBhdGNoLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtX
ZWJWaWV3IF9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOnVzZXNE
b2N1bWVudFZpZXdzOl0pOgorCiAyMDA5LTEyLTEwICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFjIGJ1aWxkIGZpeC4gVW5yZXZpZXdlZC4KSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA1MTkwMikKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGljIGJv
b2wgcnVubmluZ1RpZ2VyTWFpbCgpCiAgICAgICAgIGRpZE9uZVRpbWVJbml0aWFsaXphdGlvbiA9
IHRydWU7CiAgICAgfQogCi0gICAgX3ByaXZhdGUtPnBhZ2UgPSBuZXcgUGFnZShuZXcgV2ViQ2hy
b21lQ2xpZW50KHNlbGYpLCBuZXcgV2ViQ29udGV4dE1lbnVDbGllbnQoc2VsZiksIG5ldyBXZWJF
ZGl0b3JDbGllbnQoc2VsZiksIG5ldyBXZWJEcmFnQ2xpZW50KHNlbGYpLCBuZXcgV2ViSW5zcGVj
dG9yQ2xpZW50KHNlbGYpLCBuZXcgV2ViUGx1Z2luSGFsdGVyQ2xpZW50KHNlbGYpKTsKKyAgICBf
cHJpdmF0ZS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJDaHJvbWVDbGllbnQoc2VsZiksIG5ldyBX
ZWJDb250ZXh0TWVudUNsaWVudChzZWxmKSwgbmV3IFdlYkVkaXRvckNsaWVudChzZWxmKSwgbmV3
IFdlYkRyYWdDbGllbnQoc2VsZiksIG5ldyBXZWJJbnNwZWN0b3JDbGllbnQoc2VsZiksIG5ldyBX
ZWJQbHVnaW5IYWx0ZXJDbGllbnQoc2VsZiksIDApOwogCiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNl
dHRpbmdzKCktPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChbW3NlbGYgcHJlZmVyZW5jZXNd
IF9sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGhdKTsKIApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjA3MSkKKysr
IFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAw
OS0xMi0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNDk5CisgICAgICAgIEFkZCBjbGllbnQgYmFzZWQgR2Vv
bG9jYXRpb24gcHJvdmlkZXIKKworICAgICAgICBBZGQgZmlyc3QgY3V0IG9mIGEgY2xpZW50IGJh
c2VkIEdlb2xvY2F0aW9uIHByb3ZpZGVyLiBUaGlzIGlzIGd1YXJkZWQgYnkKKyAgICAgICAgRU5B
QkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgYW5kIGlzIG9mZiBieSBkZWZhdWx0IGZvciBu
b3cuIFRoaXMgYWRkcyBhCisgICAgICAgIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCBpbnRl
cmZhY2UgdGhhdCBuby1vbmUgY3VycmVudGx5IGltcGxlbWVudHMsCisgICAgICAgIGJ1dCB3aWxs
IGluIGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6Cisg
ICAgICAgIChRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZSk6CisKIDIwMDktMTItMTMg
IEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lv
biA1MTkwMikKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzYsNyArMzc2LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBh
ZwogICAgIGNvbnRleHRNZW51Q2xpZW50ID0gbmV3IENvbnRleHRNZW51Q2xpZW50UXQoKTsKICAg
ICBlZGl0b3JDbGllbnQgPSBuZXcgRWRpdG9yQ2xpZW50UXQocSk7CiAgICAgcGFnZSA9IG5ldyBQ
YWdlKGNocm9tZUNsaWVudCwgY29udGV4dE1lbnVDbGllbnQsIGVkaXRvckNsaWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgbmV3IERyYWdDbGllbnRRdChxKSwgbmV3IEluc3BlY3RvckNsaWVudFF0
KHEpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3IERyYWdDbGllbnRRdChxKSwgbmV3IElu
c3BlY3RvckNsaWVudFF0KHEpLCAwLCAwKTsKIAogICAgIHNldHRpbmdzID0gbmV3IFFXZWJTZXR0
aW5ncyhwYWdlLT5zZXR0aW5ncygpKTsKIApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMDcxKQorKysgV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0x
Mi0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMyNDk5CisgICAgICAgIEFkZCBjbGllbnQgYmFzZWQgR2VvbG9j
YXRpb24gcHJvdmlkZXIKKworICAgICAgICBBZGQgZmlyc3QgY3V0IG9mIGEgY2xpZW50IGJhc2Vk
IEdlb2xvY2F0aW9uIHByb3ZpZGVyLiBUaGlzIGlzIGd1YXJkZWQgYnkKKyAgICAgICAgRU5BQkxF
KENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgYW5kIGlzIG9mZiBieSBkZWZhdWx0IGZvciBub3cu
IFRoaXMgYWRkcyBhCisgICAgICAgIEdlb2xvY2F0aW9uQ29udHJvbGxlckNsaWVudCBpbnRlcmZh
Y2UgdGhhdCBuby1vbmUgY3VycmVudGx5IGltcGxlbWVudHMsCisgICAgICAgIGJ1dCB3aWxsIGlu
IGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAo
V2ViVmlldzo6aW5pdFdpdGhGcmFtZSk6CisKIDIwMDktMTItMTEgIENocmlzIE1hcnJpbiAgPGNt
YXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvbiBIb25leWN1dHQuCklu
ZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDUxOTAyKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM5NSw3ICsyMzk1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJWaWV3Ojppbml0VwogICAgIGlmIChTVUNDRUVERUQobV9wcmVmZXJlbmNlcy0+c2hvdWxk
VXNlSGlnaFJlc29sdXRpb25UaW1lcnMoJnVzZUhpZ2hSZXNvbHV0aW9uVGltZXIpKSkKICAgICAg
ICAgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKHVzZUhpZ2hSZXNv
bHV0aW9uVGltZXIpOwogCi0gICAgbV9wYWdlID0gbmV3IFBhZ2UobmV3IFdlYkNocm9tZUNsaWVu
dCh0aGlzKSwgbmV3IFdlYkNvbnRleHRNZW51Q2xpZW50KHRoaXMpLCBuZXcgV2ViRWRpdG9yQ2xp
ZW50KHRoaXMpLCBuZXcgV2ViRHJhZ0NsaWVudCh0aGlzKSwgbmV3IFdlYkluc3BlY3RvckNsaWVu
dCh0aGlzKSwgbmV3IFdlYlBsdWdpbkhhbHRlckNsaWVudCh0aGlzKSk7CisgICAgbV9wYWdlID0g
bmV3IFBhZ2UobmV3IFdlYkNocm9tZUNsaWVudCh0aGlzKSwgbmV3IFdlYkNvbnRleHRNZW51Q2xp
ZW50KHRoaXMpLCBuZXcgV2ViRWRpdG9yQ2xpZW50KHRoaXMpLCBuZXcgV2ViRHJhZ0NsaWVudCh0
aGlzKSwgbmV3IFdlYkluc3BlY3RvckNsaWVudCh0aGlzKSwgbmV3IFdlYlBsdWdpbkhhbHRlckNs
aWVudCh0aGlzKSwgMCk7CiAKICAgICBCU1RSIGxvY2FsU3RvcmFnZVBhdGg7CiAgICAgaWYgKFNV
Q0NFRURFRChtX3ByZWZlcmVuY2VzLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoJmxvY2FsU3Rv
cmFnZVBhdGgpKSkgewo=
</data>
<flag name="review"
          id="26677"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>