<?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>65708</bug_id>
          
          <creation_ts>2011-08-04 11:43:26 -0700</creation_ts>
          <short_desc>Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState</short_desc>
          <delta_ts>2011-08-08 16:21:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>446651</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-04 11:43:26 -0700</bug_when>
    <thetext>Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446658</commentid>
    <comment_count>1</comment_count>
      <attachid>102952</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-04 11:51:23 -0700</bug_when>
    <thetext>Created attachment 102952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446694</commentid>
    <comment_count>2</comment_count>
      <attachid>102952</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-04 12:49:42 -0700</bug_when>
    <thetext>Comment on attachment 102952
Patch

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

I wish we could test this; I see a number of issues (not taking perspective into account, possible scrolling issues).

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:368
&gt; +    virtual void syncCompositingState(const FloatRect&amp;) { }

I think it&apos;s worth naming the parameter in a C-style comment.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:836
&gt; +        state.translate(-anchorPoint().x(), -anchorPoint().y(), -anchorPoint().z(), accumulation);
&gt; +        state.applyTransform(transform(), accumulation);
&gt; +        state.translate(anchorPoint().x(), anchorPoint().y(), anchorPoint().z(), accumulation);

Rather than having to add  TransformState::translate() for this, can&apos;t you just compute the transform taking the anchor point into account, then apply it?

Also, you&apos;re ignoring childTransform here.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:842
&gt; +    if (masksToBounds()) {
&gt; +        // Replace the quad in the TransformState with one that is clipped to this layer&apos;s bounds

I think you might want to assert here that accumulation == FlattenTransform, otherwise state.lastPlanarQuad might be in some ancestor&apos;s coordinate system.

&gt; Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm:96
&gt; +@interface CATiledLayer(GraphicsLayerCAPrivate)
&gt; +- (void)displayInRect:(CGRect)r levelOfDetail:(int)lod options:(NSDictionary *)dict;
&gt; +- (BOOL)canDrawConcurrently;
&gt; +- (void)setCanDrawConcurrently:(BOOL)flag;
&gt; +@end

You should #ifdef this for not Leopard and not SnowLeopard.

&gt; Source/WebCore/platform/graphics/transforms/TransformState.cpp:62
&gt; +void TransformState::translate(float x, float y, float z, TransformAccumulation accumulate)

I don&apos;t think this is necessary.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:210
&gt; +    if (GraphicsLayer* rootLayer = rootGraphicsLayer()) {
&gt; +        FrameView* frameView = m_renderView ? m_renderView-&gt;frameView() : 0;
&gt; +        if (frameView)
&gt; +            rootLayer-&gt;syncCompositingState(frameView-&gt;frameRect());
&gt; +    }

Is frameRect() the right thing? How is scrolling taken into account?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446714</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-04 13:01:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 102952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102952&amp;action=review
&gt; 
&gt; I wish we could test this; I see a number of issues (not taking perspective into account, possible scrolling issues).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayer.h:368
&gt; &gt; +    virtual void syncCompositingState(const FloatRect&amp;) { }
&gt; 
&gt; I think it&apos;s worth naming the parameter in a C-style comment.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:836
&gt; &gt; +        state.translate(-anchorPoint().x(), -anchorPoint().y(), -anchorPoint().z(), accumulation);
&gt; &gt; +        state.applyTransform(transform(), accumulation);
&gt; &gt; +        state.translate(anchorPoint().x(), anchorPoint().y(), anchorPoint().z(), accumulation);
&gt; 
&gt; Rather than having to add  TransformState::translate() for this, can&apos;t you just compute the transform taking the anchor point into account, then apply it?

I will do that...

&gt; 
&gt; Also, you&apos;re ignoring childTransform here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:842
&gt; &gt; +    if (masksToBounds()) {
&gt; &gt; +        // Replace the quad in the TransformState with one that is clipped to this layer&apos;s bounds
&gt; 
&gt; I think you might want to assert here that accumulation == FlattenTransform, otherwise state.lastPlanarQuad might be in some ancestor&apos;s coordinate system.

Will do

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm:96
&gt; &gt; +@interface CATiledLayer(GraphicsLayerCAPrivate)
&gt; &gt; +- (void)displayInRect:(CGRect)r levelOfDetail:(int)lod options:(NSDictionary *)dict;
&gt; &gt; +- (BOOL)canDrawConcurrently;
&gt; &gt; +- (void)setCanDrawConcurrently:(BOOL)flag;
&gt; &gt; +@end
&gt; 
&gt; You should #ifdef this for not Leopard and not SnowLeopard.

Ok

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/transforms/TransformState.cpp:62
&gt; &gt; +void TransformState::translate(float x, float y, float z, TransformAccumulation accumulate)
&gt; 
&gt; I don&apos;t think this is necessary.

I&apos;ll make the change above

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:210
&gt; &gt; +    if (GraphicsLayer* rootLayer = rootGraphicsLayer()) {
&gt; &gt; +        FrameView* frameView = m_renderView ? m_renderView-&gt;frameView() : 0;
&gt; &gt; +        if (frameView)
&gt; &gt; +            rootLayer-&gt;syncCompositingState(frameView-&gt;frameRect());
&gt; &gt; +    }
&gt; 
&gt; Is frameRect() the right thing? How is scrolling taken into account?

For WK2, scrolling in a GraphicsLayer below this, so it should handle it correctly. This is the area I have to change for iOS, since it is like WK1, which does scrolling differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446839</commentid>
    <comment_count>4</comment_count>
      <attachid>102994</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-04 15:34:28 -0700</bug_when>
    <thetext>Created attachment 102994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446885</commentid>
    <comment_count>5</comment_count>
      <attachid>102994</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-04 16:24:42 -0700</bug_when>
    <thetext>Comment on attachment 102994
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        This is in support of &lt;rdar://problem/9706222&gt; and &lt;rdar://problem/9434765&gt;

No need to mention radar numbers.

&gt; Source/WebCore/page/FrameView.cpp:709
&gt; +            fullScreenLayer-&gt;syncCompositingState(frameRect());

Please add a comment that this only works on platforms where RLC uses a scroll layer.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:831
&gt; +void GraphicsLayerCA::recursiveCommitChanges(TransformState&amp; state, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase, bool affectedByPageScale)
&gt;  {
&gt; +    TransformState::TransformAccumulation accumulation = preserves3D() ? TransformState::AccumulateTransform : TransformState::FlattenTransform;
&gt; +    state.move(m_position.x(), m_position.y(), accumulation);

This code needs to maintain stack of TransformStates, otherwise your state is wrong when you come back out of children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448267</commentid>
    <comment_count>6</comment_count>
      <attachid>103294</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-08 14:27:35 -0700</bug_when>
    <thetext>Created attachment 103294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448274</commentid>
    <comment_count>7</comment_count>
      <attachid>103294</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-08 14:33:41 -0700</bug_when>
    <thetext>Comment on attachment 103294
Patch

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

r=me but please do the localState thing.

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:831
&gt; -void GraphicsLayerCA::recursiveCommitChanges(float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase, bool affectedByPageScale)
&gt; +void GraphicsLayerCA::recursiveCommitChanges(TransformState&amp; state, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase, bool affectedByPageScale)
&gt;  {
&gt; +    // Save the state before sending down to kids and restore it after
&gt; +    TransformState savedTransformState = state;

The more natural way to do this would be to have

TransformState localState = state;
and pass localState to kids.

Then your TransformState&amp; param can be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448347</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-08 16:21:21 -0700</bug_when>
    <thetext>Committed r92651: &lt;http://trac.webkit.org/changeset/92651&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102952</attachid>
            <date>2011-08-04 11:51:23 -0700</date>
            <delta_ts>2011-08-04 15:34:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65708-20110804115121.patch</filename>
            <type>text/plain</type>
            <size>19423</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMzkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDgtMDQgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIExvZ2ljIHRvIGNvbXB1dGUgdmlz
aWJsZSBkaXNwbGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDgK
KworICAgICAgICBUaGlzIGlzIGluIHN1cHBvcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk3MDYyMjI+
IGFuZCA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4KKworICAgICAgICBBZGQgbG9naWMgdG8gc3lu
Y0NvbXBvc2l0aW5nU3RhdGUgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSByZWN0IGZvciBlYWNoCisg
ICAgICAgIGxheWVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHN5bmNocm9ub3VzbHkgcmVuZGVyIHRo
ZSB2aXNpYmxlIHRpbGVzIG9mIGEKKyAgICAgICAgVGlsZWRMYXllciBhbmQgYXZvaWQgdGhlIGZs
YXNoaW5nIHRoYXQgb2Z0ZW4gb2NjdXJzIHdoZW4gdGlsZXMgYXJlIHJlbmRlcmVkCisgICAgICAg
IGFzeW5jaHJvbm91c2x5LiBBIG5ldyBzeW5jaHJvbm91c2x5RGlzcGxheVRpbGVzSW5SZWN0IGlz
IGFsc28gYWRkZWQgdG8gZG8KKyAgICAgICAgdGhlIGFjdHVhbCByZW5kZXJpbmcsIGJ1dCB0aGUg
Y2FsbCBpcyBub3QgY3VycmVudGx5IGJlaW5nIG1hZGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0ZyYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbToKKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1TdGF0ZTo6bW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2Zvcm1TdGF0ZTo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisKIDIwMTEtMDgtMDQgIERhcmluIEZp
c2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJraXRSZXF1ZXN0QW5pbWF0
aW9uRnJhbWUncyBlbGVtZW50IGFyZ3VtZW50IG5lZWRzIHRvIGJlIG1hcmtlZCBvcHRpb25hbApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gOTE2MzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNiw3ICs3
MDYsNyBAQCBib29sIEZyYW1lVmlldzo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUCiAgICAgaWYg
KGlzRG9jdW1lbnRSdW5uaW5nRnVsbFNjcmVlbkFuaW1hdGlvbihkb2N1bWVudCkpIHsKICAgICAg
ICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gZG9jdW1lbnQtPmZ1bGxTY3JlZW5SZW5k
ZXJlcigpLT5sYXllcigpLT5iYWNraW5nKCk7CiAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBm
dWxsU2NyZWVuTGF5ZXIgPSBiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpCi0gICAgICAgICAgICBm
dWxsU2NyZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgICAgICBmdWxs
U2NyZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZyYW1lUmVjdCgpKTsKICAgICB9CiAj
ZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDkxNjM2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjUsNyArMzY1LDcgQEAgcHVibGljOgogICAgIC8vIFNvbWUgY29tcG9zaXRpbmcgc3lz
dGVtcyBtYXkgZG8gaW50ZXJuYWwgYmF0Y2hpbmcgdG8gc3luY2hyb25pemUgY29tcG9zaXRpbmcg
dXBkYXRlcwogICAgIC8vIHdpdGggdXBkYXRlcyBkcmF3biBpbnRvIHRoZSB3aW5kb3cuIFRoZXNl
IG1ldGhvZHMgZmx1c2ggaW50ZXJuYWwgYmF0Y2hlZCBzdGF0ZSBvbiB0aGlzIGxheWVyCiAgICAg
Ly8gYW5kIGRlc2NlbmRhbnQgbGF5ZXJzLCBhbmQgdGhpcyBsYXllciBvbmx5LgotICAgIHZpcnR1
YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkgeyB9CiAgICAgCiAgICAgLy8g
UmV0dXJuIGEgc3RyaW5nIHdpdGggYSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIHRoZSBsYXllciB0
cmVlLCBJZiBkZWJ1ZyBpcyB0cnVlIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiA5MTYz
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgog
I2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPFF1YXJ0
ekNvcmUvQ0FUcmFuc2Zvcm0zRC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtODEwLDkgKzgx
MSwxMCBAQCBGbG9hdFBvaW50IEdyYXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBvc2l0CiAgICAgcmV0
dXJuIEZsb2F0UG9pbnQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3Np
dGluZ1N0YXRlKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShj
b25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMo
KTsKKyAgICBUcmFuc2Zvcm1TdGF0ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVy
c2VUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0UXVhZChjbGlwUmVjdCkpOworICAgIHJlY3Vyc2l2
ZUNvbW1pdENoYW5nZXMoc3RhdGUpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKQEAgLTgyMyw4ICs4MjUsMjYgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YQogICAgIGNvbW1pdExheWVyQ2hh
bmdlc0FmdGVyU3VibGF5ZXJzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlKQordm9pZCBH
cmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoVHJhbnNmb3JtU3RhdGUmIHN0
YXRlLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKIHsKKyAgICBUcmFuc2Zvcm1T
dGF0ZTo6VHJhbnNmb3JtQWNjdW11bGF0aW9uIGFjY3VtdWxhdGlvbiA9IHByZXNlcnZlczNEKCkg
PyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpG
bGF0dGVuVHJhbnNmb3JtOworICAgIHN0YXRlLm1vdmUobV9wb3NpdGlvbi54KCksIG1fcG9zaXRp
b24ueSgpLCBhY2N1bXVsYXRpb24pOworICAgIAorICAgIGlmICghdHJhbnNmb3JtKCkuaXNJZGVu
dGl0eSgpKSB7CisgICAgICAgIHN0YXRlLnRyYW5zbGF0ZSgtYW5jaG9yUG9pbnQoKS54KCksIC1h
bmNob3JQb2ludCgpLnkoKSwgLWFuY2hvclBvaW50KCkueigpLCBhY2N1bXVsYXRpb24pOworICAg
ICAgICBzdGF0ZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0oKSwgYWNjdW11bGF0aW9uKTsKKyAg
ICAgICAgc3RhdGUudHJhbnNsYXRlKGFuY2hvclBvaW50KCkueCgpLCBhbmNob3JQb2ludCgpLnko
KSwgYW5jaG9yUG9pbnQoKS56KCksIGFjY3VtdWxhdGlvbik7CisgICAgfQorICAgIAorICAgIEZs
b2F0UmVjdCBjbGlwUmVjdCA9IHN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdCb3goKTsK
KyAgICAKKyAgICBpZiAobWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgIC8vIFJlcGxhY2UgdGhl
IHF1YWQgaW4gdGhlIFRyYW5zZm9ybVN0YXRlIHdpdGggb25lIHRoYXQgaXMgY2xpcHBlZCB0byB0
aGlzIGxheWVyJ3MgYm91bmRzCisgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChGbG9hdFJlY3Qo
bV9wb3NpdGlvbiwgbV9zaXplKSk7CisgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChzdGF0ZS5s
YXN0UGxhbmFyUXVhZCgpLmJvdW5kaW5nQm94KCkpOworICAgICAgICBzdGF0ZS5zZXRRdWFkKGNs
aXBSZWN0KTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYWRDaGFuZ2VzID0gbV91bmNvbW1pdHRl
ZENoYW5nZXM7CiAgICAgCiAgICAgaWYgKGFwcGxpZXNQYWdlU2NhbGUoKSkgewpAQCAtODQ2LDEx
ICs4NjYsMTEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYQogICAg
IHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKICAgICAgICAgR3JhcGhpY3NMYXllckNB
KiBjdXJDaGlsZCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDQSo+KGNoaWxkTGF5ZXJzW2ld
KTsKLSAgICAgICAgY3VyQ2hpbGQtPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMocGFnZVNjYWxlRmFj
dG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwgYWZmZWN0ZWRCeVBhZ2VTY2FsZSk7CisgICAgICAg
IGN1ckNoaWxkLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKHN0YXRlLCBwYWdlU2NhbGVGYWN0b3Is
IGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKICAgICB9CiAKICAg
ICBpZiAobV9yZXBsaWNhTGF5ZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJD
QSo+KG1fcmVwbGljYUxheWVyKS0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVGYWN0
b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9yZXBsaWNhTGF5ZXIpLT5yZWN1cnNpdmVD
b21taXRDaGFuZ2VzKHN0YXRlLCBwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9u
LCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKIAogICAgIGlmIChtX21hc2tMYXllcikKICAgICAgICAg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9tYXNrTGF5ZXIpLT5jb21taXRMYXllckNo
YW5nZXNBZnRlclN1YmxheWVycygpOwpAQCAtODYxLDYgKzg4MSwxMSBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgICAgIGNsaWVudCgpLT5kaWRDb21taXRD
aGFuZ2VzRm9yTGF5ZXIodGhpcyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9y
bUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY2xpcCkKK3sKKyAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBj
bGlwKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9y
ZVN1YmxheWVycyhmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uUmVsYXRpdmVUb0Jhc2UpCiB7CiAgICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKK2Ns
YXNzIFRyYW5zZm9ybVN0YXRlOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ0EgOiBwdWJsaWMgR3Jh
cGhpY3NMYXllciwgcHVibGljIFBsYXRmb3JtQ0FMYXllckNsaWVudCB7CiBwdWJsaWM6CkBAIC0x
MTksOSArMTIwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRNYWludGFpbnNQaXhl
bEFsaWdubWVudChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogCi0gICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGZsb2F0IHBhZ2VTY2FsZUZh
Y3RvciA9IDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UgPSBGbG9h
dFBvaW50KCksIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKKyAgICB2b2lkIHJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoVHJhbnNmb3JtU3RhdGUmLCBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlID0gRmxvYXRQ
b2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSBmYWxzZSk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgYm9vbCBhbGxvd1RpbGVkTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93VGlsZWRMYXllcjsgfQpAQCAtMTM3LDcgKzEzOCw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9u
U3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpOwogICAgIHZpcnR1YWwgQ29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBjb250ZW50c09yaWVudGF0aW9uKCk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNsaXApIHsgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29u
dGV4dCwgY2xpcCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsKICAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIHNo
b3dEZWJ1Z0JvcmRlcnMoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93
UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBzaG93UmVwYWludENvdW50ZXIoKTsgfQog
ICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudCgpIHsg
cmV0dXJuIGluY3JlbWVudFJlcGFpbnRDb3VudCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAkocmV2aXNp
b24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9y
bUNBTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByaW50VHJlZSgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKIHByb3RlY3RlZDoKICAg
ICBQbGF0Zm9ybUNBTGF5ZXIoTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50Kik7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0JKHJldmlz
aW9uIDkxNjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Bs
YXRmb3JtQ0FMYXllck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksMTIgQEAgLSAo
dm9pZClzZXRPd25lcjooUGxhdGZvcm1DQUxheWVyKilvd25lcgogCiBAZW5kCiAKK0BpbnRlcmZh
Y2UgQ0FUaWxlZExheWVyKEdyYXBoaWNzTGF5ZXJDQVByaXZhdGUpCistICh2b2lkKWRpc3BsYXlJ
blJlY3Q6KENHUmVjdClyIGxldmVsT2ZEZXRhaWw6KGludClsb2Qgb3B0aW9uczooTlNEaWN0aW9u
YXJ5ICopZGljdDsKKy0gKEJPT0wpY2FuRHJhd0NvbmN1cnJlbnRseTsKKy0gKHZvaWQpc2V0Q2Fu
RHJhd0NvbmN1cnJlbnRseTooQk9PTClmbGFnOworQGVuZAorCiBAaW50ZXJmYWNlIENBTGF5ZXIo
UHJpdmF0ZSkKIC0gKHZvaWQpc2V0Q29udGVudHNDaGFuZ2VkOwogI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKQEAg
LTc1MCw0ICs3NTYsMTkgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUo
ZgogI2VuZGlmCiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzeW5jaHJvbm91c2x5RGlzcGxh
eVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9sYXllclR5
cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgV2Vi
VGlsZWRMYXllciAqdGlsZWRMYXllciA9IHN0YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIqPihtX2xh
eWVyLmdldCgpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIEJPT0wg
b2xkQ2FuRHJhd0NvbmN1cnJlbnRseSA9IFt0aWxlZExheWVyIGNhbkRyYXdDb25jdXJyZW50bHld
OworICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6Tk9dOworICAgIFt0aWxl
ZExheWVyIGRpc3BsYXlJblJlY3Q6cmVjdCBsZXZlbE9mRGV0YWlsOjAgb3B0aW9uczpuaWxdOwor
ICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6b2xkQ2FuRHJhd0NvbmN1cnJl
bnRseV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5j
cHAJKHJldmlzaW9uIDkxNjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0
NCw1NiBAQCB2b2lkIFRyYW5zZm9ybVN0YXRlOjptb3ZlKGludCB4LCBpbnQgeSwgCiAgICAgICAg
ICAgICBmbGF0dGVuKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSnVzdCBtb3ZlIHRoZSBw
b2ludCBhbmQsIG9wdGlvbmFsbHksIHRoZSBxdWFkLgotICAgICAgICBpZiAobV9tYXBQb2ludCkK
LSAgICAgICAgICAgIG1fbGFzdFBsYW5hclBvaW50Lm1vdmUoeCwgeSk7Ci0gICAgICAgIGlmICht
X21hcFF1YWQpCi0gICAgICAgICAgICBtX2xhc3RQbGFuYXJRdWFkLm1vdmUoeCwgeSk7CisgICAg
ICAgIGlmIChtX2RpcmVjdGlvbiA9PSBBcHBseVRyYW5zZm9ybURpcmVjdGlvbikgeworICAgICAg
ICAgICAgaWYgKG1fbWFwUG9pbnQpCisgICAgICAgICAgICAgICAgbV9sYXN0UGxhbmFyUG9pbnQu
bW92ZSh4LCB5KTsKKyAgICAgICAgICAgIGlmIChtX21hcFF1YWQpCisgICAgICAgICAgICAgICAg
bV9sYXN0UGxhbmFyUXVhZC5tb3ZlKHgsIHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKG1fbWFwUG9pbnQpCisgICAgICAgICAgICAgICAgbV9sYXN0UGxhbmFyUG9pbnQubW92
ZSgteCwgLXkpOworICAgICAgICAgICAgaWYgKG1fbWFwUXVhZCkKKyAgICAgICAgICAgICAgICBt
X2xhc3RQbGFuYXJRdWFkLm1vdmUoLXgsIC15KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2Fj
Y3VtdWxhdGluZ1RyYW5zZm9ybSA9IGFjY3VtdWxhdGUgPT0gQWNjdW11bGF0ZVRyYW5zZm9ybTsK
K30KKwordm9pZCBUcmFuc2Zvcm1TdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiBhY2N1bXVsYXRlKQoreworICAgIGlmICgheCAm
JiAheSAmJiAheikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAoIXogJiYgKCFt
X2FjY3VtdWxhdGluZ1RyYW5zZm9ybSB8fCAhbV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkpIHsKKyAg
ICAgICAgLy8gSnVzdCBtb3ZlIHRoZSBwb2ludCBhbmQsIG9wdGlvbmFsbHksIHRoZSBxdWFkLgor
ICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gQXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24pIHsKKyAg
ICAgICAgICAgIGlmIChtX21hcFBvaW50KQorICAgICAgICAgICAgICAgIG1fbGFzdFBsYW5hclBv
aW50Lm1vdmUoeCwgeSk7CisgICAgICAgICAgICBpZiAobV9tYXBRdWFkKQorICAgICAgICAgICAg
ICAgIG1fbGFzdFBsYW5hclF1YWQubW92ZSh4LCB5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChtX21hcFBvaW50KQorICAgICAgICAgICAgICAgIG1fbGFzdFBsYW5hclBvaW50
Lm1vdmUoLXgsIC15KTsKKyAgICAgICAgICAgIGlmIChtX21hcFF1YWQpCisgICAgICAgICAgICAg
ICAgbV9sYXN0UGxhbmFyUXVhZC5tb3ZlKC14LCAteSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gZmFsc2U7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGlzIHVzaW5nIGEgdHJhbnNmb3Jt
CisgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKQorICAgICAgICBtX2FjY3VtdWxhdGVk
VHJhbnNmb3JtID0gYWRvcHRQdHIobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAg
aWYgKG1fZGlyZWN0aW9uID09IEFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uKQorICAgICAgICBtX2Fj
Y3VtdWxhdGVkVHJhbnNmb3JtLT50cmFuc2xhdGVSaWdodDNkKHgsIHksIHopOworICAgIGVsc2UK
KyAgICAgICAgbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS0+dHJhbnNsYXRlM2QoLXgsIC15LCAteik7
IC8vIFdlJ3JlIHVuYXBwbHlpbmcsIHNvIG5lZ2F0ZQorICAgICAgICAKKyAgICBpZiAoYWNjdW11
bGF0ZSA9PSBGbGF0dGVuVHJhbnNmb3JtKQorICAgICAgICBmbGF0dGVuV2l0aFRyYW5zZm9ybSgq
bV9hY2N1bXVsYXRlZFRyYW5zZm9ybSk7CisKICAgICBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybSA9
IGFjY3VtdWxhdGUgPT0gQWNjdW11bGF0ZVRyYW5zZm9ybTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtU3RhdGUuaAkocmV2aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIG1vdmUoaW50IHgs
IGludCB5LCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24gPSBGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICB2
b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBUcmFuc2Zvcm1BY2N1bXVs
YXRpb24gPSBGbGF0dGVuVHJhbnNmb3JtKTsKICAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwgVHJhbnNmb3JtQWNjdW11
bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7CiAgICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJvbUNvbnRhaW5lciwgVHJhbnNmb3Jt
QWNjdW11bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7CiAgICAgdm9pZCBmbGF0dGVuKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkocmV2aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDkgKzIwMywxMiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nCiAgICAgQVNTRVJUKCFt
X2ZsdXNoaW5nTGF5ZXJzKTsKICAgICBtX2ZsdXNoaW5nTGF5ZXJzID0gdHJ1ZTsKIAotICAgIGlm
IChHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKQotICAgICAg
ICByb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Ci0KKyAgICBpZiAoR3JhcGhpY3NM
YXllciogcm9vdExheWVyID0gcm9vdEdyYXBoaWNzTGF5ZXIoKSkgeworICAgICAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldyA/IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCkg
OiAwOworICAgICAgICBpZiAoZnJhbWVWaWV3KQorICAgICAgICAgICAgcm9vdExheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZShmcmFtZVZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICB9CisgICAgCiAg
ICAgQVNTRVJUKG1fZmx1c2hpbmdMYXllcnMpOwogICAgIG1fZmx1c2hpbmdMYXllcnMgPSBmYWxz
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMzkzKQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDgtMDQgIENo
cmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIExvZ2ljIHRvIGNvbXB1
dGUgdmlzaWJsZSBkaXNwbGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjU3MDgKKworICAgICAgICBTdXBwbHkgaW5pdGlhbCBkaXNwbGF5IHJlY3RzIGZvciB0aGUgZnVs
bC1zY3JlZW4gY2FzZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlck1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJNYWM6OnNldFJvb3RG
dWxsU2NyZWVuTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlck1h
Yzo6YmVnaW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJG
dWxsU2NyZWVuTWFuYWdlck1hYzo6YmVnaW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbik6CisKIDIw
MTEtMDgtMDEgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYktpdDI6IFdlYiBJbnNwZWN0b3IgYWx3YXlzIHN0YXJ0cyBpbiB1bmRvY2tlZCBtb2Rl
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vbWFjL1dlYkZ1bGxT
Y3JlZW5NYW5hZ2VyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvRnVsbFNjcmVlbi9tYWMvV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWMubW0JKHJldmlzaW9uIDkx
NjM2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL21hYy9XZWJGdWxs
U2NyZWVuTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZv
aWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWM6OnNldFJvb3RGdWwKICAgICBbQ0FUcmFuc2FjdGlv
biBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGls
ZHJlbigpOwogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Ci0gICAgbV9yb290TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKGdldEZ1bGxTY3JlZW5SZWN0KCkpOwogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07CiAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3Rp
ZmljYXRpb25OYW1lOkAiV2ViS2l0TGF5ZXJIb3N0Q2hhbmdlZCIgb2JqZWN0Om1fcm9vdExheWVy
LT5wbGF0Zm9ybUxheWVyKCkgdXNlckluZm86bmlsXTsKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lk
IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWFjOjpiZWdpbkVudGVyCiAKICAgICBJbnRSZWN0IGRlc3Rp
bmF0aW9uRnJhbWUgPSBnZXRGdWxsU2NyZWVuUmVjdCgpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyU2l6ZShkZXN0aW5hdGlvbkZyYW1lLnNpemUoKSk7
Ci0gICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgbV9yb290TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGRlc3RpbmF0aW9uRnJhbWUpOwogCiAgICAgLy8gRklY
TUU6IE9uY2Ugd2UgZ2FpbiB0aGUgYWJpbGl0eSB0byBkbyBuYXRpdmUgV2ViS2l0IGFuaW1hdGlv
bnMgb2YgZ2VuZXJhdGVkCiAgICAgLy8gY29udGVudCwgdGhpcyBjYW4gY2hhbmdlIHRvIHVzZSB0
aGVtLiAgTWVhbndoaWxlLCB3ZSdsbCBoYXZlIHRvIGFuaW1hdGUgdGhlCkBAIC0yMjYsNyArMjI2
LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlck1hYzo6YmVnaW5FeGl0RgogCiAgICAgSW50
UmVjdCBkZXN0aW5hdGlvbkZyYW1lID0gZ2V0RnVsbFNjcmVlblJlY3QoKTsKICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEZ1bGxTY3JlZW5SZW5kZXJlclNpemUoZGVzdGluYXRpb25GcmFt
ZS5zaXplKCkpOwotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShkZXN0aW5hdGlvbkZyYW1lKTsKIAog
ICAgIC8vIEZJWE1FOiBPbmNlIHdlIGdhaW4gdGhlIGFiaWxpdHkgdG8gZG8gbmF0aXZlIFdlYktp
dCBhbmltYXRpb25zIG9mIGdlbmVyYXRlZAogICAgIC8vIGNvbnRlbnQsIHRoaXMgY2FuIGNoYW5n
ZSB0byB1c2UgdGhlbS4gIE1lYW53aGlsZSwgd2UnbGwgaGF2ZSB0byBhbmltYXRlIHRoZQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTIzOTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wOC0wNCAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTG9naWMgdG8gY29tcHV0
ZSB2aXNpYmxlIGRpc3BsYXkgcmVjdCBpbiBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NTcwOAorCisgICAgICAgIFN1cHBseSBpbml0aWFsIGRpc3BsYXkgcmVjdHMgZm9yIHRoZSBmdWxs
LXNjcmVlbiBjYXNlCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxzY3JlZW46XSk6CisgICAgICAgICgtW1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyIGV4aXRGdWxsc2NyZWVuXSk6CisKIDIwMTEtMDgtMDMgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3Qg
Y2hlY2tzIGZvciBIVE1MTWVkaWFFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDkxNjM2
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDIxLDcgKzQyMSw3IEBAIC0gKHZvaWQpZW50ZXJGdWxsc2Ny
ZWVuOihOU1NjcmVlbiAqKXNjcmUKICAgICAvLyBTb21lIHByb3BlcnRpZXMgaGF2ZW4ndCBwcm9w
b2dhdGVkIGZyb20gdGhlIEdyYXBoaWNzTGF5ZXIgdG8gdGhlIENBTGF5ZXIgeWV0LiBTbwogICAg
IC8vIHRlbGwgdGhlIHJlbmRlcmVyJ3MgbGF5ZXIgdG8gc3luYyBpdCdzIGNvbXBvc2l0aW5nIHN0
YXRlOgogICAgIEdyYXBoaWNzTGF5ZXIqIHJlbmRlcmVyR3JhcGhpY3MgPSBfcmVuZGVyZXItPmxh
eWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpOwotICAgIHJlbmRlcmVyR3JhcGhpY3Mt
PnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7ICAgIAorICAgIHJlbmRlcmVyR3JhcGhpY3MtPnN5bmND
b21wb3NpdGluZ1N0YXRlKGRlc3RpbmF0aW9uRnJhbWUpOyAgICAKIAogICAgIENBTGF5ZXIqIHJl
bmRlcmVyTGF5ZXIgPSByZW5kZXJlckdyYXBoaWNzLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgW1tz
ZWxmIF9mdWxsc2NyZWVuV2luZG93XSBzZXRSZW5kZXJlckxheWVyOnJlbmRlcmVyTGF5ZXJdOyAg
ICAKQEAgLTU3Miw3ICs1NzIsNyBAQCAtICh2b2lkKWV4aXRGdWxsc2NyZWVuCiAgICAgCiAgICAg
W3NlbGYgX2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CiAKLSAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZSgpOyAgICAKKyAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShsYXllckVuZEZyYW1lKTsgICAgCiAKICAgICBDQUxheWVyKiByZW5kZXJlckxheWVyID0gcmVu
ZGVyZXJHcmFwaGljcy0+cGxhdGZvcm1MYXllcigpOwogICAgIFtbc2VsZiBfZnVsbHNjcmVlbldp
bmRvd10gc2V0UmVuZGVyZXJMYXllcjpyZW5kZXJlckxheWVyXTsgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102994</attachid>
            <date>2011-08-04 15:34:28 -0700</date>
            <delta_ts>2011-08-08 14:27:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65708-20110804153427.patch</filename>
            <type>text/plain</type>
            <size>16957</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMzkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDgtMDQgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIExvZ2ljIHRvIGNvbXB1dGUgdmlz
aWJsZSBkaXNwbGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDgK
KworICAgICAgICBUaGlzIGlzIGluIHN1cHBvcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk3MDYyMjI+
IGFuZCA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4KKworICAgICAgICBBZGQgbG9naWMgdG8gc3lu
Y0NvbXBvc2l0aW5nU3RhdGUgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSByZWN0IGZvciBlYWNoCisg
ICAgICAgIGxheWVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHN5bmNocm9ub3VzbHkgcmVuZGVyIHRo
ZSB2aXNpYmxlIHRpbGVzIG9mIGEKKyAgICAgICAgVGlsZWRMYXllciBhbmQgYXZvaWQgdGhlIGZs
YXNoaW5nIHRoYXQgb2Z0ZW4gb2NjdXJzIHdoZW4gdGlsZXMgYXJlIHJlbmRlcmVkCisgICAgICAg
IGFzeW5jaHJvbm91c2x5LiBBIG5ldyBzeW5jaHJvbm91c2x5RGlzcGxheVRpbGVzSW5SZWN0IGlz
IGFsc28gYWRkZWQgdG8gZG8KKyAgICAgICAgdGhlIGFjdHVhbCByZW5kZXJpbmcsIGJ1dCB0aGUg
Y2FsbCBpcyBub3QgY3VycmVudGx5IGJlaW5nIG1hZGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0ZyYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbToKKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcjo6c3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisK
IDIwMTEtMDgtMDQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUncyBlbGVtZW50IGFyZ3VtZW50IG5lZWRzIHRv
IGJlIG1hcmtlZCBvcHRpb25hbApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2
aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwNiw3ICs3MDYsNyBAQCBib29sIEZyYW1lVmlldzo6c3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUCiAgICAgaWYgKGlzRG9jdW1lbnRSdW5uaW5nRnVsbFNjcmVlbkFuaW1hdGlv
bihkb2N1bWVudCkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gZG9j
dW1lbnQtPmZ1bGxTY3JlZW5SZW5kZXJlcigpLT5sYXllcigpLT5iYWNraW5nKCk7CiAgICAgICAg
IGlmIChHcmFwaGljc0xheWVyKiBmdWxsU2NyZWVuTGF5ZXIgPSBiYWNraW5nLT5ncmFwaGljc0xh
eWVyKCkpCi0gICAgICAgICAgICBmdWxsU2NyZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
KCk7CisgICAgICAgICAgICBmdWxsU2NyZWVuTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZy
YW1lUmVjdCgpKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlz
aW9uIDkxNjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgcHVibGljOgogICAgIC8v
IFNvbWUgY29tcG9zaXRpbmcgc3lzdGVtcyBtYXkgZG8gaW50ZXJuYWwgYmF0Y2hpbmcgdG8gc3lu
Y2hyb25pemUgY29tcG9zaXRpbmcgdXBkYXRlcwogICAgIC8vIHdpdGggdXBkYXRlcyBkcmF3biBp
bnRvIHRoZSB3aW5kb3cuIFRoZXNlIG1ldGhvZHMgZmx1c2ggaW50ZXJuYWwgYmF0Y2hlZCBzdGF0
ZSBvbiB0aGlzIGxheWVyCiAgICAgLy8gYW5kIGRlc2NlbmRhbnQgbGF5ZXJzLCBhbmQgdGhpcyBs
YXllciBvbmx5LgotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIC8q
IGNsaXBSZWN0ICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCkgeyB9CiAgICAgCiAgICAgLy8gUmV0dXJuIGEgc3RyaW5nIHdpdGgg
YSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIHRoZSBsYXllciB0cmVlLCBJZiBkZWJ1ZyBpcyB0cnVl
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FUcmFuc2Zvcm0zRC5o
PgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtODEwLDkgKzgxMSwxMCBAQCBGbG9hdFBvaW50IEdy
YXBoaWNzTGF5ZXJDQTo6Y29tcHV0ZVBvc2l0CiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGNsaXBS
ZWN0KQogewotICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoKTsKKyAgICBUcmFuc2Zvcm1TdGF0
ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24s
IEZsb2F0UXVhZChjbGlwUmVjdCkpOworICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCkKQEAgLTgyMyw4ICs4MjUsMzIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN5
bmNDb21wb3NpdGluZ1N0YQogICAgIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vy
c2l2ZUNvbW1pdENoYW5nZXMoVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIGJvb2wgYWZm
ZWN0ZWRCeVBhZ2VTY2FsZSkKIHsKKyAgICBUcmFuc2Zvcm1TdGF0ZTo6VHJhbnNmb3JtQWNjdW11
bGF0aW9uIGFjY3VtdWxhdGlvbiA9IHByZXNlcnZlczNEKCkgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNj
dW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtOworICAg
IHN0YXRlLm1vdmUobV9wb3NpdGlvbi54KCksIG1fcG9zaXRpb24ueSgpLCBhY2N1bXVsYXRpb24p
OworICAgIAorICAgIGlmICghdHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKSB7CisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybVdpdGhBbmNob3JQb2ludDsKKyAgICAgICAgRmxv
YXRQb2ludDNEIGFic29sdXRlQW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CisgICAgICAgIGFi
c29sdXRlQW5jaG9yUG9pbnQuc2NhbGUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwg
MSk7CisgICAgICAgIHRyYW5zZm9ybVdpdGhBbmNob3JQb2ludC50cmFuc2xhdGUzZChhYnNvbHV0
ZUFuY2hvclBvaW50LngoKSwgYWJzb2x1dGVBbmNob3JQb2ludC55KCksIGFic29sdXRlQW5jaG9y
UG9pbnQueigpKTsKKyAgICAgICAgdHJhbnNmb3JtV2l0aEFuY2hvclBvaW50Lm11bHRpcGx5KHRy
YW5zZm9ybSgpKTsKKyAgICAgICAgdHJhbnNmb3JtV2l0aEFuY2hvclBvaW50LnRyYW5zbGF0ZTNk
KC1hYnNvbHV0ZUFuY2hvclBvaW50LngoKSwgLWFic29sdXRlQW5jaG9yUG9pbnQueSgpLCAtYWJz
b2x1dGVBbmNob3JQb2ludC56KCkpOworICAgICAgICBzdGF0ZS5hcHBseVRyYW5zZm9ybSh0cmFu
c2Zvcm1XaXRoQW5jaG9yUG9pbnQsIGFjY3VtdWxhdGlvbik7CisgICAgfQorICAgIAorICAgIEZs
b2F0UmVjdCBjbGlwUmVjdCA9IHN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdCb3goKTsK
KyAgICAKKyAgICBpZiAobWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgIEFTU0VSVChhY2N1bXVs
YXRpb24gPT0gVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgICAgICAKKyAg
ICAgICAgLy8gUmVwbGFjZSB0aGUgcXVhZCBpbiB0aGUgVHJhbnNmb3JtU3RhdGUgd2l0aCBvbmUg
dGhhdCBpcyBjbGlwcGVkIHRvIHRoaXMgbGF5ZXIncyBib3VuZHMKKyAgICAgICAgRmxvYXRSZWN0
IGNsaXBSZWN0KEZsb2F0UmVjdChtX3Bvc2l0aW9uLCBtX3NpemUpKTsKKyAgICAgICAgY2xpcFJl
Y3QuaW50ZXJzZWN0KHN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdCb3goKSk7CisgICAg
ICAgIHN0YXRlLnNldFF1YWQoY2xpcFJlY3QpOworICAgIH0KKyAgICAKICAgICBib29sIGhhZENo
YW5nZXMgPSBtX3VuY29tbWl0dGVkQ2hhbmdlczsKICAgICAKICAgICBpZiAoYXBwbGllc1BhZ2VT
Y2FsZSgpKSB7CkBAIC04NDQsMTMgKzg3MCwxNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhCiAKICAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGls
ZExheWVycyA9IGNoaWxkcmVuKCk7CiAgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXll
cnMuc2l6ZSgpOworICAgIAorICAgIGlmICghY2hpbGRyZW5UcmFuc2Zvcm0oKS5pc0lkZW50aXR5
KCkpICAgIAorICAgICAgICBzdGF0ZS5hcHBseVRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgp
LCBhY2N1bXVsYXRpb24pOworICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hp
bGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGljc0xheWVyQ0EqIGN1ckNoaWxkID0gc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4oY2hpbGRMYXllcnNbaV0pOwotICAgICAgICBjdXJDaGls
ZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBv
c2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKKyAgICAgICAgY3VyQ2hpbGQtPnJlY3Vyc2l2
ZUNvbW1pdENoYW5nZXMoc3RhdGUsIHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRp
b24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOwogICAgIH0KIAogICAgIGlmIChtX3JlcGxpY2FMYXll
cikKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9yZXBsaWNhTGF5ZXIp
LT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9z
aXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOworICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGlj
c0xheWVyQ0EqPihtX3JlcGxpY2FMYXllciktPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUs
IHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2Nh
bGUpOwogCiAgICAgaWYgKG1fbWFza0xheWVyKQogICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGlj
c0xheWVyQ0EqPihtX21hc2tMYXllciktPmNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJz
KCk7CkBAIC04NjEsNiArODkxLDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGEKICAgICAgICAgY2xpZW50KCktPmRpZENvbW1pdENoYW5nZXNGb3JMYXllcih0aGlz
KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworICAg
IHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOworfQorCiB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKGZsb2F0IHBh
Z2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkK
IHsKICAgICBpZiAoIW1fdW5jb21taXR0ZWRDaGFuZ2VzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgJKHJldmlz
aW9uIDkxNjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxheWVyOworY2xhc3MgVHJhbnNmb3JtU3RhdGU7
CiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJDQSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMg
UGxhdGZvcm1DQUxheWVyQ2xpZW50IHsKIHB1YmxpYzoKQEAgLTExOSw5ICsxMjAsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE1haW50YWluc1BpeGVsQWxpZ25tZW50KGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIHJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gMSwgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZl
Y3RlZEJ5UGFnZVNjYWxlID0gZmFsc2UpOworICAgIHZvaWQgcmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyhUcmFuc2Zvcm1TdGF0ZSYsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UgPSBGbG9hdFBvaW50KCksIGJvb2wgYWZmZWN0
ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRp
bmdTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CiAKICAgICBib29sIGFsbG93VGlsZWRMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb3dUaWxlZExheWVyOyB9CkBAIC0xMzcsNyArMTM4LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKENGVGltZUludGVy
dmFsIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50
YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5
ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
Y2xpcCkgeyBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlwKTsgfQorICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5
ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gc2hvd0RlYnVnQm9yZGVycygpOyB9
CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigpIGNv
bnN0IHsgcmV0dXJuIHNob3dSZXBhaW50Q291bnRlcigpOyB9CiAgICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyByZXR1cm4gaW5jcmVtZW50UmVw
YWludENvdW50KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L1BsYXRmb3JtQ0FMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUsNiArMTk1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW50VHJlZSgp
IGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICB2
b2lkIHN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Cisj
ZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUsIFBsYXRm
b3JtTGF5ZXIqLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5tbQkocmV2aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw2ICs4OSwxNCBAQCAtICh2b2lkKXNldE93bmVyOihQbGF0Zm9ybUNBTGF5ZXIqKW93
bmVyCiAKIEBlbmQKIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK0BpbnRlcmZhY2UgQ0FUaWxlZExheWVyKEdy
YXBoaWNzTGF5ZXJDQVByaXZhdGUpCistICh2b2lkKWRpc3BsYXlJblJlY3Q6KENHUmVjdClyIGxl
dmVsT2ZEZXRhaWw6KGludClsb2Qgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopZGljdDsKKy0gKEJP
T0wpY2FuRHJhd0NvbmN1cnJlbnRseTsKKy0gKHZvaWQpc2V0Q2FuRHJhd0NvbmN1cnJlbnRseToo
Qk9PTClmbGFnOworQGVuZAorI2VuZGlmCisKIEBpbnRlcmZhY2UgQ0FMYXllcihQcml2YXRlKQog
LSAodm9pZClzZXRDb250ZW50c0NoYW5nZWQ7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQpAQCAtNzUwLDQgKzc1
OCwyMSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNTY2FsZShmCiAjZW5kaWYK
IH0KIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzeW5jaHJvbm91c2x5
RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9s
YXllclR5cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViVGlsZWRMYXllciAqdGlsZWRMYXllciA9IHN0YXRpY19jYXN0PFdlYlRpbGVkTGF5ZXIq
PihtX2xheWVyLmdldCgpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAg
IEJPT0wgb2xkQ2FuRHJhd0NvbmN1cnJlbnRseSA9IFt0aWxlZExheWVyIGNhbkRyYXdDb25jdXJy
ZW50bHldOworICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6Tk9dOworICAg
IFt0aWxlZExheWVyIGRpc3BsYXlJblJlY3Q6cmVjdCBsZXZlbE9mRGV0YWlsOjAgb3B0aW9uczpu
aWxdOworICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6b2xkQ2FuRHJhd0Nv
bmN1cnJlbnRseV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorI2VuZGlmCisK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDkgKzIwMywxMiBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nCiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJz
KTsKICAgICBtX2ZsdXNoaW5nTGF5ZXJzID0gdHJ1ZTsKIAotICAgIGlmIChHcmFwaGljc0xheWVy
KiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKQotICAgICAgICByb290TGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7Ci0KKyAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVy
ID0gcm9vdEdyYXBoaWNzTGF5ZXIoKSkgeworICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fcmVuZGVyVmlldyA/IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCkgOiAwOworICAgICAgICBp
ZiAoZnJhbWVWaWV3KQorICAgICAgICAgICAgcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShmcmFtZVZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICB9CisgICAgCiAgICAgQVNTRVJUKG1fZmx1
c2hpbmdMYXllcnMpOwogICAgIG1fZmx1c2hpbmdMYXllcnMgPSBmYWxzZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDkyMzkzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDgtMDQgIENocmlzIE1hcnJpbiAgPGNt
YXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIExvZ2ljIHRvIGNvbXB1dGUgdmlzaWJsZSBkaXNw
bGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDgKKworICAgICAg
ICBTdXBwbHkgaW5pdGlhbCBkaXNwbGF5IHJlY3RzIGZvciB0aGUgZnVsbC1zY3JlZW4gY2FzZQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9GdWxsU2NyZWVuL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlck1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJNYWM6OnNldFJvb3RGdWxsU2NyZWVuTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlck1hYzo6YmVnaW5FbnRlckZ1
bGxTY3JlZW5BbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdl
ck1hYzo6YmVnaW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbik6CisKIDIwMTEtMDgtMDEgIEJyaWFu
IFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDI6IFdl
YiBJbnNwZWN0b3IgYWx3YXlzIHN0YXJ0cyBpbiB1bmRvY2tlZCBtb2RlCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vbWFjL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9t
YWMvV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWMubW0JKHJldmlzaW9uIDkxNjM2KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgV2ViRnVsbFNjcmVl
bk1hbmFnZXJNYWM6OnNldFJvb3RGdWwKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOwogICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIG1f
cm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Ci0gICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGdldEZ1
bGxTY3JlZW5SZWN0KCkpOwogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOkAi
V2ViS2l0TGF5ZXJIb3N0Q2hhbmdlZCIgb2JqZWN0Om1fcm9vdExheWVyLT5wbGF0Zm9ybUxheWVy
KCkgdXNlckluZm86bmlsXTsKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyTWFjOjpiZWdpbkVudGVyCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uRnJhbWUgPSBn
ZXRGdWxsU2NyZWVuUmVjdCgpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0RnVsbFNj
cmVlblJlbmRlcmVyU2l6ZShkZXN0aW5hdGlvbkZyYW1lLnNpemUoKSk7Ci0gICAgbV9yb290TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKGRlc3RpbmF0aW9uRnJhbWUpOwogCiAgICAgLy8gRklYTUU6IE9uY2Ugd2UgZ2Fp
biB0aGUgYWJpbGl0eSB0byBkbyBuYXRpdmUgV2ViS2l0IGFuaW1hdGlvbnMgb2YgZ2VuZXJhdGVk
CiAgICAgLy8gY29udGVudCwgdGhpcyBjYW4gY2hhbmdlIHRvIHVzZSB0aGVtLiAgTWVhbndoaWxl
LCB3ZSdsbCBoYXZlIHRvIGFuaW1hdGUgdGhlCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlck1hYzo6YmVnaW5FeGl0RgogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlv
bkZyYW1lID0gZ2V0RnVsbFNjcmVlblJlY3QoKTsKICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnNldEZ1bGxTY3JlZW5SZW5kZXJlclNpemUoZGVzdGluYXRpb25GcmFtZS5zaXplKCkpOwotICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIG1fcm9vdExheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZShkZXN0aW5hdGlvbkZyYW1lKTsKIAogICAgIC8vIEZJWE1FOiBP
bmNlIHdlIGdhaW4gdGhlIGFiaWxpdHkgdG8gZG8gbmF0aXZlIFdlYktpdCBhbmltYXRpb25zIG9m
IGdlbmVyYXRlZAogICAgIC8vIGNvbnRlbnQsIHRoaXMgY2FuIGNoYW5nZSB0byB1c2UgdGhlbS4g
IE1lYW53aGlsZSwgd2UnbGwgaGF2ZSB0byBhbmltYXRlIHRoZQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTIzOTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wOC0wNCAgQ2hyaXMgTWFycmluICA8Y21h
cnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTG9naWMgdG8gY29tcHV0ZSB2aXNpYmxlIGRpc3Bs
YXkgcmVjdCBpbiBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTcwOAorCisgICAgICAg
IFN1cHBseSBpbml0aWFsIGRpc3BsYXkgcmVjdHMgZm9yIHRoZSBmdWxsLXNjcmVlbiBjYXNlCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlciBlbnRlckZ1bGxzY3JlZW46XSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250
cm9sbGVyIGV4aXRGdWxsc2NyZWVuXSk6CisKIDIwMTEtMDgtMDMgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3QgY2hlY2tzIGZvciBIVE1M
TWVkaWFFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDkxNjM2KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDIxLDcgKzQyMSw3IEBAIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAq
KXNjcmUKICAgICAvLyBTb21lIHByb3BlcnRpZXMgaGF2ZW4ndCBwcm9wb2dhdGVkIGZyb20gdGhl
IEdyYXBoaWNzTGF5ZXIgdG8gdGhlIENBTGF5ZXIgeWV0LiBTbwogICAgIC8vIHRlbGwgdGhlIHJl
bmRlcmVyJ3MgbGF5ZXIgdG8gc3luYyBpdCdzIGNvbXBvc2l0aW5nIHN0YXRlOgogICAgIEdyYXBo
aWNzTGF5ZXIqIHJlbmRlcmVyR3JhcGhpY3MgPSBfcmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmco
KS0+Z3JhcGhpY3NMYXllcigpOwotICAgIHJlbmRlcmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7ICAgIAorICAgIHJlbmRlcmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGluZ1N0YXRl
KGRlc3RpbmF0aW9uRnJhbWUpOyAgICAKIAogICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIgPSBy
ZW5kZXJlckdyYXBoaWNzLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgW1tzZWxmIF9mdWxsc2NyZWVu
V2luZG93XSBzZXRSZW5kZXJlckxheWVyOnJlbmRlcmVyTGF5ZXJdOyAgICAKQEAgLTU3Miw3ICs1
NzIsNyBAQCAtICh2b2lkKWV4aXRGdWxsc2NyZWVuCiAgICAgCiAgICAgW3NlbGYgX2RvY3VtZW50
XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCk7CiAKLSAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOyAgICAK
KyAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShsYXllckVuZEZyYW1l
KTsgICAgCiAKICAgICBDQUxheWVyKiByZW5kZXJlckxheWVyID0gcmVuZGVyZXJHcmFwaGljcy0+
cGxhdGZvcm1MYXllcigpOwogICAgIFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVy
ZXJMYXllcjpyZW5kZXJlckxheWVyXTsgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103294</attachid>
            <date>2011-08-08 14:27:35 -0700</date>
            <delta_ts>2011-08-08 14:33:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65708-20110808142734.patch</filename>
            <type>text/plain</type>
            <size>22313</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyNjMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDgtMDggIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIExvZ2ljIHRvIGNvbXB1dGUgdmlz
aWJsZSBkaXNwbGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDgK
KworICAgICAgICBUaGlzIGlzIGluIHN1cHBvcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzk3MDYyMjI+
IGFuZCA8cmRhcjovL3Byb2JsZW0vOTQzNDc2NT4KKworICAgICAgICBBZGQgbG9naWMgdG8gc3lu
Y0NvbXBvc2l0aW5nU3RhdGUgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSByZWN0IGZvciBlYWNoCisg
ICAgICAgIGxheWVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHN5bmNocm9ub3VzbHkgcmVuZGVyIHRo
ZSB2aXNpYmxlIHRpbGVzIG9mIGEKKyAgICAgICAgVGlsZWRMYXllciBhbmQgYXZvaWQgdGhlIGZs
YXNoaW5nIHRoYXQgb2Z0ZW4gb2NjdXJzIHdoZW4gdGlsZXMgYXJlIHJlbmRlcmVkCisgICAgICAg
IGFzeW5jaHJvbm91c2x5LiBBIG5ldyBzeW5jaHJvbm91c2x5RGlzcGxheVRpbGVzSW5SZWN0IGlz
IGFsc28gYWRkZWQgdG8gZG8KKyAgICAgICAgdGhlIGFjdHVhbCByZW5kZXJpbmcsIGJ1dCB0aGUg
Y2FsbCBpcyBub3QgY3VycmVudGx5IGJlaW5nIG1hZGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0ZyYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVN1YmxheWVyTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTGF5
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW06CisgICAg
ICAgIChQbGF0Zm9ybUNBTGF5ZXI6OnN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU3RhdGU6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtU3RhdGU6OlRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKwogMjAxMS0w
OC0wOCAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3dpdGNo
IFJlbmRlclN0eWxlIHRvIHRvIG5ldyBsYXlvdXQgdHlwZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAJKHJldmlzaW9uIDkxNjM2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDYsNyArNzA2LDcgQEAgYm9vbCBGcmFtZVZp
ZXc6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVAogICAgIGlmIChpc0RvY3VtZW50UnVubmluZ0Z1
bGxTY3JlZW5BbmltYXRpb24oZG9jdW1lbnQpKSB7CiAgICAgICAgIFJlbmRlckxheWVyQmFja2lu
ZyogYmFja2luZyA9IGRvY3VtZW50LT5mdWxsU2NyZWVuUmVuZGVyZXIoKS0+bGF5ZXIoKS0+YmFj
a2luZygpOwogICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogZnVsbFNjcmVlbkxheWVyID0gYmFj
a2luZy0+Z3JhcGhpY3NMYXllcigpKQotICAgICAgICAgICAgZnVsbFNjcmVlbkxheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZSgpOworICAgICAgICAgICAgZnVsbFNjcmVlbkxheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZShmcmFtZVJlY3QoKSk7CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBA
IHB1YmxpYzoKICAgICAvLyBTb21lIGNvbXBvc2l0aW5nIHN5c3RlbXMgbWF5IGRvIGludGVybmFs
IGJhdGNoaW5nIHRvIHN5bmNocm9uaXplIGNvbXBvc2l0aW5nIHVwZGF0ZXMKICAgICAvLyB3aXRo
IHVwZGF0ZXMgZHJhd24gaW50byB0aGUgd2luZG93LiBUaGVzZSBtZXRob2RzIGZsdXNoIGludGVy
bmFsIGJhdGNoZWQgc3RhdGUgb24gdGhpcyBsYXllcgogICAgIC8vIGFuZCBkZXNjZW5kYW50IGxh
eWVycywgYW5kIHRoaXMgbGF5ZXIgb25seS4KLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0
aW5nU3RhdGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29u
c3QgRmxvYXRSZWN0JiAvKiBjbGlwUmVjdCAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIHsgfQogICAgIAogICAgIC8vIFJldHVy
biBhIHN0cmluZyB3aXRoIGEgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiB0aGUgbGF5ZXIgdHJlZSwg
SWYgZGVidWcgaXMgdHJ1ZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkocmV2aXNpb24gOTE2MzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNp
bmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNs
dWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlIDxRdWFydHpDb3Jl
L0NBVHJhbnNmb3JtM0QuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTgxMCw5ICs4MTEsMTAg
QEAgRmxvYXRQb2ludCBHcmFwaGljc0xheWVyQ0E6OmNvbXB1dGVQb3NpdAogICAgIHJldHVybiBG
bG9hdFBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICByZWN1cnNpdmVDb21taXRDaGFuZ2VzKCk7Cisg
ICAgVHJhbnNmb3JtU3RhdGUgc3RhdGUoVHJhbnNmb3JtU3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJh
bnNmb3JtRGlyZWN0aW9uLCBGbG9hdFF1YWQoY2xpcFJlY3QpKTsKKyAgICByZWN1cnNpdmVDb21t
aXRDaGFuZ2VzKHN0YXRlKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCkBAIC04MjMsOCArODI1LDQ2IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzeW5jQ29tcG9zaXRpbmdTdGEKICAgICBjb21taXRMYXllckNoYW5nZXNB
ZnRlclN1YmxheWVycygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29t
bWl0Q2hhbmdlcyhmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uUmVsYXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKK3ZvaWQgR3JhcGhp
Y3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKFRyYW5zZm9ybVN0YXRlJiBzdGF0ZSwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUpCiB7CisgICAgLy8gU2F2ZSB0aGUgc3Rh
dGUgYmVmb3JlIHNlbmRpbmcgZG93biB0byBraWRzIGFuZCByZXN0b3JlIGl0IGFmdGVyCisgICAg
VHJhbnNmb3JtU3RhdGUgc2F2ZWRUcmFuc2Zvcm1TdGF0ZSA9IHN0YXRlOworICAgIAorICAgIFRy
YW5zZm9ybVN0YXRlOjpUcmFuc2Zvcm1BY2N1bXVsYXRpb24gYWNjdW11bGF0aW9uID0gcHJlc2Vy
dmVzM0QoKSA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3Jt
U3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm07CisgICAgc3RhdGUubW92ZSgtbV9wb3NpdGlvbi54KCks
IC1tX3Bvc2l0aW9uLnkoKSwgYWNjdW11bGF0aW9uKTsKKyAgICAKKyAgICBpZiAoIXRyYW5zZm9y
bSgpLmlzSWRlbnRpdHkoKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm1XaXRoQW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0UG9pbnQzRCBhYnNvbHV0ZUFuY2hvclBv
aW50KGFuY2hvclBvaW50KCkpOworICAgICAgICBhYnNvbHV0ZUFuY2hvclBvaW50LnNjYWxlKHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIDEpOworICAgICAgICB0cmFuc2Zvcm1XaXRo
QW5jaG9yUG9pbnQudHJhbnNsYXRlM2QoYWJzb2x1dGVBbmNob3JQb2ludC54KCksIGFic29sdXRl
QW5jaG9yUG9pbnQueSgpLCBhYnNvbHV0ZUFuY2hvclBvaW50LnooKSk7CisgICAgICAgIHRyYW5z
Zm9ybVdpdGhBbmNob3JQb2ludC5tdWx0aXBseSh0cmFuc2Zvcm0oKSk7CisgICAgICAgIHRyYW5z
Zm9ybVdpdGhBbmNob3JQb2ludC50cmFuc2xhdGUzZCgtYWJzb2x1dGVBbmNob3JQb2ludC54KCks
IC1hYnNvbHV0ZUFuY2hvclBvaW50LnkoKSwgLWFic29sdXRlQW5jaG9yUG9pbnQueigpKTsKKyAg
ICAgICAgc3RhdGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtV2l0aEFuY2hvclBvaW50LCBhY2N1
bXVsYXRpb24pOworICAgIH0KKyAgICAKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3RGb3JDaGlsZHJl
biA9IHN0YXRlLmxhc3RQbGFuYXJRdWFkKCkuYm91bmRpbmdCb3goKTsKKyAgICBGbG9hdFJlY3Qg
Y2xpcFJlY3RGb3JTZWxmOworICAgIAorICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKKyAgICAg
ICAgQVNTRVJUKGFjY3VtdWxhdGlvbiA9PSBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9y
bSk7CisgICAgICAgIAorICAgICAgICAvLyBSZXBsYWNlIHRoZSBxdWFkIGluIHRoZSBUcmFuc2Zv
cm1TdGF0ZSB3aXRoIG9uZSB0aGF0IGlzIGNsaXBwZWQgdG8gdGhpcyBsYXllcidzIGJvdW5kcwor
ICAgICAgICBjbGlwUmVjdEZvclNlbGYgPSBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNsaXBSZWN0Rm9yU2VsZi5pbnRlcnNlY3QoY2xp
cFJlY3RGb3JDaGlsZHJlbik7CisgICAgICAgIHN0YXRlLnNldFF1YWQoY2xpcFJlY3RGb3JTZWxm
KTsKKyAgICB9CisKKyNpZmRlZiBWSVNJQkxFX1RJTEVfV0FTSAorICAgIGlmIChtX3Zpc2libGVU
aWxlV2FzaExheWVyKSB7CisgICAgICAgIGlmIChjbGlwUmVjdEZvclNlbGYuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBjbGlwUmVjdEZvclNlbGYgPSBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBjbGlwUmVjdEZvclNlbGYuaW50
ZXJzZWN0KGNsaXBSZWN0Rm9yQ2hpbGRyZW4pOworICAgICAgICB9CisgICAgICAgIG1fdmlzaWJs
ZVRpbGVXYXNoTGF5ZXItPnNldEZyYW1lKGNsaXBSZWN0Rm9yU2VsZik7CisgICAgfQorI2VuZGlm
CisKICAgICBib29sIGhhZENoYW5nZXMgPSBtX3VuY29tbWl0dGVkQ2hhbmdlczsKICAgICAKICAg
ICBpZiAoYXBwbGllc1BhZ2VTY2FsZSgpKSB7CkBAIC04NDQsMTMgKzg4NCwxNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAKICAgICBjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CiAgICAgc2l6ZV90IG51bUNo
aWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOworICAgIAorICAgIGlmICghY2hpbGRyZW5UcmFu
c2Zvcm0oKS5pc0lkZW50aXR5KCkpICAgIAorICAgICAgICBzdGF0ZS5hcHBseVRyYW5zZm9ybShj
aGlsZHJlblRyYW5zZm9ybSgpLCBhY2N1bXVsYXRpb24pOworICAgIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGljc0xheWVyQ0Eq
IGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4oY2hpbGRMYXllcnNbaV0p
OwotICAgICAgICBjdXJDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhwYWdlU2NhbGVGYWN0
b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKKyAgICAgICAg
Y3VyQ2hpbGQtPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUsIHBhZ2VTY2FsZUZhY3Rvciwg
YmFzZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOwogICAgIH0KIAogICAg
IGlmIChtX3JlcGxpY2FMYXllcikKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNB
Kj4obV9yZXBsaWNhTGF5ZXIpLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKHBhZ2VTY2FsZUZhY3Rv
ciwgYmFzZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOworICAgICAgICBz
dGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX3JlcGxpY2FMYXllciktPnJlY3Vyc2l2ZUNv
bW1pdENoYW5nZXMoc3RhdGUsIHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9zaXRpb24s
IGFmZmVjdGVkQnlQYWdlU2NhbGUpOwogCiAgICAgaWYgKG1fbWFza0xheWVyKQogICAgICAgICBz
dGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX21hc2tMYXllciktPmNvbW1pdExheWVyQ2hh
bmdlc0FmdGVyU3VibGF5ZXJzKCk7CkBAIC04NTksNiArOTAzLDEzIEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpyZWN1cnNpdmVDb21taXRDaGEKIAogICAgIGlmIChoYWRDaGFuZ2VzICYmIGNsaWVu
dCgpKQogICAgICAgICBjbGllbnQoKS0+ZGlkQ29tbWl0Q2hhbmdlc0ZvckxheWVyKHRoaXMpOwor
CisgICAgc3RhdGUgPSBzYXZlZFRyYW5zZm9ybVN0YXRlOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoY29udGV4dCwgY2xpcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21taXRMYXll
ckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQpAQCAtOTg5LDYgKzEwNDAsMTEgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZVN1YmxheWVyTGlzdAogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG5ld1N1YmxheWVycy5zaXplKCk7IC0taSkKICAgICAgICAgICAgIG5ld1N1
YmxheWVyc1tpXS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAgICB9CisgICAgCisjaWZkZWYg
VklTSUJMRV9USUxFX1dBU0gKKyAgICBpZiAobV92aXNpYmxlVGlsZVdhc2hMYXllcikKKyAgICAg
ICAgbmV3U3VibGF5ZXJzLmFwcGVuZChtX3Zpc2libGVUaWxlV2FzaExheWVyKTsKKyNlbmRpZgog
CiAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKSB7CiAgICAgICAgIG1fc3RydWN0dXJhbExheWVy
LT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJzKTsKQEAgLTIwNjIsNiArMjExOCwyMSBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMCiAgICAgbV9sYXllciA9IFBsYXRm
b3JtQ0FMYXllcjo6Y3JlYXRlKHVzZVRpbGVkTGF5ZXIgPyBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZVdlYlRpbGVkTGF5ZXIgOiBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyLCB0
aGlzKTsKICAgICBtX3VzaW5nVGlsZWRMYXllciA9IHVzZVRpbGVkTGF5ZXI7CiAgICAgCisjaWZk
ZWYgVklTSUJMRV9USUxFX1dBU0gKKyAgICBpZiAodXNlVGlsZWRMYXllcikgeworICAgICAgICBz
dGF0aWMgQ29sb3Igd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKKyAgICAgICAgc3RhdGlj
IENvbG9yIHdhc2hCb3JkZXJDb2xvcigyNTUsIDAsIDAsIDEwMCk7CisgICAgICAgIAorICAgICAg
ICBtX3Zpc2libGVUaWxlV2FzaExheWVyID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUoUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgIG1fdmlzaWJsZVRpbGVX
YXNoTGF5ZXItPnNldE5hbWUoIlZpc2libGUgVGlsZSBXYXNoIExheWVyIik7CisgICAgICAgIG1f
dmlzaWJsZVRpbGVXYXNoTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAw
KSk7CisgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXItPnNldEJvcmRlckNvbG9yKHdhc2hC
b3JkZXJDb2xvcik7CisgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXItPnNldEJvcmRlcldp
ZHRoKDgpOworICAgICAgICBtX3Zpc2libGVUaWxlV2FzaExheWVyLT5zZXRCYWNrZ3JvdW5kQ29s
b3Iod2FzaEZpbGxDb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlzaWJsZVRpbGVXYXNo
TGF5ZXIgPSAwOworI2VuZGlmCisgICAgCiAgICAgaWYgKHVzZVRpbGVkTGF5ZXIpIHsKICNpZiAh
SEFWRV9NT0RFUk5fUVVBUlRaQ09SRQogICAgICAgICAvLyBUaWxlZCBsYXllciBoYXMgaXNzdWVz
IHdpdGggZmxpcHBlZCBjb29yZGluYXRlcy4KQEAgLTIwNzQsNyArMjE0NSwxMiBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMCiAgICAgfQogCiAgICAgbV9sYXllci0+
YWRvcHRTdWJsYXllcnMob2xkTGF5ZXIuZ2V0KCkpOwotICAgIAorCisjaWZkZWYgVklTSUJMRV9U
SUxFX1dBU0gKKyAgICBpZiAobV92aXNpYmxlVGlsZVdhc2hMYXllcikKKyAgICAgICAgbV9sYXll
ci0+YXBwZW5kU3VibGF5ZXIobV92aXNpYmxlVGlsZVdhc2hMYXllci5nZXQoKSk7CisjZW5kaWYK
KwogICAgIC8vIEZJWE1FOiBTa2lwIHRoaXMgc3RlcCBpZiB3ZSBkb24ndCBoYXZlIGEgc3VwZXJs
YXllci4gVGhpcyBpcyBwcm9ibGFibHkgYSBiZW5pZ24KICAgICAvLyBjYXNlIHRoYXQgaGFwcGVu
cyB3aGlsZSByZXN0cnVjdHVyaW5nIHRoZSBsYXllciB0cmVlLgogICAgIEFTU0VSVChvbGRMYXll
ci0+c3VwZXJsYXllcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA5MTYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw5ICszNywxNCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKy8vIEVuYWJsZSB0aGlzIHRvIGFk
ZCBhIGxpZ2h0IHJlZCB3YXNoIG92ZXIgdGhlIHZpc2libGUgcG9ydGlvbiBvZiBUaWxlZCBMYXll
cnMsIGFzIGNvbXB1dGVkCisvLyBieSBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpLgorI2RlZmluZSBW
SVNJQkxFX1RJTEVfV0FTSAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllcjsKK2NsYXNzIFRyYW5zZm9ybVN0YXRlOwogCiBjbGFzcyBHcmFwaGljc0xheWVyQ0Eg
OiBwdWJsaWMgR3JhcGhpY3NMYXllciwgcHVibGljIFBsYXRmb3JtQ0FMYXllckNsaWVudCB7CiBw
dWJsaWM6CkBAIC0xMTksOSArMTI0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRN
YWludGFpbnNQaXhlbEFsaWdubWVudChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpOwogCi0gICAgdm9pZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UgPSBGbG9hdFBvaW50KCksIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsK
KyAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoVHJhbnNmb3JtU3RhdGUmLCBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9C
YXNlID0gRmxvYXRQb2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSBmYWxzZSk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgYm9vbCBh
bGxvd1RpbGVkTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93VGlsZWRMYXllcjsgfQpAQCAt
MTM3LDcgKzE0Miw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpOwogICAgIHZpcnR1
YWwgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBjb250ZW50c09yaWVudGF0aW9uKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApIHsgcGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoY29udGV4dCwgY2xpcCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxh
eWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0
IHsgcmV0dXJuIHNob3dEZWJ1Z0JvcmRlcnMoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9y
bUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBzaG93UmVwYWludENv
dW50ZXIoKTsgfQogICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFp
bnRDb3VudCgpIHsgcmV0dXJuIGluY3JlbWVudFJlcGFpbnRDb3VudCgpOyB9CkBAIC0zNDgsNiAr
MzUzLDEwIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPExheWVyTWFwPiBtX2xheWVyQ2xvbmVzOwog
ICAgIE93blB0cjxMYXllck1hcD4gbV9zdHJ1Y3R1cmFsTGF5ZXJDbG9uZXM7CiAgICAgT3duUHRy
PExheWVyTWFwPiBtX2NvbnRlbnRzTGF5ZXJDbG9uZXM7CisKKyNpZmRlZiBWSVNJQkxFX1RJTEVf
V0FTSAorICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXI7
CisjZW5kaWYKICAgICAKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAg
Tm9Db250ZW50c0xheWVyID0gMCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZpc2lvbiA5MTYzNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW50
VHJlZSgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
KyAgICB2b2lkIHN5bmNocm9ub3VzbHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUs
IFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FMYXllck1hYy5tbQkocmV2aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw2ICs4OSwxNCBAQCAtICh2b2lkKXNldE93bmVyOihQbGF0Zm9ybUNBTGF5
ZXIqKW93bmVyCiAKIEBlbmQKIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK0BpbnRlcmZhY2UgQ0FUaWxlZExh
eWVyKEdyYXBoaWNzTGF5ZXJDQVByaXZhdGUpCistICh2b2lkKWRpc3BsYXlJblJlY3Q6KENHUmVj
dClyIGxldmVsT2ZEZXRhaWw6KGludClsb2Qgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopZGljdDsK
Ky0gKEJPT0wpY2FuRHJhd0NvbmN1cnJlbnRseTsKKy0gKHZvaWQpc2V0Q2FuRHJhd0NvbmN1cnJl
bnRseTooQk9PTClmbGFnOworQGVuZAorI2VuZGlmCisKIEBpbnRlcmZhY2UgQ0FMYXllcihQcml2
YXRlKQogLSAodm9pZClzZXRDb250ZW50c0NoYW5nZWQ7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQpAQCAtNzUw
LDQgKzc1OCwyMSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNTY2FsZShmCiAj
ZW5kaWYKIH0KIAorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzeW5jaHJv
bm91c2x5RGlzcGxheVRpbGVzSW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAobV9sYXllclR5cGUgIT0gTGF5ZXJUeXBlV2ViVGlsZWRMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViVGlsZWRMYXllciAqdGlsZWRMYXllciA9IHN0YXRpY19jYXN0PFdlYlRpbGVk
TGF5ZXIqPihtX2xheWVyLmdldCgpKTsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UworICAgIEJPT0wgb2xkQ2FuRHJhd0NvbmN1cnJlbnRseSA9IFt0aWxlZExheWVyIGNhbkRyYXdD
b25jdXJyZW50bHldOworICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6Tk9d
OworICAgIFt0aWxlZExheWVyIGRpc3BsYXlJblJlY3Q6cmVjdCBsZXZlbE9mRGV0YWlsOjAgb3B0
aW9uczpuaWxdOworICAgIFt0aWxlZExheWVyIHNldENhbkRyYXdDb25jdXJyZW50bHk6b2xkQ2Fu
RHJhd0NvbmN1cnJlbnRseV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorI2Vu
ZGlmCisKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2aXNpb24gOTE2MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitUcmFu
c2Zvcm1TdGF0ZSYgVHJhbnNmb3JtU3RhdGU6Om9wZXJhdG9yPShjb25zdCBUcmFuc2Zvcm1TdGF0
ZSYgb3RoZXIpCit7CisgICAgbV9tYXBQb2ludCA9IG90aGVyLm1fbWFwUG9pbnQ7CisgICAgbV9t
YXBRdWFkID0gb3RoZXIubV9tYXBRdWFkOworICAgIGlmIChtX21hcFBvaW50KQorICAgICAgICBt
X2xhc3RQbGFuYXJQb2ludCA9IG90aGVyLm1fbGFzdFBsYW5hclBvaW50OworICAgIGlmIChtX21h
cFF1YWQpCisgICAgICAgIG1fbGFzdFBsYW5hclF1YWQgPSBvdGhlci5tX2xhc3RQbGFuYXJRdWFk
OworICAgIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gb3RoZXIubV9hY2N1bXVsYXRpbmdUcmFu
c2Zvcm07CisgICAgbV9kaXJlY3Rpb24gPSBvdGhlci5tX2RpcmVjdGlvbjsKKyAgICAKKyAgICBt
X2FjY3VtdWxhdGVkVHJhbnNmb3JtLmNsZWFyKCk7CisKKyAgICBpZiAob3RoZXIubV9hY2N1bXVs
YXRlZFRyYW5zZm9ybSkKKyAgICAgICAgbV9hY2N1bXVsYXRlZFRyYW5zZm9ybSA9IGFkb3B0UHRy
KG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgqb3RoZXIubV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkp
OworICAgICAgICAKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgVHJhbnNmb3JtU3RhdGU6
Om1vdmUoaW50IHgsIGludCB5LCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24gYWNjdW11bGF0ZSkKIHsK
ICAgICBpZiAobV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0gJiYgbV9hY2N1bXVsYXRlZFRyYW5zZm9y
bSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gOTE2MzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgVHJhbnNmb3JtU3RhdGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyYW5z
Zm9ybVN0YXRlKTsKIHB1YmxpYzoKICAgICBlbnVtIFRyYW5zZm9ybURpcmVjdGlvbiB7IEFwcGx5
VHJhbnNmb3JtRGlyZWN0aW9uLCBVbmFwcGx5SW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiB9Owog
ICAgIGVudW0gVHJhbnNmb3JtQWNjdW11bGF0aW9uIHsgRmxhdHRlblRyYW5zZm9ybSwgQWNjdW11
bGF0ZVRyYW5zZm9ybSB9OwpAQCAtNjksNiArNjgsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAgICAgCisgICAgVHJhbnNmb3JtU3RhdGUoY29uc3QgVHJhbnNmb3JtU3RhdGUmIG90aGVyKSB7
ICp0aGlzID0gb3RoZXI7IH0KKworICAgIFRyYW5zZm9ybVN0YXRlJiBvcGVyYXRvcj0oY29uc3Qg
VHJhbnNmb3JtU3RhdGUmKTsKKyAgICAKICAgICB2b2lkIHNldFF1YWQoY29uc3QgRmxvYXRRdWFk
JiBxdWFkKSB7IG1fbGFzdFBsYW5hclF1YWQgPSBxdWFkOyB9CiAgICAgCiAgICAgdm9pZCBtb3Zl
KGNvbnN0IEludFNpemUmIHMsIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiBhY2N1bXVsYXRlID0gRmxh
dHRlblRyYW5zZm9ybSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDMsOSArMjAzLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRp
bmcKICAgICBBU1NFUlQoIW1fZmx1c2hpbmdMYXllcnMpOwogICAgIG1fZmx1c2hpbmdMYXllcnMg
PSB0cnVlOwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGlj
c0xheWVyKCkpCi0gICAgICAgIHJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKLQor
ICAgIGlmIChHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKSB7
CisgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3ID8gbV9yZW5kZXJW
aWV3LT5mcmFtZVZpZXcoKSA6IDA7CisgICAgICAgIGlmIChmcmFtZVZpZXcpCisgICAgICAgICAg
ICByb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkp
OworICAgIH0KKyAgICAKICAgICBBU1NFUlQobV9mbHVzaGluZ0xheWVycyk7CiAgICAgbV9mbHVz
aGluZ0xheWVycyA9IGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTI2MzMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wOC0wOCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTG9naWMgdG8gY29tcHV0ZSB2aXNpYmxlIGRpc3BsYXkgcmVjdCBpbiBHcmFwaGljc0xheWVy
Q0E6OnN5bmNDb21wb3NpdGluZ1N0YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NTcwOAorCisgICAgICAgIFN1cHBseSBpbml0aWFsIGRpc3BsYXkg
cmVjdHMgZm9yIHRoZSBmdWxsLXNjcmVlbiBjYXNlCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vbWFjL1dlYkZ1
bGxTY3JlZW5NYW5hZ2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFu
YWdlck1hYzo6c2V0Um9vdEZ1bGxTY3JlZW5MYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1
bGxTY3JlZW5NYW5hZ2VyTWFjOjpiZWdpbkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyTWFjOjpiZWdpbkV4aXRGdWxsU2NyZWVu
QW5pbWF0aW9uKToKKwogMjAxMS0wOC0wOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NjUyMzUwPiBSRUdSRVNTSU9OIChyODc3NTUp
OiBXS1ZpZXcgZG9lc24ndCB1cGRhdGUgd2hlbiBJIGRyYWcgZmlsZXMgaW50byBhIGJhY2tncm91
bmQgU2FmYXJpIHdpbmRvdwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2Ny
ZWVuL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vbWFjL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyTWFj
Lm1tCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNj
cmVlbi9tYWMvV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3
Myw3ICsxNzMsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWFjOjpzZXRSb290RnVsCiAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKICAgICBtX3Jvb3RMYXll
ci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIp
OwotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIG1fcm9vdExh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShnZXRGdWxsU2NyZWVuUmVjdCgpKTsKICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOwogCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpAIldlYktpdExheWVySG9zdENoYW5nZWQiIG9i
amVjdDptX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigpIHVzZXJJbmZvOm5pbF07CkBAIC0yMDMs
NyArMjAzLDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlck1hYzo6YmVnaW5FbnRlcgogCiAg
ICAgSW50UmVjdCBkZXN0aW5hdGlvbkZyYW1lID0gZ2V0RnVsbFNjcmVlblJlY3QoKTsKICAgICBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZ1bGxTY3JlZW5SZW5kZXJlclNpemUoZGVzdGluYXRp
b25GcmFtZS5zaXplKCkpOwotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgp
OworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShkZXN0aW5hdGlvbkZyYW1l
KTsKIAogICAgIC8vIEZJWE1FOiBPbmNlIHdlIGdhaW4gdGhlIGFiaWxpdHkgdG8gZG8gbmF0aXZl
IFdlYktpdCBhbmltYXRpb25zIG9mIGdlbmVyYXRlZAogICAgIC8vIGNvbnRlbnQsIHRoaXMgY2Fu
IGNoYW5nZSB0byB1c2UgdGhlbS4gIE1lYW53aGlsZSwgd2UnbGwgaGF2ZSB0byBhbmltYXRlIHRo
ZQpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWM6OmJlZ2lu
RXhpdEYKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25GcmFtZSA9IGdldEZ1bGxTY3JlZW5SZWN0
KCk7CiAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJTaXpl
KGRlc3RpbmF0aW9uRnJhbWUuc2l6ZSgpKTsKLSAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0
aW5nU3RhdGUoKTsKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoZGVzdGlu
YXRpb25GcmFtZSk7CiAKICAgICAvLyBGSVhNRTogT25jZSB3ZSBnYWluIHRoZSBhYmlsaXR5IHRv
IGRvIG5hdGl2ZSBXZWJLaXQgYW5pbWF0aW9ucyBvZiBnZW5lcmF0ZWQKICAgICAvLyBjb250ZW50
LCB0aGlzIGNhbiBjaGFuZ2UgdG8gdXNlIHRoZW0uICBNZWFud2hpbGUsIHdlJ2xsIGhhdmUgdG8g
YW5pbWF0ZSB0aGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyNjMzKQorKysgU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMDgtMDggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IExvZ2ljIHRvIGNvbXB1dGUgdmlzaWJsZSBkaXNwbGF5IHJlY3QgaW4gR3JhcGhpY3NMYXllckNB
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjU3MDgKKworICAgICAgICBTdXBwbHkgaW5pdGlhbCBkaXNwbGF5IHJl
Y3RzIGZvciB0aGUgZnVsbC1zY3JlZW4gY2FzZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5t
bToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0p
OgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNjcmVlbl0pOgor
CiAyMDExLTA4LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUG90ZW50aWFsIExlYWtzIC0gUmV0YWluUHRyPD4gb3ZlciByZXRhaW5pbmcgQ3JlYXRl
J2Qgb2JqZWN0cwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiA5MTYzNikKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQyMSw3ICs0MjEsNyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilz
Y3JlCiAgICAgLy8gU29tZSBwcm9wZXJ0aWVzIGhhdmVuJ3QgcHJvcG9nYXRlZCBmcm9tIHRoZSBH
cmFwaGljc0xheWVyIHRvIHRoZSBDQUxheWVyIHlldC4gU28KICAgICAvLyB0ZWxsIHRoZSByZW5k
ZXJlcidzIGxheWVyIHRvIHN5bmMgaXQncyBjb21wb3NpdGluZyBzdGF0ZToKICAgICBHcmFwaGlj
c0xheWVyKiByZW5kZXJlckdyYXBoaWNzID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCkt
PmdyYXBoaWNzTGF5ZXIoKTsKLSAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpOyAgICAKKyAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShk
ZXN0aW5hdGlvbkZyYW1lKTsgICAgCiAKICAgICBDQUxheWVyKiByZW5kZXJlckxheWVyID0gcmVu
ZGVyZXJHcmFwaGljcy0+cGxhdGZvcm1MYXllcigpOwogICAgIFtbc2VsZiBfZnVsbHNjcmVlbldp
bmRvd10gc2V0UmVuZGVyZXJMYXllcjpyZW5kZXJlckxheWVyXTsgICAgCkBAIC01NzIsNyArNTcy
LDcgQEAgLSAodm9pZClleGl0RnVsbHNjcmVlbgogICAgIAogICAgIFtzZWxmIF9kb2N1bWVudF0t
PnNldEZ1bGxTY3JlZW5SZW5kZXJlckJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQp
OwogCi0gICAgcmVuZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsgICAgCisg
ICAgcmVuZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3RhdGUobGF5ZXJFbmRGcmFtZSk7
ICAgIAogCiAgICAgQ0FMYXllciogcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhpY3MtPnBs
YXRmb3JtTGF5ZXIoKTsKICAgICBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVy
TGF5ZXI6cmVuZGVyZXJMYXllcl07ICAgIAo=
</data>
<flag name="review"
          id="98847"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>