<?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>49735</bug_id>
          
          <creation_ts>2010-11-18 08:51:42 -0800</creation_ts>
          <short_desc>[Chromium] Introduce wrapper types for WebCore::GeolocationError, WebCore::GeolocationPosition</short_desc>
          <delta_ts>2010-11-23 13:30:58 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          <blocked>46895</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="John Knottenbelt">jknotten</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fishd</cc>
    
    <cc>hans</cc>
    
    <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310872</commentid>
    <comment_count>0</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-18 08:51:42 -0800</bug_when>
    <thetext>Introduce WebKit public API for dealing with Geolocation errors, positions and controller interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311419</commentid>
    <comment_count>1</comment_count>
      <attachid>74382</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-19 06:39:02 -0800</bug_when>
    <thetext>Created attachment 74382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311497</commentid>
    <comment_count>2</comment_count>
      <attachid>74382</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-11-19 08:43:36 -0800</bug_when>
    <thetext>Comment on attachment 74382
Patch

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

&gt; WebKit/chromium/public/WebGeolocationController.h:59
&gt; +    WebCore::GeolocationController* m_controller;

what prevents the GeolocationController object from being destroyed before the WebGeolocationController?
how do you avoid memory errors in that case?

this seems error prone.

&gt; WebKit/chromium/public/WebGeolocationError.h:38
&gt; +class WebGeolocationError {

GeolocationError is reference counted, so it seems like you should implement
WebGeolocationError as a simple wrapper (like WebNode).

Use WebPrivatePtr&lt;WebCore::GeolocationError&gt; as your sole member variable.

&gt; WebKit/chromium/public/WebGeolocationPosition.h:88
&gt; +    void copyFrom(const WebCore::GeolocationPosition&amp;);

GeolocationPosition is reference counted, so it seems like you should implement
WebGeolocationPosition as a simple wrapper (like WebNode).

Use WebPrivatePtr&lt;WebCore::GeolocationPosition&gt; as your sole member variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311546</commentid>
    <comment_count>3</comment_count>
      <attachid>74382</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-19 10:17:40 -0800</bug_when>
    <thetext>Comment on attachment 74382
Patch

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

&gt;&gt; WebKit/chromium/public/WebGeolocationController.h:59
&gt;&gt; +    WebCore::GeolocationController* m_controller;
&gt; 
&gt; what prevents the GeolocationController object from being destroyed before the WebGeolocationController?
&gt; how do you avoid memory errors in that case?
&gt; 
&gt; this seems error prone.

Thanks for reviewing so quickly.

The destructor of WebCore::GeolocationController calls WebCore::GeolocationClient::geolocationDestroyed() on it&apos;s client. This client interface will be implemented by a class called GeolocationClientProxy which will in turn call it&apos;s client&apos;s geolocationDestroyed() method - WebKit::WebGeolocationClient::geolocationDestroyed(). Implementers of the client should set their WebGeolocationController member to 0 on receiving geolocationDestroyed(). 

I agree that this seems error prone. I have been following a similar pattern to the DeviceOrientation (WebDeviceOrientationController / DeviceOrientationProxy) which uses a similar scheme.

I will include the above mentioned classes in a future patch to this bug, as it seems that they are necessary to understand this issue.

In the meantime, I will think more about it and see if I can come up with anything simpler.

&gt;&gt; WebKit/chromium/public/WebGeolocationError.h:38
&gt;&gt; +class WebGeolocationError {
&gt; 
&gt; GeolocationError is reference counted, so it seems like you should implement
&gt; WebGeolocationError as a simple wrapper (like WebNode).
&gt; 
&gt; Use WebPrivatePtr&lt;WebCore::GeolocationError&gt; as your sole member variable.

Does the same comment you made about the DeviceMotionData class in https://bugs.webkit.org/show_bug.cgi?id=47078#c11 apply?

&quot;Looking at the way this class is used, I&apos;m not sure why you didn&apos;t just
do the same thing as you did for WebDeviceOrientation.  It seems like it
does not need to be a wrapper around the WebCore type.  It can just be
a simple class with member variables for the various fields.&quot;

However, it seems that there is already a Geoposition struct (src/chrome/common/Geoposition.h) being marshalled over the IPC for the non-client based Geolocation. So it seems perhaps a simple wrapper (as you suggest) will be better after all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312359</commentid>
    <comment_count>4</comment_count>
      <attachid>74558</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-22 08:53:53 -0800</bug_when>
    <thetext>Created attachment 74558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312360</commentid>
    <comment_count>5</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-22 08:55:26 -0800</bug_when>
    <thetext>This patch changes the WebGeolocationError and WebGeolocationPosition classes into simple WebCore wrappers as Darin suggested. 

The WebGeolocationController class has been removed from this patch and will be presented in a forthcoming patch where it can be seen in its proper context.

(In reply to comment #4)
&gt; Created an attachment (id=74558) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312388</commentid>
    <comment_count>6</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-22 09:46:22 -0800</bug_when>
    <thetext>WebGeolocationController has moved to https://bugs.webkit.org/show_bug.cgi?id=46895

(In reply to comment #5)
&gt; This patch changes the WebGeolocationError and WebGeolocationPosition classes into simple WebCore wrappers as Darin suggested. 
&gt; 
&gt; The WebGeolocationController class has been removed from this patch and will be presented in a forthcoming patch where it can be seen in its proper context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312585</commentid>
    <comment_count>7</comment_count>
      <attachid>74558</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-11-22 16:15:34 -0800</bug_when>
    <thetext>Comment on attachment 74558
Patch

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

&gt; WebKit/chromium/public/WebGeolocationError.h:43
&gt; +    enum ErrorCode {

Sorry, I should have pointed this out in the previous review, but in the
WebKit API enum names should be formatted like this:

  enum Foo {
      FooA,
      FooB
  };

In this case, I would use:

  enum Error {
      ErrorPermissionDenied,
      ErrorPositionUnavailable
  };

I&apos;d recommend asserting with a compile-time assert that these enum values
match the corresponding WebCore types by adding to AssertMatchingEnums.cpp.
That way, in the implementation code, you can just static_cast between
the WebKit and WebCore enum types.

&gt; WebKit/chromium/public/WebGeolocationPosition.h:41
&gt; +    WebGeolocationPosition() {};

nit: no trailing &quot;;&quot;

&gt; WebKit/chromium/public/WebGeolocationPosition.h:58
&gt; +

nit: delete extra new line, leave only one between #endif and &quot;private:&quot; label.

&gt; WebKit/chromium/src/WebGeolocationError.cpp:51
&gt; +WebGeolocationError::WebGeolocationError(WTF::PassRefPtr&lt;WebCore::GeolocationError&gt; error)

nit: no need for WTF:: or WebCore:: prefixes in this file.

&gt; WebKit/chromium/src/WebGeolocationError.cpp:56
&gt; +WebGeolocationError&amp; WebGeolocationError::operator=(WTF::PassRefPtr&lt;WebCore::GeolocationError&gt; error)

ditto

&gt; WebKit/chromium/src/WebGeolocationError.cpp:62
&gt; +WebGeolocationError::operator WTF::PassRefPtr&lt;WebCore::GeolocationError&gt;() const

ditto

&gt; WebKit/chromium/src/WebGeolocationPosition.cpp:50
&gt; +WebGeolocationPosition&amp; WebGeolocationPosition::operator=(WTF::PassRefPtr&lt;WebCore::GeolocationPosition&gt; position)

same nit about dropping WTF:: and WebCore::</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312885</commentid>
    <comment_count>8</comment_count>
      <attachid>74675</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-23 09:13:26 -0800</bug_when>
    <thetext>Created attachment 74675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312886</commentid>
    <comment_count>9</comment_count>
      <attachid>74675</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2010-11-23 09:14:40 -0800</bug_when>
    <thetext>Comment on attachment 74675
Patch

Thanks again for the review. I&apos;ve made the changes you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312994</commentid>
    <comment_count>10</comment_count>
      <attachid>74675</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-23 13:30:52 -0800</bug_when>
    <thetext>Comment on attachment 74675
Patch

Clearing flags on attachment: 74675

Committed r72624: &lt;http://trac.webkit.org/changeset/72624&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312995</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-23 13:30:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74382</attachid>
            <date>2010-11-19 06:39:02 -0800</date>
            <delta_ts>2010-11-22 08:53:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49735-20101119143900.patch</filename>
            <type>text/plain</type>
            <size>22444</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGRmZjFiNWVmZjBiZjMyNDg1M2Q1ZTE2NDc2NWFlZTcyM2EwZWYyOTku
LjE1NDNlZmU1MjBkZjNiY2RhZjliMjA4N2M4MTgxOTYyNjQzODU4NzkgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ5IEBACisyMDEwLTExLTE5ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtDaHJvbWl1bV0gSW50cm9kdWNlIHdyYXBwZXIgdHlwZXMgZm9yIFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3IsIFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24sIFdlYkNvcmU6Okdl
b2xvY2F0aW9uQ29udHJvbGxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5NzM1CisKKyAgICAgICAgSW50cm9kdWNlIFdlYktpdCBBUEkgdHlwZXMg
c28gdGhhdCB0aGUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBjYW4gZmVlZAorICAgICAgICBwb3Np
dGlvbiBhbmQgZXJyb3IgdXBkYXRlcyB0byB0aGUgV2ViQ29yZTo6R2VvbG9jYXRpb25Db250cm9s
bGVyLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViR2VvbG9j
YXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
bkNvbnRyb2xsZXI6OldlYkdlb2xvY2F0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcHVibGlj
L1dlYkdlb2xvY2F0aW9uRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xv
Y2F0aW9uRXJyb3I6OldlYkdlb2xvY2F0aW9uRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJH
ZW9sb2NhdGlvbkVycm9yOjpjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25F
cnJvcjo6bWVzc2FnZSk6CisgICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OldlYkdl
b2xvY2F0aW9uUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0
aW9uOjp0aW1lc3RhbXApOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9u
OjpsYXRpdHVkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246Omxv
bmdpdHVkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OmFjY3Vy
YWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6YWx0aXR1ZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjphbHRpdHVkZUFjY3Vy
YWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6aGVhZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OnNwZWVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y2FuUHJvdmlkZUFsdGl0dWRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y2FuUHJvdmlkZUFsdGl0
dWRlQWNjdXJhY3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpj
YW5Qcm92aWRlSGVhZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRp
b246OmNhblByb3ZpZGVTcGVlZCk6CisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uQ29udHJv
bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNvbnRyb2xs
ZXI6OnBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uQ29u
dHJvbGxlcjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9u
Q29udHJvbGxlcjo6Y29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9u
Q29udHJvbGxlcjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9u
RXJyb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6
V2ViR2VvbG9jYXRpb25FcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uRXJy
b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uRXJyb3I6Om9w
ZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uRXJyb3I6OmNvcHlGcm9tKToKKyAgICAgICAgKiBz
cmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uOjpjb3B5RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xv
Y2F0aW9uUG9zaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Q
b3NpdGlvbj4pOgorCiAyMDEwLTExLTE4ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IGFkNGFiNWRhNzc3N2M1YWNiYTcxOTJlYzYwNzE1NWU0N2Y2N2FjMTMuLjMxODQ0
ODEyYjE1MTI0NDQ4YjQ0ODk3NDUzMWI2ZmZjMTk1NDlkY2QgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0x
NzMsNiArMTczLDkgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1Db250cm9sRWxlbWVudC5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViR2VvbG9jYXRpb25Db250cm9sbGVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2VvbG9jYXRpb25FcnJvci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2Nh
dGlvblNlcnZpY2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VNb2NrLmgnLApAQCAtNDQwLDYgKzQ0Myw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJGb3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuaCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdl
b2xvY2F0aW9uUG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9s
b2NhdGlvblNlcnZpY2VNb2NrLmNwcCcsCkBAIC02NjQsNiArNjcwLDEyIEBACiAgICAgICAgICAg
ICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnV2ViR2VvbG9jYXRpb25TZXJ2aWNlLiokJ10sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnV2ViR2VvbG9jYXRpb25TZXJ2aWNl
TW9jay4qJ10sCiAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsnZXhjbHVkZScsICdXZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuKiddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgWydleGNsdWRlJywgJ1dlYkdlb2xvY2F0aW9uRXJyb3IuKiddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uKidd
LAorICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAg
IF0sCiAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdl
b2xvY2F0aW9uQ29udHJvbGxlci5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDIyOWM3MGNjMTAzNjA1ZDE3OTU3ZGM5NjZk
NDgxNjgyYjU0ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJHZW9sb2NhdGlvbkNvbnRy
b2xsZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsg
Y2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVyOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOworY2xhc3MgV2ViR2VvbG9jYXRpb25FcnJvcjsK
KworY2xhc3MgV2ViR2VvbG9jYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBXZWJHZW9s
b2NhdGlvbkNvbnRyb2xsZXIoKQorICAgICAgICA6IG1fY29udHJvbGxlcigwKQorICAgIHsKKyAg
ICB9CisKKyAgICBXZWJHZW9sb2NhdGlvbkNvbnRyb2xsZXIoV2ViQ29yZTo6R2VvbG9jYXRpb25D
b250cm9sbGVyKiBjKQorICAgICAgICA6IG1fY29udHJvbGxlcihjKQorICAgIHsKKyAgICB9CisK
KyAgICBXRUJLSVRfQVBJIHZvaWQgcG9zaXRpb25DaGFuZ2VkKGNvbnN0IFdlYkdlb2xvY2F0aW9u
UG9zaXRpb24qKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgZXJyb3JPY2N1cnJlZChjb25zdCBXZWJH
ZW9sb2NhdGlvbkVycm9yKik7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJD
b3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBvcGVy
YXRvciBib29sKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpHZW9s
b2NhdGlvbkNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25Db250cm9sbGVyX2gKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25FcnJvci5oIGIvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvbkVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzViYzQyZGZh
NDdhYzExNDNkZDFlNzk5Y2NhOTg2YWY4ZTJhNWE0MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25FcnJvci5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkdlb2xvY2F0aW9uRXJyb3JfaAorI2RlZmluZSBXZWJHZW9sb2Nh
dGlvbkVycm9yX2gKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEdlb2xvY2F0aW9uRXJyb3I7IH0K
K25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsg
fQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJHZW9sb2NhdGlvbkVy
cm9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIEVycm9yQ29kZSB7CisgICAgICAgIFBlcm1pc3Npb25E
ZW5pZWQsCisgICAgICAgIFBvc2l0aW9uVW5hdmFpbGFibGUKKyAgICB9OworCisgICAgV2ViR2Vv
bG9jYXRpb25FcnJvcihFcnJvckNvZGUgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQor
ICAgICAgICA6IG1fY29kZShjb2RlKSwKKyAgICAgICAgICBtX21lc3NhZ2UobWVzc2FnZSkKKyAg
ICB7CisgICAgfQorCisgICAgRXJyb3JDb2RlIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7
IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3Nh
Z2U7IH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkdlb2xvY2F0aW9uRXJy
b3IoY29uc3QgV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvciopOworICAgIFdlYkdlb2xvY2F0aW9u
RXJyb3ImIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yKik7CisgICAg
b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+KCkgY29u
c3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJHZW9sb2NhdGlvbkVycm9yKCkKKyAgICAg
ICAgOiBtX2NvZGUoUG9zaXRpb25VbmF2YWlsYWJsZSkKKyAgICB7CisgICAgfQorCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBjb3B5RnJvbShjb25zdCBXZWJDb3JlOjpHZW9s
b2NhdGlvbkVycm9yKik7CisjZW5kaWYKKworICAgIEVycm9yQ29kZSBtX2NvZGU7CisgICAgV2Vi
U3RyaW5nIG1fbWVzc2FnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViR2VvbG9jYXRpb25FcnJvcl9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
R2VvbG9jYXRpb25Qb3NpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmMzRmNDU2NDg3MGRkYWNjNzg2Zjg3
NWVkZjQxYzA5MzgxYWI1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbl9oCisjZGVmaW5lIFdlYkdlb2xvY2F0aW9uUG9z
aXRpb25faAorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbjsg
fQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJHZW9sb2NhdGlvblBv
c2l0aW9uIHsKK3B1YmxpYzoKKyAgICBXZWJHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1l
c3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3Vi
bGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFk
aW5nLCBkb3VibGUgaGVhZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQorICAgICAgICA6IG1fdGltZXN0YW1wKHRpbWVzdGFt
cCksCisgICAgICAgICAgbV9sYXRpdHVkZShsYXRpdHVkZSksCisgICAgICAgICAgbV9sb25naXR1
ZGUobG9uZ2l0dWRlKSwKKyAgICAgICAgICBtX2FjY3VyYWN5KGFjY3VyYWN5KSwKKyAgICAgICAg
ICBtX2FsdGl0dWRlKGFsdGl0dWRlKSwKKyAgICAgICAgICBtX2FsdGl0dWRlQWNjdXJhY3koYWx0
aXR1ZGVBY2N1cmFjeSksCisgICAgICAgICAgbV9oZWFkaW5nKGhlYWRpbmcpLAorICAgICAgICAg
IG1fc3BlZWQoc3BlZWQpLAorICAgICAgICAgIG1fY2FuUHJvdmlkZUFsdGl0dWRlKHByb3ZpZGVz
QWx0aXR1ZGUpLAorICAgICAgICAgIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3kocHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5KSwKKyAgICAgICAgICBtX2NhblByb3ZpZGVIZWFkaW5nKHByb3Zp
ZGVzSGVhZGluZyksCisgICAgICAgICAgbV9jYW5Qcm92aWRlU3BlZWQocHJvdmlkZXNTcGVlZCkK
KyAgICB7CisgICAgfQorCisgICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbigpCisgICAgeworICAg
IH0KKworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsg
fQorCisgICAgZG91YmxlIGxhdGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXRpdHVkZTsgfQor
ICAgIGRvdWJsZSBsb25naXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2xvbmdpdHVkZTsgfQorICAg
IGRvdWJsZSBhY2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjdXJhY3k7IH0KKyAgICBkb3Vi
bGUgYWx0aXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2FsdGl0dWRlOyB9CisgICAgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3koKSBjb25zdCB7IHJldHVybiBtX2FsdGl0dWRlQWNjdXJhY3k7IH0KKyAg
ICBkb3VibGUgaGVhZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGluZzsgfQorICAgIGRvdWJs
ZSBzcGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWQ7IH0KKworICAgIGJvb2wgY2FuUHJvdmlk
ZUFsdGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlQWx0aXR1ZGU7IH0KKyAgICBi
b29sIGNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92
aWRlQWx0aXR1ZGVBY2N1cmFjeTsgfQorICAgIGJvb2wgY2FuUHJvdmlkZUhlYWRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2NhblByb3ZpZGVIZWFkaW5nOyB9CisgICAgYm9vbCBjYW5Qcm92aWRlU3Bl
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NhblByb3ZpZGVTcGVlZDsgfQorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uJiBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIGNvcHlGcm9tKHBv
c2l0aW9uKTsKKyAgICB9CisgICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiYgb3BlcmF0b3I9KGNv
bnN0IFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4oKSBjb25zdDsKKyNlbmRpZgor
Citwcml2YXRlOgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBjb3B5RnJv
bShjb25zdCBXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uJik7CisjZW5kaWYKKworICAgIGRv
dWJsZSBtX3RpbWVzdGFtcDsKKworICAgIGRvdWJsZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBt
X2xvbmdpdHVkZTsKKyAgICBkb3VibGUgbV9hY2N1cmFjeTsKKyAgICBkb3VibGUgbV9hbHRpdHVk
ZTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZUFjY3VyYWN5OworICAgIGRvdWJsZSBtX2hlYWRpbmc7
CisgICAgZG91YmxlIG1fc3BlZWQ7CisKKyAgICBib29sIG1fY2FuUHJvdmlkZUFsdGl0dWRlOwor
ICAgIGJvb2wgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBib29sIG1fY2FuUHJv
dmlkZUhlYWRpbmc7CisgICAgYm9vbCBtX2NhblByb3ZpZGVTcGVlZDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25Qb3NpdGlvbl9oCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTY1MTM0YjA2NWUzMTI5MGMzMTM0OTQ3ODIwZWVkN2UwYjc1MzczNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Db250cm9sbGVyLmNw
cApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uUG9zaXRpb24uaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkVycm9yLmgiCisjaW5j
bHVkZSAiV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViR2VvbG9jYXRpb25Db250cm9s
bGVyOjpwb3NpdGlvbkNoYW5nZWQoY29uc3QgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiogd2ViUG9z
aXRpb24pCit7CisgICAgQVNTRVJUKHdlYlBvc2l0aW9uKTsKKyAgICBtX2NvbnRyb2xsZXItPnBv
c2l0aW9uQ2hhbmdlZChQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+KCp3
ZWJQb3NpdGlvbikuZ2V0KCkpOworfQorCit2b2lkIFdlYkdlb2xvY2F0aW9uQ29udHJvbGxlcjo6
ZXJyb3JPY2N1cnJlZChjb25zdCBXZWJHZW9sb2NhdGlvbkVycm9yKiB3ZWJFcnJvcikKK3sKKyAg
ICBBU1NFUlQod2ViRXJyb3IpOworICAgIG1fY29udHJvbGxlci0+ZXJyb3JPY2N1cnJlZChQYXNz
UmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+KCp3ZWJFcnJvcikuZ2V0KCkpOworfQor
CitXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXIqIFdlYkdlb2xvY2F0aW9uQ29udHJvbGxl
cjo6Y29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udHJvbGxlcjsKK30KKwor
V2ViR2VvbG9jYXRpb25Db250cm9sbGVyOjpvcGVyYXRvciBib29sKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb250cm9sbGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25FcnJvci5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1MDE2ODIz
MTQyMmQxZjAwMmY0MDgyNzc2NTMyODljNDYyNTBhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25FcnJv
ci5oIgorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkdlb2xvY2F0aW9uRXJyb3I6
OldlYkdlb2xvY2F0aW9uRXJyb3IoY29uc3QgV2ViQ29yZTo6R2VvbG9jYXRpb25FcnJvciogZXJy
b3IpCit7CisgICAgY29weUZyb20oZXJyb3IpOworfQorCitXZWJHZW9sb2NhdGlvbkVycm9yJiBX
ZWJHZW9sb2NhdGlvbkVycm9yOjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6R2VvbG9jYXRpb25F
cnJvciogZXJyb3IpCit7CisgICAgY29weUZyb20oZXJyb3IpOworICAgIHJldHVybiAqdGhpczsK
K30KKworV2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6Okdlb2xvY2F0aW9uRXJyb3I+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6R2Vv
bG9jYXRpb25FcnJvcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJy
b3I6OkVycm9yQ29kZT4obV9jb2RlKSwgbV9tZXNzYWdlKTsKK30KKwordm9pZCBXZWJHZW9sb2Nh
dGlvbkVycm9yOjpjb3B5RnJvbShjb25zdCBXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yKiBlcnJv
cikKK3sKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIG1fY29kZSA9IHN0YXRpY19jYXN0PEVycm9y
Q29kZT4oZXJyb3ItPmNvZGUoKSk7CisgICAgbV9tZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBv
c2l0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2I4ODUwY2Q2NDZjNDBmODg1NjkyOTU1MTEzNTNkMGEzMDNjOWJmNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Qb3Np
dGlvbi5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisKKyNpbmNsdWRlICJHZW9sb2NhdGlv
blBvc2l0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJHZW9sb2NhdGlvblBvc2l0
aW9uJiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6R2Vv
bG9jYXRpb25Qb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgY29weUZyb20ocG9zaXRpb24pOwor
ICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpjb3B5
RnJvbShjb25zdCBXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAg
ICBtX3RpbWVzdGFtcCA9IHBvc2l0aW9uLnRpbWVzdGFtcCgpOworICAgIG1fbGF0aXR1ZGUgPSBw
b3NpdGlvbi5sYXRpdHVkZSgpOworICAgIG1fbG9uZ2l0dWRlID0gcG9zaXRpb24ubG9uZ2l0dWRl
KCk7CisgICAgbV9hY2N1cmFjeSA9IHBvc2l0aW9uLmFjY3VyYWN5KCk7CisgICAgbV9hbHRpdHVk
ZSA9IHBvc2l0aW9uLmFsdGl0dWRlKCk7CisgICAgbV9hbHRpdHVkZUFjY3VyYWN5ID0gcG9zaXRp
b24uYWx0aXR1ZGVBY2N1cmFjeSgpOworICAgIG1faGVhZGluZyA9IHBvc2l0aW9uLmhlYWRpbmco
KTsKKyAgICBtX3NwZWVkID0gcG9zaXRpb24uc3BlZWQoKTsKKyAgICBtX2NhblByb3ZpZGVBbHRp
dHVkZSA9IHBvc2l0aW9uLmNhblByb3ZpZGVBbHRpdHVkZSgpOworICAgIG1fY2FuUHJvdmlkZUFs
dGl0dWRlQWNjdXJhY3kgPSBwb3NpdGlvbi5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpOwor
ICAgIG1fY2FuUHJvdmlkZUhlYWRpbmcgPSBwb3NpdGlvbi5jYW5Qcm92aWRlSGVhZGluZygpOwor
ICAgIG1fY2FuUHJvdmlkZVNwZWVkID0gcG9zaXRpb24uY2FuUHJvdmlkZVNwZWVkKCk7Cit9CisK
KworV2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6Okdlb2xv
Y2F0aW9uUG9zaXRpb246OmNyZWF0ZShtX3RpbWVzdGFtcCwgbV9sYXRpdHVkZSwgbV9sb25naXR1
ZGUsIG1fYWNjdXJhY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NhblByb3ZpZGVBbHRpdHVkZSwgbV9hbHRpdHVkZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNj
dXJhY3ksIG1fYWx0aXR1ZGVBY2N1cmFjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2FuUHJvdmlkZUhlYWRpbmcsIG1faGVhZGluZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FuUHJvdmlkZVNw
ZWVkLCBtX3NwZWVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74558</attachid>
            <date>2010-11-22 08:53:53 -0800</date>
            <delta_ts>2010-11-23 09:13:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49735-20101122165351.patch</filename>
            <type>text/plain</type>
            <size>14905</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDI5ZDE5OWM5Y2RkM2ViZDExOTQwNWQxMTYyMmMzYTM0ZGFiNTc1MjIu
LmJkMDgxY2JjYjczMzI4ZGZjOGVkMTVlZjA3YzhmNGMwMzVmODg0MmQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDEwLTExLTIyICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtDaHJvbWl1bV0gSW50cm9kdWNlIHdyYXBwZXIgdHlwZXMgZm9yIFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3IsIFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTczNQorCisgICAgICAgIElu
dHJvZHVjZSBXZWJLaXQgQVBJIHR5cGVzIHNvIHRoYXQgdGhlIGJyb3dzZXIgaW1wbGVtZW50YXRp
b24gY2FuIGZlZWQKKyAgICAgICAgcG9zaXRpb24gYW5kIGVycm9yIHVwZGF0ZXMgdG8gdGhlIFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlci4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkdlb2xvY2F0aW9uRXJyb3I6OldlYkdlb2xvY2F0aW9uRXJyb3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkVycm9yOjp+V2ViR2VvbG9jYXRpb25FcnJvcik6Cisg
ICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OldlYkdlb2xvY2F0aW9uUG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjp+V2ViR2VvbG9jYXRp
b25Qb3NpdGlvbik6CisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6YXNzaWduKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvbkVycm9yOjpXZWJHZW9sb2NhdGlvbkVycm9yKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6
V2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3I+KToKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpyZXNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQdHI8
V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4pOgorCiAyMDEwLTExLTIyICBQYXZlbCBGZWxk
bWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gUGFy
dGlhbGx5IHJvbGwgb3V0IHI3MjI4Mi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggZDVkOTM3YTQwNDYwZjFl
M2ExY2Q0MmE3Njg3YWJkZmE5MDI4YmMyNC4uMDk4NjJhMzFiZGYxMTI5Njk0NTg3NDUzNTcwZGVk
ZmVkOGNiOGZiNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTE3Myw2ICsxNzMsOCBAQAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViRm9udENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRm9ybUNvbnRyb2xFbGVtZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRm9y
bUVsZW1lbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvbkVycm9y
LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZU1vY2suaCcsCkBAIC00NDAs
NiArNDQyLDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvcm1FbGVtZW50LmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkZyYW1lSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9u
RXJyb3IuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24u
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VNb2Nr
LmNwcCcsCkBAIC02NjQsNiArNjY4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAnV2ViR2VvbG9jYXRpb25TZXJ2aWNlLiokJ10sCiAgICAgICAgICAgICAgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAnV2ViR2VvbG9jYXRpb25TZXJ2aWNlTW9jay4qJ10sCiAgICAgICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAg
ICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdXZWJH
ZW9sb2NhdGlvbkVycm9yLionXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScs
ICdXZWJHZW9sb2NhdGlvblBvc2l0aW9uLionXSwKKyAgICAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICBdLAogICAgICAgICB9LApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvbkVycm9yLmggYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTQ4YjQ4Mjhk
MjQyZGMzOWVhN2YxYmNkODNmNzdhYWM1NjEyNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvbkVycm9yLmgKQEAgLTAsMCArMSw2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25FcnJvcl9oCisjZGVmaW5lIFdlYkdlb2xvY2F0
aW9uRXJyb3JfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0
ZVB0ci5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsgfQor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNz
IFdlYkdlb2xvY2F0aW9uRXJyb3IgeworcHVibGljOgorICAgIGVudW0gRXJyb3JDb2RlIHsKKyAg
ICAgICAgUGVybWlzc2lvbkRlbmllZCwKKyAgICAgICAgUG9zaXRpb25VbmF2YWlsYWJsZQorICAg
IH07CisKKyAgICBXZWJHZW9sb2NhdGlvbkVycm9yKEVycm9yQ29kZSBjb2RlLCBjb25zdCBXZWJT
dHJpbmcmIG1lc3NhZ2UpIHsgYXNzaWduKGNvZGUsIG1lc3NhZ2UpOyB9CisgICAgV2ViR2VvbG9j
YXRpb25FcnJvcihjb25zdCBXZWJHZW9sb2NhdGlvbkVycm9yJiBvdGhlcikgeyBhc3NpZ24ob3Ro
ZXIpOyB9CisgICAgfldlYkdlb2xvY2F0aW9uRXJyb3IoKSB7IHJlc2V0KCk7IH0KKworICAgIFdF
QktJVF9BUEkgdm9pZCBhc3NpZ24oRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSk7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvbkVy
cm9yJik7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJHZW9sb2NhdGlvbkVycm9yKFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpHZW9sb2NhdGlvbkVycm9yPik7CisgICAgV2ViR2VvbG9jYXRpb25FcnJvciYgb3BlcmF0b3I9
KFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPik7CisgICAgb3BlcmF0
b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+KCkgY29uc3Q7Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9u
RXJyb3I+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViR2VvbG9jYXRpb25FcnJvcl9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
R2VvbG9jYXRpb25Qb3NpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZThhOTMyNzEwYjkwZWJhYjliOWM0
NmY3NGUyNmM1ZGRjODFiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25Qb3Np
dGlvbl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRy
LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOyB9Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdlb2xvY2F0aW9uUG9zaXRp
b24geworcHVibGljOgorICAgIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24oKSB7fTsKKyAgICBXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRv
dWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRp
dHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wg
cHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQorICAgIHsKKyAgICAgICAgYXNzaWduKHRpbWVz
dGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFs
dGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3Zp
ZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworICAgIH0KKyAgICBX
ZWJHZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0IFdlYkdlb2xvY2F0aW9uUG9zaXRpb24mIG90aGVy
KSB7IGFzc2lnbihvdGhlcik7IH0KKyAgICB+V2ViR2VvbG9jYXRpb25Qb3NpdGlvbigpIHsgcmVz
ZXQoKTsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihkb3VibGUgdGltZXN0YW1wLCBk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRv
dWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCk7CisgICAgV0VC
S0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uJik7CisgICAg
V0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJHZW9sb2NhdGlvblBvc2l0aW9uKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2Nh
dGlvblBvc2l0aW9uPik7CisgICAgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiYgb3BlcmF0b3I9KFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uPik7CisgICAgb3BlcmF0
b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+KCkgY29uc3Q7
CisjZW5kaWYKKworCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6R2VvbG9j
YXRpb25Qb3NpdGlvbj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25FcnJvci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZjNhMjYxZWE3ZjAwNDZiOTU0
MzRkYWIwYjI5ODgwODYzMDBiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25FcnJvci5oIgorCisjaW5j
bHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViR2Vv
bG9jYXRpb25FcnJvcjo6YXNzaWduKEVycm9yQ29kZSBjb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgbV9wcml2YXRlID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PEdlb2xvY2F0aW9uRXJyb3I6OkVycm9yQ29kZT4oY29kZSksIG1lc3NhZ2UpOworfQor
Cit2b2lkIFdlYkdlb2xvY2F0aW9uRXJyb3I6OmFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvbkVy
cm9yJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK3Zv
aWQgV2ViR2VvbG9jYXRpb25FcnJvcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgp
OworfQorCitXZWJHZW9sb2NhdGlvbkVycm9yOjpXZWJHZW9sb2NhdGlvbkVycm9yKFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPiBlcnJvcikKK3sKKyAgICBtX3ByaXZh
dGUgPSBlcnJvcjsKK30KKworV2ViR2VvbG9jYXRpb25FcnJvciYgV2ViR2VvbG9jYXRpb25FcnJv
cjo6b3BlcmF0b3I9KFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPiBl
cnJvcikKK3sKKyAgICBtX3ByaXZhdGUgPSBlcnJvcjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K1dlYkdlb2xvY2F0aW9uRXJyb3I6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpH
ZW9sb2NhdGlvbkVycm9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblBv
c2l0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWYxMzEwYjRhOGRmODAzMjNhNzk4MzEwOTY2OTQyYTZlOGJhN2ZhZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25Qb3Np
dGlvbi5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisKKyNpbmNsdWRlICJHZW9sb2NhdGlv
blBvc2l0aW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKwordm9pZCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjphc3NpZ24oZG91YmxlIHRpbWVz
dGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNjdXJhY3ks
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFk
aW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQpCit7
CisgICAgbV9wcml2YXRlID0gR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHRpbWVzdGFtcCwg
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRl
LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVh
ZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworfQorCit2b2lkIFdlYkdlb2xv
Y2F0aW9uUG9zaXRpb246OmFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uJiBvdGhl
cikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViR2Vv
bG9jYXRpb25Qb3NpdGlvbjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQor
CitXZWJHZW9sb2NhdGlvblBvc2l0aW9uJiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpvcGVyYXRv
cj0oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+IHBvc2l0aW9u
KQoreworICAgIG1fcHJpdmF0ZSA9IHBvc2l0aW9uOworICAgIHJldHVybiAqdGhpczsKK30KKwor
V2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9s
b2NhdGlvblBvc2l0aW9uPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74675</attachid>
            <date>2010-11-23 09:13:26 -0800</date>
            <delta_ts>2010-11-23 13:30:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49735-20101123171323.patch</filename>
            <type>text/plain</type>
            <size>16265</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGZjM2FkZmU4NTM3OTYzNGQ1NWUwOTU0ZWRkMzUxNDA1YjA3ZDk3NWUu
LmU1Y2ZhODAwMjViOGY3ODcyZjVhMzQ2OWI5MjM1MGE5MjAyMDVmM2YgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDEwLTExLTIyICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtDaHJvbWl1bV0gSW50cm9kdWNlIHdyYXBwZXIgdHlwZXMgZm9yIFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3IsIFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTczNQorCisgICAgICAgIElu
dHJvZHVjZSBXZWJLaXQgQVBJIHR5cGVzIHNvIHRoYXQgdGhlIGJyb3dzZXIgaW1wbGVtZW50YXRp
b24gY2FuIGZlZWQKKyAgICAgICAgcG9zaXRpb24gYW5kIGVycm9yIHVwZGF0ZXMgdG8gdGhlIFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlci4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkdlb2xvY2F0aW9uRXJyb3I6OldlYkdlb2xvY2F0aW9uRXJyb3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkVycm9yOjp+V2ViR2VvbG9jYXRpb25FcnJvcik6Cisg
ICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OldlYkdlb2xvY2F0aW9uUG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjp+V2ViR2VvbG9jYXRp
b25Qb3NpdGlvbik6CisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6YXNzaWduKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvbkVycm9yOjpXZWJHZW9sb2NhdGlvbkVycm9yKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6
V2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdl
b2xvY2F0aW9uRXJyb3I+KToKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjpyZXNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQdHI8
V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4pOgorCiAyMDEwLTExLTIzICBTYXRpc2ggU2Ft
cGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hyb21p
dW0gYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBkNWQ5MzdhNDA0NjBmMWUzYTFjZDQyYTc2
ODdhYmRmYTkwMjhiYzI0Li4wOTg2MmEzMWJkZjExMjk2OTQ1ODc0NTM1NzBkZWRmZWQ4Y2I4ZmI3
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cApAQCAtMTczLDYgKzE3Myw4IEBACiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJGb250Q2FjaGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb3JtQ29u
dHJvbEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb3JtRWxlbWVudC5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oJywKQEAgLTQ0MCw2ICs0NDIsOCBA
QAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9ybUVsZW1lbnQuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZyYW1lSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRnJh
bWVJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25FcnJvci5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwJywKQEAg
LTY2NCw2ICs2NjgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdX
ZWJHZW9sb2NhdGlvblNlcnZpY2UuKiQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdXZWJHZW9sb2NhdGlvblNlcnZpY2VNb2NrLionXSwKICAgICAgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMv
JzogWworICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ1dlYkdlb2xvY2F0aW9u
RXJyb3IuKiddLAorICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ1dlYkdlb2xv
Y2F0aW9uUG9zaXRpb24uKiddLAorICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAg
ICAgfV0KICAgICAgICAgICAgIF0sCiAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViR2VvbG9jYXRpb25FcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MzU0ZDMzM2RkNDg2YTlhM2Ix
Mzk4NTgwMmRlZjA2ODE2NGVlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkdlb2xvY2F0aW9uRXJyb3IuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJHZW9sb2NhdGlvbkVycm9yX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25FcnJvcl9o
CisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
bmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBHZW9sb2NhdGlvbkVycm9yOyB9CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgV2ViR2VvbG9j
YXRpb25FcnJvciB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvciB7CisgICAgICAgIEVycm9yUGVy
bWlzc2lvbkRlbmllZCwKKyAgICAgICAgRXJyb3JQb3NpdGlvblVuYXZhaWxhYmxlCisgICAgfTsK
KworICAgIFdlYkdlb2xvY2F0aW9uRXJyb3IoRXJyb3IgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKSB7IGFzc2lnbihjb2RlLCBtZXNzYWdlKTsgfQorICAgIFdlYkdlb2xvY2F0aW9uRXJy
b3IoY29uc3QgV2ViR2VvbG9jYXRpb25FcnJvciYgb3RoZXIpIHsgYXNzaWduKG90aGVyKTsgfQor
ICAgIH5XZWJHZW9sb2NhdGlvbkVycm9yKCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfQVBJ
IHZvaWQgYXNzaWduKEVycm9yIGNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7CisgICAg
V0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvbkVycm9yJik7CisgICAg
V0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJHZW9sb2NhdGlvbkVycm9yKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlv
bkVycm9yPik7CisgICAgV2ViR2VvbG9jYXRpb25FcnJvciYgb3BlcmF0b3I9KFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+KCkgY29uc3Q7CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+IG1fcHJp
dmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViR2VvbG9j
YXRpb25FcnJvcl9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xv
Y2F0aW9uUG9zaXRpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25Q
b3NpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlNzM0MzFlODFkMjY2ZWE1ZGRiZDhkNTAzZDJhNmRhMDhm
MDRjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xv
Y2F0aW9uUG9zaXRpb24uaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHZW9s
b2NhdGlvblBvc2l0aW9uX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbl9oCisKKyNp
bmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisKKyNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorbmFtZXNw
YWNlIFdlYkNvcmUgeyBjbGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOyB9CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24geworcHVibGlj
OgorICAgIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24oKSB7fQorICAgIFdlYkdlb2xvY2F0aW9uUG9z
aXRpb24oZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRl
LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ks
IGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVk
LCBkb3VibGUgc3BlZWQpCisgICAgeworICAgICAgICBhc3NpZ24odGltZXN0YW1wLCBsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CisgICAgfQorICAgIFdlYkdlb2xvY2F0aW9u
UG9zaXRpb24oY29uc3QgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiYgb3RoZXIpIHsgYXNzaWduKG90
aGVyKTsgfQorICAgIH5XZWJHZW9sb2NhdGlvblBvc2l0aW9uKCkgeyByZXNldCgpOyB9CisKKyAg
ICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQg
YXNzaWduKGNvbnN0IFdlYkdlb2xvY2F0aW9uUG9zaXRpb24mKTsKKyAgICBXRUJLSVRfQVBJIHZv
aWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkdlb2xvY2F0
aW9uUG9zaXRpb24oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+
KTsKKyAgICBXZWJHZW9sb2NhdGlvblBvc2l0aW9uJiBvcGVyYXRvcj0oV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24+KTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitw
cml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbj4g
bV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
ZXJ0TWF0Y2hpbmdFbnVtcy5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5n
RW51bXMuY3BwCmluZGV4IDNmZmZkNjA2NjNjMmRlMzk2YjRmM2I4MGMyOTg1YmY5OGU3ODMyNTMu
LmNlZWVkOGRiYzVmZjIyMTJhMjk5YWY0OTMyMTRlYTk4OWY3ZTg1OWEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAtNDEsNiArNDEsOCBAQAogI2lu
Y2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkZvbnRTbW9vdGhpbmdNb2RlLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5o
IgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
QEAgLTYyLDYgKzY0LDggQEAKICNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgogI2luY2x1ZGUgIldl
YkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJXZWJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJXZWJHZW9sb2NhdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25Qb3NpdGlv
bi5oIgogI2luY2x1ZGUgIldlYklEQktleS5oIgogI2luY2x1ZGUgIldlYklucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyLmgiCkBAIC0zODMsMyArMzg3LDggQEAgQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxlRXJyb3JJbnZhbGlkTW9kaWZpY2F0aW9uLCBG
aWxlRXJyb3I6OklOVkFMSUQKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViRmlsZUVy
cm9yUXVvdGFFeGNlZWRlZCwgRmlsZUVycm9yOjpRVU9UQV9FWENFRURFRF9FUlIpOwogQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxlRXJyb3JUeXBlTWlzbWF0Y2gsIEZpbGVFcnJv
cjo6VFlQRV9NSVNNQVRDSF9FUlIpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJG
aWxlRXJyb3JQYXRoRXhpc3RzLCBGaWxlRXJyb3I6OlBBVEhfRVhJU1RTX0VSUik7CisKKyNpZiBF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJHZW9sb2NhdGlvbkVycm9yOjpFcnJvclBlcm1pc3Npb25EZW5pZWQsIEdlb2xvY2F0
aW9uRXJyb3I6OlBlcm1pc3Npb25EZW5pZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJHZW9sb2NhdGlvbkVycm9yOjpFcnJvclBvc2l0aW9uVW5hdmFpbGFibGUsIEdlb2xvY2F0
aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uRXJyb3IuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJHZW9sb2NhdGlvbkVycm9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWNiNjc2ZTA2YTlmYjJl
ZjVjZDg1ZDkyYmI0ZGFjZDNkMWMyNTcxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJHZW9sb2NhdGlvbkVycm9yLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uRXJyb3IuaCIKKwor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdl
Ykdlb2xvY2F0aW9uRXJyb3I6OmFzc2lnbihFcnJvciBjb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgbV9wcml2YXRlID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PEdlb2xvY2F0aW9uRXJyb3I6OkVycm9yQ29kZT4oY29kZSksIG1lc3NhZ2UpOworfQor
Cit2b2lkIFdlYkdlb2xvY2F0aW9uRXJyb3I6OmFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlvbkVy
cm9yJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK3Zv
aWQgV2ViR2VvbG9jYXRpb25FcnJvcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgp
OworfQorCitXZWJHZW9sb2NhdGlvbkVycm9yOjpXZWJHZW9sb2NhdGlvbkVycm9yKFBhc3NSZWZQ
dHI8R2VvbG9jYXRpb25FcnJvcj4gZXJyb3IpCit7CisgICAgbV9wcml2YXRlID0gZXJyb3I7Cit9
CisKK1dlYkdlb2xvY2F0aW9uRXJyb3ImIFdlYkdlb2xvY2F0aW9uRXJyb3I6Om9wZXJhdG9yPShQ
YXNzUmVmUHRyPEdlb2xvY2F0aW9uRXJyb3I+IGVycm9yKQoreworICAgIG1fcHJpdmF0ZSA9IGVy
cm9yOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViR2VvbG9jYXRpb25FcnJvcjo6b3BlcmF0
b3IgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbkVycm9yPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS5nZXQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzViMzMwNmQzZWM4MjdmMGExOTExZmY2YmQw
NjY2MWUwNzU1ODA1NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisKKyNpbmNs
dWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uOjphc3Np
Z24oZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQpCit7CisgICAgbV9wcml2YXRlID0gR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3Jl
YXRlKHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJh
Y3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworfQor
Cit2b2lkIFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OmFzc2lnbihjb25zdCBXZWJHZW9sb2NhdGlv
blBvc2l0aW9uJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9
CisKK3ZvaWQgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0
ZS5yZXNldCgpOworfQorCitXZWJHZW9sb2NhdGlvblBvc2l0aW9uJiBXZWJHZW9sb2NhdGlvblBv
c2l0aW9uOjpvcGVyYXRvcj0oUGFzc1JlZlB0cjxHZW9sb2NhdGlvblBvc2l0aW9uPiBwb3NpdGlv
bikKK3sKKyAgICBtX3ByaXZhdGUgPSBwb3NpdGlvbjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K1dlYkdlb2xvY2F0aW9uUG9zaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Q
b3NpdGlvbj4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>