<?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>53251</bug_id>
          
          <creation_ts>2011-01-27 11:07:23 -0800</creation_ts>
          <short_desc>CACFLayerTreeHost should use WKCACFView for rendering</short_desc>
          <delta_ts>2011-01-28 08:20:03 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31855</blocked>
    
    <blocked>39496</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>jberlin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340951</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-27 11:07:23 -0800</bug_when>
    <thetext>CACFLayerTreeHost should use the new WKCACFView API for rendering. This will reduce memory usage (bug 31855) and move rendering onto a non-main thread (bug 39496).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340954</commentid>
    <comment_count>1</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-27 11:07:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/8925496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340973</commentid>
    <comment_count>2</comment_count>
      <attachid>80351</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-27 11:40:05 -0800</bug_when>
    <thetext>Created attachment 80351
Split CACFLayerTreeHost into base and derived classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341006</commentid>
    <comment_count>3</comment_count>
      <attachid>80359</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-27 13:19:49 -0800</bug_when>
    <thetext>Created attachment 80359
Move LegacyCACFLayerTreeHost into its own files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341013</commentid>
    <comment_count>4</comment_count>
      <attachid>80351</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-27 13:29:53 -0800</bug_when>
    <thetext>Comment on attachment 80351
Split CACFLayerTreeHost into base and derived classes

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

&gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp:213
&gt; +    bool m_mightBeAbleToCreateDeviceLater;
&gt; +    COMPtr&lt;IDirect3DDevice9&gt; m_d3dDevice;
&gt; +    WKCACFContext* m_context;
&gt; +    Timer&lt;LegacyCACFLayerTreeHost&gt; m_renderTimer;
&gt; +    bool m_mustResetLostDeviceBeforeRendering;

Can you sort these to optimize padding?

&gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h:98
&gt;      CACFLayerTreeHostClient* m_client;
&gt; -    bool m_mightBeAbleToCreateDeviceLater;
&gt; -    COMPtr&lt;IDirect3DDevice9&gt; m_d3dDevice;
&gt;      RefPtr&lt;PlatformCALayer&gt; m_rootLayer;
&gt;      RefPtr&lt;PlatformCALayer&gt; m_rootChildLayer;
&gt; -    WKCACFContext* m_context;
&gt;      HWND m_window;
&gt; -    Timer&lt;CACFLayerTreeHost&gt; m_renderTimer;
&gt; -    bool m_mustResetLostDeviceBeforeRendering;
&gt;      bool m_shouldFlushPendingGraphicsLayerChanges;
&gt;      bool m_isFlushingLayerChanges;
&gt;      HashSet&lt;RefPtr&lt;PlatformCALayer&gt; &gt; m_pendingAnimatedLayers;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341015</commentid>
    <comment_count>5</comment_count>
      <attachid>80359</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-27 13:30:58 -0800</bug_when>
    <thetext>Comment on attachment 80359
Move LegacyCACFLayerTreeHost into its own files

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

&gt; Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:70
&gt; +    bool m_mightBeAbleToCreateDeviceLater;
&gt; +    COMPtr&lt;IDirect3DDevice9&gt; m_d3dDevice;
&gt; +    WKCACFContext* m_context;
&gt; +    Timer&lt;LegacyCACFLayerTreeHost&gt; m_renderTimer;
&gt; +    bool m_mustResetLostDeviceBeforeRendering;

Put bools next to eachother.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341062</commentid>
    <comment_count>6</comment_count>
      <attachid>80366</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-27 14:44:12 -0800</bug_when>
    <thetext>Created attachment 80366
Add WKCACFViewLayerTreeHost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341099</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-27 16:13:10 -0800</bug_when>
    <thetext>Fixed in r76853, r76856, and r76858.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341446</commentid>
    <comment_count>8</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-01-28 08:20:03 -0800</bug_when>
    <thetext>These changes broke ~36 animations, compositing, and transitions tests on the Windows 7 Release bots:

https://bugs.webkit.org/show_bug.cgi?id=53302</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80351</attachid>
            <date>2011-01-27 11:40:05 -0800</date>
            <delta_ts>2011-01-27 13:29:53 -0800</delta_ts>
            <desc>Split CACFLayerTreeHost into base and derived classes</desc>
            <filename>bug-53251-20110127114003.patch</filename>
            <type>text/plain</type>
            <size>18768</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxZDE1MzRhMjQwNzMxMzgwODEzZDliYWZlNTA3NDJmNjI4ZTY4NTcxLi4w
ZWI3NDM0ZjY3NWRhZmVkNjA1NWQ0OWY5NTg2NmZjOTM2OGIxZjI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsNzcgQEAKIDIwMTEtMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CisgICAgICAgIFNwbGl0IENBQ0ZMYXllclRyZWVIb3N0IGludG8gYmFzZSBhbmQgZGVyaXZlZCBj
bGFzc2VzCisKKyAgICAgICAgVGhlIGRlcml2ZWQgY2xhc3MsIExlZ2FjeUNBQ0ZMYXllclRyZWVI
b3N0LCBjb250YWlucyBhbGwgdGhlIEQzRC1yZWxhdGVkIGNvZGUuIEEgbGF0ZXIgcGF0Y2gKKyAg
ICAgICAgd2lsbCBhZGQgYSBuZXcgZGVyaXZlZCBjbGFzcyB0aGF0IHJlcGxhY2VzIHRoZSBEM0Qg
Y29kZSB3aXRoIGEgZGlmZmVyZW50IHJlbmRlcmluZyBBUEkuCisKKyAgICAgICAgRm9yIG5vdywg
TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QgbGl2ZXMgaW4gQ0FDRkxheWVyVHJlZUhvc3QuY3BwLiBU
aGlzIGtlZXBzIHRoZSBkaWZmIGEKKyAgICAgICAgbGl0dGxlIHNtYWxsZXIuIEEgbGF0ZXIgcGF0
Y2ggd2lsbCBtb3ZlIGl0IHRvIGl0cyBvd24gc291cmNlIGZpbGVzLgorCisgICAgICAgIFByZXBh
cmF0aW9uIGZvciA8aHR0cDovL3dlYmtpdC5vcmcvYi81MzI1MT4gPHJkYXI6Ly9wcm9ibGVtLzg5
MjU0OTY+IENBQ0ZMYXllclRyZWVIb3N0CisgICAgICAgIHNob3VsZCB1c2UgV0tDQUNGVmlldyBm
b3IgcmVuZGVyaW5nCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FDRkxheWVyVHJlZUhvc3Q6OmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBdmFpbGFibGUpOiBDbGVhciB0aGUgd2luZG93IGJlZm9yZQorICAgICAgICBkZXN0cm95aW5n
IHRoZSBob3N0LCBhcyB0aGF0IGlzIG5vdyB0aGUgQVBJIGNvbnRyYWN0IHRoYXQgY2xpZW50cyBt
dXN0IGZ1bGZpbGwuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKTogQWRkZWQuIFNpbXBsZSBjcmVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q0FDRkxh
eWVyVHJlZUhvc3Q6OmNyZWF0ZSk6IE5vdyBpbnN0YW50aWF0ZXMgYSBMZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdC4gQ2FsbHMgdGhlCisgICAgICAgIG5ldyBpbml0aWFsaXplIGZ1bmN0aW9uIHRvIHBl
cmZvcm0gaW5pdGlhbGl6YXRpb24gdGhhdCBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZSB2dGFibGUg
aGFzCisgICAgICAgIGJlZW4gc2V0IHVwLgorCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDQUNG
TGF5ZXJUcmVlSG9zdDo6TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FDRkxheWVyVHJlZUhvc3Q6OkNBQ0ZMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0Ojppbml0aWFsaXplQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIE1vdmVk
IHNvbWUgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tIHRoZSBDQUNGTGF5ZXJUcmVlSG9zdCBjb25z
dHJ1Y3RvciBpbnRvIHRoZXNlIG5ldworICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0Ojp+TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Qp
OiBBZGRlZC4gTW92ZWQgY29kZSBoZXJlIGZyb20KKyAgICAgICAgfkNBQ0ZMYXllclRyZWVIb3N0
LgorICAgICAgICAoV2ViQ29yZTo6Q0FDRkxheWVyVHJlZUhvc3Q6On5DQUNGTGF5ZXJUcmVlSG9z
dCk6IFJhdGhlciB0aGFuIGNsZWFyaW5nIHRoZSB3aW5kb3cgYXQgdGhpcworICAgICAgICBwb2lu
dCAod2hpY2ggd291bGQgYmUgdG9vIGxhdGUsIHNpbmNlIHdlIHdvbid0IGJlIGFibGUgdG8gY2Fs
bCBpbnRvIHRoZSBkZXJpdmVkIGNsYXNzJ3MKKyAgICAgICAgdmlydHVhbCBmdW5jdGlvbnMpLCBq
dXN0IGFzc2VydCB0aGF0IGl0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCAob3Igd2FzIG5ldmVy
IHNldCBpbiB0aGUKKyAgICAgICAgZmlyc3QgcGxhY2UpLgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5Q0FDRkxheWVyVHJlZUhvc3Q6OmNyZWF0ZVJlbmRlcmVyKTogUmVuYW1lZCBmcm9tCisgICAg
ICAgIENBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGVSZW5kZXJlciwgYW5kIGNoYW5nZWQgdG8gdXNl
IGdldHRlcnMgaW5zdGVhZCBvZiBhY2Nlc3NpbmcKKyAgICAgICAgQ0FDRkxheWVyVHJlZUhvc3Qn
cyBkYXRhIG1lbWJlcnMgZGlyZWN0bHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUNBQ0ZM
YXllclRyZWVIb3N0OjpkZXN0cm95UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FDRkxh
eWVyVHJlZUhvc3Q6OmRlc3Ryb3lSZW5kZXJlcik6CisgICAgICAgIE1vdmVkIHNvbWUgY29kZSB0
byB0aGUgbmV3IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0IGZ1bmN0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpyZW5kZXJUaW1lckZpcmVkKToKKyAgICAgICAg
TW92ZWQgdGhlc2UgZnVuY3Rpb25zIHRvIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LgorCisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0FDRkxheWVyVHJlZUhvc3Q6OnBhaW50KToKKyAgICAgICAgTW92ZWQgc29tZSBj
b2RlIHRvIHRoZSBuZXcgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QgZnVuY3Rpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpyZW5kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJlbmRlclNvb24pOgorICAgICAgICBN
b3ZlZCB0aGVzZSBmdW5jdGlvbnMgdG8gTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkNBQ0ZMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNO
b3cpOiBNb3ZlZCBjb2RlIHRvIGZsdXNoIHRoZSBjb250ZXh0CisgICAgICAgIGZyb20gaGVyZS4u
LgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OmZsdXNoQ29udGV4
dCk6IC4uLnRvIHRoaXMgbmV3IGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lD
QUNGTGF5ZXJUcmVlSG9zdDo6bGFzdENvbW1pdFRpbWUpOiBNb3ZlZCBjb2RlIHRvIGdldCB0aGUg
bGFzdCBjb21taXQgdGltZQorICAgICAgICB0byB0aGlzIG5ldyBmdW5jdGlvbi4uLgorICAgICAg
ICAoV2ViQ29yZTo6Q0FDRkxheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlvbnNTdGFydGVkKTog
Li4uZnJvbSBoZXJlLgorCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDQUNGTGF5ZXJUcmVlSG9z
dDo6aW5pdEQzREdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUNBQ0ZMYXllclRy
ZWVIb3N0OjpyZXNldERldmljZSk6CisgICAgICAgIE1vdmVkIHRoZXNlIGZ1bmN0aW9ucyB0byBM
ZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oOiBNYWRlIHNvbWUgZnVuY3Rpb25zIHZpcnR1YWwsIHJl
bW92ZWQgc29tZQorICAgICAgICBtZW1iZXJzIHRoYXQgaGF2ZSBtb3ZlZCB0byBMZWdhY3lDQUNG
TGF5ZXJUcmVlSG9zdCwgYWRkZWQgc29tZSBnZXR0ZXJzIHVzZWQgYnkKKyAgICAgICAgTGVnYWN5
Q0FDRkxheWVyVHJlZUhvc3QuCisKKzIwMTEtMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBw
bGUuY29tPgorCiAgICAgICAgIE1vdmUgQ0FDRkxheWVyVHJlZUhvc3RDbGllbnQgdG8gaXRzIG93
biBoZWFkZXIgZmlsZQogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFN0ZXZlIEZhbGtlbmJ1
cmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
Q0FDRkxheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZTM4YWY3MGU0ZTRkMDIzMzFjZWRj
MTAwODM3NGFlNjAxNjFjNzFkLi5hZTVmNzQyOTNkNmE0YjY4OTZjM2QyMDg4ZDI0NjQwNTVmOTZh
MDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
Q0FDRkxheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTE2OSwzNCArMTY5LDEwMiBAQCBi
b29sIENBQ0ZMYXllclRyZWVIb3N0OjphY2NlbGVyYXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCkK
ICAgICBSZWZQdHI8Q0FDRkxheWVyVHJlZUhvc3Q+IGhvc3QgPSBDQUNGTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKCk7CiAgICAgaG9zdC0+c2V0V2luZG93KHRlc3RXaW5kb3cpOwogICAgIGF2YWlsYWJs
ZSA9IGhvc3QtPmNyZWF0ZVJlbmRlcmVyKCk7CisgICAgaG9zdC0+c2V0V2luZG93KDApOwogICAg
IDo6RGVzdHJveVdpbmRvdyh0ZXN0V2luZG93KTsKIAogICAgIHJldHVybiBhdmFpbGFibGU7CiB9
CiAKKy8vIEZJWE1FOiBDdXJyZW50bHkgdGhlcmUgaXMgYSBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9z
dCBmb3IgZWFjaCBXZWJWaWV3IGFuZCBlYWNoCisvLyBoYXMgaXRzIG93biBXS0NBQ0ZDb250ZXh0
IGFuZCBEaXJlY3QzRERldmljZTksIHdoaWNoIGlzIGluZWZmaWNpZW50LgorLy8gKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg1NSkKK2NsYXNzIExlZ2FjeUNBQ0ZM
YXllclRyZWVIb3N0IDogcHVibGljIENBQ0ZMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKCk7CisgICAg
dmlydHVhbCB+TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QoKTsKKworcHJpdmF0ZToKKyAgICBMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdCgpOworCisgICAgdm9pZCBpbml0RDNER2VvbWV0cnkoKTsKKwor
ICAgIC8vIENhbGwgdGhpcyB3aGVuIHRoZSBkZXZpY2Ugd2luZG93IGhhcyBjaGFuZ2VkIHNpemUg
b3Igd2hlbiBJRGlyZWN0M0REZXZpY2U5OjpQcmVzZW50IHJldHVybnMKKyAgICAvLyBEM0RFUlJf
REVWSUNFTE9TVC4gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugd2FzIHJlY292ZXJlZCwgZmFs
c2UgaWYgcmVuZGVyaW5nIG11c3QgYmUKKyAgICAvLyBhYm9ydGVkIGFuZCByZWF0dGVtcHRlZCBz
b29uLgorICAgIGVudW0gUmVzZXRSZWFzb24geyBDaGFuZ2VkV2luZG93U2l6ZSwgTG9zdERldmlj
ZSB9OworICAgIGJvb2wgcmVzZXREZXZpY2UoUmVzZXRSZWFzb24pOworCisgICAgdm9pZCByZW5k
ZXJTb29uKCk7CisgICAgdm9pZCByZW5kZXJUaW1lckZpcmVkKFRpbWVyPExlZ2FjeUNBQ0ZMYXll
clRyZWVIb3N0PiopOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDb250ZXh0KHZvaWQq
IHVzZXJEYXRhLCBQbGF0Zm9ybUNBTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKCk7
CisgICAgdmlydHVhbCBib29sIGNyZWF0ZVJlbmRlcmVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3lSZW5kZXJlcigpOworICAgIHZpcnR1YWwgQ0ZUaW1lSW50ZXJ2YWwgbGFzdENvbW1pdFRp
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBWZWN0b3I8Q0dS
ZWN0PiYgZGlydHlSZWN0cyA9IFZlY3RvcjxDR1JlY3Q+KCkpOworCisgICAgYm9vbCBtX21pZ2h0
QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlcjsKKyAgICBDT01QdHI8SURpcmVjdDNERGV2aWNlOT4g
bV9kM2REZXZpY2U7CisgICAgV0tDQUNGQ29udGV4dCogbV9jb250ZXh0OworICAgIFRpbWVyPExl
Z2FjeUNBQ0ZMYXllclRyZWVIb3N0PiBtX3JlbmRlclRpbWVyOworICAgIGJvb2wgbV9tdXN0UmVz
ZXRMb3N0RGV2aWNlQmVmb3JlUmVuZGVyaW5nOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wg
bV9wcmludFRyZWU7CisjZW5kaWYKK307CisKK1Bhc3NSZWZQdHI8TGVnYWN5Q0FDRkxheWVyVHJl
ZUhvc3Q+IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QpOworfQorCiBQYXNzUmVmUHRyPENB
Q0ZMYXllclRyZWVIb3N0PiBDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCkKIHsKICAgICBpZiAo
IWFjY2VsZXJhdGVkQ29tcG9zaXRpbmdBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQUNGTGF5ZXJUcmVlSG9zdCgpKTsKKyAgICBSZWZQdHI8
Q0FDRkxheWVyVHJlZUhvc3Q+IGhvc3QgPSBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
KCk7CisgICAgaG9zdC0+aW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsK
K30KKworTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KCkK
KyAgICA6IG1fbWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKHRydWUpCisgICAgLCBtX2Nv
bnRleHQod2tDQUNGQ29udGV4dENyZWF0ZSgpKQorICAgICwgbV9yZW5kZXJUaW1lcih0aGlzLCAm
TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJlbmRlclRpbWVyRmlyZWQpCisgICAgLCBtX211c3RS
ZXNldExvc3REZXZpY2VCZWZvcmVSZW5kZXJpbmcoZmFsc2UpCit7CisjaWZuZGVmIE5ERUJVRwor
ICAgIGNoYXIqIHByaW50VHJlZUZsYWcgPSBnZXRlbnYoIkNBX1BSSU5UX1RSRUUiKTsKKyAgICBt
X3ByaW50VHJlZSA9IHByaW50VHJlZUZsYWcgJiYgYXRvaShwcmludFRyZWVGbGFnKTsKKyNlbmRp
ZgogfQogCiBDQUNGTGF5ZXJUcmVlSG9zdDo6Q0FDRkxheWVyVHJlZUhvc3QoKQogICAgIDogbV9j
bGllbnQoMCkKLSAgICAsIG1fbWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKHRydWUpCiAg
ICAgLCBtX3Jvb3RMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVJvb3RMYXllciwgMCkpCi0gICAgLCBtX2NvbnRleHQod2tDQUNGQ29udGV4dENy
ZWF0ZSgpKQogICAgICwgbV93aW5kb3coMCkKLSAgICAsIG1fcmVuZGVyVGltZXIodGhpcywgJkNB
Q0ZMYXllclRyZWVIb3N0OjpyZW5kZXJUaW1lckZpcmVkKQotICAgICwgbV9tdXN0UmVzZXRMb3N0
RGV2aWNlQmVmb3JlUmVuZGVyaW5nKGZhbHNlKQogICAgICwgbV9zaG91bGRGbHVzaFBlbmRpbmdH
cmFwaGljc0xheWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdl
cyhmYWxzZSkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX3N0YXRlKFdpbmRvd05vdFNl
dCkKICNlbmRpZgogeworfQorCit2b2lkIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0Ojppbml0aWFs
aXplQ29udGV4dCh2b2lkKiB1c2VyRGF0YSwgUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAg
ICB3a0NBQ0ZDb250ZXh0U2V0VXNlckRhdGEobV9jb250ZXh0LCB1c2VyRGF0YSk7CisgICAgd2tD
QUNGQ29udGV4dFNldExheWVyKG1fY29udGV4dCwgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Cit9
CisKK3ZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQorewogICAgIC8vIFBvaW50
IHRoZSBDQUNGQ29udGV4dCB0byB0aGlzCi0gICAgd2tDQUNGQ29udGV4dFNldFVzZXJEYXRhKG1f
Y29udGV4dCwgdGhpcyk7CisgICAgaW5pdGlhbGl6ZUNvbnRleHQodGhpcywgbV9yb290TGF5ZXIu
Z2V0KCkpOwogCiAgICAgLy8gVW5kZXIgdGhlIHJvb3QgbGF5ZXIsIHdlIGhhdmUgYSBjbGlwcGlu
ZyBsYXllciB0byBjbGlwIHRoZSBjb250ZW50LAogICAgIC8vIHRoYXQgY29udGFpbnMgYSBzY3Jv
bGwgbGF5ZXIgdGhhdCB3ZSB1c2UgZm9yIHNjcm9sbGluZyB0aGUgY29udGVudC4KQEAgLTIxNiwy
MCArMjg0LDE2IEBAIENBQ0ZMYXllclRyZWVIb3N0OjpDQUNGTGF5ZXJUcmVlSG9zdCgpCiAgICAg
bV9yb290TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihkZWJ1Z0NvbG9yKTsKICAgICBDR0NvbG9y
UmVsZWFzZShkZWJ1Z0NvbG9yKTsKICNlbmRpZgorfQogCi0gICAgaWYgKG1fY29udGV4dCkKLSAg
ICAgICAgd2tDQUNGQ29udGV4dFNldExheWVyKG1fY29udGV4dCwgbV9yb290TGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgY2hhciogcHJpbnRUcmVlRmxhZyA9
IGdldGVudigiQ0FfUFJJTlRfVFJFRSIpOwotICAgIG1fcHJpbnRUcmVlID0gcHJpbnRUcmVlRmxh
ZyAmJiBhdG9pKHByaW50VHJlZUZsYWcpOwotI2VuZGlmCitMZWdhY3lDQUNGTGF5ZXJUcmVlSG9z
dDo6fkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KCkKK3sKKyAgICB3a0NBQ0ZDb250ZXh0RGVzdHJv
eShtX2NvbnRleHQpOwogfQogCiBDQUNGTGF5ZXJUcmVlSG9zdDo6fkNBQ0ZMYXllclRyZWVIb3N0
KCkKIHsKLSAgICBzZXRXaW5kb3coMCk7Ci0gICAgd2tDQUNGQ29udGV4dERlc3Ryb3kobV9jb250
ZXh0KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gV2luZG93U2V0LCAiTXVz
dCBjYWxsIHNldFdpbmRvdygwKSBiZWZvcmUgZGVzdHJveWluZyBDQUNGTGF5ZXJUcmVlSG9zdCIp
OwogfQogCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpzZXRXaW5kb3coSFdORCB3aW5kb3cpCkBA
IC0yOTQsNyArMzU4LDcgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlRGlkQ2hh
bmdlKCkKICAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpzaGFyZWQoKS5mbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXNTb29uKHRoaXMpOwogfQogCi1ib29sIENBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGVS
ZW5kZXJlcigpCitib29sIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGVSZW5kZXJlcigp
CiB7CiAgICAgaWYgKG1fZDNkRGV2aWNlIHx8ICFtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VM
YXRlcikKICAgICAgICAgcmV0dXJuIG1fZDNkRGV2aWNlOwpAQCAtMzAyLDE0ICszNjYsMTQgQEAg
Ym9vbCBDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUmVuZGVyZXIoKQogICAgIG1fbWlnaHRCZUFi
bGVUb0NyZWF0ZURldmljZUxhdGVyID0gZmFsc2U7CiAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJT
IHBhcmFtZXRlcnMgPSBpbml0aWFsUHJlc2VudGF0aW9uUGFyYW1ldGVycygpOwogCi0gICAgaWYg
KCFkM2QoKSB8fCAhOjpJc1dpbmRvdyhtX3dpbmRvdykpCisgICAgaWYgKCFkM2QoKSB8fCAhOjpJ
c1dpbmRvdyh3aW5kb3coKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEQzRCBk
b2Vzbid0IGxpa2UgdG8gbWFrZSBiYWNrIGJ1ZmZlcnMgZm9yIDAgc2l6ZSB3aW5kb3dzLiBXZSBz
a2lydCB0aGlzIHByb2JsZW0gaWYgd2UgbWFrZSB0aGUKICAgICAvLyBwYXNzZWQgYmFja2J1ZmZl
ciB3aWR0aCBhbmQgaGVpZ2h0IG5vbi16ZXJvLiBUaGUgd2luZG93IHdpbGwgbmVjZXNzYXJpbHkg
Z2V0IHNldCB0byBhIG5vbi16ZXJvCiAgICAgLy8gc2l6ZSBldmVudHVhbGx5LCBhbmQgdGhlbiB0
aGUgYmFja2J1ZmZlciBzaXplIHdpbGwgZ2V0IHJlc2V0LgogICAgIFJFQ1QgcmVjdDsKLSAgICBH
ZXRDbGllbnRSZWN0KG1fd2luZG93LCAmcmVjdCk7CisgICAgR2V0Q2xpZW50UmVjdCh3aW5kb3co
KSwgJnJlY3QpOwogCiAgICAgaWYgKHJlY3QubGVmdC1yZWN0LnJpZ2h0ID09IDAgfHwgcmVjdC5i
b3R0b20tcmVjdC50b3AgPT0gMCkgewogICAgICAgICBwYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0
aCA9IDE7CkBAIC0zMjcsNyArMzkxLDcgQEAgYm9vbCBDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
UmVuZGVyZXIoKQogICAgICAgICBiZWhhdmlvckZsYWdzIHw9IEQzRENSRUFURV9TT0ZUV0FSRV9W
RVJURVhQUk9DRVNTSU5HOwogCiAgICAgQ09NUHRyPElEaXJlY3QzRERldmljZTk+IGRldmljZTsK
LSAgICBpZiAoRkFJTEVEKGQzZCgpLT5DcmVhdGVEZXZpY2UoRDNEQURBUFRFUl9ERUZBVUxULCBE
M0RERVZUWVBFX0hBTCwgbV93aW5kb3csIGJlaGF2aW9yRmxhZ3MsICZwYXJhbWV0ZXJzLCAmZGV2
aWNlKSkpIHsKKyAgICBpZiAoRkFJTEVEKGQzZCgpLT5DcmVhdGVEZXZpY2UoRDNEQURBUFRFUl9E
RUZBVUxULCBEM0RERVZUWVBFX0hBTCwgd2luZG93KCksIGJlaGF2aW9yRmxhZ3MsICZwYXJhbWV0
ZXJzLCAmZGV2aWNlKSkpIHsKICAgICAgICAgLy8gSW4gY2VydGFpbiBzaXR1YXRpb25zIChlLmcu
LCBzaG9ydGx5IGFmdGVyIHdha2luZyBmcm9tIHNsZWVwKSwgRGlyZWN0M0RDcmVhdGU5KCkgd2ls
bAogICAgICAgICAvLyByZXR1cm4gYW4gSURpcmVjdDNEOSBmb3Igd2hpY2ggSURpcmVjdDNEOTo6
Q3JlYXRlRGV2aWNlIHdpbGwgYWx3YXlzIGZhaWwuIEluIGNhc2Ugd2UKICAgICAgICAgLy8gaGF2
ZSBvbmUgb2YgdGhlc2UgYmFkIElEaXJlY3QzRDlzLCBnZXQgcmlkIG9mIGl0IHNvIHdlJ2xsIGZl
dGNoIGEgbmV3IG9uZSB0aGUgbmV4dCB0aW1lCkBAIC0zNjAsMTggKzQyNCwxNiBAQCBib29sIENB
Q0ZMYXllclRyZWVIb3N0OjpjcmVhdGVSZW5kZXJlcigpCiAKICAgICB3a0NBQ0ZDb250ZXh0U2V0
RDNERGV2aWNlKG1fY29udGV4dCwgbV9kM2REZXZpY2UuZ2V0KCkpOwogCi0gICAgaWYgKElzV2lu
ZG93KG1fd2luZG93KSkgewotICAgICAgICBtX3Jvb3RMYXllci0+c2V0Qm91bmRzKGJvdW5kcygp
KTsKKyAgICBpZiAoSXNXaW5kb3cod2luZG93KCkpKSB7CisgICAgICAgIHJvb3RMYXllcigpLT5z
ZXRCb3VuZHMoYm91bmRzKCkpOwogICAgICAgICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0
KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9z
dDo6ZGVzdHJveVJlbmRlcmVyKCkKK3ZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OmRlc3Ry
b3lSZW5kZXJlcigpCiB7Ci0gICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuY2FuY2Vs
UGVuZGluZ0ZsdXNoKHRoaXMpOwotCiAgICAgd2tDQUNGQ29udGV4dFNldExheWVyKG1fY29udGV4
dCwgMCk7CiAKICAgICB3a0NBQ0ZDb250ZXh0U2V0RDNERGV2aWNlKG1fY29udGV4dCwgMCk7CkBA
IC0zODAsMTMgKzQ0MiwxOSBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpkZXN0cm95UmVuZGVy
ZXIoKQogICAgICAgICBzX2QzZC0+UmVsZWFzZSgpOwogCiAgICAgc19kM2QgPSAwOworICAgIG1f
bWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyID0gdHJ1ZTsKKworICAgIENBQ0ZMYXllclRy
ZWVIb3N0OjpkZXN0cm95UmVuZGVyZXIoKTsKK30KKwordm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6
ZGVzdHJveVJlbmRlcmVyKCkKK3sKICAgICBtX3Jvb3RMYXllciA9IDA7CiAgICAgbV9yb290Q2hp
bGRMYXllciA9IDA7Ci0KLSAgICBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlciA9IHRy
dWU7CisgICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuY2FuY2VsUGVuZGluZ0ZsdXNo
KHRoaXMpOwogfQogCi12b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpyZXNpemUoKQordm9pZCBMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVzaXplKCkKIHsKICAgICBpZiAoIW1fZDNkRGV2aWNlKQog
ICAgICAgICByZXR1cm47CkBAIC0zOTUsOCArNDYzLDggQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9z
dDo6cmVzaXplKCkKICAgICAvLyByZXNldCB0aGUgZGV2aWNlIHRoZSBuZXh0IHRpbWUgd2UgdHJ5
IHRvIHJlbmRlci4KICAgICByZXNldERldmljZShDaGFuZ2VkV2luZG93U2l6ZSk7CiAKLSAgICBp
ZiAobV9yb290TGF5ZXIpIHsKLSAgICAgICAgbV9yb290TGF5ZXItPnNldEJvdW5kcyhib3VuZHMo
KSk7CisgICAgaWYgKHJvb3RMYXllcigpKSB7CisgICAgICAgIHJvb3RMYXllcigpLT5zZXRCb3Vu
ZHMoYm91bmRzKCkpOwogICAgICAgICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0KTsKICAg
ICB9CiB9CkBAIC00MzEsMTIgKzQ5OSwxMiBAQCBzdGF0aWMgdm9pZCBnZXREaXJ0eVJlY3RzKEhX
TkQgd2luZG93LCBWZWN0b3I8Q0dSZWN0PiYgb3V0UmVjdHMpCiAgICAgICAgIG91dFJlY3RzW2ld
ID0gd2luUmVjdFRvQ0dSZWN0KCpyZWN0LCBjbGllbnRSZWN0KTsKIH0KIAotdm9pZCBDQUNGTGF5
ZXJUcmVlSG9zdDo6cmVuZGVyVGltZXJGaXJlZChUaW1lcjxDQUNGTGF5ZXJUcmVlSG9zdD4qKQor
dm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyVGltZXJGaXJlZChUaW1lcjxMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdD4qKQogewogICAgIHBhaW50KCk7CiB9CiAKLXZvaWQgQ0FDRkxh
eWVyVHJlZUhvc3Q6OnBhaW50KCkKK3ZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnBhaW50
KCkKIHsKICAgICBjcmVhdGVSZW5kZXJlcigpOwogICAgIGlmICghbV9kM2REZXZpY2UpIHsKQEAg
LTQ0NSwxMiArNTEzLDE3IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OnBhaW50KCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIENBQ0ZMYXllclRyZWVIb3N0OjpwYWludCgpOworfQor
Cit2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpwYWludCgpCit7CiAgICAgVmVjdG9yPENHUmVjdD4g
ZGlydHlSZWN0czsKICAgICBnZXREaXJ0eVJlY3RzKG1fd2luZG93LCBkaXJ0eVJlY3RzKTsKICAg
ICByZW5kZXIoZGlydHlSZWN0cyk7CiB9CiAKLXZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OnJlbmRl
cihjb25zdCBWZWN0b3I8Q0dSZWN0PiYgd2luZG93RGlydHlSZWN0cykKK3ZvaWQgTGVnYWN5Q0FD
RkxheWVyVHJlZUhvc3Q6OnJlbmRlcihjb25zdCBWZWN0b3I8Q0dSZWN0PiYgd2luZG93RGlydHlS
ZWN0cykKIHsKICAgICBBU1NFUlQobV9kM2REZXZpY2UpOwogCkBAIC01MTcsNyArNTkwLDcgQEAg
dm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyKGNvbnN0IFZlY3RvcjxDR1JlY3Q+JiB3aW5k
b3dEaXJ0eVJlY3RzKQogCiAjaWZuZGVmIE5ERUJVRwogICAgIGlmIChtX3ByaW50VHJlZSkKLSAg
ICAgICAgbV9yb290TGF5ZXItPnByaW50VHJlZSgpOworICAgICAgICByb290TGF5ZXIoKS0+cHJp
bnRUcmVlKCk7CiAjZW5kaWYKIAogICAgIC8vIElmIHRpbWVUb05leHRSZW5kZXIgaXMgbm90IGlu
ZmluaXR5LCBpdCBtZWFucyBhbmltYXRpb25zIGFyZSBydW5uaW5nLCBzbyBxdWV1ZSB1cCB0byBy
ZW5kZXIgYWdhaW4KQEAgLTUyNSw3ICs1OTgsNyBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpy
ZW5kZXIoY29uc3QgVmVjdG9yPENHUmVjdD4mIHdpbmRvd0RpcnR5UmVjdHMpCiAgICAgICAgIHJl
bmRlclNvb24oKTsKIH0KIAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyU29vbigpCit2
b2lkIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpyZW5kZXJTb29uKCkKIHsKICAgICBpZiAoIW1f
cmVuZGVyVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9yZW5kZXJUaW1lci5zdGFydE9uZVNo
b3QoMCk7CkBAIC01NTIsOSArNjI1LDcgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzTm93KCkKICAgICB9CiAKICAgICAvLyBGbHVzaCBjaGFuZ2VzIHN0
b3JlZCB1cCBpbiBQbGF0Zm9ybUNBTGF5ZXJzIHRvIHRoZSBjb250ZXh0IHNvIHRoZXkgd2lsbCBi
ZSByZW5kZXJlZC4KLSAgICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0KTsKLQotICAgIHJl
bmRlclNvb24oKTsKKyAgICBmbHVzaENvbnRleHQoKTsKIAogICAgIC8vIEFsbCBwZW5kaW5nIGFu
aW1hdGlvbnMgd2lsbCBoYXZlIGJlZW4gc3RhcnRlZCB3aXRoIHRoZSBmbHVzaC4gRmlyZSB0aGUg
YW5pbWF0aW9uU3RhcnRlZCBjYWxscy4KICAgICBub3RpZnlBbmltYXRpb25zU3RhcnRlZCgpOwpA
QCAtNTYyLDEwICs2MzMsMjEgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzTm93KCkKICAgICBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMgPSBmYWxzZTsK
IH0KIAordm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAg
ICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0KTsKKyAgICByZW5kZXJTb29uKCk7Cit9CisK
K0NGVGltZUludGVydmFsIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpsYXN0Q29tbWl0VGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHdrQ0FDRkNvbnRleHRHZXRMYXN0Q29tbWl0VGltZShtX2Nv
bnRleHQpOworfQorCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25zU3Rh
cnRlZCgpCiB7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwot
ICAgIGRvdWJsZSB0aW1lID0gY3VycmVudFRpbWUgKyB3a0NBQ0ZDb250ZXh0R2V0TGFzdENvbW1p
dFRpbWUobV9jb250ZXh0KSAtIENBQ3VycmVudE1lZGlhVGltZSgpOworICAgIGRvdWJsZSB0aW1l
ID0gY3VycmVudFRpbWUgKyBsYXN0Q29tbWl0VGltZSgpIC0gQ0FDdXJyZW50TWVkaWFUaW1lKCk7
CiAgICAgQVNTRVJUKHRpbWUgPD0gY3VycmVudFRpbWUpOwogCiAgICAgSGFzaFNldDxSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiA+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdBbmltYXRlZExheWVy
cy5lbmQoKTsKQEAgLTU4Myw3ICs2NjUsNyBAQCBDR1JlY3QgQ0FDRkxheWVyVHJlZUhvc3Q6OmJv
dW5kcygpIGNvbnN0CiAgICAgcmV0dXJuIHdpblJlY3RUb0NHUmVjdChjbGllbnRSZWN0KTsKIH0K
IAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdEQzREdlb21ldHJ5KCkKK3ZvaWQgTGVnYWN5
Q0FDRkxheWVyVHJlZUhvc3Q6OmluaXREM0RHZW9tZXRyeSgpCiB7CiAgICAgQVNTRVJUKG1fZDNk
RGV2aWNlKTsKIApAQCAtNjAwLDcgKzY4Miw3IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6Omlu
aXREM0RHZW9tZXRyeSgpCiAgICAgbV9kM2REZXZpY2UtPlNldFRyYW5zZm9ybShEM0RUU19QUk9K
RUNUSU9OLCAmcHJvamVjdGlvbik7CiB9CiAKLWJvb2wgQ0FDRkxheWVyVHJlZUhvc3Q6OnJlc2V0
RGV2aWNlKFJlc2V0UmVhc29uIHJlYXNvbikKK2Jvb2wgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6
OnJlc2V0RGV2aWNlKFJlc2V0UmVhc29uIHJlYXNvbikKIHsKICAgICBBU1NFUlQobV9kM2REZXZp
Y2UpOwogICAgIEFTU0VSVChtX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAppbmRleCA0
NDM0ODJjYjdkZjZiNGZjZDJjNGI2NzExNDZlZjY5MjMzNWI4YWVmLi40OGEyY2FjYTFhNmUyM2Ix
ZWNkNjM0OGIzN2M2NGE3NGUwNjRlYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaApAQCAtNTAs
NjkgKzUwLDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENBQ0ZMYXllclRyZWVIb3N0
Q2xpZW50OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyOwogCi0vLyBGSVhNRTogQ3VycmVudGx5IHRo
ZXJlIGlzIGEgQ0FDRkxheWVyVHJlZUhvc3QgZm9yIGVhY2ggV2ViVmlldyBhbmQgZWFjaAotLy8g
aGFzIGl0cyBvd24gQ0FSZW5kZXJPR0xDb250ZXh0IGFuZCBEaXJlY3QzRERldmljZTksIHdoaWNo
IGlzIGluZWZmaWNpZW50LgotLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMTg1NSkKIGNsYXNzIENBQ0ZMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8
Q0FDRkxheWVyVHJlZUhvc3Q+IHsKICAgICBmcmllbmQgUGxhdGZvcm1DQUxheWVyOwogCiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0FDRkxheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpOwot
ICAgIH5DQUNGTGF5ZXJUcmVlSG9zdCgpOworICAgIHZpcnR1YWwgfkNBQ0ZMYXllclRyZWVIb3N0
KCk7CiAKICAgICBzdGF0aWMgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCk7
CiAKICAgICB2b2lkIHNldENsaWVudChDQUNGTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KSB7
IG1fY2xpZW50ID0gY2xpZW50OyB9CiAKICAgICB2b2lkIHNldFJvb3RDaGlsZExheWVyKFBsYXRm
b3JtQ0FMYXllciopOwotICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CiAgICAgdm9pZCBz
ZXRXaW5kb3coSFdORCk7Ci0gICAgdm9pZCBwYWludCgpOwotICAgIHZvaWQgcmVzaXplKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZSgpID0gMDsK
ICAgICB2b2lkIGZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2VzU29vbigpOwogICAgIHZv
aWQgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzTm93KCk7CiAKIHByb3RlY3RlZDoKLSAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0FuaW1h
dGVkTGF5ZXIoUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+KTsKLQotcHJpdmF0ZToKICAgICBD
QUNGTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgYm9vbCBjcmVhdGVSZW5kZXJlcigpOwotICAgIHZv
aWQgZGVzdHJveVJlbmRlcmVyKCk7Ci0gICAgdm9pZCByZW5kZXJTb29uKCk7Ci0gICAgdm9pZCBy
ZW5kZXJUaW1lckZpcmVkKFRpbWVyPENBQ0ZMYXllclRyZWVIb3N0PiopOwotICAgIHZvaWQgbm90
aWZ5QW5pbWF0aW9uc1N0YXJ0ZWQoKTsKLQogICAgIENHUmVjdCBib3VuZHMoKSBjb25zdDsKKyAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0OworICAgIEhXTkQgd2luZG93KCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0KKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvbnNTdGFy
dGVkKCk7CiAKLSAgICB2b2lkIGluaXREM0RHZW9tZXRyeSgpOworICAgIHZpcnR1YWwgYm9vbCBj
cmVhdGVSZW5kZXJlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVJlbmRlcmVyKCk7
CiAKLSAgICAvLyBDYWxsIHRoaXMgd2hlbiB0aGUgZGV2aWNlIHdpbmRvdyBoYXMgY2hhbmdlZCBz
aXplIG9yIHdoZW4gSURpcmVjdDNERGV2aWNlOTo6UHJlc2VudCByZXR1cm5zCi0gICAgLy8gRDNE
RVJSX0RFVklDRUxPU1QuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHdhcyByZWNvdmVyZWQs
IGZhbHNlIGlmIHJlbmRlcmluZyBtdXN0IGJlCi0gICAgLy8gYWJvcnRlZCBhbmQgcmVhdHRlbXB0
ZWQgc29vbi4KLSAgICBlbnVtIFJlc2V0UmVhc29uIHsgQ2hhbmdlZFdpbmRvd1NpemUsIExvc3RE
ZXZpY2UgfTsKLSAgICBib29sIHJlc2V0RGV2aWNlKFJlc2V0UmVhc29uKTsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBhZGRQZW5kaW5nQW5pbWF0ZWRMYXllcihQ
YXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4pOworICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdl
KCk7CiAKLSAgICB2b2lkIHJlbmRlcihjb25zdCBWZWN0b3I8Q0dSZWN0PiYgZGlydHlSZWN0cyA9
IFZlY3RvcjxDR1JlY3Q+KCkpOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7
CisgICAgdmlydHVhbCBDRlRpbWVJbnRlcnZhbCBsYXN0Q29tbWl0VGltZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKGNvbnN0IFZlY3RvcjxDR1JlY3Q+JiBkaXJ0eVJlY3Rz
ID0gVmVjdG9yPENHUmVjdD4oKSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ29u
dGV4dCh2b2lkKiB1c2VyRGF0YSwgUGxhdGZvcm1DQUxheWVyKikgPSAwOwogCiAgICAgQ0FDRkxh
eWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OwotICAgIGJvb2wgbV9taWdodEJlQWJsZVRvQ3Jl
YXRlRGV2aWNlTGF0ZXI7Ci0gICAgQ09NUHRyPElEaXJlY3QzRERldmljZTk+IG1fZDNkRGV2aWNl
OwogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIFJlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IG1fcm9vdENoaWxkTGF5ZXI7Ci0gICAgV0tDQUNGQ29udGV4dCogbV9j
b250ZXh0OwogICAgIEhXTkQgbV93aW5kb3c7Ci0gICAgVGltZXI8Q0FDRkxheWVyVHJlZUhvc3Q+
IG1fcmVuZGVyVGltZXI7Ci0gICAgYm9vbCBtX211c3RSZXNldExvc3REZXZpY2VCZWZvcmVSZW5k
ZXJpbmc7CiAgICAgYm9vbCBtX3Nob3VsZEZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2Vz
OwogICAgIGJvb2wgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOwogICAgIEhhc2hTZXQ8UmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4gPiBtX3BlbmRpbmdBbmltYXRlZExheWVyczsKIAotI2lmbmRlZiBO
REVCVUcKLSAgICBib29sIG1fcHJpbnRUcmVlOwotI2VuZGlmCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIGVudW0geyBXaW5kb3dOb3RTZXQsIFdpbmRvd1NldCwgV2luZG93Q2xlYXJlZCB9IG1f
c3RhdGU7CiAjZW5kaWYK
</data>
<flag name="review"
          id="71836"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80359</attachid>
            <date>2011-01-27 13:19:49 -0800</date>
            <delta_ts>2011-01-27 13:30:58 -0800</delta_ts>
            <desc>Move LegacyCACFLayerTreeHost into its own files</desc>
            <filename>bug-53251-20110127131947.patch</filename>
            <type>text/plain</type>
            <size>34062</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZWI3NDM0ZjY3NWRhZmVkNjA1NWQ0OWY5NTg2NmZjOTM2OGIxZjI5Li5h
ODE1YjRlOTUxYjBkZDVlYjExZjMyNjAyZDJhZGVkOTgzNDIxMzFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMjAgQEAKIDIwMTEtMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CisgICAgICAgIE1vdmUgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QgaW50byBpdHMgb3duIGZpbGVz
CisKKyAgICAgICAgTW9yZSBwcmVwYXJhdGlvbiBmb3IgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTMy
NTE+IDxyZGFyOi8vcHJvYmxlbS84OTI1NDk2PiBDQUNGTGF5ZXJUcmVlSG9zdAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6IEFkZGVkIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LntjcHAsaH0uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3Bw
OiBNb3ZlZCBjb2RlIGZyb20gaGVyZSB0byBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Qu
aDogQWRkZWQuCisKKzIwMTEtMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgor
CiAgICAgICAgIFNwbGl0IENBQ0ZMYXllclRyZWVIb3N0IGludG8gYmFzZSBhbmQgZGVyaXZlZCBj
bGFzc2VzCiAKICAgICAgICAgVGhlIGRlcml2ZWQgY2xhc3MsIExlZ2FjeUNBQ0ZMYXllclRyZWVI
b3N0LCBjb250YWlucyBhbGwgdGhlIEQzRC1yZWxhdGVkIGNvZGUuIEEgbGF0ZXIgcGF0Y2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTFjZjRj
Njk3YTQ2OWQ0MWU4NWE0NzBlYTM4ZWNmYmM2N2JlMmY3ZC4uYzFkYzQ2NzFlZTI0ZTI3NTIwY2Zm
Y2ZlMzBjNzkzM2Q1M2E1MjdiMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTI4OTQzLDYgKzI4OTQzLDE0IEBACiAJCQkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KIAkJCQkJCTwvRmlsZT4KIAkJCQkJCTxGaWxlCisJCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Qu
Y3BwIgorCQkJCQkJCT4KKwkJCQkJCTwvRmlsZT4KKwkJCQkJCTxGaWxlCisJCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cTGVnYWN5Q0FDRkxheWVyVHJlZUhv
c3QuaCIKKwkJCQkJCQk+CisJCQkJCQk8L0ZpbGU+CisJCQkJCQk8RmlsZQogCQkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFBsYXRmb3JtQ0FBbmltYXRpb25X
aW4uY3BwIgogCQkJCQkJCT4KIAkJCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IGFlNWY3NDI5M2Q2YTRiNjg5NmMzZDIwODhkMjQ2NDA1NWY5NmEwMTIuLjM2MzNlMDE2
MTg0NzkxYTRhYmEyNjg4ZTJkNDhiODJmMDA2MGI0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0
LmNwcApAQCAtMzAsNDggKzMwLDE5IEBACiAKICNpbmNsdWRlICJDQUNGTGF5ZXJUcmVlSG9zdENs
aWVudC5oIgogI2luY2x1ZGUgIkxheWVyQ2hhbmdlc0ZsdXNoZXIuaCIKKyNpbmNsdWRlICJMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAot
I2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRDNEX0RFQlVHX0lORk8KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8ZDNkOS5oPgotI2luY2x1ZGUgPGQzZHg5Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LSNwcmFnbWEgY29tbWVudChsaWIsICJkM2Q5IikKLSNwcmFnbWEgY29tbWVudChsaWIsICJkM2R4
OSIpCiAjaWZkZWYgREVCVUdfQUxMCiAjcHJhZ21hIGNvbW1lbnQobGliLCAiUXVhcnR6Q29yZV9k
ZWJ1ZyIpCiAjZWxzZQogI3ByYWdtYSBjb21tZW50KGxpYiwgIlF1YXJ0ekNvcmUiKQogI2VuZGlm
CiAKLXN0YXRpYyBJRGlyZWN0M0Q5KiBzX2QzZCA9IDA7Ci1zdGF0aWMgSURpcmVjdDNEOSogZDNk
KCkKLXsKLSAgICBpZiAoc19kM2QpCi0gICAgICAgIHJldHVybiBzX2QzZDsKLQotICAgIGlmICgh
TG9hZExpYnJhcnkoVEVYVCgiZDNkOS5kbGwiKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
c19kM2QgPSBEaXJlY3QzRENyZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKLQotICAgIHJldHVybiBz
X2QzZDsKLX0KLQogaW5saW5lIHN0YXRpYyBDR1JlY3Qgd2luUmVjdFRvQ0dSZWN0KFJFQ1QgcmMp
CiB7CiAgICAgcmV0dXJuIENHUmVjdE1ha2UocmMubGVmdCwgcmMudG9wLCAocmMucmlnaHQgLSBy
Yy5sZWZ0KSwgKHJjLmJvdHRvbSAtIHJjLnRvcCkpOwpAQCAtODQsNDAgKzU1LDYgQEAgaW5saW5l
IHN0YXRpYyBDR1JlY3Qgd2luUmVjdFRvQ0dSZWN0KFJFQ1QgcmMsIFJFQ1QgcmVsYXRpdmVUb1Jl
Y3QpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEQzRFBSRVNFTlRfUEFSQU1FVEVS
UyBpbml0aWFsUHJlc2VudGF0aW9uUGFyYW1ldGVycygpCi17Ci0gICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHBhcmFtZXRlcnMgPSB7MH07Ci0gICAgcGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7
Ci0gICAgcGFyYW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9DT1BZOwotICAgIHBh
cmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICBwYXJhbWV0ZXJzLkJhY2tCdWZmZXJG
b3JtYXQgPSBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgcGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUg
PSBEM0RNVUxUSVNBTVBMRV9OT05FOwotCi0gICAgcmV0dXJuIHBhcmFtZXRlcnM7Ci19Ci0KLS8v
IEZJWE1FOiA8cmRhcjovLzY1MDc4NTE+IFNoYXJlIHRoaXMgY29kZSB3aXRoIENvcmVBbmltYXRp
b24uCi1zdGF0aWMgYm9vbCBoYXJkd2FyZUNhcGFiaWxpdGllc0luZGljYXRlQ29yZUFuaW1hdGlv
blN1cHBvcnQoY29uc3QgRDNEQ0FQUzkmIGNhcHMpCi17Ci0gICAgLy8gQ29yZUFuaW1hdGlvbiBu
ZWVkcyB0d28gb3IgbW9yZSB0ZXh0dXJlIHVuaXRzLgotICAgIGlmIChjYXBzLk1heFRleHR1cmVC
bGVuZFN0YWdlcyA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENvcmVBbmlt
YXRpb24gbmVlZHMgbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcy4KLSAgICBpZiAoKGNhcHMuVGV4
dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfUE9XMikgJiYgIShjYXBzLlRleHR1cmVDYXBzICYg
RDNEUFRFWFRVUkVDQVBTX05PTlBPVzJDT05ESVRJT05BTCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIENvcmVBbmltYXRpb24gbmVlZHMgdmVydGV4IHNoYWRlciAyLjAgb3IgZ3Jl
YXRlci4KLSAgICBpZiAoRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IoY2Fwcy5WZXJ0ZXhTaGFkZXJW
ZXJzaW9uKSA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENvcmVBbmltYXRp
b24gbmVlZHMgcGl4ZWwgc2hhZGVyIDIuMCBvciBncmVhdGVyLgotICAgIGlmIChEM0RTSEFERVJf
VkVSU0lPTl9NQUpPUihjYXBzLlBpeGVsU2hhZGVyVmVyc2lvbikgPCAyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBDQUNGTGF5ZXJUcmVlSG9z
dDo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0F2YWlsYWJsZSgpCiB7CiAgICAgc3RhdGljIGJvb2wg
YXZhaWxhYmxlOwpAQCAtMTc1LDUzICsxMTIsNiBAQCBib29sIENBQ0ZMYXllclRyZWVIb3N0Ojph
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gYXZhaWxhYmxlOwog
fQogCi0vLyBGSVhNRTogQ3VycmVudGx5IHRoZXJlIGlzIGEgTGVnYWN5Q0FDRkxheWVyVHJlZUhv
c3QgZm9yIGVhY2ggV2ViVmlldyBhbmQgZWFjaAotLy8gaGFzIGl0cyBvd24gV0tDQUNGQ29udGV4
dCBhbmQgRGlyZWN0M0REZXZpY2U5LCB3aGljaCBpcyBpbmVmZmljaWVudC4KLS8vIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NTUpCi1jbGFzcyBMZWdhY3lDQUNG
TGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQUNGTGF5ZXJUcmVlSG9zdCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpOwotICAg
IHZpcnR1YWwgfkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KCk7Ci0KLXByaXZhdGU6Ci0gICAgTGVn
YWN5Q0FDRkxheWVyVHJlZUhvc3QoKTsKLQotICAgIHZvaWQgaW5pdEQzREdlb21ldHJ5KCk7Ci0K
LSAgICAvLyBDYWxsIHRoaXMgd2hlbiB0aGUgZGV2aWNlIHdpbmRvdyBoYXMgY2hhbmdlZCBzaXpl
IG9yIHdoZW4gSURpcmVjdDNERGV2aWNlOTo6UHJlc2VudCByZXR1cm5zCi0gICAgLy8gRDNERVJS
X0RFVklDRUxPU1QuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHdhcyByZWNvdmVyZWQsIGZh
bHNlIGlmIHJlbmRlcmluZyBtdXN0IGJlCi0gICAgLy8gYWJvcnRlZCBhbmQgcmVhdHRlbXB0ZWQg
c29vbi4KLSAgICBlbnVtIFJlc2V0UmVhc29uIHsgQ2hhbmdlZFdpbmRvd1NpemUsIExvc3REZXZp
Y2UgfTsKLSAgICBib29sIHJlc2V0RGV2aWNlKFJlc2V0UmVhc29uKTsKLQotICAgIHZvaWQgcmVu
ZGVyU29vbigpOwotICAgIHZvaWQgcmVuZGVyVGltZXJGaXJlZChUaW1lcjxMZWdhY3lDQUNGTGF5
ZXJUcmVlSG9zdD4qKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ29udGV4dCh2b2lk
KiB1c2VyRGF0YSwgUGxhdGZvcm1DQUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2l6ZSgp
OwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVSZW5kZXJlcigpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95UmVuZGVyZXIoKTsKLSAgICB2aXJ0dWFsIENGVGltZUludGVydmFsIGxhc3RDb21taXRU
aW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3QgVmVjdG9yPENH
UmVjdD4mIGRpcnR5UmVjdHMgPSBWZWN0b3I8Q0dSZWN0PigpKTsKLQotICAgIGJvb2wgbV9taWdo
dEJlQWJsZVRvQ3JlYXRlRGV2aWNlTGF0ZXI7Ci0gICAgQ09NUHRyPElEaXJlY3QzRERldmljZTk+
IG1fZDNkRGV2aWNlOwotICAgIFdLQ0FDRkNvbnRleHQqIG1fY29udGV4dDsKLSAgICBUaW1lcjxM
ZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdD4gbV9yZW5kZXJUaW1lcjsKLSAgICBib29sIG1fbXVzdFJl
c2V0TG9zdERldmljZUJlZm9yZVJlbmRlcmluZzsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBib29s
IG1fcHJpbnRUcmVlOwotI2VuZGlmCi19OwotCi1QYXNzUmVmUHRyPExlZ2FjeUNBQ0ZMYXllclRy
ZWVIb3N0PiBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KTsKLX0KLQogUGFzc1JlZlB0cjxD
QUNGTGF5ZXJUcmVlSG9zdD4gQ0FDRkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpCiB7CiAgICAgaWYg
KCFhY2NlbGVyYXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKCkpCkBAIC0yMzEsMTggKzEyMSw2IEBA
IFBhc3NSZWZQdHI8Q0FDRkxheWVyVHJlZUhvc3Q+IENBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGUo
KQogICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKIH0KIAotTGVnYWN5Q0FDRkxheWVyVHJlZUhv
c3Q6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KCkKLSAgICA6IG1fbWlnaHRCZUFibGVUb0NyZWF0
ZURldmljZUxhdGVyKHRydWUpCi0gICAgLCBtX2NvbnRleHQod2tDQUNGQ29udGV4dENyZWF0ZSgp
KQotICAgICwgbV9yZW5kZXJUaW1lcih0aGlzLCAmTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJl
bmRlclRpbWVyRmlyZWQpCi0gICAgLCBtX211c3RSZXNldExvc3REZXZpY2VCZWZvcmVSZW5kZXJp
bmcoZmFsc2UpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNoYXIqIHByaW50VHJlZUZsYWcgPSBn
ZXRlbnYoIkNBX1BSSU5UX1RSRUUiKTsKLSAgICBtX3ByaW50VHJlZSA9IHByaW50VHJlZUZsYWcg
JiYgYXRvaShwcmludFRyZWVGbGFnKTsKLSNlbmRpZgotfQotCiBDQUNGTGF5ZXJUcmVlSG9zdDo6
Q0FDRkxheWVyVHJlZUhvc3QoKQogICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1fcm9vdExheWVy
KFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExh
eWVyLCAwKSkKQEAgLTI1NSwxMiArMTMzLDYgQEAgQ0FDRkxheWVyVHJlZUhvc3Q6OkNBQ0ZMYXll
clRyZWVIb3N0KCkKIHsKIH0KIAotdm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZUNvbnRleHQodm9pZCogdXNlckRhdGEsIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCi17Ci0g
ICAgd2tDQUNGQ29udGV4dFNldFVzZXJEYXRhKG1fY29udGV4dCwgdXNlckRhdGEpOwotICAgIHdr
Q0FDRkNvbnRleHRTZXRMYXllcihtX2NvbnRleHQsIGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwot
fQotCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKICAgICAvLyBQb2lu
dCB0aGUgQ0FDRkNvbnRleHQgdG8gdGhpcwpAQCAtMjg2LDExICsxNTgsNiBAQCB2b2lkIENBQ0ZM
YXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICNlbmRpZgogfQogCi1MZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdDo6fkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0KCkKLXsKLSAgICB3a0NBQ0ZDb250ZXh0
RGVzdHJveShtX2NvbnRleHQpOwotfQotCiBDQUNGTGF5ZXJUcmVlSG9zdDo6fkNBQ0ZMYXllclRy
ZWVIb3N0KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gV2luZG93U2V0
LCAiTXVzdCBjYWxsIHNldFdpbmRvdygwKSBiZWZvcmUgZGVzdHJveWluZyBDQUNGTGF5ZXJUcmVl
SG9zdCIpOwpAQCAtMzU4LDk1ICsyMjUsNiBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpsYXll
clRyZWVEaWRDaGFuZ2UoKQogICAgIExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNoYXJlZCgpLmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhpcyk7CiB9CiAKLWJvb2wgTGVnYWN5Q0FDRkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZVJlbmRlcmVyKCkKLXsKLSAgICBpZiAobV9kM2REZXZpY2UgfHwgIW1f
bWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKQotICAgICAgICByZXR1cm4gbV9kM2REZXZp
Y2U7Ci0KLSAgICBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlciA9IGZhbHNlOwotICAg
IEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwYXJhbWV0ZXJzID0gaW5pdGlhbFByZXNlbnRhdGlvblBh
cmFtZXRlcnMoKTsKLQotICAgIGlmICghZDNkKCkgfHwgITo6SXNXaW5kb3cod2luZG93KCkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEM0QgZG9lc24ndCBsaWtlIHRvIG1ha2Ug
YmFjayBidWZmZXJzIGZvciAwIHNpemUgd2luZG93cy4gV2Ugc2tpcnQgdGhpcyBwcm9ibGVtIGlm
IHdlIG1ha2UgdGhlCi0gICAgLy8gcGFzc2VkIGJhY2tidWZmZXIgd2lkdGggYW5kIGhlaWdodCBu
b24temVyby4gVGhlIHdpbmRvdyB3aWxsIG5lY2Vzc2FyaWx5IGdldCBzZXQgdG8gYSBub24temVy
bwotICAgIC8vIHNpemUgZXZlbnR1YWxseSwgYW5kIHRoZW4gdGhlIGJhY2tidWZmZXIgc2l6ZSB3
aWxsIGdldCByZXNldC4KLSAgICBSRUNUIHJlY3Q7Ci0gICAgR2V0Q2xpZW50UmVjdCh3aW5kb3co
KSwgJnJlY3QpOwotCi0gICAgaWYgKHJlY3QubGVmdC1yZWN0LnJpZ2h0ID09IDAgfHwgcmVjdC5i
b3R0b20tcmVjdC50b3AgPT0gMCkgewotICAgICAgICBwYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0
aCA9IDE7Ci0gICAgICAgIHBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7Ci0gICAgfQot
Ci0gICAgRDNEQ0FQUzkgZDNkQ2FwczsKLSAgICBpZiAoRkFJTEVEKGQzZCgpLT5HZXREZXZpY2VD
YXBzKEQzREFEQVBURVJfREVGQVVMVCwgRDNEREVWVFlQRV9IQUwsICZkM2RDYXBzKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVf
RlBVX1BSRVNFUlZFOwotICAgIGlmICgoZDNkQ2Fwcy5EZXZDYXBzICYgRDNEREVWQ0FQU19IV1RS
QU5TRk9STUFORExJR0hUKSAmJiBkM2RDYXBzLlZlcnRleFByb2Nlc3NpbmdDYXBzKQotICAgICAg
ICBiZWhhdmlvckZsYWdzIHw9IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HOwot
ICAgIGVsc2UKLSAgICAgICAgYmVoYXZpb3JGbGFncyB8PSBEM0RDUkVBVEVfU09GVFdBUkVfVkVS
VEVYUFJPQ0VTU0lORzsKLQotICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5PiBkZXZpY2U7Ci0g
ICAgaWYgKEZBSUxFRChkM2QoKS0+Q3JlYXRlRGV2aWNlKEQzREFEQVBURVJfREVGQVVMVCwgRDNE
REVWVFlQRV9IQUwsIHdpbmRvdygpLCBiZWhhdmlvckZsYWdzLCAmcGFyYW1ldGVycywgJmRldmlj
ZSkpKSB7Ci0gICAgICAgIC8vIEluIGNlcnRhaW4gc2l0dWF0aW9ucyAoZS5nLiwgc2hvcnRseSBh
ZnRlciB3YWtpbmcgZnJvbSBzbGVlcCksIERpcmVjdDNEQ3JlYXRlOSgpIHdpbGwKLSAgICAgICAg
Ly8gcmV0dXJuIGFuIElEaXJlY3QzRDkgZm9yIHdoaWNoIElEaXJlY3QzRDk6OkNyZWF0ZURldmlj
ZSB3aWxsIGFsd2F5cyBmYWlsLiBJbiBjYXNlIHdlCi0gICAgICAgIC8vIGhhdmUgb25lIG9mIHRo
ZXNlIGJhZCBJRGlyZWN0M0Q5cywgZ2V0IHJpZCBvZiBpdCBzbyB3ZSdsbCBmZXRjaCBhIG5ldyBv
bmUgdGhlIG5leHQgdGltZQotICAgICAgICAvLyB3ZSB3YW50IHRvIGNhbGwgQ3JlYXRlRGV2aWNl
LgotICAgICAgICBzX2QzZC0+UmVsZWFzZSgpOwotICAgICAgICBzX2QzZCA9IDA7Ci0KLSAgICAg
ICAgLy8gRXZlbiBpZiB3ZSBkb24ndCBoYXZlIGEgYmFkIElEaXJlY3QzRDksIGluIGNlcnRhaW4g
c2l0dWF0aW9ucyAoZS5nLiwgc2hvcnRseSBhZnRlcgotICAgICAgICAvLyB3YWtpbmcgZnJvbSBz
bGVlcCksIENyZWF0ZURldmljZSB3aWxsIGZhaWwsIGJ1dCB3aWxsIGxhdGVyIHN1Y2NlZWQgaWYg
Y2FsbGVkIGFnYWluLgotICAgICAgICBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlciA9
IHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0
IHdlJ3ZlIGNyZWF0ZWQgdGhlIElEaXJlY3QzRERldmljZTkgYmFzZWQgb24gdGhlIGNhcGFiaWxp
dGllcyB3ZQotICAgIC8vIGdvdCBmcm9tIHRoZSBJRGlyZWN0M0Q5IGdsb2JhbCBvYmplY3QsIHdl
IHJlcXVlcnkgdGhlIGRldmljZSBmb3IgaXRzCi0gICAgLy8gYWN0dWFsIGNhcGFiaWxpdGllcy4g
VGhlIGNhcGFiaWxpdGllcyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIGNhbgotICAgIC8vIHNvbWV0
aW1lcyBiZSBtb3JlIGNvbXBsZXRlLCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIHNvZnR3YXJlIHZl
cnRleAotICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgRDNEQ0FQUzkgZGV2aWNlQ2FwczsKLSAgICBp
ZiAoRkFJTEVEKGRldmljZS0+R2V0RGV2aWNlQ2FwcygmZGV2aWNlQ2FwcykpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWhhcmR3YXJlQ2FwYWJpbGl0aWVzSW5kaWNhdGVDb3Jl
QW5pbWF0aW9uU3VwcG9ydChkZXZpY2VDYXBzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9kM2REZXZpY2UgPSBkZXZpY2U7Ci0KLSAgICBpbml0RDNER2VvbWV0cnkoKTsKLQotICAg
IHdrQ0FDRkNvbnRleHRTZXREM0REZXZpY2UobV9jb250ZXh0LCBtX2QzZERldmljZS5nZXQoKSk7
Ci0KLSAgICBpZiAoSXNXaW5kb3cod2luZG93KCkpKSB7Ci0gICAgICAgIHJvb3RMYXllcigpLT5z
ZXRCb3VuZHMoYm91bmRzKCkpOwotICAgICAgICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCkKLXsKLSAgICB3a0NBQ0ZDb250ZXh0U2V0TGF5ZXIo
bV9jb250ZXh0LCAwKTsKLQotICAgIHdrQ0FDRkNvbnRleHRTZXREM0REZXZpY2UobV9jb250ZXh0
LCAwKTsKLSAgICBtX2QzZERldmljZSA9IDA7Ci0gICAgaWYgKHNfZDNkKQotICAgICAgICBzX2Qz
ZC0+UmVsZWFzZSgpOwotCi0gICAgc19kM2QgPSAwOwotICAgIG1fbWlnaHRCZUFibGVUb0NyZWF0
ZURldmljZUxhdGVyID0gdHJ1ZTsKLQotICAgIENBQ0ZMYXllclRyZWVIb3N0OjpkZXN0cm95UmVu
ZGVyZXIoKTsKLX0KLQogdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCkK
IHsKICAgICBtX3Jvb3RMYXllciA9IDA7CkBAIC00NTQsMjEgKzIzMiw2IEBAIHZvaWQgQ0FDRkxh
eWVyVHJlZUhvc3Q6OmRlc3Ryb3lSZW5kZXJlcigpCiAgICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6
c2hhcmVkKCkuY2FuY2VsUGVuZGluZ0ZsdXNoKHRoaXMpOwogfQogCi12b2lkIExlZ2FjeUNBQ0ZM
YXllclRyZWVIb3N0OjpyZXNpemUoKQotewotICAgIGlmICghbV9kM2REZXZpY2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFJlc2V0dGluZyB0aGUgZGV2aWNlIG1pZ2h0IGZhaWwgaGVyZS4g
QnV0IHRoYXQncyBPSywgYmVjYXVzZSBpZiBpdCBkb2VzIGl0IHdlIHdpbGwgYXR0ZW1wdCB0bwot
ICAgIC8vIHJlc2V0IHRoZSBkZXZpY2UgdGhlIG5leHQgdGltZSB3ZSB0cnkgdG8gcmVuZGVyLgot
ICAgIHJlc2V0RGV2aWNlKENoYW5nZWRXaW5kb3dTaXplKTsKLQotICAgIGlmIChyb290TGF5ZXIo
KSkgewotICAgICAgICByb290TGF5ZXIoKS0+c2V0Qm91bmRzKGJvdW5kcygpKTsKLSAgICAgICAg
d2tDQUNGQ29udGV4dEZsdXNoKG1fY29udGV4dCk7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBn
ZXREaXJ0eVJlY3RzKEhXTkQgd2luZG93LCBWZWN0b3I8Q0dSZWN0PiYgb3V0UmVjdHMpCiB7CiAg
ICAgQVNTRVJUX0FSRyhvdXRSZWN0cywgb3V0UmVjdHMuaXNFbXB0eSgpKTsKQEAgLTQ5OSwyMyAr
MjYyLDYgQEAgc3RhdGljIHZvaWQgZ2V0RGlydHlSZWN0cyhIV05EIHdpbmRvdywgVmVjdG9yPENH
UmVjdD4mIG91dFJlY3RzKQogICAgICAgICBvdXRSZWN0c1tpXSA9IHdpblJlY3RUb0NHUmVjdCgq
cmVjdCwgY2xpZW50UmVjdCk7CiB9CiAKLXZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJl
bmRlclRpbWVyRmlyZWQoVGltZXI8TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q+KikKLXsKLSAgICBw
YWludCgpOwotfQotCi12b2lkIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpwYWludCgpCi17Ci0g
ICAgY3JlYXRlUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1fZDNkRGV2aWNlKSB7Ci0gICAgICAgIGlm
IChtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlcikKLSAgICAgICAgICAgIHJlbmRlclNv
b24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENBQ0ZMYXllclRyZWVIb3N0Ojpw
YWludCgpOwotfQotCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpwYWludCgpCiB7CiAgICAgVmVj
dG9yPENHUmVjdD4gZGlydHlSZWN0czsKQEAgLTUyMyw4NyArMjY5LDYgQEAgdm9pZCBDQUNGTGF5
ZXJUcmVlSG9zdDo6cGFpbnQoKQogICAgIHJlbmRlcihkaXJ0eVJlY3RzKTsKIH0KIAotdm9pZCBM
ZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyKGNvbnN0IFZlY3RvcjxDR1JlY3Q+JiB3aW5k
b3dEaXJ0eVJlY3RzKQotewotICAgIEFTU0VSVChtX2QzZERldmljZSk7Ci0KLSAgICBpZiAobV9t
dXN0UmVzZXRMb3N0RGV2aWNlQmVmb3JlUmVuZGVyaW5nICYmICFyZXNldERldmljZShMb3N0RGV2
aWNlKSkgewotICAgICAgICAvLyBXZSBjYW4ndCByZXNldCB0aGUgZGV2aWNlIHJpZ2h0IG5vdy4g
VHJ5IGFnYWluIHNvb24uCi0gICAgICAgIHJlbmRlclNvb24oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIENHUmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKLQotICAgIC8vIEdp
dmUgdGhlIHJlbmRlcmVyIHNvbWUgc3BhY2UgdG8gdXNlLiBUaGlzIG5lZWRzIHRvIGJlIHZhbGlk
IHVudGlsIHRoZQotICAgIC8vIHdrQ0FDRkNvbnRleHRGaW5pc2hVcGRhdGUoKSBjYWxsIGJlbG93
LgotICAgIGNoYXIgc3BhY2VbNDA5Nl07Ci0gICAgaWYgKCF3a0NBQ0ZDb250ZXh0QmVnaW5VcGRh
dGUobV9jb250ZXh0LCBzcGFjZSwgc2l6ZW9mKHNwYWNlKSwgQ0FDdXJyZW50TWVkaWFUaW1lKCks
IGJvdW5kcywgd2luZG93RGlydHlSZWN0cy5kYXRhKCksIHdpbmRvd0RpcnR5UmVjdHMuc2l6ZSgp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFJFU1VMVCBlcnIgPSBTX09LOwotICAgIENGVGlt
ZUludGVydmFsIHRpbWVUb05leHRSZW5kZXIgPSBudW1lcmljX2xpbWl0czxDRlRpbWVJbnRlcnZh
bD46OmluZmluaXR5KCk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIC8vIEZJWE1FOiBkb24ndCBuZWVk
IHRvIGNsZWFyIGRpcnR5IHJlZ2lvbiBpZiBsYXllciB0cmVlIGlzIG9wYXF1ZS4KLQotICAgICAg
ICBXS0NBQ0ZVcGRhdGVSZWN0RW51bWVyYXRvciogZSA9IHdrQ0FDRkNvbnRleHRDb3B5VXBkYXRl
UmVjdEVudW1lcmF0b3IobV9jb250ZXh0KTsKLSAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPEQzRFJFQ1QsIDY0PiByZWN0czsKLSAgICAgICAgZm9y
IChjb25zdCBDR1JlY3QqIHIgPSB3a0NBQ0ZVcGRhdGVSZWN0RW51bWVyYXRvck5leHRSZWN0KGUp
OyByOyByID0gd2tDQUNGVXBkYXRlUmVjdEVudW1lcmF0b3JOZXh0UmVjdChlKSkgewotICAgICAg
ICAgICAgRDNEUkVDVCByZWN0OwotICAgICAgICAgICAgcmVjdC54MSA9IHItPm9yaWdpbi54Owot
ICAgICAgICAgICAgcmVjdC54MiA9IHJlY3QueDEgKyByLT5zaXplLndpZHRoOwotICAgICAgICAg
ICAgcmVjdC55MSA9IGJvdW5kcy5vcmlnaW4ueSArIGJvdW5kcy5zaXplLmhlaWdodCAtIChyLT5v
cmlnaW4ueSArIHItPnNpemUuaGVpZ2h0KTsKLSAgICAgICAgICAgIHJlY3QueTIgPSByZWN0Lnkx
ICsgci0+c2l6ZS5oZWlnaHQ7Ci0KLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLSAg
ICAgICAgfQotICAgICAgICB3a0NBQ0ZVcGRhdGVSZWN0RW51bWVyYXRvclJlbGVhc2UoZSk7Ci0K
LSAgICAgICAgdGltZVRvTmV4dFJlbmRlciA9IHdrQ0FDRkNvbnRleHRHZXROZXh0VXBkYXRlVGlt
ZShtX2NvbnRleHQpOwotCi0gICAgICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBtX2QzZERldmljZS0+Q2xlYXIocmVjdHMuc2l6ZSgpLCByZWN0
cy5kYXRhKCksIEQzRENMRUFSX1RBUkdFVCwgMCwgMS4wZiwgMCk7Ci0KLSAgICAgICAgbV9kM2RE
ZXZpY2UtPkJlZ2luU2NlbmUoKTsKLSAgICAgICAgd2tDQUNGQ29udGV4dFJlbmRlclVwZGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX2QzZERldmljZS0+RW5kU2NlbmUoKTsKLQotICAgICAgICBl
cnIgPSBtX2QzZERldmljZS0+UHJlc2VudCgwLCAwLCAwLCAwKTsKLQotICAgICAgICBpZiAoZXJy
ID09IEQzREVSUl9ERVZJQ0VMT1NUKSB7Ci0gICAgICAgICAgICB3a0NBQ0ZDb250ZXh0QWRkVXBk
YXRlUmVjdChtX2NvbnRleHQsIGJvdW5kcyk7Ci0gICAgICAgICAgICBpZiAoIXJlc2V0RGV2aWNl
KExvc3REZXZpY2UpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgcmVzZXQgdGhlIGRl
dmljZSByaWdodCBub3cuIFRyeSBhZ2FpbiBzb29uLgotICAgICAgICAgICAgICAgIHJlbmRlclNv
b24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IHdoaWxlIChlcnIgPT0gRDNERVJSX0RFVklDRUxPU1QpOwotCi0gICAgd2tDQUNGQ29u
dGV4dEZpbmlzaFVwZGF0ZShtX2NvbnRleHQpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGlmICht
X3ByaW50VHJlZSkKLSAgICAgICAgcm9vdExheWVyKCktPnByaW50VHJlZSgpOwotI2VuZGlmCi0K
LSAgICAvLyBJZiB0aW1lVG9OZXh0UmVuZGVyIGlzIG5vdCBpbmZpbml0eSwgaXQgbWVhbnMgYW5p
bWF0aW9ucyBhcmUgcnVubmluZywgc28gcXVldWUgdXAgdG8gcmVuZGVyIGFnYWluCi0gICAgaWYg
KHRpbWVUb05leHRSZW5kZXIgIT0gbnVtZXJpY19saW1pdHM8Q0ZUaW1lSW50ZXJ2YWw+OjppbmZp
bml0eSgpKQotICAgICAgICByZW5kZXJTb29uKCk7Ci19Ci0KLXZvaWQgTGVnYWN5Q0FDRkxheWVy
VHJlZUhvc3Q6OnJlbmRlclNvb24oKQotewotICAgIGlmICghbV9yZW5kZXJUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX3JlbmRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQogdm9pZCBD
QUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nR3JhcGhpY3NMYXllckNoYW5nZXNTb29uKCkK
IHsKICAgICBtX3Nob3VsZEZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2VzID0gdHJ1ZTsK
QEAgLTYzMywxNyArMjk4LDYgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzTm93KCkKICAgICBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMgPSBmYWxzZTsK
IH0KIAotdm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hDb250ZXh0KCkKLXsKLSAg
ICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0KTsKLSAgICByZW5kZXJTb29uKCk7Ci19Ci0K
LUNGVGltZUludGVydmFsIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpsYXN0Q29tbWl0VGltZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHdrQ0FDRkNvbnRleHRHZXRMYXN0Q29tbWl0VGltZShtX2Nv
bnRleHQpOwotfQotCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25zU3Rh
cnRlZCgpCiB7CiAgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwpA
QCAtNjY1LDYyICszMTksNiBAQCBDR1JlY3QgQ0FDRkxheWVyVHJlZUhvc3Q6OmJvdW5kcygpIGNv
bnN0CiAgICAgcmV0dXJuIHdpblJlY3RUb0NHUmVjdChjbGllbnRSZWN0KTsKIH0KIAotdm9pZCBM
ZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdEQzREdlb21ldHJ5KCkKLXsKLSAgICBBU1NFUlQo
bV9kM2REZXZpY2UpOwotCi0gICAgQ0dSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOwotCi0g
ICAgZmxvYXQgeDAgPSBib3VuZHMub3JpZ2luLng7Ci0gICAgZmxvYXQgeTAgPSBib3VuZHMub3Jp
Z2luLnk7Ci0gICAgZmxvYXQgeDEgPSB4MCArIGJvdW5kcy5zaXplLndpZHRoOwotICAgIGZsb2F0
IHkxID0geTAgKyBib3VuZHMuc2l6ZS5oZWlnaHQ7Ci0KLSAgICBEM0RYTUFUUklYQTE2IHByb2pl
Y3Rpb247Ci0gICAgRDNEWE1hdHJpeE9ydGhvT2ZmQ2VudGVyUkgoJnByb2plY3Rpb24sIHgwLCB4
MSwgeTAsIHkxLCAtMS4wZiwgMS4wZik7Ci0KLSAgICBtX2QzZERldmljZS0+U2V0VHJhbnNmb3Jt
KEQzRFRTX1BST0pFQ1RJT04sICZwcm9qZWN0aW9uKTsKLX0KLQotYm9vbCBMZWdhY3lDQUNGTGF5
ZXJUcmVlSG9zdDo6cmVzZXREZXZpY2UoUmVzZXRSZWFzb24gcmVhc29uKQotewotICAgIEFTU0VS
VChtX2QzZERldmljZSk7Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0KLSAgICBIUkVTVUxUIGhy
ID0gbV9kM2REZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCk7Ci0KLSAgICBpZiAoaHIgPT0g
RDNERVJSX0RFVklDRUxPU1QgfHwgaHIgPT0gRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IpIHsK
LSAgICAgICAgLy8gVGhlIGRldmljZSBjYW5ub3QgYmUgcmVzZXQgYXQgdGhpcyB0aW1lLiBUcnkg
YWdhaW4gc29vbi4KLSAgICAgICAgbV9tdXN0UmVzZXRMb3N0RGV2aWNlQmVmb3JlUmVuZGVyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fbXVzdFJlc2V0
TG9zdERldmljZUJlZm9yZVJlbmRlcmluZyA9IGZhbHNlOwotCi0gICAgaWYgKHJlYXNvbiA9PSBM
b3N0RGV2aWNlICYmIGhyID09IEQzRF9PSykgewotICAgICAgICAvLyBUaGUgZGV2aWNlIHdhc24n
dCBsb3N0IGFmdGVyIGFsbC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
V2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UuCi0KLSAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgdGhl
IGNvbnRleHQncyBEM0QgcmVzcm91Y2VzIHdoZW5ldmVyIHdlIHJlc2V0IHRoZSBJRGlyZWN0M0RE
ZXZpY2U5IGluIG9yZGVyIHRvCi0gICAgLy8gZGVzdHJveSBhbnkgRDNEUE9PTF9ERUZBVUxUIHJl
c291cmNlcyB0aGF0IENvcmUgQW5pbWF0aW9uIGhhcyBhbGxvY2F0ZWQgKGUuZy4sIHRleHR1cmVz
IHVzZWQKLSAgICAvLyBmb3IgbWFzayBsYXllcnMpLiBTZWUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS9iYjE3NDQyNSh2PVZTLjg1KS5hc3B4Pi4KLSAgICB3a0NBQ0ZD
b250ZXh0UmVsZWFzZUQzRFJlc291cmNlcyhtX2NvbnRleHQpOwotCi0gICAgRDNEUFJFU0VOVF9Q
QVJBTUVURVJTIHBhcmFtZXRlcnMgPSBpbml0aWFsUHJlc2VudGF0aW9uUGFyYW1ldGVycygpOwot
ICAgIGhyID0gbV9kM2REZXZpY2UtPlJlc2V0KCZwYXJhbWV0ZXJzKTsKLQotICAgIC8vIFRlc3RD
b29wZXJhdGl2ZUxldmVsIHRvbGQgdXMgdGhlIGRldmljZSBtYXkgYmUgcmVzZXQgbm93LCBzbyB3
ZSBzaG91bGQKLSAgICAvLyBub3QgYmUgdG9sZCBoZXJlIHRoYXQgdGhlIGRldmljZSBpcyBsb3N0
LgotICAgIEFTU0VSVChociAhPSBEM0RFUlJfREVWSUNFTE9TVCk7Ci0KLSAgICBpbml0RDNER2Vv
bWV0cnkoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiB9CiAKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMzU2MWUzY2VjY2U0MzQ4ODk2YzIzOTNlZDUwYzIwYmI4ZWMwZjc3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0xlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5o
IgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgRDNEX0RFQlVHX0lORk8KKyNlbmRpZgorCisj
aW5jbHVkZSA8ZDNkOS5oPgorI2luY2x1ZGUgPGQzZHg5Lmg+CisKKyNwcmFnbWEgY29tbWVudChs
aWIsICJkM2Q5IikKKyNwcmFnbWEgY29tbWVudChsaWIsICJkM2R4OSIpCisKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIElEaXJlY3QzRDkqIHNf
ZDNkID0gMDsKK3N0YXRpYyBJRGlyZWN0M0Q5KiBkM2QoKQoreworICAgIGlmIChzX2QzZCkKKyAg
ICAgICAgcmV0dXJuIHNfZDNkOworCisgICAgaWYgKCFMb2FkTGlicmFyeShURVhUKCJkM2Q5LmRs
bCIpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzX2QzZCA9IERpcmVjdDNEQ3JlYXRlOShE
M0RfU0RLX1ZFUlNJT04pOworCisgICAgcmV0dXJuIHNfZDNkOworfQorCitzdGF0aWMgRDNEUFJF
U0VOVF9QQVJBTUVURVJTIGluaXRpYWxQcmVzZW50YXRpb25QYXJhbWV0ZXJzKCkKK3sKKyAgICBE
M0RQUkVTRU5UX1BBUkFNRVRFUlMgcGFyYW1ldGVycyA9IHswfTsKKyAgICBwYXJhbWV0ZXJzLldp
bmRvd2VkID0gVFJVRTsKKyAgICBwYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNU
X0NPUFk7CisgICAgcGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAgIHBhcmFtZXRl
cnMuQmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9BOFI4RzhCODsKKyAgICBwYXJhbWV0ZXJzLk11
bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7CisKKyAgICByZXR1cm4gcGFyYW1l
dGVyczsKK30KKworLy8gRklYTUU6IDxyZGFyOi8vNjUwNzg1MT4gU2hhcmUgdGhpcyBjb2RlIHdp
dGggQ29yZUFuaW1hdGlvbi4KK3N0YXRpYyBib29sIGhhcmR3YXJlQ2FwYWJpbGl0aWVzSW5kaWNh
dGVDb3JlQW5pbWF0aW9uU3VwcG9ydChjb25zdCBEM0RDQVBTOSYgY2FwcykKK3sKKyAgICAvLyBD
b3JlQW5pbWF0aW9uIG5lZWRzIHR3byBvciBtb3JlIHRleHR1cmUgdW5pdHMuCisgICAgaWYgKGNh
cHMuTWF4VGV4dHVyZUJsZW5kU3RhZ2VzIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gQ29yZUFuaW1hdGlvbiBuZWVkcyBub24tcG93ZXItb2YtdHdvIHRleHR1cmVzLgorICAg
IGlmICgoY2Fwcy5UZXh0dXJlQ2FwcyAmIEQzRFBURVhUVVJFQ0FQU19QT1cyKSAmJiAhKGNhcHMu
VGV4dHVyZUNhcHMgJiBEM0RQVEVYVFVSRUNBUFNfTk9OUE9XMkNPTkRJVElPTkFMKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ29yZUFuaW1hdGlvbiBuZWVkcyB2ZXJ0ZXggc2hh
ZGVyIDIuMCBvciBncmVhdGVyLgorICAgIGlmIChEM0RTSEFERVJfVkVSU0lPTl9NQUpPUihjYXBz
LlZlcnRleFNoYWRlclZlcnNpb24pIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gQ29yZUFuaW1hdGlvbiBuZWVkcyBwaXhlbCBzaGFkZXIgMi4wIG9yIGdyZWF0ZXIuCisgICAg
aWYgKEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKGNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKSA8IDIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVm
UHRyPExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0PiBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0
KTsKK30KKworTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OkxlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0
KCkKKyAgICA6IG1fbWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKHRydWUpCisgICAgLCBt
X2NvbnRleHQod2tDQUNGQ29udGV4dENyZWF0ZSgpKQorICAgICwgbV9yZW5kZXJUaW1lcih0aGlz
LCAmTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJlbmRlclRpbWVyRmlyZWQpCisgICAgLCBtX211
c3RSZXNldExvc3REZXZpY2VCZWZvcmVSZW5kZXJpbmcoZmFsc2UpCit7CisjaWZuZGVmIE5ERUJV
RworICAgIGNoYXIqIHByaW50VHJlZUZsYWcgPSBnZXRlbnYoIkNBX1BSSU5UX1RSRUUiKTsKKyAg
ICBtX3ByaW50VHJlZSA9IHByaW50VHJlZUZsYWcgJiYgYXRvaShwcmludFRyZWVGbGFnKTsKKyNl
bmRpZgorfQorCitMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6fkxlZ2FjeUNBQ0ZMYXllclRyZWVI
b3N0KCkKK3sKKyAgICB3a0NBQ0ZDb250ZXh0RGVzdHJveShtX2NvbnRleHQpOworfQorCit2b2lk
IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0Ojppbml0aWFsaXplQ29udGV4dCh2b2lkKiB1c2VyRGF0
YSwgUGxhdGZvcm1DQUxheWVyKiBsYXllcikKK3sKKyAgICB3a0NBQ0ZDb250ZXh0U2V0VXNlckRh
dGEobV9jb250ZXh0LCB1c2VyRGF0YSk7CisgICAgd2tDQUNGQ29udGV4dFNldExheWVyKG1fY29u
dGV4dCwgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Cit9CisKK2Jvb2wgTGVnYWN5Q0FDRkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZVJlbmRlcmVyKCkKK3sKKyAgICBpZiAobV9kM2REZXZpY2UgfHwgIW1f
bWlnaHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKQorICAgICAgICByZXR1cm4gbV9kM2REZXZp
Y2U7CisKKyAgICBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlciA9IGZhbHNlOworICAg
IEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwYXJhbWV0ZXJzID0gaW5pdGlhbFByZXNlbnRhdGlvblBh
cmFtZXRlcnMoKTsKKworICAgIGlmICghZDNkKCkgfHwgITo6SXNXaW5kb3cod2luZG93KCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEM0QgZG9lc24ndCBsaWtlIHRvIG1ha2Ug
YmFjayBidWZmZXJzIGZvciAwIHNpemUgd2luZG93cy4gV2Ugc2tpcnQgdGhpcyBwcm9ibGVtIGlm
IHdlIG1ha2UgdGhlCisgICAgLy8gcGFzc2VkIGJhY2tidWZmZXIgd2lkdGggYW5kIGhlaWdodCBu
b24temVyby4gVGhlIHdpbmRvdyB3aWxsIG5lY2Vzc2FyaWx5IGdldCBzZXQgdG8gYSBub24temVy
bworICAgIC8vIHNpemUgZXZlbnR1YWxseSwgYW5kIHRoZW4gdGhlIGJhY2tidWZmZXIgc2l6ZSB3
aWxsIGdldCByZXNldC4KKyAgICBSRUNUIHJlY3Q7CisgICAgR2V0Q2xpZW50UmVjdCh3aW5kb3co
KSwgJnJlY3QpOworCisgICAgaWYgKHJlY3QubGVmdC1yZWN0LnJpZ2h0ID09IDAgfHwgcmVjdC5i
b3R0b20tcmVjdC50b3AgPT0gMCkgeworICAgICAgICBwYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0
aCA9IDE7CisgICAgICAgIHBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7CisgICAgfQor
CisgICAgRDNEQ0FQUzkgZDNkQ2FwczsKKyAgICBpZiAoRkFJTEVEKGQzZCgpLT5HZXREZXZpY2VD
YXBzKEQzREFEQVBURVJfREVGQVVMVCwgRDNEREVWVFlQRV9IQUwsICZkM2RDYXBzKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVf
RlBVX1BSRVNFUlZFOworICAgIGlmICgoZDNkQ2Fwcy5EZXZDYXBzICYgRDNEREVWQ0FQU19IV1RS
QU5TRk9STUFORExJR0hUKSAmJiBkM2RDYXBzLlZlcnRleFByb2Nlc3NpbmdDYXBzKQorICAgICAg
ICBiZWhhdmlvckZsYWdzIHw9IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HOwor
ICAgIGVsc2UKKyAgICAgICAgYmVoYXZpb3JGbGFncyB8PSBEM0RDUkVBVEVfU09GVFdBUkVfVkVS
VEVYUFJPQ0VTU0lORzsKKworICAgIENPTVB0cjxJRGlyZWN0M0REZXZpY2U5PiBkZXZpY2U7Cisg
ICAgaWYgKEZBSUxFRChkM2QoKS0+Q3JlYXRlRGV2aWNlKEQzREFEQVBURVJfREVGQVVMVCwgRDNE
REVWVFlQRV9IQUwsIHdpbmRvdygpLCBiZWhhdmlvckZsYWdzLCAmcGFyYW1ldGVycywgJmRldmlj
ZSkpKSB7CisgICAgICAgIC8vIEluIGNlcnRhaW4gc2l0dWF0aW9ucyAoZS5nLiwgc2hvcnRseSBh
ZnRlciB3YWtpbmcgZnJvbSBzbGVlcCksIERpcmVjdDNEQ3JlYXRlOSgpIHdpbGwKKyAgICAgICAg
Ly8gcmV0dXJuIGFuIElEaXJlY3QzRDkgZm9yIHdoaWNoIElEaXJlY3QzRDk6OkNyZWF0ZURldmlj
ZSB3aWxsIGFsd2F5cyBmYWlsLiBJbiBjYXNlIHdlCisgICAgICAgIC8vIGhhdmUgb25lIG9mIHRo
ZXNlIGJhZCBJRGlyZWN0M0Q5cywgZ2V0IHJpZCBvZiBpdCBzbyB3ZSdsbCBmZXRjaCBhIG5ldyBv
bmUgdGhlIG5leHQgdGltZQorICAgICAgICAvLyB3ZSB3YW50IHRvIGNhbGwgQ3JlYXRlRGV2aWNl
LgorICAgICAgICBzX2QzZC0+UmVsZWFzZSgpOworICAgICAgICBzX2QzZCA9IDA7CisKKyAgICAg
ICAgLy8gRXZlbiBpZiB3ZSBkb24ndCBoYXZlIGEgYmFkIElEaXJlY3QzRDksIGluIGNlcnRhaW4g
c2l0dWF0aW9ucyAoZS5nLiwgc2hvcnRseSBhZnRlcgorICAgICAgICAvLyB3YWtpbmcgZnJvbSBz
bGVlcCksIENyZWF0ZURldmljZSB3aWxsIGZhaWwsIGJ1dCB3aWxsIGxhdGVyIHN1Y2NlZWQgaWYg
Y2FsbGVkIGFnYWluLgorICAgICAgICBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlciA9
IHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE5vdyB0aGF0
IHdlJ3ZlIGNyZWF0ZWQgdGhlIElEaXJlY3QzRERldmljZTkgYmFzZWQgb24gdGhlIGNhcGFiaWxp
dGllcyB3ZQorICAgIC8vIGdvdCBmcm9tIHRoZSBJRGlyZWN0M0Q5IGdsb2JhbCBvYmplY3QsIHdl
IHJlcXVlcnkgdGhlIGRldmljZSBmb3IgaXRzCisgICAgLy8gYWN0dWFsIGNhcGFiaWxpdGllcy4g
VGhlIGNhcGFiaWxpdGllcyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIGNhbgorICAgIC8vIHNvbWV0
aW1lcyBiZSBtb3JlIGNvbXBsZXRlLCBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIHNvZnR3YXJlIHZl
cnRleAorICAgIC8vIHByb2Nlc3NpbmcuCisgICAgRDNEQ0FQUzkgZGV2aWNlQ2FwczsKKyAgICBp
ZiAoRkFJTEVEKGRldmljZS0+R2V0RGV2aWNlQ2FwcygmZGV2aWNlQ2FwcykpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWhhcmR3YXJlQ2FwYWJpbGl0aWVzSW5kaWNhdGVDb3Jl
QW5pbWF0aW9uU3VwcG9ydChkZXZpY2VDYXBzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9kM2REZXZpY2UgPSBkZXZpY2U7CisKKyAgICBpbml0RDNER2VvbWV0cnkoKTsKKworICAg
IHdrQ0FDRkNvbnRleHRTZXREM0REZXZpY2UobV9jb250ZXh0LCBtX2QzZERldmljZS5nZXQoKSk7
CisKKyAgICBpZiAoSXNXaW5kb3cod2luZG93KCkpKSB7CisgICAgICAgIHJvb3RMYXllcigpLT5z
ZXRCb3VuZHMoYm91bmRzKCkpOworICAgICAgICB3a0NBQ0ZDb250ZXh0Rmx1c2gobV9jb250ZXh0
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCkKK3sKKyAgICB3a0NBQ0ZDb250ZXh0U2V0TGF5ZXIo
bV9jb250ZXh0LCAwKTsKKworICAgIHdrQ0FDRkNvbnRleHRTZXREM0REZXZpY2UobV9jb250ZXh0
LCAwKTsKKyAgICBtX2QzZERldmljZSA9IDA7CisgICAgaWYgKHNfZDNkKQorICAgICAgICBzX2Qz
ZC0+UmVsZWFzZSgpOworCisgICAgc19kM2QgPSAwOworICAgIG1fbWlnaHRCZUFibGVUb0NyZWF0
ZURldmljZUxhdGVyID0gdHJ1ZTsKKworICAgIENBQ0ZMYXllclRyZWVIb3N0OjpkZXN0cm95UmVu
ZGVyZXIoKTsKK30KKwordm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVzaXplKCkKK3sK
KyAgICBpZiAoIW1fZDNkRGV2aWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXNldHRp
bmcgdGhlIGRldmljZSBtaWdodCBmYWlsIGhlcmUuIEJ1dCB0aGF0J3MgT0ssIGJlY2F1c2UgaWYg
aXQgZG9lcyBpdCB3ZSB3aWxsIGF0dGVtcHQgdG8KKyAgICAvLyByZXNldCB0aGUgZGV2aWNlIHRo
ZSBuZXh0IHRpbWUgd2UgdHJ5IHRvIHJlbmRlci4KKyAgICByZXNldERldmljZShDaGFuZ2VkV2lu
ZG93U2l6ZSk7CisKKyAgICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgcm9vdExheWVyKCkt
PnNldEJvdW5kcyhib3VuZHMoKSk7CisgICAgICAgIHdrQ0FDRkNvbnRleHRGbHVzaChtX2NvbnRl
eHQpOworICAgIH0KK30KKwordm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyVGlt
ZXJGaXJlZChUaW1lcjxMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdD4qKQoreworICAgIHBhaW50KCk7
Cit9CisKK3ZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnBhaW50KCkKK3sKKyAgICBjcmVh
dGVSZW5kZXJlcigpOworICAgIGlmICghbV9kM2REZXZpY2UpIHsKKyAgICAgICAgaWYgKG1fbWln
aHRCZUFibGVUb0NyZWF0ZURldmljZUxhdGVyKQorICAgICAgICAgICAgcmVuZGVyU29vbigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0FDRkxheWVyVHJlZUhvc3Q6OnBhaW50KCk7
Cit9CisKK3ZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJlbmRlcihjb25zdCBWZWN0b3I8
Q0dSZWN0PiYgd2luZG93RGlydHlSZWN0cykKK3sKKyAgICBBU1NFUlQobV9kM2REZXZpY2UpOwor
CisgICAgaWYgKG1fbXVzdFJlc2V0TG9zdERldmljZUJlZm9yZVJlbmRlcmluZyAmJiAhcmVzZXRE
ZXZpY2UoTG9zdERldmljZSkpIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgcmVzZXQgdGhlIGRldmlj
ZSByaWdodCBub3cuIFRyeSBhZ2FpbiBzb29uLgorICAgICAgICByZW5kZXJTb29uKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR1JlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7
CisKKyAgICAvLyBHaXZlIHRoZSByZW5kZXJlciBzb21lIHNwYWNlIHRvIHVzZS4gVGhpcyBuZWVk
cyB0byBiZSB2YWxpZCB1bnRpbCB0aGUKKyAgICAvLyB3a0NBQ0ZDb250ZXh0RmluaXNoVXBkYXRl
KCkgY2FsbCBiZWxvdy4KKyAgICBjaGFyIHNwYWNlWzQwOTZdOworICAgIGlmICghd2tDQUNGQ29u
dGV4dEJlZ2luVXBkYXRlKG1fY29udGV4dCwgc3BhY2UsIHNpemVvZihzcGFjZSksIENBQ3VycmVu
dE1lZGlhVGltZSgpLCBib3VuZHMsIHdpbmRvd0RpcnR5UmVjdHMuZGF0YSgpLCB3aW5kb3dEaXJ0
eVJlY3RzLnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEhSRVNVTFQgZXJyID0gU19P
SzsKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lVG9OZXh0UmVuZGVyID0gbnVtZXJpY19saW1pdHM8
Q0ZUaW1lSW50ZXJ2YWw+OjppbmZpbml0eSgpOworCisgICAgZG8geworICAgICAgICAvLyBGSVhN
RTogZG9uJ3QgbmVlZCB0byBjbGVhciBkaXJ0eSByZWdpb24gaWYgbGF5ZXIgdHJlZSBpcyBvcGFx
dWUuCisKKyAgICAgICAgV0tDQUNGVXBkYXRlUmVjdEVudW1lcmF0b3IqIGUgPSB3a0NBQ0ZDb250
ZXh0Q29weVVwZGF0ZVJlY3RFbnVtZXJhdG9yKG1fY29udGV4dCk7CisgICAgICAgIGlmICghZSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFZlY3RvcjxEM0RSRUNULCA2ND4gcmVjdHM7
CisgICAgICAgIGZvciAoY29uc3QgQ0dSZWN0KiByID0gd2tDQUNGVXBkYXRlUmVjdEVudW1lcmF0
b3JOZXh0UmVjdChlKTsgcjsgciA9IHdrQ0FDRlVwZGF0ZVJlY3RFbnVtZXJhdG9yTmV4dFJlY3Qo
ZSkpIHsKKyAgICAgICAgICAgIEQzRFJFQ1QgcmVjdDsKKyAgICAgICAgICAgIHJlY3QueDEgPSBy
LT5vcmlnaW4ueDsKKyAgICAgICAgICAgIHJlY3QueDIgPSByZWN0LngxICsgci0+c2l6ZS53aWR0
aDsKKyAgICAgICAgICAgIHJlY3QueTEgPSBib3VuZHMub3JpZ2luLnkgKyBib3VuZHMuc2l6ZS5o
ZWlnaHQgLSAoci0+b3JpZ2luLnkgKyByLT5zaXplLmhlaWdodCk7CisgICAgICAgICAgICByZWN0
LnkyID0gcmVjdC55MSArIHItPnNpemUuaGVpZ2h0OworCisgICAgICAgICAgICByZWN0cy5hcHBl
bmQocmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgd2tDQUNGVXBkYXRlUmVjdEVudW1lcmF0b3JS
ZWxlYXNlKGUpOworCisgICAgICAgIHRpbWVUb05leHRSZW5kZXIgPSB3a0NBQ0ZDb250ZXh0R2V0
TmV4dFVwZGF0ZVRpbWUobV9jb250ZXh0KTsKKworICAgICAgICBpZiAocmVjdHMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9kM2REZXZpY2UtPkNsZWFyKHJlY3Rz
LnNpemUoKSwgcmVjdHMuZGF0YSgpLCBEM0RDTEVBUl9UQVJHRVQsIDAsIDEuMGYsIDApOworCisg
ICAgICAgIG1fZDNkRGV2aWNlLT5CZWdpblNjZW5lKCk7CisgICAgICAgIHdrQ0FDRkNvbnRleHRS
ZW5kZXJVcGRhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9kM2REZXZpY2UtPkVuZFNjZW5lKCk7
CisKKyAgICAgICAgZXJyID0gbV9kM2REZXZpY2UtPlByZXNlbnQoMCwgMCwgMCwgMCk7CisKKyAg
ICAgICAgaWYgKGVyciA9PSBEM0RFUlJfREVWSUNFTE9TVCkgeworICAgICAgICAgICAgd2tDQUNG
Q29udGV4dEFkZFVwZGF0ZVJlY3QobV9jb250ZXh0LCBib3VuZHMpOworICAgICAgICAgICAgaWYg
KCFyZXNldERldmljZShMb3N0RGV2aWNlKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0
IHJlc2V0IHRoZSBkZXZpY2UgcmlnaHQgbm93LiBUcnkgYWdhaW4gc29vbi4KKyAgICAgICAgICAg
ICAgICByZW5kZXJTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZSAoZXJyID09IEQzREVSUl9ERVZJQ0VMT1NUKTsKKwor
ICAgIHdrQ0FDRkNvbnRleHRGaW5pc2hVcGRhdGUobV9jb250ZXh0KTsKKworI2lmbmRlZiBOREVC
VUcKKyAgICBpZiAobV9wcmludFRyZWUpCisgICAgICAgIHJvb3RMYXllcigpLT5wcmludFRyZWUo
KTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGltZVRvTmV4dFJlbmRlciBpcyBub3QgaW5maW5pdHks
IGl0IG1lYW5zIGFuaW1hdGlvbnMgYXJlIHJ1bm5pbmcsIHNvIHF1ZXVlIHVwIHRvIHJlbmRlciBh
Z2FpbgorICAgIGlmICh0aW1lVG9OZXh0UmVuZGVyICE9IG51bWVyaWNfbGltaXRzPENGVGltZUlu
dGVydmFsPjo6aW5maW5pdHkoKSkKKyAgICAgICAgcmVuZGVyU29vbigpOworfQorCit2b2lkIExl
Z2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpyZW5kZXJTb29uKCkKK3sKKyAgICBpZiAoIW1fcmVuZGVy
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZW5kZXJUaW1lci5zdGFydE9uZVNob3QoMCk7
Cit9CisKK3ZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OmZsdXNoQ29udGV4dCgpCit7Cisg
ICAgd2tDQUNGQ29udGV4dEZsdXNoKG1fY29udGV4dCk7CisgICAgcmVuZGVyU29vbigpOworfQor
CitDRlRpbWVJbnRlcnZhbCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6bGFzdENvbW1pdFRpbWUo
KSBjb25zdAoreworICAgIHJldHVybiB3a0NBQ0ZDb250ZXh0R2V0TGFzdENvbW1pdFRpbWUobV9j
b250ZXh0KTsKK30KKwordm9pZCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdEQzREdlb21l
dHJ5KCkKK3sKKyAgICBBU1NFUlQobV9kM2REZXZpY2UpOworCisgICAgQ0dSZWN0IGJvdW5kcyA9
IHRoaXMtPmJvdW5kcygpOworCisgICAgZmxvYXQgeDAgPSBib3VuZHMub3JpZ2luLng7CisgICAg
ZmxvYXQgeTAgPSBib3VuZHMub3JpZ2luLnk7CisgICAgZmxvYXQgeDEgPSB4MCArIGJvdW5kcy5z
aXplLndpZHRoOworICAgIGZsb2F0IHkxID0geTAgKyBib3VuZHMuc2l6ZS5oZWlnaHQ7CisKKyAg
ICBEM0RYTUFUUklYQTE2IHByb2plY3Rpb247CisgICAgRDNEWE1hdHJpeE9ydGhvT2ZmQ2VudGVy
UkgoJnByb2plY3Rpb24sIHgwLCB4MSwgeTAsIHkxLCAtMS4wZiwgMS4wZik7CisKKyAgICBtX2Qz
ZERldmljZS0+U2V0VHJhbnNmb3JtKEQzRFRTX1BST0pFQ1RJT04sICZwcm9qZWN0aW9uKTsKK30K
KworYm9vbCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVzZXREZXZpY2UoUmVzZXRSZWFzb24g
cmVhc29uKQoreworICAgIEFTU0VSVChtX2QzZERldmljZSk7CisgICAgQVNTRVJUKG1fY29udGV4
dCk7CisKKyAgICBIUkVTVUxUIGhyID0gbV9kM2REZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVs
KCk7CisKKyAgICBpZiAoaHIgPT0gRDNERVJSX0RFVklDRUxPU1QgfHwgaHIgPT0gRDNERVJSX0RS
SVZFUklOVEVSTkFMRVJST1IpIHsKKyAgICAgICAgLy8gVGhlIGRldmljZSBjYW5ub3QgYmUgcmVz
ZXQgYXQgdGhpcyB0aW1lLiBUcnkgYWdhaW4gc29vbi4KKyAgICAgICAgbV9tdXN0UmVzZXRMb3N0
RGV2aWNlQmVmb3JlUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG1fbXVzdFJlc2V0TG9zdERldmljZUJlZm9yZVJlbmRlcmluZyA9IGZhbHNlOwor
CisgICAgaWYgKHJlYXNvbiA9PSBMb3N0RGV2aWNlICYmIGhyID09IEQzRF9PSykgeworICAgICAg
ICAvLyBUaGUgZGV2aWNlIHdhc24ndCBsb3N0IGFmdGVyIGFsbC4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgLy8gV2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UuCisKKyAgICAvLyBX
ZSBoYXZlIHRvIHJlbGVhc2UgdGhlIGNvbnRleHQncyBEM0QgcmVzcm91Y2VzIHdoZW5ldmVyIHdl
IHJlc2V0IHRoZSBJRGlyZWN0M0REZXZpY2U5IGluIG9yZGVyIHRvCisgICAgLy8gZGVzdHJveSBh
bnkgRDNEUE9PTF9ERUZBVUxUIHJlc291cmNlcyB0aGF0IENvcmUgQW5pbWF0aW9uIGhhcyBhbGxv
Y2F0ZWQgKGUuZy4sIHRleHR1cmVzIHVzZWQKKyAgICAvLyBmb3IgbWFzayBsYXllcnMpLiBTZWUg
PGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9iYjE3NDQyNSh2PVZTLjg1
KS5hc3B4Pi4KKyAgICB3a0NBQ0ZDb250ZXh0UmVsZWFzZUQzRFJlc291cmNlcyhtX2NvbnRleHQp
OworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHBhcmFtZXRlcnMgPSBpbml0aWFsUHJlc2Vu
dGF0aW9uUGFyYW1ldGVycygpOworICAgIGhyID0gbV9kM2REZXZpY2UtPlJlc2V0KCZwYXJhbWV0
ZXJzKTsKKworICAgIC8vIFRlc3RDb29wZXJhdGl2ZUxldmVsIHRvbGQgdXMgdGhlIGRldmljZSBt
YXkgYmUgcmVzZXQgbm93LCBzbyB3ZSBzaG91bGQKKyAgICAvLyBub3QgYmUgdG9sZCBoZXJlIHRo
YXQgdGhlIGRldmljZSBpcyBsb3N0LgorICAgIEFTU0VSVChociAhPSBEM0RFUlJfREVWSUNFTE9T
VCk7CisKKyAgICBpbml0RDNER2VvbWV0cnkoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9MZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3YTE1
OWMxYTg5YzgyYjQ5NmIxZjM4MWMwZDRkZjFiOTk3MzA3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGVnYWN5Q0FDRkxheWVyVHJl
ZUhvc3QuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Rf
aAorI2RlZmluZSBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdF9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDQUNGTGF5ZXJUcmVlSG9zdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBDdXJyZW50bHkgdGhlcmUgaXMgYSBMZWdhY3lD
QUNGTGF5ZXJUcmVlSG9zdCBmb3IgZWFjaCBXZWJWaWV3IGFuZCBlYWNoCisvLyBoYXMgaXRzIG93
biBXS0NBQ0ZDb250ZXh0IGFuZCBEaXJlY3QzRERldmljZTksIHdoaWNoIGlzIGluZWZmaWNpZW50
LgorLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg1NSkKK2Ns
YXNzIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0IDogcHVibGljIENBQ0ZMYXllclRyZWVIb3N0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdD4g
Y3JlYXRlKCk7CisgICAgdmlydHVhbCB+TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QoKTsKKworcHJp
dmF0ZToKKyAgICBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdCgpOworCisgICAgdm9pZCBpbml0RDNE
R2VvbWV0cnkoKTsKKworICAgIC8vIENhbGwgdGhpcyB3aGVuIHRoZSBkZXZpY2Ugd2luZG93IGhh
cyBjaGFuZ2VkIHNpemUgb3Igd2hlbiBJRGlyZWN0M0REZXZpY2U5OjpQcmVzZW50IHJldHVybnMK
KyAgICAvLyBEM0RFUlJfREVWSUNFTE9TVC4gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugd2Fz
IHJlY292ZXJlZCwgZmFsc2UgaWYgcmVuZGVyaW5nIG11c3QgYmUKKyAgICAvLyBhYm9ydGVkIGFu
ZCByZWF0dGVtcHRlZCBzb29uLgorICAgIGVudW0gUmVzZXRSZWFzb24geyBDaGFuZ2VkV2luZG93
U2l6ZSwgTG9zdERldmljZSB9OworICAgIGJvb2wgcmVzZXREZXZpY2UoUmVzZXRSZWFzb24pOwor
CisgICAgdm9pZCByZW5kZXJTb29uKCk7CisgICAgdm9pZCByZW5kZXJUaW1lckZpcmVkKFRpbWVy
PExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0PiopOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxp
emVDb250ZXh0KHZvaWQqIHVzZXJEYXRhLCBQbGF0Zm9ybUNBTGF5ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZVJlbmRlcmVyKCk7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lSZW5kZXJlcigpOworICAgIHZpcnR1YWwgQ0ZUaW1lSW50ZXJ2
YWwgbGFzdENvbW1pdFRpbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcihj
b25zdCBWZWN0b3I8Q0dSZWN0PiYgZGlydHlSZWN0cyA9IFZlY3RvcjxDR1JlY3Q+KCkpOworCisg
ICAgYm9vbCBtX21pZ2h0QmVBYmxlVG9DcmVhdGVEZXZpY2VMYXRlcjsKKyAgICBDT01QdHI8SURp
cmVjdDNERGV2aWNlOT4gbV9kM2REZXZpY2U7CisgICAgV0tDQUNGQ29udGV4dCogbV9jb250ZXh0
OworICAgIFRpbWVyPExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0PiBtX3JlbmRlclRpbWVyOworICAg
IGJvb2wgbV9tdXN0UmVzZXRMb3N0RGV2aWNlQmVmb3JlUmVuZGVyaW5nOworCisjaWZuZGVmIE5E
RUJVRworICAgIGJvb2wgbV9wcmludFRyZWU7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2Vu
ZGlmIC8vIExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0X2gK
</data>
<flag name="review"
          id="71835"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80366</attachid>
            <date>2011-01-27 14:44:12 -0800</date>
            <delta_ts>2011-01-27 14:46:43 -0800</delta_ts>
            <desc>Add WKCACFViewLayerTreeHost</desc>
            <filename>bug-53251-20110127144411.patch</filename>
            <type>text/plain</type>
            <size>18651</size>
            <attacher name="Adam Roben (:aroben)">aroben</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhODE1YjRlOTUxYjBkZDVlYjExZjMyNjAyZDJhZGVkOTgzNDIxMzFmLi4x
ODNhNWVmOGRmMzY3YTg3NzljM2ZiNzEwMGE5MTQzYjI3MWFjYmFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDggKzEsNzIgQEAKIDIwMTEtMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgog
CisgICAgICAgIEFkZCBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdAorCisgICAgICAgIFRoaXMgaXMg
YSBjbGFzcyB0aGF0IGRlcml2ZXMgZnJvbSBDQUNGTGF5ZXJUcmVlSG9zdCBhbmQgdXNlcyBhIFdL
Q0FDRlZpZXcgdG8gcmVuZGVyLgorCisgICAgICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzUzMjUxPiA8cmRhcjovL3Byb2JsZW0vODkyNTQ5Nj4gQ0FDRkxheWVyVHJlZUhvc3Qgc2hvdWxk
IHVzZQorICAgICAgICBXS0NBQ0ZWaWV3IGZvciByZW5kZXJpbmcKKworICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGRlZCBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC57
Y3BwLGh9LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRy
ZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBQ0ZMYXllclRyZWVIb3N0OjphY2NlbGVy
YXRlZENvbXBvc2l0aW5nQXZhaWxhYmxlKTogTWFrZSB0aGUgdGVzdCB3aW5kb3cgaGF2ZSBhCisg
ICAgICAgIG5vbi16ZXJvIHNpemUuIFdLQ0FDRlZpZXcgd2lsbCBhbHdheXMgc2F5IGl0IGNhbid0
IHJlbmRlciBpZiB5b3UgcGFzcyBpdCBhIDAtc2l6ZWQgd2luZG93LAorICAgICAgICBzbyB3ZSBu
ZWVkIGEgbm9uLWVtcHR5IHdpbmRvdyB0byBwZXJmb3JtIGEgdmFsaWQgdGVzdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGUpOiBGaXJzdCB0cnkgdG8gY3JlYXRl
IGEgV0tDQUNGVmlld0xheWVyVHJlZUhvc3QsIHRoZW4KKyAgICAgICAgZmFsbCBiYWNrIHRvIGEg
TGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuCisgICAgICAgIChXZWJDb3JlOjpDQUNGTGF5ZXJUcmVl
SG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzTm93KTogTW92ZWQgY29kZSB0byByZWFjdCB0
byB0aGUKKyAgICAgICAgY29udGV4dCBmbHVzaCBmcm9tIGhlcmUuLi4KKyAgICAgICAgKFdlYkNv
cmU6OkNBQ0ZMYXllclRyZWVIb3N0Ojpjb250ZXh0RGlkQ2hhbmdlKTogLi4udG8gaGVyZS4gRGVy
aXZlZCBjbGFzc2VzIGFyZSByZXF1aXJlZCB0bworICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24g
d2hlbmV2ZXIgY2hhbmdlcyBhcmUgZmx1c2hlZCB0byB0aGUgY29udGV4dC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oOiBBZGRlZCBjb250
ZXh0RGlkQ2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xlZ2Fj
eUNBQ0ZMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUNBQ0ZMYXll
clRyZWVIb3N0OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDQUNG
TGF5ZXJUcmVlSG9zdDo6cmVzaXplKToKKyAgICAgICAgQ2hhbmdlZCB0byB1c2UgZmx1c2hDb250
ZXh0IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGNvbnRleHQgbWFudWFsbHkgc28gdGhhdCB3ZSB3
aWxsIGFsd2F5cworICAgICAgICBub3RpZnkgdGhlIGJhc2UgY2xhc3Mgd2hlbiB0aGUgY29udGV4
dCBnZXRzIGZsdXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUNBQ0ZMYXllclRyZWVI
b3N0OjpmbHVzaENvbnRleHQpOiBBZGRlZCBhIGNhbGwgdG8gY29udGV4dERpZENoYW5nZSBzbyB0
aGUKKyAgICAgICAgYmFzZSBjbGFzcyB3aWxsIGtub3cgd2hhdCBoYXBwZW5lZC4gTW92ZWQgY29k
ZSB0byBzY2hlZHVsZSBhIHJlbmRlciBmcm9tIGhlcmUuLi4KKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUNBQ0ZMYXllclRyZWVIb3N0Ojpjb250ZXh0RGlkQ2hhbmdlKTogLi4udG8gaGVyZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MZWdhY3lDQUNGTGF5ZXJUcmVlSG9z
dC5oOiBBZGRlZCBjb250ZXh0RGlkQ2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKTogSWYgV2ViS2l0UXVhcnR6
Q29yZUFkZGl0aW9ucywgd2hpY2ggcHJvdmlkZXMKKyAgICAgICAgV0tDQUNGVmlldywgaXNuJ3Qg
cHJlc2VudCwgYmFpbC4gT3RoZXJ3aXNlIGFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgaG9zdC4K
KyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRlZpZXdMYXllclRyZWVIb3N0OjpXS0NBQ0ZWaWV3TGF5
ZXJUcmVlSG9zdCk6IEluaXRpYWxpemUgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OldLQ0FD
RlZpZXdMYXllclRyZWVIb3N0Ojp1cGRhdGVWaWV3SWZOZWVkZWQpOiBVcGRhdGUgdGhlIHZpZXcg
aWYgd2UgcHJldmlvdXNseQorICAgICAgICBtYXJrZWQgdGhhdCB3ZSBuZWVkZWQgdG8gZG8gc28s
IGFuZCBmbHVzaCB0aGUgY29udGV4dCBpZiBvdXIgbGF5ZXIncyBib3VuZHMgaGF2ZSBjaGFuZ2Vk
LgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGVmlld0xheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRD
aGFuZ2VDYWxsYmFjayk6IENhbGwgdGhyb3VnaCB0bworICAgICAgICBjb250ZXh0RGlkQ2hhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGVmlld0xheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRD
aGFuZ2UpOiBUZWxsIHRoZSBXS0NBQ0ZWaWV3IHRvIHN0YXJ0IHJlbmRlcmluZworICAgICAgICAo
aWYgd2UgZGlkbid0IGFscmVhZHkpLCB0aGVuIGNhbGwgdXAgdG8gdGhlIGJhc2UgY2xhc3MuCisg
ICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUNvbnRl
eHQpOiBTZXQgdGhlIGNvbnRleHQncyB1c2VyIGRhdGEsIHRoZQorICAgICAgICB2aWV3J3MgbGF5
ZXIsIGFuZCBob29rIHVwIG91ciAiY29udGV4dCBkaWQgY2hhbmdlIiBjYWxsYmFjay4KKyAgICAg
ICAgKFdlYkNvcmU6OldLQ0FDRlZpZXdMYXllclRyZWVIb3N0OjpyZXNpemUpOiBNYXJrIHRoYXQg
dGhlIHZpZXcgbmVlZHMgdG8gYmUgdXBkYXRlZCB0aGUgbmV4dAorICAgICAgICB0aW1lIHdlIHBh
aW50LgorICAgICAgICAoV2ViQ29yZTo6V0tDQUNGVmlld0xheWVyVHJlZUhvc3Q6OmNyZWF0ZVJl
bmRlcmVyKTogVXBkYXRlIG91ciB2aWV3IGFuZCByZXR1cm4gd2hldGhlciBpdCBpcworICAgICAg
ICBhYmxlIHRvIHJlbmRlciBvciBub3QuCisgICAgICAgIChXZWJDb3JlOjpXS0NBQ0ZWaWV3TGF5
ZXJUcmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKTogQ2xlYXIgb3V0IGFsbCB0aGUgaW5mbyB3ZSBw
YXNzZWQgZG93bgorICAgICAgICB0byB0aGUgdmlldy4KKyAgICAgICAgKFdlYkNvcmU6OldLQ0FD
RlZpZXdMYXllclRyZWVIb3N0OjpsYXN0Q29tbWl0VGltZSk6IENhbGwgdGhyb3VnaCB0byB0aGUg
dmlldy4KKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRlZpZXdMYXllclRyZWVIb3N0OjpmbHVzaENv
bnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldLQ0FDRlZpZXdMYXllclRyZWVIb3N0
OjpwYWludCk6IFVwZGF0ZSB0aGUgdmlldyBzbyBpdCB3aWxsIGRyYXcgYXQgdGhlIHJpZ2h0Cisg
ICAgICAgIHNpemUsIHRoZW4gY2FsbCB1cCB0byB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKFdl
YkNvcmU6OldLQ0FDRlZpZXdMYXllclRyZWVIb3N0OjpyZW5kZXIpOiBJbnZhbGlkYXRlIHRoZSB2
aWV3IHVzaW5nIHRoZSBwYXNzZWQtaW4gZGlydHkKKyAgICAgICAgcmVjdHMsIHRoZW4gYXNrIGl0
IHRvIGRyYXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmll
d0xheWVyVHJlZUhvc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL0xlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0LmguCisKKzIwMTEtMDEtMjcgIEFk
YW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgorCiAgICAgICAgIE1vdmUgTGVnYWN5Q0FDRkxh
eWVyVHJlZUhvc3QgaW50byBpdHMgb3duIGZpbGVzCiAKICAgICAgICAgTW9yZSBwcmVwYXJhdGlv
biBmb3IgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTMyNTE+IDxyZGFyOi8vcHJvYmxlbS84OTI1NDk2
PiBDQUNGTGF5ZXJUcmVlSG9zdAorICAgICAgICBzaG91bGQgdXNlIFdLQ0FDRlZpZXcgZm9yIHJl
bmRlcmluZwogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGMxZGM0NjcxZWUy
NGUyNzUyMGNmZmNmZTMwYzc5MzNkNTNhNTI3YjAuLjAyMGI0YWZjODhkYWY4NzUwZjJmYmE0NzY5
NjI0M2FjZTM2NmQzZTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0yODk2Niw2ICsyODk2NiwxNCBAQAogCQkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgi
CiAJCQkJCQkJPgogCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5j
cHAiCisJCQkJCQkJPgorCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9z
dC5oIgorCQkJCQkJCT4KKwkJCQkJCTwvRmlsZT4KIAkJCQkJPC9GaWx0ZXI+CiAJCQkJPC9GaWx0
ZXI+CiAJCQk8L0ZpbHRlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCmluZGV4IDM2MzNlMDE2
MTg0NzkxYTRhYmEyNjg4ZTJkNDhiODJmMDA2MGI0NmYuLjE4YmUwZWFlZDAwMmEwZWVmODJjY2M1
N2ZiY2I5YTgyZTY2ZGIzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hhbmdlc0ZsdXNoZXIuaCIKICNpbmNsdWRlICJMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2lu
Y2x1ZGUgIldLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUluc3Rh
bmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC05Niw3ICs5Nyw3IEBAIGJvb2wgQ0FDRkxheWVyVHJlZUhvc3Q6OmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBdmFpbGFibGUoKQogICAgIHdjZXguaEluc3RhbmNlID0gV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKTsKICAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBMIkNvcmVBbmltYXRp
b25UZXN0ZXJXaW5kb3dDbGFzcyI7CiAgICAgOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotICAg
IEhXTkQgdGVzdFdpbmRvdyA9IDo6Q3JlYXRlV2luZG93KEwiQ29yZUFuaW1hdGlvblRlc3Rlcldp
bmRvd0NsYXNzIiwgTCJDb3JlQW5pbWF0aW9uVGVzdGVyV2luZG93IiwgV1NfUE9QVVAsIC01MDAs
IC01MDAsIDAsIDAsIDAsIDAsIDAsIDApOworICAgIEhXTkQgdGVzdFdpbmRvdyA9IDo6Q3JlYXRl
V2luZG93KEwiQ29yZUFuaW1hdGlvblRlc3RlcldpbmRvd0NsYXNzIiwgTCJDb3JlQW5pbWF0aW9u
VGVzdGVyV2luZG93IiwgV1NfUE9QVVAsIC01MDAsIC01MDAsIDIwLCAyMCwgMCwgMCwgMCwgMCk7
CiAKICAgICBpZiAoIXRlc3RXaW5kb3cpIHsKICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CkBA
IC0xMTYsNyArMTE3LDkgQEAgUGFzc1JlZlB0cjxDQUNGTGF5ZXJUcmVlSG9zdD4gQ0FDRkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZSgpCiB7CiAgICAgaWYgKCFhY2NlbGVyYXRlZENvbXBvc2l0aW5nQXZh
aWxhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxDQUNGTGF5ZXJUcmVlSG9z
dD4gaG9zdCA9IExlZ2FjeUNBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
Q0FDRkxheWVyVHJlZUhvc3Q+IGhvc3QgPSBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
KCk7CisgICAgaWYgKCFob3N0KQorICAgICAgICBob3N0ID0gTGVnYWN5Q0FDRkxheWVyVHJlZUhv
c3Q6OmNyZWF0ZSgpOwogICAgIGhvc3QtPmluaXRpYWxpemUoKTsKICAgICByZXR1cm4gaG9zdC5y
ZWxlYXNlKCk7CiB9CkBAIC0yOTIsMTAgKzI5NSwxMyBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0
OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNOb3coKQogICAgIC8vIEZsdXNoIGNoYW5nZXMgc3Rv
cmVkIHVwIGluIFBsYXRmb3JtQ0FMYXllcnMgdG8gdGhlIGNvbnRleHQgc28gdGhleSB3aWxsIGJl
IHJlbmRlcmVkLgogICAgIGZsdXNoQ29udGV4dCgpOwogCisgICAgbV9pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzID0gZmFsc2U7Cit9CisKK3ZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRD
aGFuZ2UoKQorewogICAgIC8vIEFsbCBwZW5kaW5nIGFuaW1hdGlvbnMgd2lsbCBoYXZlIGJlZW4g
c3RhcnRlZCB3aXRoIHRoZSBmbHVzaC4gRmlyZSB0aGUgYW5pbWF0aW9uU3RhcnRlZCBjYWxscy4K
ICAgICBub3RpZnlBbmltYXRpb25zU3RhcnRlZCgpOwotCi0gICAgbV9pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzID0gZmFsc2U7CiB9CiAKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1h
dGlvbnNTdGFydGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKaW5kZXggNDhhMmNhY2ExYTZlMjNi
MWVjZDYzNDhiMzdjNjRhNzRlMDY0ZWEyMC4uM2UxZDgxMzdlZDk1OTgwYjYxM2JjYzAyNjk0ZDJh
YTVhZmFmNmIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKQEAgLTc4LDYgKzc4LDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIGNyZWF0ZVJlbmRlcmVyKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95UmVuZGVyZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERp
ZENoYW5nZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xlZ2FjeUNBQ0ZMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9M
ZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMzM1NjFlM2NlY2NlNDM0ODg5NmMyMzkz
ZWQ1MGMyMGJiOGVjMGY3Ny4uNDBjNTkyYmE4M2RlZDEyNWE5NzBkZWY5ZDI5MGU5ZDUwZWE3MzIz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xl
Z2FjeUNBQ0ZMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3QuY3BwCkBAIC0xODksNyArMTg5
LDcgQEAgYm9vbCBMZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUmVuZGVyZXIoKQogCiAg
ICAgaWYgKElzV2luZG93KHdpbmRvdygpKSkgewogICAgICAgICByb290TGF5ZXIoKS0+c2V0Qm91
bmRzKGJvdW5kcygpKTsKLSAgICAgICAgd2tDQUNGQ29udGV4dEZsdXNoKG1fY29udGV4dCk7Cisg
ICAgICAgIGZsdXNoQ29udGV4dCgpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjIx
LDcgKzIyMSw3IEBAIHZvaWQgTGVnYWN5Q0FDRkxheWVyVHJlZUhvc3Q6OnJlc2l6ZSgpCiAKICAg
ICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgcm9vdExheWVyKCktPnNldEJvdW5kcyhib3Vu
ZHMoKSk7Ci0gICAgICAgIHdrQ0FDRkNvbnRleHRGbHVzaChtX2NvbnRleHQpOworICAgICAgICBm
bHVzaENvbnRleHQoKTsKICAgICB9CiB9CiAKQEAgLTMyNiw2ICszMjYsMTEgQEAgdm9pZCBMZWdh
Y3lDQUNGTGF5ZXJUcmVlSG9zdDo6cmVuZGVyU29vbigpCiB2b2lkIExlZ2FjeUNBQ0ZMYXllclRy
ZWVIb3N0OjpmbHVzaENvbnRleHQoKQogewogICAgIHdrQ0FDRkNvbnRleHRGbHVzaChtX2NvbnRl
eHQpOworICAgIGNvbnRleHREaWRDaGFuZ2UoKTsKK30KKwordm9pZCBMZWdhY3lDQUNGTGF5ZXJU
cmVlSG9zdDo6Y29udGV4dERpZENoYW5nZSgpCit7CiAgICAgcmVuZGVyU29vbigpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGVnYWN5
Q0FDRkxheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9MZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGI3YTE1OWMxYTg5YzgyYjQ5NmIx
ZjM4MWMwZDRkZjFiOTk3MzA3ODkuLjdkNGE1ZjQ4OWNlOTk1YmFmM2JlNTk1NmQ5YjI2MzczZGU2
NjBiYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9MZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9MZWdhY3lDQUNGTGF5ZXJUcmVlSG9zdC5oCkBAIC02MCw2ICs2MCw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lSZW5kZXJlcigpOwogICAgIHZp
cnR1YWwgQ0ZUaW1lSW50ZXJ2YWwgbGFzdENvbW1pdFRpbWUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgZmx1c2hDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREaWRDaGFuZ2Uo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKGNv
bnN0IFZlY3RvcjxDR1JlY3Q+JiBkaXJ0eVJlY3RzID0gVmVjdG9yPENHUmVjdD4oKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZW
aWV3TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2NzJjMmQ5NDhl
MGRjYTI1ODQ3NmY5ODYzZjg2N2YxYzgyZTNjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS0NB
Q0ZWaWV3TGF5ZXJUcmVlSG9zdC5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiU29mdExpbmtpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0NBQ0ZM
YXllciogQ0FDRkxheWVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZmRlZiBERUJV
R19BTEwKK1NPRlRfTElOS19ERUJVR19MSUJSQVJZKFdlYktpdFF1YXJ0ekNvcmVBZGRpdGlvbnMp
CisjZWxzZQorU09GVF9MSU5LX0xJQlJBUlkoV2ViS2l0UXVhcnR6Q29yZUFkZGl0aW9ucykKKyNl
bmRpZgorCitTT0ZUX0xJTksoV2ViS2l0UXVhcnR6Q29yZUFkZGl0aW9ucywgV0tDQUNGVmlld0Ny
ZWF0ZSwgV0tDQUNGVmlld1JlZiwgX19jZGVjbCwgKCksICgpKQorU09GVF9MSU5LKFdlYktpdFF1
YXJ0ekNvcmVBZGRpdGlvbnMsIFdLQ0FDRlZpZXdTZXRMYXllciwgdm9pZCwgX19jZGVjbCwgKFdL
Q0FDRlZpZXdSZWYgdmlldywgQ0FDRkxheWVyUmVmIGxheWVyKSwgKHZpZXcsIGxheWVyKSkKK1NP
RlRfTElOSyhXZWJLaXRRdWFydHpDb3JlQWRkaXRpb25zLCBXS0NBQ0ZWaWV3VXBkYXRlLCB2b2lk
LCBfX2NkZWNsLCAoV0tDQUNGVmlld1JlZiB2aWV3LCBIV05EIHdpbmRvdywgY29uc3QgQ0dSZWN0
KiBib3VuZHMpLCAodmlldywgd2luZG93LCBib3VuZHMpKQorU09GVF9MSU5LKFdlYktpdFF1YXJ0
ekNvcmVBZGRpdGlvbnMsIFdLQ0FDRlZpZXdDYW5EcmF3LCBib29sLCBfX2NkZWNsLCAoV0tDQUNG
Vmlld1JlZiB2aWV3KSwgKHZpZXcpKQorU09GVF9MSU5LKFdlYktpdFF1YXJ0ekNvcmVBZGRpdGlv
bnMsIFdLQ0FDRlZpZXdEcmF3LCB2b2lkLCBfX2NkZWNsLCAoV0tDQUNGVmlld1JlZiB2aWV3KSwg
KHZpZXcpKQorU09GVF9MSU5LKFdlYktpdFF1YXJ0ekNvcmVBZGRpdGlvbnMsIFdLQ0FDRlZpZXdG
bHVzaENvbnRleHQsIHZvaWQsIF9fY2RlY2wsIChXS0NBQ0ZWaWV3UmVmIHZpZXcpLCAodmlldykp
CitTT0ZUX0xJTksoV2ViS2l0UXVhcnR6Q29yZUFkZGl0aW9ucywgV0tDQUNGVmlld0ludmFsaWRh
dGVSZWN0cywgdm9pZCwgX19jZGVjbCwgKFdLQ0FDRlZpZXdSZWYgdmlldywgY29uc3QgQ0dSZWN0
IHJlY3RzW10sIHNpemVfdCBjb3VudCksICh2aWV3LCByZWN0cywgY291bnQpKQordHlwZWRlZiB2
b2lkICgqV0tDQUNGVmlld0NvbnRleHREaWRDaGFuZ2VDYWxsYmFjaykoV0tDQUNGVmlld1JlZiB2
aWV3LCB2b2lkKiBpbmZvKTsKK1NPRlRfTElOSyhXZWJLaXRRdWFydHpDb3JlQWRkaXRpb25zLCBX
S0NBQ0ZWaWV3U2V0Q29udGV4dERpZENoYW5nZUNhbGxiYWNrLCB2b2lkLCBfX2NkZWNsLCAoV0tD
QUNGVmlld1JlZiB2aWV3LCBXS0NBQ0ZWaWV3Q29udGV4dERpZENoYW5nZUNhbGxiYWNrIGNhbGxi
YWNrLCB2b2lkKiBpbmZvKSwgKHZpZXcsIGNhbGxiYWNrLCBpbmZvKSkKK1NPRlRfTElOSyhXZWJL
aXRRdWFydHpDb3JlQWRkaXRpb25zLCBXS0NBQ0ZWaWV3R2V0TGFzdENvbW1pdFRpbWUsIENGVGlt
ZUludGVydmFsLCBfX2NkZWNsLCAoV0tDQUNGVmlld1JlZiB2aWV3KSwgKHZpZXcpKQorU09GVF9M
SU5LKFdlYktpdFF1YXJ0ekNvcmVBZGRpdGlvbnMsIFdLQ0FDRlZpZXdTZXRDb250ZXh0VXNlckRh
dGEsIHZvaWQsIF9fY2RlY2wsIChXS0NBQ0ZWaWV3UmVmIHZpZXcsIHZvaWQqIHVzZXJEYXRhKSwg
KHZpZXcsIHVzZXJEYXRhKSkKKworUGFzc1JlZlB0cjxXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdD4g
V0tDQUNGVmlld0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpCit7CisgICAgaWYgKCFXZWJLaXRRdWFy
dHpDb3JlQWRkaXRpb25zTGlicmFyeSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV0tDQUNGVmlld0xheWVyVHJlZUhvc3QpOworfQorCitXS0NBQ0ZWaWV3
TGF5ZXJUcmVlSG9zdDo6V0tDQUNGVmlld0xheWVyVHJlZUhvc3QoKQorICAgIDogbV92aWV3KEFk
b3B0Q0YsIFdLQ0FDRlZpZXdDcmVhdGUoKSkKKyAgICAsIG1fdmlld05lZWRzVXBkYXRlKHRydWUp
Cit7Cit9CisKK3ZvaWQgV0tDQUNGVmlld0xheWVyVHJlZUhvc3Q6OnVwZGF0ZVZpZXdJZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX3ZpZXdOZWVkc1VwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdmlld05lZWRzVXBkYXRlID0gZmFsc2U7CisKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBy
b290TGF5ZXIoKS0+Ym91bmRzKCk7CisKKyAgICBDR1JlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRz
KCk7CisgICAgV0tDQUNGVmlld1VwZGF0ZShtX3ZpZXcuZ2V0KCksIHdpbmRvdygpLCAmYm91bmRz
KTsKKworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChsYXllckJvdW5kcywgcm9vdExheWVyKCkt
PmJvdW5kcygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRmx1c2ggdGhlIGNvbnRleHQg
c28gdGhlIGxheWVyJ3MgcmVuZGVyZWQgYm91bmRzIHdpbGwgbWF0Y2ggb3VyIGJvdW5kcy4KKyAg
ICBmbHVzaENvbnRleHQoKTsKK30KKwordm9pZCBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdDo6Y29u
dGV4dERpZENoYW5nZUNhbGxiYWNrKFdLQ0FDRlZpZXdSZWYgdmlldywgdm9pZCogaW5mbykKK3sK
KyAgICBBU1NFUlRfQVJHKHZpZXcsIHZpZXcpOworICAgIEFTU0VSVF9BUkcoaW5mbywgaW5mbyk7
CisKKyAgICBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdCogaG9zdCA9IHN0YXRpY19jYXN0PFdLQ0FD
RlZpZXdMYXllclRyZWVIb3N0Kj4oaW5mbyk7CisgICAgQVNTRVJUX0FSRyh2aWV3LCB2aWV3ID09
IGhvc3QtPm1fdmlldyk7CisgICAgaG9zdC0+Y29udGV4dERpZENoYW5nZSgpOworfQorCit2b2lk
IFdLQ0FDRlZpZXdMYXllclRyZWVIb3N0Ojpjb250ZXh0RGlkQ2hhbmdlKCkKK3sKKyAgICAvLyBU
ZWxsIHRoZSBXS0NBQ0ZWaWV3IHRvIHN0YXJ0IHJlbmRlcmluZyBub3cgdGhhdCB3ZSBoYXZlIHNv
bWUgY29udGVudHMgdG8gcmVuZGVyLgorICAgIHVwZGF0ZVZpZXdJZk5lZWRlZCgpOworCisgICAg
Q0FDRkxheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRDaGFuZ2UoKTsKK30KKwordm9pZCBXS0NBQ0ZW
aWV3TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZUNvbnRleHQodm9pZCogdXNlckRhdGEsIFBsYXRm
b3JtQ0FMYXllciogbGF5ZXIpCit7CisgICAgV0tDQUNGVmlld1NldENvbnRleHRVc2VyRGF0YSht
X3ZpZXcuZ2V0KCksIHVzZXJEYXRhKTsKKyAgICBXS0NBQ0ZWaWV3U2V0TGF5ZXIobV92aWV3Lmdl
dCgpLCBsYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBXS0NBQ0ZWaWV3U2V0Q29udGV4dERp
ZENoYW5nZUNhbGxiYWNrKG1fdmlldy5nZXQoKSwgY29udGV4dERpZENoYW5nZUNhbGxiYWNrLCB0
aGlzKTsKK30KKwordm9pZCBXS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdDo6cmVzaXplKCkKK3sKKyAg
ICBtX3ZpZXdOZWVkc1VwZGF0ZSA9IHRydWU7Cit9CisKK2Jvb2wgV0tDQUNGVmlld0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZVJlbmRlcmVyKCkKK3sKKyAgICB1cGRhdGVWaWV3SWZOZWVkZWQoKTsKKyAg
ICByZXR1cm4gV0tDQUNGVmlld0NhbkRyYXcobV92aWV3LmdldCgpKTsKK30KKwordm9pZCBXS0NB
Q0ZWaWV3TGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCkKK3sKKyAgICBtX3ZpZXdOZWVk
c1VwZGF0ZSA9IHRydWU7CisgICAgV0tDQUNGVmlld1VwZGF0ZShtX3ZpZXcuZ2V0KCksIDAsIDAp
OworICAgIFdLQ0FDRlZpZXdTZXRDb250ZXh0VXNlckRhdGEobV92aWV3LmdldCgpLCAwKTsKKyAg
ICBXS0NBQ0ZWaWV3U2V0TGF5ZXIobV92aWV3LmdldCgpLCAwKTsKKyAgICBXS0NBQ0ZWaWV3U2V0
Q29udGV4dERpZENoYW5nZUNhbGxiYWNrKG1fdmlldy5nZXQoKSwgMCwgMCk7CisKKyAgICBDQUNG
TGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCk7Cit9CisKK0NGVGltZUludGVydmFsIFdL
Q0FDRlZpZXdMYXllclRyZWVIb3N0OjpsYXN0Q29tbWl0VGltZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdLQ0FDRlZpZXdHZXRMYXN0Q29tbWl0VGltZShtX3ZpZXcuZ2V0KCkpOworfQorCit2b2lk
IFdLQ0FDRlZpZXdMYXllclRyZWVIb3N0OjpmbHVzaENvbnRleHQoKQoreworICAgIFdLQ0FDRlZp
ZXdGbHVzaENvbnRleHQobV92aWV3LmdldCgpKTsKK30KKwordm9pZCBXS0NBQ0ZWaWV3TGF5ZXJU
cmVlSG9zdDo6cGFpbnQoKQoreworICAgIHVwZGF0ZVZpZXdJZk5lZWRlZCgpOworICAgIENBQ0ZM
YXllclRyZWVIb3N0OjpwYWludCgpOworfQorCit2b2lkIFdLQ0FDRlZpZXdMYXllclRyZWVIb3N0
OjpyZW5kZXIoY29uc3QgVmVjdG9yPENHUmVjdD4mIGRpcnR5UmVjdHMpCit7CisgICAgV0tDQUNG
Vmlld0ludmFsaWRhdGVSZWN0cyhtX3ZpZXcuZ2V0KCksIGRpcnR5UmVjdHMuZGF0YSgpLCBkaXJ0
eVJlY3RzLnNpemUoKSk7CisgICAgV0tDQUNGVmlld0RyYXcobV92aWV3LmdldCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV0tDQUNGVmlld0xheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjA5
Zjc2ZDEyZGRiYmM3MjM2NWFjZDM3MGIxOTJlMWE3YzgxMmM3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRy
ZWVIb3N0LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLQ0FDRlZpZXdMYXllclRyZWVIb3N0
X2gKKyNkZWZpbmUgV0tDQUNGVmlld0xheWVyVHJlZUhvc3RfaAorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ0FDRkxheWVyVHJlZUhvc3QuaCIKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dLQ0FDRlZpZXcqIFdLQ0FDRlZpZXdSZWY7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgV0tDQUNGVmlld0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0FDRkxheWVy
VHJlZUhvc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdLQ0FDRlZpZXdMYXll
clRyZWVIb3N0PiBjcmVhdGUoKTsKKworcHJpdmF0ZToKKyAgICBXS0NBQ0ZWaWV3TGF5ZXJUcmVl
SG9zdCgpOworCisgICAgdm9pZCB1cGRhdGVWaWV3SWZOZWVkZWQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb250ZXh0RGlkQ2hhbmdlQ2FsbGJhY2soV0tDQUNGVmlld1JlZiwgdm9pZCogaW5mbyk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUNvbnRleHQodm9pZCogdXNlckRhdGEsIFBsYXRm
b3JtQ0FMYXllciopOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlUmVuZGVyZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVJlbmRlcmVyKCk7
CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBjb250
ZXh0RGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlcihjb25zdCBWZWN0b3I8Q0dSZWN0PiYgZGlydHlSZWN0cyA9IFZlY3RvcjxDR1Jl
Y3Q+KCkpOworICAgIHZpcnR1YWwgQ0ZUaW1lSW50ZXJ2YWwgbGFzdENvbW1pdFRpbWUoKSBjb25z
dDsKKworICAgIFJldGFpblB0cjxXS0NBQ0ZWaWV3UmVmPiBtX3ZpZXc7CisgICAgYm9vbCBtX3Zp
ZXdOZWVkc1VwZGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFdLQ0FDRlZpZXdMYXll
clRyZWVIb3N0X2gK
</data>
<flag name="review"
          id="71843"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>