<?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>49998</bug_id>
          
          <creation_ts>2010-11-23 16:49:23 -0800</creation_ts>
          <short_desc>Allow ports finer-grain control of when to enable accelerated compositing</short_desc>
          <delta_ts>2010-11-30 12:42:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Vangelis Kokkevis">vangelis</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cmarrin</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>noam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>313085</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-23 16:49:23 -0800</bug_when>
    <thetext>Currently accelerated compositing is either on or off for everything. We need to allow ports to have more fine-grained control over which elements can trigger compositing. As an example, one port might want to trigger the compositor only in the presence of WebGL elements on the page, another might want avoid triggering compositing just for video, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313336</commentid>
    <comment_count>1</comment_count>
      <attachid>74768</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-24 09:22:44 -0800</bug_when>
    <thetext>Created attachment 74768
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313351</commentid>
    <comment_count>2</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-24 09:42:07 -0800</bug_when>
    <thetext>Proposed patch uploaded.  Can you please review the general approach?  I&apos;m not too happy with the variable/method name selection so alternative suggestions are welcome too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313432</commentid>
    <comment_count>3</comment_count>
      <attachid>74768</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-24 13:14:19 -0800</bug_when>
    <thetext>Comment on attachment 74768
proposed patch

This seems reasonable to me although I wonder whether it would be cleaner to have one virtual taking an enum for the content type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314070</commentid>
    <comment_count>4</comment_count>
      <attachid>74768</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-26 10:40:52 -0800</bug_when>
    <thetext>Comment on attachment 74768
proposed patch

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

I wonder if a bitfield could be used in the call through to ChromeClient, and for storage in RLC?

&gt; WebCore/css/MediaQueryEvaluator.cpp:484
&gt; -        threeDEnabled = view-&gt;compositor()-&gt;hasAcceleratedCompositing();
&gt; +        threeDEnabled = view-&gt;compositor()-&gt;hasAcceleratedCompositing()
&gt; +                        &amp;&amp; frame-&gt;page()-&gt;chrome()-&gt;client()-&gt;allowsAcceleratedCompositingFor3DTransforms();

I think RenderLayerCompositor should have a canRender3DTransforms() method.

&gt; WebCore/page/ChromeClient.h:248
&gt; +        // Returns true if 3d transforms can trigger the accelerated compositor.
&gt; +        virtual bool allowsAcceleratedCompositingFor3DTransforms() const { return true; }
&gt; +        // Returns true if video can trigger the accelerated compositor.
&gt; +        virtual bool allowsAcceleratedCompositingForVideo() const { return true; }
&gt; +        // Returns true if canvas can trigger the accelerated compositor.
&gt; +        virtual bool allowsAcceleratedCompositingForCanvas() const { return true; }
&gt; +        // Returns true if plugins can trigger the accelerated compositor.
&gt; +        virtual bool allowsAcceleratedCompositingForPlugin() const { return true; }
&gt; +        // Returns true if css animation can trigger the accelerated compositor.
&gt; +        virtual bool allowsAcceleratedCompositingForAnimation() const { return true; }

I agree that a single method with an enum argument would be better here.

&gt; WebCore/rendering/RenderLayer.cpp:249
&gt;  bool RenderLayer::hasAcceleratedCompositing() const
&gt;  {
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    return compositor()-&gt;hasAcceleratedCompositing();
&gt; +    return compositor()-&gt;hasAcceleratedCompositing() &amp;&amp; compositor()-&gt;inCompositingMode();
&gt;  #else
&gt;      return false;
&gt;  #endif

I think this method should be removed, and callers should use compositor()-&gt;canRender3DTransforms().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314694</commentid>
    <comment_count>5</comment_count>
      <attachid>75074</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-29 15:42:29 -0800</bug_when>
    <thetext>Created attachment 75074
Patch adjusted per reviewer comments

Thanks for the review! I modified the patch to address the comments. Specifically:
* Added an enum to the ChromeClient per Ken&apos;s and Simon&apos;s suggestion and replaced individual calls by a single call.
* Added a canRender3dTransforms() method to the RenderLayerCompositor.  Media queries as well as RenderLayer code that needs to know whether 3d transforms are supported now call this method. I did leave the old hasAcceleratedCompositing() method intact as it has a different, legitimate, use.

Please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314715</commentid>
    <comment_count>6</comment_count>
      <attachid>75074</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-29 16:18:30 -0800</bug_when>
    <thetext>Comment on attachment 75074
Patch adjusted per reviewer comments

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

&gt; WebCore/page/ChromeClient.h:250
&gt; +        enum CompositorTrigger {
&gt; +            ThreeDTransformTrigger,
&gt; +            VideoTrigger,
&gt; +            PluginTrigger,
&gt; +            CanvasTrigger,
&gt; +            AnimationTrigger,
&gt; +            CompositorTriggerLast
&gt; +        };
&gt; +        // Returns true if the accelerated compositor should be triggered in the
&gt; +        // presence of a given element in the page.
&gt; +        virtual bool doAcceleratedCompositingFor(CompositorTrigger) const { return true; }

I think this would be better named as allowAcceleratedCompositingFor().

I also think that it would be better for it to simply return a bitfield (or WTF::Bitmap), so that only one call is required. Since there are no other uses of WTF::BitMap in WebCore that I can find, maybe an old-schoold bitmap is more appropriate. In that case, I&apos;d declare the enum like:

enum CompositingTrigger {
  ThreeDTransformTrigger = 1 &lt;&lt; 0,
  VideoTrigger = 1 &lt;&lt; 1,
  ...
  AllTriggers = 0xFFFFFFFF;
};
typedef unsigned CompositingTriggerFlags;

virtual CompositingTriggerFlags allowedCompositingTriggers() const;

If we do this, then we can eliminate allowsAcceleratedCompositing() too.

You should probably have separate enum values for 2D canvas and WebGL.

&gt; WebCore/rendering/RenderLayer.h:292
&gt; +    bool canRender3dTransforms() const;

We normally use 3DTransforms, not 3dTransforms

&gt; WebCore/rendering/RenderLayerCompositor.cpp:154
&gt; +            for (unsigned i = 0; i &lt; ChromeClient::CompositorTriggerLast; ++i) {
&gt; +                if (chromeClient-&gt;doAcceleratedCompositingFor(static_cast&lt;ChromeClient::CompositorTrigger&gt;(i)))
&gt; +                    compositorTriggers.set(i);

If we change ChromeClient to return a bitfield, then there&apos;s no need to loop here.

&gt; WebCore/rendering/RenderLayerCompositor.cpp:163
&gt; -    if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter)
&gt; +    if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || compositorTriggersChanged)
&gt;          setCompositingLayersNeedRebuild();

I don&apos;t like the fact that ChromeClient can return different flags (hence the need for compositorTriggersChanged). I think the contract should be that the flags can never change. If they can change, then there needs to be a new entry point that gets called when they do. If the flags would only ever change for developers toggling some debug settings, then this is OK.

&gt; WebCore/rendering/RenderLayerCompositor.h:240
&gt; +    typedef WTF::Bitmap&lt;ChromeClient::CompositorTriggerLast&gt; CompositorTriggerBitfield;
&gt; +    CompositorTriggerBitfield m_compositorTriggers;

This could just be the CompositingTriggerFlags returned from ChromeClient, though it&apos;s a bit weird to reuse ChromeClient&apos;s enum everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314785</commentid>
    <comment_count>7</comment_count>
      <attachid>75095</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-29 18:04:19 -0800</bug_when>
    <thetext>Created attachment 75095
Patch addressing recent review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314789</commentid>
    <comment_count>8</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-29 18:07:17 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 75074 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75074&amp;action=review
&gt; 
&gt; &gt; WebCore/page/ChromeClient.h:250
&gt; &gt; +        enum CompositorTrigger {
&gt; &gt; +            ThreeDTransformTrigger,
&gt; &gt; +            VideoTrigger,
&gt; &gt; +            PluginTrigger,
&gt; &gt; +            CanvasTrigger,
&gt; &gt; +            AnimationTrigger,
&gt; &gt; +            CompositorTriggerLast
&gt; &gt; +        };
&gt; &gt; +        // Returns true if the accelerated compositor should be triggered in the
&gt; &gt; +        // presence of a given element in the page.
&gt; &gt; +        virtual bool doAcceleratedCompositingFor(CompositorTrigger) const { return true; }
&gt; 
&gt; I think this would be better named as allowAcceleratedCompositingFor().
&gt; 
&gt; I also think that it would be better for it to simply return a bitfield (or WTF::Bitmap), so that only one call is required. Since there are no other uses of WTF::BitMap in WebCore that I can find, maybe an old-schoold bitmap is more appropriate. In that case, I&apos;d declare the enum like:
&gt; 
&gt; enum CompositingTrigger {
&gt;   ThreeDTransformTrigger = 1 &lt;&lt; 0,
&gt;   VideoTrigger = 1 &lt;&lt; 1,
&gt;   ...
&gt;   AllTriggers = 0xFFFFFFFF;
&gt; };
&gt; typedef unsigned CompositingTriggerFlags;
&gt; 
&gt; virtual CompositingTriggerFlags allowedCompositingTriggers() const;
&gt; 
&gt; If we do this, then we can eliminate allowsAcceleratedCompositing() too.

I like that approach.  Done!

&gt; 
&gt; You should probably have separate enum values for 2D canvas and WebGL.
&gt; 
&gt; &gt; WebCore/rendering/RenderLayer.h:292
&gt; &gt; +    bool canRender3dTransforms() const;
&gt; 
&gt; We normally use 3DTransforms, not 3dTransforms

Done.

&gt; 
&gt; &gt; WebCore/rendering/RenderLayerCompositor.cpp:154
&gt; &gt; +            for (unsigned i = 0; i &lt; ChromeClient::CompositorTriggerLast; ++i) {
&gt; &gt; +                if (chromeClient-&gt;doAcceleratedCompositingFor(static_cast&lt;ChromeClient::CompositorTrigger&gt;(i)))
&gt; &gt; +                    compositorTriggers.set(i);
&gt; 
&gt; If we change ChromeClient to return a bitfield, then there&apos;s no need to loop here.

Done.

&gt; 
&gt; &gt; WebCore/rendering/RenderLayerCompositor.cpp:163
&gt; &gt; -    if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter)
&gt; &gt; +    if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || compositorTriggersChanged)
&gt; &gt;          setCompositingLayersNeedRebuild();
&gt; 
&gt; I don&apos;t like the fact that ChromeClient can return different flags (hence the need for compositorTriggersChanged). I think the contract should be that the flags can never change. If they can change, then there needs to be a new entry point that gets called when they do. If the flags would only ever change for developers toggling some debug settings, then this is OK.
&gt; 
&gt; &gt; WebCore/rendering/RenderLayerCompositor.h:240
&gt; &gt; +    typedef WTF::Bitmap&lt;ChromeClient::CompositorTriggerLast&gt; CompositorTriggerBitfield;
&gt; &gt; +    CompositorTriggerBitfield m_compositorTriggers;
&gt; 
&gt; This could just be the CompositingTriggerFlags returned from ChromeClient, though it&apos;s a bit weird to reuse ChromeClient&apos;s enum everywhere.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314793</commentid>
    <comment_count>9</comment_count>
      <attachid>75095</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-29 18:14:41 -0800</bug_when>
    <thetext>Comment on attachment 75095
Patch addressing recent review comments

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

&gt; WebCore/rendering/RenderLayerCompositor.cpp:97
&gt; +    , m_compositingTriggers(0)

I think this should default to AllTriggers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314795</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-29 18:18:26 -0800</bug_when>
    <thetext>Attachment 75095 did not build on qt:
Build output: http://queues.webkit.org/results/6399113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314859</commentid>
    <comment_count>11</comment_count>
      <attachid>75104</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-29 22:17:34 -0800</bug_when>
    <thetext>Created attachment 75104
Fixing Qt compile issue and style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314860</commentid>
    <comment_count>12</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-29 22:18:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 75095 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75095&amp;action=review
&gt; 
&gt; &gt; WebCore/rendering/RenderLayerCompositor.cpp:97
&gt; &gt; +    , m_compositingTriggers(0)
&gt; 
&gt; I think this should default to AllTriggers.

Done.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314931</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-30 03:09:52 -0800</bug_when>
    <thetext>Attachment 75104 did not build on win:
Build output: http://queues.webkit.org/results/6400112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315248</commentid>
    <comment_count>14</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-11-30 12:42:30 -0800</bug_when>
    <thetext>Committed r72954: &lt;http://trac.webkit.org/changeset/72954&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74768</attachid>
            <date>2010-11-24 09:22:44 -0800</date>
            <delta_ts>2010-11-29 15:42:29 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>compositedLayerControl_49998.txt</filename>
            <type>text/plain</type>
            <size>9755</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjY0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMTEtMjMgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0cyBvdmVyIHdo
ZW4gdG8gdHVybiBvbiBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTk4CisKKyAgICAgICAg
VGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBub3cgY2hlY2tzIHdpdGggdGhlIGNocm9tZSBjbGll
bnQgd2hldGhlcgorICAgICAgICAzZCB0cmFuc2Zvcm1zLCB2aWRlbywgcGx1Z2lucywgY2FudmFz
IGFuZCBhbmltYXRpb24gcmVxdWlyZSBzd2l0Y2hpbmcgb3ZlcgorICAgICAgICB0byB0aGUgY29t
cG9zaXRlZCBwYXRoLiBMYXllcnMgdGhhdCBvdmVybGFwIGNvbXBvc2l0ZWQgY29udGVudCB3aWxs
IHN0aWxsIHR1cm4gaW50bworICAgICAgICBjb21wb3NpdGVkIGxheWVycyByZWdhcmRsZXNzIG9m
IHRoZSBzZXR0aW5nLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKIDIwMTAt
MTEtMjMgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNw
cAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw4IEBAIHN0YXRpYyBib29sIHRyYW5zZm9y
bV8zZE1lZGlhRmVhdHVyZUV2YWwKICAgICBib29sIHRocmVlREVuYWJsZWQgPSBmYWxzZTsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcg
PSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgIHRocmVlREVuYWJsZWQgPSB2aWV3
LT5jb21wb3NpdG9yKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICAgICAgdGhy
ZWVERW5hYmxlZCA9IHZpZXctPmNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+
Y2xpZW50KCktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3IzRFRyYW5zZm9ybXMoKTsK
ICNlbmRpZgogCiAgICAgcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyID0gdGhyZWVERW5hYmxlZDsK
SW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDE2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50
IGNhbiByZW5kZXIgdGhlIGNvbXBvc2l0ZWQgbGF5ZXIsCiAgICAgICAgIC8vIHJlZ2FyZGxlc3Mg
b2YgdGhlIHNldHRpbmdzLgogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIDNkIHRyYW5zZm9ybXMgY2FuIHRyaWdnZXIgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0
b3IuCisgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
M0RUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdmlkZW8gY2FuIHRyaWdnZXIgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IuCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW8o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBjYW52
YXMgY2FuIHRyaWdnZXIgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IuCisgICAgICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcGx1Z2lucyBjYW4gdHJp
Z2dlciB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRvci4KKyAgICAgICAgdmlydHVhbCBib29sIGFs
bG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW4oKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBjc3MgYW5pbWF0aW9uIGNhbiB0cmlnZ2Vy
IHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdG9yLgorICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JO
b2RlKGNvbnN0IE5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkCiBib29sIFJlbmRlckxheWVyOjpoYXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkgY29uc3QKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgcmV0dXJuIGNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
OworICAgIHJldHVybiBjb21wb3NpdG9yKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSAm
JiBjb21wb3NpdG9yKCktPmluQ29tcG9zaXRpbmdNb2RlKCk7CiAjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCShyZXZpc2lvbiA3MjY0MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDExIEBAIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6UmVuZGVyTGF5ZXJDb21wb3MKICAgICAsIG1fcm9vdFBsYXRmb3Jt
TGF5ZXIoMCkKICAgICAsIG1fdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNUaW1lcih0aGlzLCAmUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQpCiAg
ICAgLCBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSkKKyAgICAsIG1fdXNlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvcjNEVHJhbnNmb3Jtcyh0cnVlKQorICAgICwgbV91c2VBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yVmlkZW8odHJ1ZSkKKyAgICAsIG1fdXNlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckNhbnZhcyh0cnVlKQorICAgICwgbV91c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yUGx1Z2luKHRydWUpCisgICAgLCBtX3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmlt
YXRpb24odHJ1ZSkKICAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKICAgICAsIG1fc2hv
d1JlcGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGluZ0NvbnN1bHRzT3Zlcmxh
cCh0cnVlKQpAQCAtMTMwLDYgKzEzNSwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y2FjaGVBY2NlbGVyCiAgICAgYm9vbCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nID0gZmFsc2U7
CiAgICAgYm9vbCBzaG93RGVidWdCb3JkZXJzID0gZmFsc2U7CiAgICAgYm9vbCBzaG93UmVwYWlu
dENvdW50ZXIgPSBmYWxzZTsKKyAgICBib29sIHVzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3Iz
RFRyYW5zZm9ybXMgPSBmYWxzZTsKKyAgICBib29sIHVzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JWaWRlbyA9IGZhbHNlOworICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNh
bnZhcyA9IGZhbHNlOworICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdp
biA9IGZhbHNlOworICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlv
biA9IGZhbHNlOwogICAgIAogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3JlbmRlclZp
ZXctPmRvY3VtZW50KCktPnNldHRpbmdzKCkpIHsKICAgICAgICAgaGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZyA9IHNldHRpbmdzLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOwpAQCAt
MTQyLDE0ICsxNTIsMzAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhY2hlQWNjZWxl
cgogICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKSB7CiAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CiAgICAgICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotICAgICAgICBpZiAocGFnZSkKLSAg
ICAgICAgICAgIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICAgICAgaWYgKHBhZ2Up
IHsKKyAgICAgICAgICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpOworICAgICAgICAgICAgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGNo
cm9tZUNsaWVudC0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAgICAgICAgICAg
dXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvcjNEVHJhbnNmb3JtcyA9IGNocm9tZUNsaWVudC0+
YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvcjNEVHJhbnNmb3JtcygpOworICAgICAgICAg
ICAgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvID0gY2hyb21lQ2xpZW50LT5hbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW8oKTsKKyAgICAgICAgICAgIHVzZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXMgPSBjaHJvbWVDbGllbnQtPmFsbG93c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JDYW52YXMoKTsKKyAgICAgICAgICAgIHVzZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JQbHVnaW4gPSBjaHJvbWVDbGllbnQtPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JQbHVnaW4oKTsKKyAgICAgICAgICAgIHVzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JBbmltYXRpb24gPSBjaHJvbWVDbGllbnQtPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JBbmltYXRpb24oKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChoYXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nICE9IG1faGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB8fCBzaG93RGVidWdC
b3JkZXJzICE9IG1fc2hvd0RlYnVnQm9yZGVycyB8fCBzaG93UmVwYWludENvdW50ZXIgIT0gbV9z
aG93UmVwYWludENvdW50ZXIpCisgICAgaWYgKGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgIT0g
bV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHx8IHNob3dEZWJ1Z0JvcmRlcnMgIT0gbV9zaG93
RGVidWdCb3JkZXJzIHx8IHNob3dSZXBhaW50Q291bnRlciAhPSBtX3Nob3dSZXBhaW50Q291bnRl
cgorICAgICAgICB8fCB1c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yM0RUcmFuc2Zvcm1zICE9
IG1fdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvcjNEVHJhbnNmb3JtcworICAgICAgICB8fCB1
c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW8gIT0gbV91c2VBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yVmlkZW8gfHwgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhcyAhPSBt
X3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXMKKyAgICAgICAgfHwgdXNlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbiAhPSBtX3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JQbHVnaW4gfHwgdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbiAhPSBtX3Vz
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb24pCiAgICAgICAgIHNldENvbXBvc2l0
aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgCiAgICAgbV9oYXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nID0gaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZzsKKyAgICBtX3VzZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3IzRFRyYW5zZm9ybXMgPSB1c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yM0RUcmFuc2Zvcm1zOworICAgIG1fdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVv
ID0gdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvOworICAgIG1fdXNlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckNhbnZhcyA9IHVzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52
YXM7CisgICAgbV91c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luID0gdXNlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbjsKKyAgICBtX3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JBbmltYXRpb24gPSB1c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uOwor
CiAgICAgbV9zaG93RGVidWdCb3JkZXJzID0gc2hvd0RlYnVnQm9yZGVyczsKICAgICBtX3Nob3dS
ZXBhaW50Q291bnRlciA9IHNob3dSZXBhaW50Q291bnRlcjsKIH0KQEAgLTExMjIsMTQgKzExNDgs
MTQgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogICAgICAgICBs
YXllciA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpLT5sYXllcigpOwogICAgIH0K
ICAgICAvLyBUaGUgcm9vdCBsYXllciBhbHdheXMgaGFzIGEgY29tcG9zaXRpbmcgbGF5ZXIsIGJ1
dCBpdCBtYXkgbm90IGhhdmUgYmFja2luZy4KLSAgICByZXR1cm4gcmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclRyYW5zZm9ybShyZW5kZXJlcikKLSAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0
aW5nRm9yVmlkZW8ocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGlu
Z0ZvckNhbnZhcyhyZW5kZXJlcikKLSAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yUGx1Z2luKHJlbmRlcmVyKQotICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JJRnJhbWUocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPmJh
Y2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbgorICAgIHJldHVy
biAobV91c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yM0RUcmFuc2Zvcm1zICYmIHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0ocmVuZGVyZXIpKQorICAgICAgICAgICAgIHx8IChtX3Vz
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlbyAmJiByZXF1aXJlc0NvbXBvc2l0aW5nRm9y
VmlkZW8ocmVuZGVyZXIpKQorICAgICAgICAgICAgIHx8IChtX3VzZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JDYW52YXMgJiYgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhyZW5kZXJlcikp
CisgICAgICAgICAgICAgfHwgKG1fdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbiAm
JiByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKHJlbmRlcmVyKSkKKyAgICAgICAgICAgICB8
fCAocmVxdWlyZXNDb21wb3NpdGluZ0ZvcklGcmFtZShyZW5kZXJlcikpCisgICAgICAgICAgICAg
fHwgKG1fdXNlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvcjNEVHJhbnNmb3JtcyAmJiByZW5kZXJl
ci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlk
ZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhsYXllcikK
LSAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJlbmRlcmVy
KTsKKyAgICAgICAgICAgICB8fCAobV91c2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uICYmIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpKTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJM
YXllciogbGF5ZXIpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDYgKzIzMiwxMiBAQCBwcml2
YXRlOgogICAgIFRpbWVyPFJlbmRlckxheWVyQ29tcG9zaXRvcj4gbV91cGRhdGVDb21wb3NpdGlu
Z0xheWVyc1RpbWVyOwogCiAgICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7Cisg
ICAgYm9vbCBtX3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3IzRFRyYW5zZm9ybXM7CisgICAg
Ym9vbCBtX3VzZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlbzsKKyAgICBib29sIG1fdXNl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhczsKKyAgICBib29sIG1fdXNlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvclBsdWdpbjsKKyAgICBib29sIG1fdXNlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckFuaW1hdGlvbjsKKwogICAgIGJvb2wgbV9zaG93RGVidWdCb3JkZXJzOwogICAgIGJv
b2wgbV9zaG93UmVwYWludENvdW50ZXI7CiAgICAgYm9vbCBtX2NvbXBvc2l0aW5nQ29uc3VsdHNP
dmVybGFwOwo=
</data>
<flag name="review"
          id="65445"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75074</attachid>
            <date>2010-11-29 15:42:29 -0800</date>
            <delta_ts>2010-11-29 18:04:19 -0800</delta_ts>
            <desc>Patch adjusted per reviewer comments</desc>
            <filename>compositedLayerControl_49998_1.txt</filename>
            <type>text/plain</type>
            <size>13138</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjgzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMTEtMjkgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0cyBvdmVyIHdo
ZW4gdG8gdHVybiBvbiBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTk4CisKKyAgICAgICAg
VGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBub3cgY2hlY2tzIHdpdGggdGhlIGNocm9tZSBjbGll
bnQgd2hldGhlcgorICAgICAgICAzZCB0cmFuc2Zvcm1zLCB2aWRlbywgcGx1Z2lucywgY2FudmFz
IGFuZCBhbmltYXRpb24gcmVxdWlyZSBzd2l0Y2hpbmcgb3ZlcgorICAgICAgICB0byB0aGUgY29t
cG9zaXRlZCBwYXRoLiBMYXllcnMgdGhhdCBvdmVybGFwIGNvbXBvc2l0ZWQgY29udGVudCB3aWxs
IHN0aWxsIHR1cm4gaW50bworICAgICAgICBjb21wb3NpdGVkIGxheWVycyByZWdhcmRsZXNzIG9m
IHRoZSBzZXR0aW5nLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAg
ICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZG9BY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhblJlbmRlcjNkVHJh
bnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlTGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpjYWNoZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhblJlbmRlcjNkVHJhbnNmb3Jtcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaDoKKwogMjAxMC0xMS0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDog
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0
ODAsNyBAQCBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVFdmFsCiAgICAgYm9v
bCB0aHJlZURFbmFibGVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQot
ICAgICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRvcigpLT5oYXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCk7CisgICAgICAgIHRocmVlREVuYWJsZWQgPSB2aWV3LT5jb21wb3NpdG9y
KCktPmNhblJlbmRlcjNkVHJhbnNmb3JtcygpOwogI2VuZGlmCiAKICAgICByZXR1cm5WYWx1ZUlm
Tm9QYXJhbWV0ZXIgPSB0aHJlZURFbmFibGVkOwpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNp
b24gNzI2NDMpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzNiw2ICsyMzYsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1
cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgY2FuIHJlbmRlciB0aGUgY29tcG9zaXRlZCBs
YXllciwKICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgICAgIGVudW0gQ29tcG9zaXRvclRyaWdnZXIgeworICAgICAgICAgICAg
VGhyZWVEVHJhbnNmb3JtVHJpZ2dlciwKKyAgICAgICAgICAgIFZpZGVvVHJpZ2dlciwKKyAgICAg
ICAgICAgIFBsdWdpblRyaWdnZXIsCisgICAgICAgICAgICBDYW52YXNUcmlnZ2VyLAorICAgICAg
ICAgICAgQW5pbWF0aW9uVHJpZ2dlciwKKyAgICAgICAgICAgIENvbXBvc2l0b3JUcmlnZ2VyTGFz
dAorICAgICAgICB9OworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0b3Igc2hvdWxkIGJlIHRyaWdnZXJlZCBpbiB0aGUKKyAgICAgICAgLy8gcHJlc2Vu
Y2Ugb2YgYSBnaXZlbiBlbGVtZW50IGluIHRoZSBwYWdlLgorICAgICAgICB2aXJ0dWFsIGJvb2wg
ZG9BY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yKENvbXBvc2l0b3JUcmlnZ2VyKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAjZW5kaWYKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDE1IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6Omhhc0FjY2VsZXJhdGVkQ29tcG9zaXQKICNlbmRpZgogfQogCitib29s
IFJlbmRlckxheWVyOjpjYW5SZW5kZXIzZFRyYW5zZm9ybXMoKSBjb25zdAoreworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICByZXR1cm4gY29tcG9zaXRvcigpLT5jYW5SZW5k
ZXIzZFRyYW5zZm9ybXMoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZ3MgZmxhZ3MsIEludFBvaW50KiBjYWNoZWRPZmZzZXQpCiB7CiAgICAgaWYgKGZsYWdz
ICYgRG9GdWxsUmVwYWludCkgewpAQCAtNDI5LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgICAgIEFTU0VSVChib3gpOwogICAgICAgICBtX3RyYW5z
Zm9ybS0+bWFrZUlkZW50aXR5KCk7CiAgICAgICAgIGJveC0+c3R5bGUoKS0+YXBwbHlUcmFuc2Zv
cm0oKm1fdHJhbnNmb3JtLCBib3gtPmJvcmRlckJveFJlY3QoKS5zaXplKCksIFJlbmRlclN0eWxl
OjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUo
Km1fdHJhbnNmb3JtLCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOworICAgICAgICBtYWtl
TWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGNhblJlbmRlcjNkVHJhbnNmb3JtcygpKTsK
ICAgICB9CiAKICAgICBpZiAoaGFkM0RUcmFuc2Zvcm0gIT0gaGFzM0RUcmFuc2Zvcm0oKSkKQEAg
LTQ0Niw3ICs0NTUsNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3VycmVu
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07CiAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5hbmltYXRpb24oKS0+Z2V0QW5p
bWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogICAgICAgICBzdHlsZS0+YXBwbHlU
cmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKS5zaXpl
KCksIFJlbmRlclN0eWxlOjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAgICAgICAgbWFrZU1h
dHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
KTsKKyAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVy
M2RUcmFuc2Zvcm1zKCkpOwogICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKICAgICB9CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNzI2NDMpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNyAr
Mjg4LDkgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBpcyBlbmFibGVkCiAgICAgYm9vbCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkgY29uc3Q7Ci0gICAgCisKKyAgICBib29sIGNhblJlbmRlcjNkVHJhbnNmb3JtcygpIGNv
bnN0OworCiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiAgICAgCiAgICAgZW51bSBV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA3MjY0MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTGF5ZXJUcmFuCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdDsKICAgICBpZiAobV9vd25pbmdMYXllci0+aGFzVHJhbnNmb3JtKCkpIHsKICAg
ICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHQsIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5i
b3JkZXJCb3hSZWN0KCkuc2l6ZSgpLCBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdp
bik7Ci0gICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKHQsIGNvbXBvc2l0b3IoKS0+aGFzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpKTsKKyAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUodCwg
Y29tcG9zaXRvcigpLT5jYW5SZW5kZXIzZFRyYW5zZm9ybXMoKSk7CiAgICAgfQogICAgIAogICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0VHJhbnNmb3JtKHQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA3MjY0MykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCw3ICsxMzAsOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FjaGVBY2NlbGVy
CiAgICAgYm9vbCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nID0gZmFsc2U7CiAgICAgYm9vbCBz
aG93RGVidWdCb3JkZXJzID0gZmFsc2U7CiAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgPSBm
YWxzZTsKLSAgICAKKworICAgIENvbXBvc2l0b3JUcmlnZ2VyQml0ZmllbGQgY29tcG9zaXRvclRy
aWdnZXJzOworCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcmVuZGVyVmlldy0+ZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKSkgewogICAgICAgICBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
ID0gc2V0dGluZ3MtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7CiAgICAgICAgIHNo
b3dEZWJ1Z0JvcmRlcnMgPSBzZXR0aW5ncy0+c2hvd0RlYnVnQm9yZGVycygpOwpAQCAtMTM5LDIx
ICsxNDEsMzkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhY2hlQWNjZWxlcgogCiAg
ICAgLy8gV2UgYWxsb3cgdGhlIGNocm9tZSB0byBvdmVycmlkZSB0aGUgc2V0dGluZ3MsIGluIGNh
c2UgdGhlIHBhZ2UgaXMgcmVuZGVyZWQKICAgICAvLyBvbiBhIGNocm9tZSB0aGF0IGRvZXNuJ3Qg
YWxsb3cgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCisgICAgYm9vbCBjb21wb3NpdG9yVHJpZ2dl
cnNDaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpIHsK
ICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+ZnJhbWUo
KTsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0gICAg
ICAgIGlmIChwYWdlKQotICAgICAgICAgICAgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwor
ICAgICAgICBpZiAocGFnZSkgeworICAgICAgICAgICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGll
bnQgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCk7CisgICAgICAgICAgICBoYXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nID0gY2hyb21lQ2xpZW50LT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBDaHJvbWVDbGllbnQ6
OkNvbXBvc2l0b3JUcmlnZ2VyTGFzdDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNocm9t
ZUNsaWVudC0+ZG9BY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yKHN0YXRpY19jYXN0PENocm9tZUNs
aWVudDo6Q29tcG9zaXRvclRyaWdnZXI+KGkpKSkKKyAgICAgICAgICAgICAgICAgICAgY29tcG9z
aXRvclRyaWdnZXJzLnNldChpKTsKKworICAgICAgICAgICAgICAgIGlmIChtX2NvbXBvc2l0b3JU
cmlnZ2Vycy5nZXQoaSkgIT0gY29tcG9zaXRvclRyaWdnZXJzLmdldChpKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29tcG9zaXRvclRyaWdnZXJzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyAh
PSBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgfHwgc2hvd0RlYnVnQm9yZGVycyAhPSBtX3No
b3dEZWJ1Z0JvcmRlcnMgfHwgc2hvd1JlcGFpbnRDb3VudGVyICE9IG1fc2hvd1JlcGFpbnRDb3Vu
dGVyKQorICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nICE9IG1faGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyB8fCBzaG93RGVidWdCb3JkZXJzICE9IG1fc2hvd0RlYnVnQm9yZGVycyB8
fCBzaG93UmVwYWludENvdW50ZXIgIT0gbV9zaG93UmVwYWludENvdW50ZXIgfHwgY29tcG9zaXRv
clRyaWdnZXJzQ2hhbmdlZCkKICAgICAgICAgc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWls
ZCgpOwotICAgICAgICAKKwogICAgIG1faGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGhhc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmc7CisgICAgbV9jb21wb3NpdG9yVHJpZ2dlcnMgPSBjb21wb3Np
dG9yVHJpZ2dlcnM7CisKICAgICBtX3Nob3dEZWJ1Z0JvcmRlcnMgPSBzaG93RGVidWdCb3JkZXJz
OwogICAgIG1fc2hvd1JlcGFpbnRDb3VudGVyID0gc2hvd1JlcGFpbnRDb3VudGVyOwogfQogCiti
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuUmVuZGVyM2RUcmFuc2Zvcm1zKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpICYmIG1fY29tcG9zaXRv
clRyaWdnZXJzLmdldChDaHJvbWVDbGllbnQ6OlRocmVlRFRyYW5zZm9ybVRyaWdnZXIpOworfQor
CiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVi
dWlsZChib29sIG5lZWRSZWJ1aWxkKQogewogICAgIGlmIChpbkNvbXBvc2l0aW5nTW9kZSgpKQpA
QCAtMTEyNyw3ICsxMTQ3LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVz
Q29tcAogICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMocmVuZGVy
ZXIpCiAgICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclBsdWdpbihyZW5kZXJl
cikKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9ySUZyYW1lKHJlbmRlcmVy
KQotICAgICAgICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxpdHko
KSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4KKyAgICAgICAgICAgICB8fCAoY2FuUmVuZGVy
M2RUcmFuc2Zvcm1zKCkgJiYgcmVuZGVyZXItPnN0eWxlKCktPmJhY2tmYWNlVmlzaWJpbGl0eSgp
ID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbikKICAgICAgICAgICAgICB8fCBjbGlwc0NvbXBv
c2l0aW5nRGVzY2VuZGFudHMobGF5ZXIpCiAgICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvckFuaW1hdGlvbihyZW5kZXJlcik7CiB9CkBAIC0xMTgzLDYgKzEyMDMsOSBAQCBib29s
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHNDb21wb3NpCiAKIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlck9iamVjdCog
cmVuZGVyZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbXBvc2l0b3JUcmlnZ2Vycy5nZXQoQ2hy
b21lQ2xpZW50OjpUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgLy8g
Tm90ZSB0aGF0IHdlIGFzayB0aGUgcmVuZGVyZXIgaWYgaXQgaGFzIGEgdHJhbnNmb3JtLCBiZWNh
dXNlIHRoZSBzdHlsZSBtYXkgaGF2ZSB0cmFuc2Zvcm1zLAogICAgIC8vIGJ1dCB0aGUgcmVuZGVy
ZXIgbWF5IGJlIGFuIGlubGluZSB0aGF0IGRvZXNuJ3Qgc3VwcHBvcnQgdGhlbS4KQEAgLTExOTEs
NiArMTIxNCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAog
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JWaWRlbyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogeworICAgIGlmICghbV9jb21wb3NpdG9yVHJp
Z2dlcnMuZ2V0KENocm9tZUNsaWVudDo6VmlkZW9UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAocmVuZGVyZXItPmlzVmlkZW8oKSkgewog
ICAgICAgICBSZW5kZXJWaWRlbyogdmlkZW8gPSB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKTsKQEAg
LTEyMTcsNiArMTI0Miw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXAKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JD
YW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKIHsKKyAgICBpZiAoIW1fY29tcG9z
aXRvclRyaWdnZXJzLmdldChDaHJvbWVDbGllbnQ6OkNhbnZhc1RyaWdnZXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBpZiAocmVuZGVyZXItPmlzQ2FudmFzKCkpIHsKICAgICAgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50
Kj4ocmVuZGVyZXItPm5vZGUoKSk7CiAgICAgICAgIHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0Nv
bnRleHQoKSAmJiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZCgpOwpA
QCAtMTIyNiw2ICsxMjU0LDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVz
Q29tcAogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clBsdWdpbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogeworICAgIGlmICghbV9jb21w
b3NpdG9yVHJpZ2dlcnMuZ2V0KENocm9tZUNsaWVudDo6UGx1Z2luVHJpZ2dlcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIGJvb2wgY29tcG9zaXRlID0gKHJlbmRlcmVyLT5pc0VtYmVk
ZGVkT2JqZWN0KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyZW5kZXJlciktPmFsbG93c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgICAgICAgIHx8IChyZW5kZXJlci0+
aXNBcHBsZXQoKSAmJiB0b1JlbmRlckFwcGxldChyZW5kZXJlciktPmFsbG93c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKSk7CiAgICAgaWYgKCFjb21wb3NpdGUpCkBAIC0xMjcwLDYgKzEzMDEsOSBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpIGNvbnN0CiB7CisgICAgaWYgKCFtX2NvbXBvc2l0b3JUcmlnZ2Vycy5n
ZXQoQ2hyb21lQ2xpZW50OjpBbmltYXRpb25UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgaWYgKEFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1Db250cm9sbGVyID0gcmVuZGVy
ZXItPmFuaW1hdGlvbigpKSB7CiAgICAgICAgIHJldHVybiAoYW5pbUNvbnRyb2xsZXItPmlzUnVu
bmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5T3BhY2l0eSkgJiYg
aW5Db21wb3NpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHx8IGFuaW1Db250cm9sbGVyLT5pc1J1
bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAko
cmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAKICNpZm5kZWYgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yX2gKICNkZWZpbmUgUmVuZGVyTGF5ZXJDb21wb3NpdG9yX2gKIAorI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTY3LDcgKzY5LDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZAogICAg
IGJvb2wgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZzsgfQotICAgIAorCisgICAgYm9vbCBjYW5SZW5kZXIzZFRyYW5z
Zm9ybXMoKSBjb25zdDsKKwogICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fc2hvd0RlYnVnQm9yZGVyczsgfQogICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG93UmVwYWludENvdW50ZXI7IH0KICAgICAKQEAgLTIzMiw2ICsy
MzYsOSBAQCBwcml2YXRlOgogICAgIFRpbWVyPFJlbmRlckxheWVyQ29tcG9zaXRvcj4gbV91cGRh
dGVDb21wb3NpdGluZ0xheWVyc1RpbWVyOwogCiAgICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmc7CisgICAgdHlwZWRlZiBXVEY6OkJpdG1hcDxDaHJvbWVDbGllbnQ6OkNvbXBvc2l0
b3JUcmlnZ2VyTGFzdD4gQ29tcG9zaXRvclRyaWdnZXJCaXRmaWVsZDsKKyAgICBDb21wb3NpdG9y
VHJpZ2dlckJpdGZpZWxkIG1fY29tcG9zaXRvclRyaWdnZXJzOworCiAgICAgYm9vbCBtX3Nob3dE
ZWJ1Z0JvcmRlcnM7CiAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRlcjsKICAgICBib29sIG1f
Y29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXA7Cg==
</data>
<flag name="review"
          id="65802"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="65803"
          type_id="3"
          status="-"
          setter="vangelis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75095</attachid>
            <date>2010-11-29 18:04:19 -0800</date>
            <delta_ts>2010-11-29 22:17:34 -0800</delta_ts>
            <desc>Patch addressing recent review comments</desc>
            <filename>compositedLayerControl_49998_2.txt</filename>
            <type>text/plain</type>
            <size>17297</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mjg1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTEtMjkgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0cyBvdmVyIHdo
ZW4gdG8gdHVybiBvbiBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTk4CisKKyAgICAgICAg
VGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBub3cgY2hlY2tzIHdpdGggdGhlIGNocm9tZSBjbGll
bnQgd2hldGhlcgorICAgICAgICAzZCB0cmFuc2Zvcm1zLCB2aWRlbywgcGx1Z2lucywgY2FudmFz
IGFuZCBhbmltYXRpb24gcmVxdWlyZSBzd2l0Y2hpbmcgb3ZlcgorICAgICAgICB0byB0aGUgY29t
cG9zaXRlZCBwYXRoLiBMYXllcnMgdGhhdCBvdmVybGFwIGNvbXBvc2l0ZWQgY29udGVudCB3aWxs
IHN0aWxsIHR1cm4gaW50bworICAgICAgICBjb21wb3NpdGVkIGxheWVycyByZWdhcmRsZXNzIG9m
IHRoZSBzZXR0aW5nLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAg
ICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FuUmVuZGVyM0RUcmFu
c2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVMYXllclRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhY2hlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JWaWRlbyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCiAyMDEwLTExLTI5ICBDaHJpcyBSb2dlcnMgIDxj
cm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxs
LgpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDcyNjQzKQor
KysgV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4MCw3ICs0ODAsNyBAQCBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVFdmFs
CiAgICAgYm9vbCB0aHJlZURFbmFibGVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKQotICAgICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRvcigpLT5oYXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisgICAgICAgIHRocmVlREVuYWJsZWQgPSB2aWV3LT5j
b21wb3NpdG9yKCktPmNhblJlbmRlcjNEVHJhbnNmb3JtcygpOwogI2VuZGlmCiAKICAgICByZXR1
cm5WYWx1ZUlmTm9QYXJhbWV0ZXIgPSB0aHJlZURFbmFibGVkOwpJbmRleDogV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiw2ICsyMzYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgY2FuIHJlbmRlciB0aGUgY29t
cG9zaXRlZCBsYXllciwKICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIGVudW0gQ29tcG9zaXRpbmdUcmlnZ2VyIHsKKyAg
ICAgICAgICAgIFRocmVlRFRyYW5zZm9ybVRyaWdnZXIgPSAxIDw8IDAsCisgICAgICAgICAgICBW
aWRlb1RyaWdnZXIgPSAxIDw8IDEsCisgICAgICAgICAgICBQbHVnaW5UcmlnZ2VyID0gMSA8PCAy
LAorICAgICAgICAgICAgQ2FudmFzVHJpZ2dlciA9IDEgPDwgMywKKyAgICAgICAgICAgIEFuaW1h
dGlvblRyaWdnZXIgPSAxIDw8IDQsCisgICAgICAgICAgICBBbGxUcmlnZ2VycyA9IDB4RkZGRkZG
RkYKKyAgICAgICAgfTsKKyAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBDb21wb3NpdGluZ1RyaWdn
ZXJGbGFnczsKKworICAgICAgICAvLyBSZXR1cm5zIGEgYml0ZmllbGQgaW5kaWNhdGluZyBjb25k
aXRpb25zIHRoYXQgY2FuIHRyaWdnZXIgdGhlIGNvbXBvc2l0b3IuCisgICAgICAgIHZpcnR1YWwg
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25z
dCB7IHJldHVybiBBbGxUcmlnZ2VyczsgfQogI2VuZGlmCiAKICAgICAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSopIHsgcmV0dXJuIGZhbHNlOyB9
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA3MjY0MykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDYg
KzI0OSwxNSBAQCBib29sIFJlbmRlckxheWVyOjpoYXNBY2NlbGVyYXRlZENvbXBvc2l0CiAjZW5k
aWYKIH0KIAorYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkgY29uc3QK
K3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIGNvbXBvc2l0
b3IoKS0+Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhVcGRh
dGVMYXllclBvc2l0aW9uc0ZsYWdzIGZsYWdzLCBJbnRQb2ludCogY2FjaGVkT2Zmc2V0KQogewog
ICAgIGlmIChmbGFncyAmIERvRnVsbFJlcGFpbnQpIHsKQEAgLTQyOSw3ICs0MzgsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICBBU1NFUlQoYm94KTsKICAg
ICAgICAgbV90cmFuc2Zvcm0tPm1ha2VJZGVudGl0eSgpOwogICAgICAgICBib3gtPnN0eWxlKCkt
PmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgYm94LT5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgp
LCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9yaWdpbik7Ci0gICAgICAgIG1ha2VNYXRy
aXhSZW5kZXJhYmxlKCptX3RyYW5zZm9ybSwgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKTsK
KyAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRy
YW5zZm9ybXMoKSk7CiAgICAgfQogCiAgICAgaWYgKGhhZDNEVHJhbnNmb3JtICE9IGhhczNEVHJh
bnNmb3JtKCkpCkBAIC00NDYsNyArNDU1LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVy
TGF5ZXI6OmN1cnJlbgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3Jt
OwogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS0+YW5pbWF0
aW9uKCktPmdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKICAgICAgICAg
c3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zvcm0sIHJlbmRlckJveCgpLT5ib3JkZXJC
b3hSZWN0KCkuc2l6ZSgpLCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9yaWdpbik7Ci0g
ICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGhhc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKSk7CisgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zv
cm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKICAgICAgICAgcmV0dXJuIGN1cnJUcmFuc2Zv
cm07CiAgICAgfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9u
IDcyNjQzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg4LDcgKzI4OCw5IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZAogICAgIGJvb2wgaGFzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpIGNvbnN0OwotICAgIAorCisgICAgYm9vbCBjYW5SZW5kZXIzRFRy
YW5zZm9ybXMoKSBjb25zdDsKKwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogICAg
IAogICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnIHsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NyArMTMyLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUxheWVyVHJhbgogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5z
Zm9ybSgpKSB7CiAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0LCB0b1JlbmRlckJveChy
ZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVU
cmFuc2Zvcm1PcmlnaW4pOwotICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSh0LCBjb21wb3Np
dG9yKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSk7CisgICAgICAgIG1ha2VNYXRyaXhS
ZW5kZXJhYmxlKHQsIGNvbXBvc2l0b3IoKS0+Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwogICAg
IH0KICAgICAKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFRyYW5zZm9ybSh0KTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gNzI2
NDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVy
TGF5ZXJDb21wb3MKICAgICAsIG1fcm9vdFBsYXRmb3JtTGF5ZXIoMCkKICAgICAsIG1fdXBkYXRl
Q29tcG9zaXRpbmdMYXllcnNUaW1lcih0aGlzLCAmUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQpCiAgICAgLCBtX2hhc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcodHJ1ZSkKKyAgICAsIG1fY29tcG9zaXRpbmdUcmlnZ2VycygwKQogICAgICwgbV9z
aG93RGVidWdCb3JkZXJzKGZhbHNlKQogICAgICwgbV9zaG93UmVwYWludENvdW50ZXIoZmFsc2Up
CiAgICAgLCBtX2NvbXBvc2l0aW5nQ29uc3VsdHNPdmVybGFwKHRydWUpCkBAIC0xMzAsNyArMTMx
LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhY2hlQWNjZWxlcgogICAgIGJvb2wg
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGZhbHNlOwogICAgIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycyA9IGZhbHNlOwogICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyID0gZmFsc2U7Ci0gICAg
CisKICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgp
LT5zZXR0aW5ncygpKSB7CiAgICAgICAgIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBzZXR0
aW5ncy0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKICAgICAgICAgc2hvd0RlYnVn
Qm9yZGVycyA9IHNldHRpbmdzLT5zaG93RGVidWdCb3JkZXJzKCk7CkBAIC0xNDIsMTggKzE0Mywy
NiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FjaGVBY2NlbGVyCiAgICAgaWYgKGhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9yZW5k
ZXJWaWV3LT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1l
ID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0gICAgICAgIGlmIChwYWdlKQotICAgICAgICAgICAgaGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWxsb3dz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAgICAgICBpZiAocGFnZSkgeworICAgICAgICAg
ICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCk7
CisgICAgICAgICAgICBtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgPSBjaHJvbWVDbGllbnQtPmFsbG93
ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCk7CisgICAgICAgICAgICBoYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nID0gbV9jb21wb3NpdGluZ1RyaWdnZXJzOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgIT0gbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nIHx8IHNob3dEZWJ1Z0JvcmRlcnMgIT0gbV9zaG93RGVidWdCb3JkZXJzIHx8IHNob3dSZXBh
aW50Q291bnRlciAhPSBtX3Nob3dSZXBhaW50Q291bnRlcikKICAgICAgICAgc2V0Q29tcG9zaXRp
bmdMYXllcnNOZWVkUmVidWlsZCgpOwotICAgICAgICAKKwogICAgIG1faGFzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyA9IGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAgICAgbV9zaG93RGVidWdC
b3JkZXJzID0gc2hvd0RlYnVnQm9yZGVyczsKICAgICBtX3Nob3dSZXBhaW50Q291bnRlciA9IHNo
b3dSZXBhaW50Q291bnRlcjsKIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhblJl
bmRlcjNEVHJhbnNmb3JtcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSAmJiAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpUaHJl
ZURUcmFuc2Zvcm1UcmlnZ2VyKTsKK30KKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNl
dENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoYm9vbCBuZWVkUmVidWlsZCkKIHsKICAgICBp
ZiAoaW5Db21wb3NpdGluZ01vZGUoKSkKQEAgLTExMjcsNyArMTEzNiw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKICAgICAgICAgICAgICB8fCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yQ2FudmFzKHJlbmRlcmVyKQogICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JQbHVnaW4ocmVuZGVyZXIpCiAgICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21w
b3NpdGluZ0ZvcklGcmFtZShyZW5kZXJlcikKLSAgICAgICAgICAgICB8fCByZW5kZXJlci0+c3R5
bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuCisg
ICAgICAgICAgICAgfHwgKGNhblJlbmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHls
ZSgpLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAg
ICAgICAgICAgICAgfHwgY2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKGxheWVyKQogICAgICAg
ICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpOwogfQpA
QCAtMTE4Myw2ICsxMTkyLDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBzQ29t
cG9zaQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
clRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogeworICAgIGlmICghKG1f
Y29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6VGhyZWVEVHJhbnNmb3JtVHJpZ2dl
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIC8vIE5vdGUgdGhhdCB3ZSBhc2sgdGhlIHJlbmRlcmVyIGlm
IGl0IGhhcyBhIHRyYW5zZm9ybSwgYmVjYXVzZSB0aGUgc3R5bGUgbWF5IGhhdmUgdHJhbnNmb3Jt
cywKICAgICAvLyBidXQgdGhlIHJlbmRlcmVyIG1heSBiZSBhbiBpbmxpbmUgdGhhdCBkb2Vzbid0
IHN1cHBwb3J0IHRoZW0uCkBAIC0xMTkxLDYgKzEyMDMsOCBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKIHsK
KyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OlZpZGVvVHJp
Z2dlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaWYg
KHJlbmRlcmVyLT5pc1ZpZGVvKCkpIHsKICAgICAgICAgUmVuZGVyVmlkZW8qIHZpZGVvID0gdG9S
ZW5kZXJWaWRlbyhyZW5kZXJlcik7CkBAIC0xMjE3LDYgKzEyMzEsOSBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNv
bnN0CiB7CisgICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpD
YW52YXNUcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKHJlbmRlcmVy
LT5pc0NhbnZhcygpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0
aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOwogICAgICAgICBy
ZXR1cm4gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkgJiYgY2FudmFzLT5yZW5kZXJpbmdDb250
ZXh0KCktPmlzQWNjZWxlcmF0ZWQoKTsKQEAgLTEyMjYsNiArMTI0Myw5IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikg
Y29uc3QKIHsKKyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6
OlBsdWdpblRyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29sIGNvbXBv
c2l0ZSA9IChyZW5kZXJlci0+aXNFbWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVyRW1iZWRkZWRP
YmplY3QocmVuZGVyZXIpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCiAgICAgICAg
ICAgICAgICAgICB8fCAocmVuZGVyZXItPmlzQXBwbGV0KCkgJiYgdG9SZW5kZXJBcHBsZXQocmVu
ZGVyZXIpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOwogICAgIGlmICghY29tcG9z
aXRlKQpAQCAtMTI3MCw2ICsxMjkwLDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3Np
dGluZ0ZvckFuaW1hdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogeworICAgIGlm
ICghKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0aW9uVHJpZ2dl
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChBbmltYXRpb25Db250cm9sbGVy
KiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLT5hbmltYXRpb24oKSkgewogICAgICAgICByZXR1
cm4gKGFuaW1Db250cm9sbGVyLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVy
LCBDU1NQcm9wZXJ0eU9wYWNpdHkpICYmIGluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgICAg
ICB8fCBhbmltQ29udHJvbGxlci0+aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJl
ciwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgUmVuZGVyTGF5ZXJDb21wb3NpdG9yX2gKICNkZWZpbmUgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yX2gKIAorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAKQEAgLTY3LDcg
KzY4LDkgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZAogICAgIGJvb2wgaGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZzsgfQot
ICAgIAorCisgICAgYm9vbCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSBjb25zdDsKKwogICAgIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0RlYnVnQm9yZGVyczsg
fQogICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UmVw
YWludENvdW50ZXI7IH0KICAgICAKQEAgLTIzMiw2ICsyMzUsOCBAQCBwcml2YXRlOgogICAgIFRp
bWVyPFJlbmRlckxheWVyQ29tcG9zaXRvcj4gbV91cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVy
OwogCiAgICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CisgICAgQ2hyb21lQ2xp
ZW50OjpDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBtX2NvbXBvc2l0aW5nVHJpZ2dlcnM7CisKICAg
ICBib29sIG1fc2hvd0RlYnVnQm9yZGVyczsKICAgICBib29sIG1fc2hvd1JlcGFpbnRDb3VudGVy
OwogICAgIGJvb2wgbV9jb21wb3NpdGluZ0NvbnN1bHRzT3ZlcmxhcDsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzI4NTMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTEtMjkgIFZhbmdlbGlzIEtva2tldmlzICA8
dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFByb3ZpZGUgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0
cyBvdmVyIHdoZW4gdG8gdHVybiBvbiBhY2NlbGVyYXRlZA0KKyAgICAgICAgY29tcG9zaXRpbmcu
DQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5OTgN
CisNCisgICAgICAgIEFzIHBhcnQgb2YgdGhpcyBjaGFuZ2UsIHRoZSBvbGQgaGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyBtZXRob2Qgb24gdGhlIENocm9tZUNsaWVudA0KKyAgICAgICAgaGFzIG5v
dyBiZWVuIHJlcGxhY2VkIGJ5IGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzIHdoaWNoIHJldHVy
bnMgYSBiaXRmaWVsZCBvZg0KKyAgICAgICAgYWxsIHRoZSBmZWF0dXJlcyB3aGljaCBjYW4gdHJp
Z2dlciB0aGUgY29tcG9zaXRvci4NCisKKworICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6YWxsb3dlZENvbXBvc2l0
aW5nVHJpZ2dlcnMpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisKIDIwMTAt
MTEtMjkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcAkocmV2aXNpb24gNzI2NDMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsOSArODA3LDEyIEBAIHZvaWQg
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGkKICAgICBtX3dlYlZpZXctPnNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOwogfQogCi1ib29sIENocm9tZUNsaWVudEltcGw6OmFsbG93
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdAorQ2hyb21lQ2xpZW50OjpDb21wb3NpdGlu
Z1RyaWdnZXJGbGFncyBDaHJvbWVDbGllbnRJbXBsOjphbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vy
cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+YWxsb3dzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpOworICAgIGlmICghbV93ZWJWaWV3LT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIENocm9tZUNsaWVudDo6QWxs
VHJpZ2dlcnM7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmgJKHJldmlzaW9uIDcyNjQzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw4ICsxNTIsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gdG8gZG8gYW4gZWFnZXIgbGF5b3V0IGJlZm9yZSB0aGUgZHJhd2luZy4KICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIHN1cHBvcnRlZC4KLSAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0OworICAgIHZpcnR1
YWwgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBj
b25zdDsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5v
ZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Mjg1MykKKysrIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0xMS0y
OSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZSBtb3JlIGZpbmUg
Z3JhaW5lZCBjb250cm9sIHRvIHBvcnRzIG92ZXIgd2hlbiB0byB0dXJuIG9uIGFjY2VsZXJhdGVk
CisgICAgICAgIGNvbXBvc2l0aW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDk5OTgKKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCB0
aGUgb2xkIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgbWV0aG9kIG9uIHRoZSBDaHJvbWVDbGll
bnQKKyAgICAgICAgaGFzIG5vdyBiZWVuIHJlcGxhY2VkIGJ5IGFsbG93ZWRDb21wb3NpdGluZ1Ry
aWdnZXJzIHdoaWNoIHJldHVybnMgYSBiaXRmaWVsZCBvZgorICAgICAgICBhbGwgdGhlIGZlYXR1
cmVzIHdoaWNoIGNhbiB0cmlnZ2VyIHRoZSBjb21wb3NpdG9yLgorCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRRdDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisKIDIwMTAtMTEtMjUgIE5vcmJlcnQgTGVzZXIgIDxu
b3JiZXJ0Lmxlc2VyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29t
Ym9zLgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CShyZXZpc2lvbiA3MjY0MykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw5ICs2MTgsMTIgQEAgdm9pZCBDaHJvbWVD
bGllbnRRdDo6c2NoZWR1bGVDb21wb3NpdGluZwogICAgICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQo
KS0+bWFya0ZvclN5bmModHJ1ZSk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50UXQ6OmFsbG93c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdAorQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgQ2hy
b21lQ2xpZW50UXQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gKHBsYXRmb3JtUGFnZUNsaWVudCgpICYmIHBsYXRmb3JtUGFnZUNsaWVudCgpLT5hbGxv
d3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOworICAgIGlmIChwbGF0Zm9ybVBhZ2VDbGllbnQo
KSAmJiBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
KQorICAgICAgICByZXR1cm4gQWxsVHJpZ2dlcnM7CisKKyAgICByZXR1cm4gMDsKIH0KIAogI2Vu
ZGlmCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2
aXNpb24gNzI2NDMpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3Jh
cGhpY3NMYXllciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyU3luYygpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbXBvc2l0aW5nVHJpZ2dlckZs
YWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>
<flag name="review"
          id="65827"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75104</attachid>
            <date>2010-11-29 22:17:34 -0800</date>
            <delta_ts>2010-11-30 08:59:30 -0800</delta_ts>
            <desc>Fixing Qt compile issue and style errors</desc>
            <filename>compositedLayerControl_49998_5.txt</filename>
            <type>text/plain</type>
            <size>17318</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mjg2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTEtMjkgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0cyBvdmVyIHdo
ZW4gdG8gdHVybiBvbiBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTk4CisKKyAgICAgICAg
VGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBub3cgY2hlY2tzIHdpdGggdGhlIGNocm9tZSBjbGll
bnQgd2hldGhlcgorICAgICAgICAzZCB0cmFuc2Zvcm1zLCB2aWRlbywgcGx1Z2lucywgY2FudmFz
IGFuZCBhbmltYXRpb24gcmVxdWlyZSBzd2l0Y2hpbmcgb3ZlcgorICAgICAgICB0byB0aGUgY29t
cG9zaXRlZCBwYXRoLiBMYXllcnMgdGhhdCBvdmVybGFwIGNvbXBvc2l0ZWQgY29udGVudCB3aWxs
IHN0aWxsIHR1cm4gaW50bworICAgICAgICBjb21wb3NpdGVkIGxheWVycyByZWdhcmRsZXNzIG9m
IHRoZSBzZXR0aW5nLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAg
ICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FuUmVuZGVyM0RUcmFu
c2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVMYXllclRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhY2hlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JWaWRlbyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCiAyMDEwLTExLTI5ICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6
IFdlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiA3Mjg2OCkKKysrIFdlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyAr
NDgwLDcgQEAgc3RhdGljIGJvb2wgdHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbAogICAgIGJv
b2wgdGhyZWVERW5hYmxlZCA9IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkK
LSAgICAgICAgdGhyZWVERW5hYmxlZCA9IHZpZXctPmNvbXBvc2l0b3IoKS0+aGFzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpOworICAgICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRv
cigpLT5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKTsKICNlbmRpZgogCiAgICAgcmV0dXJuVmFsdWVJ
Zk5vUGFyYW1ldGVyID0gdGhyZWVERW5hYmxlZDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlz
aW9uIDcyODY4KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzYsNiArMjM2LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0
dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNvbXBvc2l0ZWQg
bGF5ZXIsCiAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKworICAgICAgICBlbnVtIENvbXBvc2l0aW5nVHJpZ2dlciB7CisgICAgICAgICAg
ICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLAorICAgICAgICAgICAgVmlkZW9Ucmln
Z2VyID0gMSA8PCAxLAorICAgICAgICAgICAgUGx1Z2luVHJpZ2dlciA9IDEgPDwgMiwKKyAgICAg
ICAgICAgIENhbnZhc1RyaWdnZXIgPSAxIDw8IDMsCisgICAgICAgICAgICBBbmltYXRpb25Ucmln
Z2VyID0gMSA8PCA0LAorICAgICAgICAgICAgQWxsVHJpZ2dlcnMgPSAweEZGRkZGRkZGCisgICAg
ICAgIH07CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M7
CisKKyAgICAgICAgLy8gUmV0dXJucyBhIGJpdGZpZWxkIGluZGljYXRpbmcgY29uZGl0aW9ucyB0
aGF0IGNhbiB0cmlnZ2VyIHRoZSBjb21wb3NpdG9yLgorICAgICAgICB2aXJ0dWFsIENvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgeyByZXR1
cm4gQWxsVHJpZ2dlcnM7IH0KICNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IE5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNzI4NjgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw2ICsyNDksMTUg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQWNjZWxlcmF0ZWRDb21wb3NpdAogI2VuZGlmCiB9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmNhblJlbmRlcjNEVHJhbnNmb3JtcygpIGNvbnN0Cit7CisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVybiBjb21wb3NpdG9yKCktPmNh
blJlbmRlcjNEVHJhbnNmb3JtcygpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoVXBkYXRlTGF5ZXJQ
b3NpdGlvbnNGbGFncyBmbGFncywgSW50UG9pbnQqIGNhY2hlZE9mZnNldCkKIHsKICAgICBpZiAo
ZmxhZ3MgJiBEb0Z1bGxSZXBhaW50KSB7CkBAIC00MjcsNyArNDM2LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICAgICAgQVNTRVJUKGJveCk7CiAgICAgICAgIG1f
dHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKICAgICAgICAgYm94LT5zdHlsZSgpLT5hcHBseVRy
YW5zZm9ybSgqbV90cmFuc2Zvcm0sIGJveC0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSwgUmVuZGVy
U3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgICAgICBtYWtlTWF0cml4UmVuZGVy
YWJsZSgqbV90cmFuc2Zvcm0sIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSk7CisgICAgICAg
IG1ha2VNYXRyaXhSZW5kZXJhYmxlKCptX3RyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkpOwogICAgIH0KIAogICAgIGlmIChoYWQzRFRyYW5zZm9ybSAhPSBoYXMzRFRyYW5zZm9ybSgp
KQpAQCAtNDQ0LDcgKzQ1Myw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpj
dXJyZW4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKICAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCktPmFuaW1hdGlvbigpLT5n
ZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CiAgICAgICAgIHN0eWxlLT5h
cHBseVRyYW5zZm9ybShjdXJyVHJhbnNmb3JtLCByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgp
LnNpemUoKSwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgICAgICBt
YWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpOworICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBjYW5S
ZW5kZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgICAgIHJldHVybiBjdXJyVHJhbnNmb3JtOwogICAg
IH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA3Mjg2OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
OCw3ICsyODgsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQKICAgICBib29sIGhhc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSBjb25zdDsKLSAgICAKKworICAgIGJvb2wgY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkgY29uc3Q7CisKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKICAgICAKICAgICBl
bnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZyB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDcyODY4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVMYXllclRyYW4KICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0OwogICAgIGlmIChtX293bmluZ0xheWVyLT5oYXNUcmFuc2Zvcm0oKSkg
ewogICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0odCwgdG9SZW5kZXJCb3gocmVuZGVyZXIo
KSktPmJvcmRlckJveFJlY3QoKS5zaXplKCksIFJlbmRlclN0eWxlOjpFeGNsdWRlVHJhbnNmb3Jt
T3JpZ2luKTsKLSAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUodCwgY29tcG9zaXRvcigpLT5o
YXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOworICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJs
ZSh0LCBjb21wb3NpdG9yKCktPmNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKICAgICB9CiAgICAg
CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRUcmFuc2Zvcm0odCk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDcyODY4KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNiArOTQsNyBAQCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlJlbmRlckxheWVyQ29t
cG9zCiAgICAgLCBtX3Jvb3RQbGF0Zm9ybUxheWVyKDApCiAgICAgLCBtX3VwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzVGltZXIodGhpcywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNUaW1lckZpcmVkKQogICAgICwgbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KHRydWUpCisgICAgLCBtX2NvbXBvc2l0aW5nVHJpZ2dlcnMoQ2hyb21lQ2xpZW50OjpBbGxUcmln
Z2VycykKICAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKICAgICAsIG1fc2hvd1JlcGFp
bnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGluZ0NvbnN1bHRzT3ZlcmxhcCh0cnVl
KQpAQCAtMTMwLDcgKzEzMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWNoZUFj
Y2VsZXIKICAgICBib29sIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBmYWxzZTsKICAgICBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMgPSBmYWxzZTsKICAgICBib29sIHNob3dSZXBhaW50Q291bnRl
ciA9IGZhbHNlOwotICAgIAorCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcmVuZGVy
Vmlldy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkgewogICAgICAgICBoYXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nID0gc2V0dGluZ3MtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7CiAg
ICAgICAgIHNob3dEZWJ1Z0JvcmRlcnMgPSBzZXR0aW5ncy0+c2hvd0RlYnVnQm9yZGVycygpOwpA
QCAtMTQyLDE4ICsxNDMsMjYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhY2hlQWNj
ZWxlcgogICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKSB7CiAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CiAgICAgICAgIFBh
Z2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOwotICAgICAgICBpZiAocGFnZSkK
LSAgICAgICAgICAgIGhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICAgICAgaWYgKHBh
Z2UpIHsKKyAgICAgICAgICAgIENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpOworICAgICAgICAgICAgbV9jb21wb3NpdGluZ1RyaWdnZXJzID0gY2hy
b21lQ2xpZW50LT5hbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpOworICAgICAgICAgICAgaGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IG1fY29tcG9zaXRpbmdUcmlnZ2VyczsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nICE9IG1faGFzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZyB8fCBzaG93RGVidWdCb3JkZXJzICE9IG1fc2hvd0RlYnVnQm9y
ZGVycyB8fCBzaG93UmVwYWludENvdW50ZXIgIT0gbV9zaG93UmVwYWludENvdW50ZXIpCiAgICAg
ICAgIHNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKLSAgICAgICAgCisKICAgICBt
X2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwog
ICAgIG1fc2hvd0RlYnVnQm9yZGVycyA9IHNob3dEZWJ1Z0JvcmRlcnM7CiAgICAgbV9zaG93UmVw
YWludENvdW50ZXIgPSBzaG93UmVwYWludENvdW50ZXI7CiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgJiYgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENo
cm9tZUNsaWVudDo6VGhyZWVEVHJhbnNmb3JtVHJpZ2dlcik7Cit9CisKIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKGJvb2wgbmVlZFJl
YnVpbGQpCiB7CiAgICAgaWYgKGluQ29tcG9zaXRpbmdNb2RlKCkpCkBAIC0xMTI3LDcgKzExMzYs
NyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAgICAgICAg
ICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhyZW5kZXJlcikKICAgICAgICAgICAg
ICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKHJlbmRlcmVyKQogICAgICAgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJRnJhbWUocmVuZGVyZXIpCi0gICAgICAgICAgICAg
fHwgcmVuZGVyZXItPnN0eWxlKCktPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlz
aWJpbGl0eUhpZGRlbgorICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSAm
JiByZW5kZXJlci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNp
YmlsaXR5SGlkZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50
cyhsYXllcikKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9u
KHJlbmRlcmVyKTsKIH0KQEAgLTExODMsNiArMTE5Miw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjbGlwc0NvbXBvc2kKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QK
IHsKKyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OlRocmVl
RFRyYW5zZm9ybVRyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAvLyBOb3RlIHRoYXQgd2UgYXNr
IHRoZSByZW5kZXJlciBpZiBpdCBoYXMgYSB0cmFuc2Zvcm0sIGJlY2F1c2UgdGhlIHN0eWxlIG1h
eSBoYXZlIHRyYW5zZm9ybXMsCiAgICAgLy8gYnV0IHRoZSByZW5kZXJlciBtYXkgYmUgYW4gaW5s
aW5lIHRoYXQgZG9lc24ndCBzdXBwcG9ydCB0aGVtLgpAQCAtMTE5MSw2ICsxMjAzLDggQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclZpZGVvKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpIGNvbnN0CiB7CisgICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21l
Q2xpZW50OjpWaWRlb1RyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIGlmIChyZW5kZXJlci0+aXNWaWRlbygpKSB7CiAgICAgICAgIFJlbmRlclZp
ZGVvKiB2aWRlbyA9IHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIpOwpAQCAtMTIxNyw2ICsxMjMxLDkg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKSBjb25zdAogeworICAgIGlmICghKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAm
IENocm9tZUNsaWVudDo6Q2FudmFzVHJpZ2dlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGlmIChyZW5kZXJlci0+aXNDYW52YXMoKSkgewogICAgICAgICBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihyZW5kZXJlci0+bm9k
ZSgpKTsKICAgICAgICAgcmV0dXJuIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpICYmIGNhbnZh
cy0+cmVuZGVyaW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkKCk7CkBAIC0xMjI2LDYgKzEyNDMs
OSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKFJlbmRlck9i
amVjdCogcmVuZGVyZXIpIGNvbnN0CiB7CisgICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJz
ICYgQ2hyb21lQ2xpZW50OjpQbHVnaW5UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgYm9vbCBjb21wb3NpdGUgPSAocmVuZGVyZXItPmlzRW1iZWRkZWRPYmplY3QoKSAmJiB0
b1JlbmRlckVtYmVkZGVkT2JqZWN0KHJlbmRlcmVyKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpKQogICAgICAgICAgICAgICAgICAgfHwgKHJlbmRlcmVyLT5pc0FwcGxldCgpICYmIHRv
UmVuZGVyQXBwbGV0KHJlbmRlcmVyKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKTsK
ICAgICBpZiAoIWNvbXBvc2l0ZSkKQEAgLTEyNzAsNiArMTI5MCw5IEBAIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikg
Y29uc3QKIHsKKyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6
OkFuaW1hdGlvblRyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoQW5p
bWF0aW9uQ29udHJvbGxlciogYW5pbUNvbnRyb2xsZXIgPSByZW5kZXJlci0+YW5pbWF0aW9uKCkp
IHsKICAgICAgICAgcmV0dXJuIChhbmltQ29udHJvbGxlci0+aXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlPcGFjaXR5KSAmJiBpbkNvbXBvc2l0aW5nTW9k
ZSgpKQogICAgICAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXItPmlzUnVubmluZ0FuaW1hdGlvbk9u
UmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiA3Mjg2OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFJlbmRlckxheWVyQ29tcG9zaXRvcl9oCiAj
ZGVmaW5lIFJlbmRlckxheWVyQ29tcG9zaXRvcl9oCiAKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogCkBAIC02Nyw3ICs2OCw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQKICAgICBib29sIGhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmc7IH0KLSAgICAKKworICAgIGJvb2wgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkg
Y29uc3Q7CisKICAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBtX3No
b3dEZWJ1Z0JvcmRlcnM7IH0KICAgICBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvd1JlcGFpbnRDb3VudGVyOyB9CiAgICAgCkBAIC0yMzIsNiArMjM1LDggQEAg
cHJpdmF0ZToKICAgICBUaW1lcjxSZW5kZXJMYXllckNvbXBvc2l0b3I+IG1fdXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNUaW1lcjsKIAogICAgIGJvb2wgbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
OworICAgIENocm9tZUNsaWVudDo6Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgbV9jb21wb3NpdGlu
Z1RyaWdnZXJzOworCiAgICAgYm9vbCBtX3Nob3dEZWJ1Z0JvcmRlcnM7CiAgICAgYm9vbCBtX3No
b3dSZXBhaW50Q291bnRlcjsKICAgICBib29sIG1fY29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXA7
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyODY4KQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTExLTI5ICBWYW5n
ZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm92aWRlIG1vcmUgZmluZSBncmFpbmVk
IGNvbnRyb2wgdG8gcG9ydHMgb3ZlciB3aGVuIHRvIHR1cm4gb24gYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTk5OAorCisgICAgICAgIEFzIHBhcnQgb2YgdGhpcyBjaGFuZ2UsIHRoZSBvbGQg
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyBtZXRob2Qgb24gdGhlIENocm9tZUNsaWVudAorICAg
ICAgICBoYXMgbm93IGJlZW4gcmVwbGFjZWQgYnkgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMg
d2hpY2ggcmV0dXJucyBhIGJpdGZpZWxkIG9mCisgICAgICAgIGFsbCB0aGUgZmVhdHVyZXMgd2hp
Y2ggY2FuIHRyaWdnZXIgdGhlIGNvbXBvc2l0b3IuCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmFsbG93ZWRD
b21wb3NpdGluZ1RyaWdnZXJzKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgor
CiAyMDEwLTExLTI5ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDcyODY4KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWVDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3LDkgKzgwNywxMiBA
QCB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjaGVkdWxlQ29tcG9zaXRpCiAgICAgbV93ZWJWaWV3
LT5zZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAotYm9vbCBDaHJvbWVDbGllbnRJbXBs
OjphbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK0Nocm9tZUNsaWVudDo6Q29t
cG9zaXRpbmdUcmlnZ2VyRmxhZ3MgQ2hyb21lQ2xpZW50SW1wbDo6YWxsb3dlZENvbXBvc2l0aW5n
VHJpZ2dlcnMoKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlZpZXctPmFsbG93c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKKyAgICBpZiAoIW1fd2ViVmlldy0+YWxsb3dzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBDaHJvbWVDbGll
bnQ6OkFsbFRyaWdnZXJzOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3Mjg2OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsOCArMTUyLDcgQEAgcHVi
bGljOgogICAgIC8vIHRvIGRvIGFuIGVhZ2VyIGxheW91dCBiZWZvcmUgdGhlIGRyYXdpbmcuCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKIAotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBzdXBwb3J0ZWQuCi0g
ICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdn
ZXJzKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3Jl
ZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzI4NjgpCisr
KyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTAtMTEtMjkgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgbW9y
ZSBmaW5lIGdyYWluZWQgY29udHJvbCB0byBwb3J0cyBvdmVyIHdoZW4gdG8gdHVybiBvbiBhY2Nl
bGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5OTk4CisKKyAgICAgICAgQXMgcGFydCBvZiB0aGlzIGNo
YW5nZSwgdGhlIG9sZCBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nIG1ldGhvZCBvbiB0aGUgQ2hy
b21lQ2xpZW50CisgICAgICAgIGhhcyBub3cgYmVlbiByZXBsYWNlZCBieSBhbGxvd2VkQ29tcG9z
aXRpbmdUcmlnZ2VycyB3aGljaCByZXR1cm5zIGEgYml0ZmllbGQgb2YKKyAgICAgICAgYWxsIHRo
ZSBmZWF0dXJlcyB3aGljaCBjYW4gdHJpZ2dlciB0aGUgY29tcG9zaXRvci4KKworCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50UXQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorCiAyMDEwLTExLTI1ICBOb3JiZXJ0IExl
c2VyICA8bm9yYmVydC5sZXNlckBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFz
emxvIEdvbWJvcy4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAkocmV2aXNpb24gNzI4NjgpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTcsOSArNjE3LDEyIEBAIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnNjaGVkdWxlQ29tcG9zaXRpbmcKICAgICAgICAgcGxhdGZvcm1QYWdl
Q2xpZW50KCktPm1hcmtGb3JTeW5jKHRydWUpOwogfQogCi1ib29sIENocm9tZUNsaWVudFF0Ojph
bGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QKK0Nocm9tZUNsaWVudDo6Q29tcG9z
aXRpbmdUcmlnZ2VyRmxhZ3MgQ2hyb21lQ2xpZW50UXQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdn
ZXJzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHBsYXRmb3JtUGFnZUNsaWVudCgpICYmIHBsYXRm
b3JtUGFnZUNsaWVudCgpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOworICAgIGlm
IChwbGF0Zm9ybVBhZ2VDbGllbnQoKSAmJiBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+YWxsb3dzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICByZXR1cm4gQWxsVHJpZ2dlcnM7CisKKyAg
ICByZXR1cm4gMDsKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNzI4NjgpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29u
c3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>
<flag name="review"
          id="65845"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="65846"
          type_id="3"
          status="-"
          setter="vangelis"
    />
          </attachment>
      

    </bug>

</bugzilla>