<?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>82571</bug_id>
          
          <creation_ts>2012-03-28 21:29:11 -0700</creation_ts>
          <short_desc>[chromium] Flip transition painting delayed with threaded animations</short_desc>
          <delta_ts>2012-05-16 10:43:17 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Eric Penner">epenner</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590829</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-03-28 21:29:11 -0700</bug_when>
    <thetext>On the &quot;flip&quot; transition here:
http://jquerymobile.com/demos/1.0.1/docs/pages/page-transitions.html

Since this layer is completely visible I figure it should be our best case and be painted during the first webkit commit. However without the CLs to block until the texture is ready, the layer doesn&apos;t paint until well after it is flipped... I think there might be some remaining back-face culling logic that prevents it from getting painted until it has flipped over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590842</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-28 22:10:26 -0700</bug_when>
    <thetext>Oh interesting, I didnt think of backface stuff. Yeh for sure it will get dropped from the render surface tree on webkit side until it is flipped. Then suddenly we have this enormous layer to paint. Nice find! Should be easy to fix (if animating dont backface cull).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592786</commentid>
    <comment_count>2</comment_count>
      <attachid>134939</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-30 21:03:46 -0700</bug_when>
    <thetext>Created attachment 134939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592789</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-30 21:06:48 -0700</bug_when>
    <thetext>To experiment, I made prepainting paint entire animating layers, and stopped dropping checkerboarded animation.

With a really big window, and without this patch, you can see the red tile borders of missing tiles as the layer flips over. With this patch, they prepaint and you get no checkerboard (or very short depending on how fast it can prepaint when the animation starts).

An interesting note however is... without this patch: I am able to see the checkerboard the black &quot;behind&quot; layer when it flips over. But I never saw it once on the &quot;front&quot; layer when it animates and flips over into view. Eric, did you notice this too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593718</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-04-02 12:53:56 -0700</bug_when>
    <thetext>I just see the delay just as the layer is flipping over, but didn&apos;t see the missing tiles. 

This is great. It would be great if this were more easily cherry-pick-able. Do the methods need to change places in this CL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593818</commentid>
    <comment_count>5</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-02 14:03:08 -0700</bug_when>
    <thetext>In order to share code for deciding if a layer&apos;s back face is visible, that function needs to move to the .h or the calcVisibleLayerRect function needs to move to the .cpp. I think the removal from the class definition is a small change after that.. so basically I think its going to look something like this with moving code unless we duplicated that code..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594145</commentid>
    <comment_count>6</comment_count>
      <attachid>134939</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-02 19:29:30 -0700</bug_when>
    <thetext>Comment on attachment 134939
Patch

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

epenner: Is there some reason this patch isn&apos;t cherry-pickable? Are there other patches that need to be cherry-picked first?

&gt; Source/WebCore/ChangeLog:24
&gt; +        The calculateVisibleLayerRect needs to use the backFaceIsVisible()
&gt; +        helper, so we move it into the .cpp file where it belongs, and make
&gt; +        it static to the file along with calculateVisibleRect. These methods
&gt; +        were not used outside of the CCLTHCommon.cpp at all.

Yay, that&apos;s really where it should be.  If it ever does need to be used outside (again) we should just leave it in the cpp and expose some explicit functions like we do for everything else.  Thank you!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt; +static inline bool transformToScreenIsKnown(LayerChromium*, bool animatingTransformToScreen)
&gt; +{
&gt; +    return !animatingTransformToScreen;
&gt; +}

No need to pass animatingTransformToScreen here.  You can just ask the layer.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:1033
&gt; +    // FIXME: when we fix this &quot;root-layer special case&quot; behavior in CCLayerTreeHost, we will have to fix it here, too.

I see this copied around in so many tests.  I don&apos;t even know what this means anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594588</commentid>
    <comment_count>7</comment_count>
      <attachid>134939</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-03 10:11:52 -0700</bug_when>
    <thetext>Comment on attachment 134939
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:24
&gt;&gt; +        were not used outside of the CCLTHCommon.cpp at all.
&gt; 
&gt; Yay, that&apos;s really where it should be.  If it ever does need to be used outside (again) we should just leave it in the cpp and expose some explicit functions like we do for everything else.  Thank you!

Yep :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:154
&gt;&gt; +}
&gt; 
&gt; No need to pass animatingTransformToScreen here.  You can just ask the layer.

Yes, this happens later in the function, thanks.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:1033
&gt;&gt; +    // FIXME: when we fix this &quot;root-layer special case&quot; behavior in CCLayerTreeHost, we will have to fix it here, too.
&gt; 
&gt; I see this copied around in so many tests.  I don&apos;t even know what this means anymore.

That&apos;s true, I&apos;ll just remove it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594618</commentid>
    <comment_count>8</comment_count>
      <attachid>135358</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-03 10:34:05 -0700</bug_when>
    <thetext>Created attachment 135358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594662</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-04-03 11:17:13 -0700</bug_when>
    <thetext>&gt; epenner: Is there some reason this patch isn&apos;t cherry-pickable? Are there other patches that need to be cherry-picked first?
&gt; 

I&apos;m sure it&apos;ll be fine. Sounds like the movement had good reason to go in this CL but just wanted to be sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597845</commentid>
    <comment_count>10</comment_count>
      <attachid>135358</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-06 17:30:02 -0700</bug_when>
    <thetext>Comment on attachment 135358
Patch

R=me.  Sorry for not getting back to this sooner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597851</commentid>
    <comment_count>11</comment_count>
      <attachid>135358</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-06 17:42:07 -0700</bug_when>
    <thetext>Comment on attachment 135358
Patch

Rejecting attachment 135358 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
n&apos;
Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp: In member function &apos;virtual void&lt;unnamed&gt;::CCLayerTreeHostCommonTest_verifyVisibleRectForPerspectiveUnprojection_Test::TestBody()&apos;:
Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:1237: error: &apos;calculateVisibleRect&apos; is not a member of &apos;WebCore::CCLayerTreeHostCommon&apos;
make: *** [out/Debug/obj.target/webkit_unit_tests/Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/12361149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597866</commentid>
    <comment_count>12</comment_count>
      <attachid>136112</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-06 18:04:38 -0700</bug_when>
    <thetext>Created attachment 136112
Patch

rebased

a bunch of tests were added that use CCLTHC::calculateVisibleRect() so I left it exposed as a static method of the class (calculateVisibleLayerRect could still move into the .cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598488</commentid>
    <comment_count>13</comment_count>
      <attachid>136112</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 11:58:23 -0700</bug_when>
    <thetext>Comment on attachment 136112
Patch

Clearing flags on attachment: 136112

Committed r113602: &lt;http://trac.webkit.org/changeset/113602&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598489</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-09 11:58:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621209</commentid>
    <comment_count>15</comment_count>
      <attachid>136112</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-05-10 19:29:35 -0700</bug_when>
    <thetext>Comment on attachment 136112
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:88
&gt; +    // and have their back face showing. In this case, their visible rect should be empty.

I didn&apos;t notice this before, but doesn&apos;t this line cause the same problem?  If this ends up being used for the paint rect, we won&apos;t paint anything in advance, but only when it becomes flipped?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621215</commentid>
    <comment_count>16</comment_count>
      <attachid>136112</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-10 19:41:39 -0700</bug_when>
    <thetext>Comment on attachment 136112
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:88
&gt;&gt; +    // and have their back face showing. In this case, their visible rect should be empty.
&gt; 
&gt; I didn&apos;t notice this before, but doesn&apos;t this line cause the same problem?  If this ends up being used for the paint rect, we won&apos;t paint anything in advance, but only when it becomes flipped?

No, we have special code in idlePaintRect() for animating layers with no visible area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621218</commentid>
    <comment_count>17</comment_count>
      <attachid>136112</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-05-10 20:00:42 -0700</bug_when>
    <thetext>Comment on attachment 136112
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:88
&gt;&gt;&gt; +    // and have their back face showing. In this case, their visible rect should be empty.
&gt;&gt; 
&gt;&gt; I didn&apos;t notice this before, but doesn&apos;t this line cause the same problem?  If this ends up being used for the paint rect, we won&apos;t paint anything in advance, but only when it becomes flipped?
&gt; 
&gt; No, we have special code in idlePaintRect() for animating layers with no visible area.

I think that has a size constraint right (rightfully so as otherwise it would use up all our memory)? The link demonstrating this bug is full page transition:
http://jquerymobile.com/demos/1.0.1/docs/pages/page-transitions.html (flip)

For back-face visibility, what would be wrong with just ignoring whether it is back-facing for animated layers? Then it would be visible on the first animated frame and get painted before the animation-started event is triggered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624779</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-15 17:37:20 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I think that has a size constraint right (rightfully so as otherwise it would use up all our memory)? The link demonstrating this bug is full page transition:
&gt; http://jquerymobile.com/demos/1.0.1/docs/pages/page-transitions.html (flip)
&gt; 
&gt; For back-face visibility, what would be wrong with just ignoring whether it is back-facing for animated layers? Then it would be visible on the first animated frame and get painted before the animation-started event is triggered.

I guess here&apos;s my concern. What if you have a whole lot of backfacing layers. They are not drawn so they don&apos;t occlude for paint culling. But they&apos;d all be painted with visible priority then.

I&apos;d like the visibleLayerRect to be non-empty (use that rect for prepainting) but not consider the layer as actually visible for painting..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624791</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-05-15 17:52:10 -0700</bug_when>
    <thetext>&gt; I guess here&apos;s my concern. What if you have a whole lot of backfacing layers. They are not drawn so they don&apos;t occlude for paint culling. But they&apos;d all be painted with visible priority then.

I was thinking this could be only for animated layers though, in which case they should already not occlude for paint culling?

&gt; I&apos;d like the visibleLayerRect to be non-empty (use that rect for prepainting) but not consider the layer as actually visible for painting..

It&apos;s valid that this could take memory away from truly visible stuff, but it seems unlikely there would be back-facing animated content that isn&apos;t going to become visible during the animation. However, with priorities there could indeed be an extra priority level (just below visible) for this type of thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624799</commentid>
    <comment_count>20</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-15 18:00:45 -0700</bug_when>
    <thetext>Ah, yes... you&apos;re right! Ok let&apos;s do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625310</commentid>
    <comment_count>21</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-05-16 05:35:56 -0700</bug_when>
    <thetext>I think that the backface detection code has a small bug -- it assumes orthographic projection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625311</commentid>
    <comment_count>22</comment_count>
      <attachid>136112</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-16 05:36:37 -0700</bug_when>
    <thetext>Comment on attachment 136112
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:56
&gt; +    return zAxis.z() &lt; 0;

This code assumes orthographic projection. I think you want to check the sign of zAxis.dot(somePointOnTheRect - eyePosition) instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625626</commentid>
    <comment_count>23</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-16 10:43:17 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 136112 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136112&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:56
&gt; &gt; +    return zAxis.z() &lt; 0;
&gt; 
&gt; This code assumes orthographic projection. I think you want to check the sign of zAxis.dot(somePointOnTheRect - eyePosition) instead.


Please check CCMathUtilTest - there is a test that covers doing back-face visibility with a perspective projection.  As far as I know, it seems to work correctly.   Definitely let me know if something seems further wrong, though - a test case as to how/why it fails would be extremely helpful.


Also, just a heads up to those involved with CCLayerTreeHostCommonTest::verifyBackFaceCulling -- I might possibly be re-naming this to verifyBackFaceCullingWithAnimations, and adding another test to verifyBackFaceCulling without animations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134939</attachid>
            <date>2012-03-30 21:03:46 -0700</date>
            <delta_ts>2012-04-03 10:34:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82571-20120331000345.patch</filename>
            <type>text/plain</type>
            <size>20506</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGMyMmRkODUzYjVhN2Nm
OTg4MzJkZmI5YmI0NTk4YzE4OWI1NDdmOS4uYmM3NTI4ZDA1Zjc4YzAyNjU2OGRjYmY4NDZhZTA0
ZDQ5YjU1NjgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmxp
cCB0cmFuc2l0aW9uIHBhaW50aW5nIGRlbGF5ZWQgd2l0aCB0aHJlYWRlZCBhbmltYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dz
IGZvciBwcmVwYWludGluZyB0byBzZWUgYW5kIHBhaW50IGxheWVycyB0aGF0IGFyZSBub3QgZmFj
aW5nCisgICAgICAgIHRoZSBjYW1lcmEgYnV0IGhhdmUgYW5pbWF0aW5nIHRyYW5zZm9ybXMuIFRo
aXMgaXMgbmVlZGVkIHRvIHByZXBhaW50CisgICAgICAgIGFuaW1hdGlvbnMgdGhhdCAiZmxpcCIg
bGF5ZXJzIGFyb3VuZCB0byBtYWtlIHRoZSBmcm9udCB2aXNpYmxlLgorCisgICAgICAgIFRoZSBj
aGFuZ2VzIGFyZSB0byBhZGQgYSBiYWNrRmFjZUlzVmlzaWJsZSgpIGhlbHBlciBmdW5jdGlvbiBp
bgorICAgICAgICBDQ0xUSENvbW1vbi4gVGhpcyBpcyB1c2VkIGxpa2UgYmVmb3JlIHRvIGN1bGwg
bm9uLWRvdWJsZSBzaWRlZAorICAgICAgICBsYXllcnMsIGJ1dCBjdWxsaW5nIGlzIHByZXZlbnRl
ZCBvbiBtYWluIHRocmVhZCB3aGVuIHRoZSBzY3JlZW4KKyAgICAgICAgc3BhY2UgdHJhbnNmb3Jt
IGlzIHVua25vd24gZHVlIHRvIGFuaW1hdGlvbi4gV2UgYWRkIG5ldworICAgICAgICBoZWxwZXIg
bWV0aG9kcyB0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24oKSB0byBpZGVudGlmeSB0aGlzLgorCisg
ICAgICAgIEhvd2V2ZXIgdGhlIGxheWVyIGlzIG5vdCBhY3R1YWxseSB2aXNpYmxlLCBzbyB3ZSBz
ZXQgdGhlCisgICAgICAgIHZpc2libGVMYXllclJlY3QgdG8gYmUgZW1wdHkgaW4gdGhpcyBjYXNl
LgorCisgICAgICAgIFRoZSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0IG5lZWRzIHRvIHVzZSB0
aGUgYmFja0ZhY2VJc1Zpc2libGUoKQorICAgICAgICBoZWxwZXIsIHNvIHdlIG1vdmUgaXQgaW50
byB0aGUgLmNwcCBmaWxlIHdoZXJlIGl0IGJlbG9uZ3MsIGFuZCBtYWtlCisgICAgICAgIGl0IHN0
YXRpYyB0byB0aGUgZmlsZSBhbG9uZyB3aXRoIGNhbGN1bGF0ZVZpc2libGVSZWN0LiBUaGVzZSBt
ZXRob2RzCisgICAgICAgIHdlcmUgbm90IHVzZWQgb3V0c2lkZSBvZiB0aGUgQ0NMVEhDb21tb24u
Y3BwIGF0IGFsbC4KKworICAgICAgICBVbml0IHRlc3Q6IENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QudmVyaWZ5QmFja0ZhY2VDdWxsaW5nCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpiYWNrRmFjZUlzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVWaXNp
YmxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3BhY2l0eUlzT3BhcXVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVRvUGFyZW50SXNLbm93bik6CisgICAgICAgIChX
ZWJDb3JlOjp0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6bGF5
ZXJTaG91bGRCZVNraXBwZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6d2Fsa0xheWVy
c0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorCiAyMDEyLTAzLTMwICBUb255IFRzZXVuZyAgPHRzZXVuZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQ29tcG9zaXRlIEZvbnQgUmVmZXJlbmNlcyBpcyBhIG5ldyBlc3RhYmxpc2hlZCBzdGFu
ZGFyZCAoSVNPL0lFQyAxNDQ5Ni0yODoyMDEyKSBmb3Igc3BlY2lmeWluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA2MjU2NzYxMmQ2MGZjYzU1OGFhYWMzMDk5MzBmMzVlZjE1YmY1OTA1
Li4xMGFjNTFmNThhMzM0ZjhlNjNmNTA2NzJlZmVmNmIwZDRhZDJlMjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTMwICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmxpcCB0cmFuc2l0
aW9uIHBhaW50aW5nIGRlbGF5ZWQgd2l0aCB0aHJlYWRlZCBhbmltYXRpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAg
IChXZWJLaXRUZXN0cyk6CisKIDIwMTItMDMtMzAgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIENoYW5nZSBXZWJLaXQvV2ViS2l0MiBwbGF0Zm9ybSBjb2RlIHRv
IHVzZSBwaXhlbCBzbmFwcGVkIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHAKaW5kZXggNDE4ZGNhMTkwYjNlYmU2NDRhMjRhYzNlZTI4MmJiNWY1YzkyOTYy
ZC4uOWU3OTEwMzBiYjZmMjNmMDYwOTZkNjk0ZmRlNjAxYzJhMzBjOGEzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC00MSw3ICs0MSwyMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wg
YmFja0ZhY2VJc1Zpc2libGUoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNo
ZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyIGlu
IHNjcmVlbiBzcGFjZS4KKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKKyAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIg
PSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJl
Y3QpKTsKKyAgICBGbG9hdFNpemUgaG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBt
YXBwZWRMYXllci5wMSgpOworICAgIEZsb2F0U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVy
LnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9u
dGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOworICAgIEZsb2F0UG9p
bnQzRCB5QXhpcyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7
CisgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOworICAgIHJldHVy
biB6QXhpcy56KCkgPCAwOworfQorCitzdGF0aWMgaW5saW5lIEludFJlY3QgY2FsY3VsYXRlVmlz
aWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQog
ewogICAgIC8vIElzIHRoaXMgbGF5ZXIgZnVsbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0
IHN1cmZhY2U/CiAgICAgSW50UmVjdCBsYXllckluU3VyZmFjZVNwYWNlID0gdHJhbnNmb3JtLm1h
cFJlY3QobGF5ZXJCb3VuZFJlY3QpOwpAQCAtNjQsNiArNzgsMzkgQEAgSW50UmVjdCBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdl
dFN1cmZhY2UKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGU+CitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KExheWVy
VHlwZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkp
OworCisgICAgLy8gQW5pbWF0ZWQgbGF5ZXJzIGNhbiBleGlzdCBpbiB0aGUgcmVuZGVyIHN1cmZh
Y2UgdHJlZSB0aGF0IGFyZSBub3QgdmlzaWJsZSBjdXJyZW50bHkKKyAgICAvLyBhbmQgaGF2ZSB0
aGVpciBiYWNrIGZhY2Ugc2hvd2luZy4gSW4gdGhpcyBjYXNlLCB0aGVpciB2aXNpYmxlIHJlY3Qg
c2hvdWxkIGJlIGVtcHR5LgorICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkgJiYgYmFja0Zh
Y2VJc1Zpc2libGUobGF5ZXIpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50
UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCk7CisKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkpCisgICAg
ICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllci0+Y2xpcFJlY3QoKSk7CisKKyAg
ICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGxheWVyLT5jb250ZW50Qm91bmRz
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7CisKKyAgICAv
LyBOb3RlIGNhcmVmdWxseSB0aGVzZSBhcmUgYWxpYXNlcworICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRz
ID0gbGF5ZXItPmNvbnRlbnRCb3VuZHMoKTsKKworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3Vu
ZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMpOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisKKyAgICB0
cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91
YmxlPihjb250ZW50Qm91bmRzLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm91bmRzLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhl
aWdodCgpKSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgp
IC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisKKyAgICBJbnRSZWN0IHZp
c2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwg
bGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7CisgICAgcmV0dXJuIHZpc2libGVMYXllclJlY3Q7
Cit9CisKIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtKQogewogICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5t
MTQoKQpAQCAtNzMsOCArMTIwLDQxIEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9v
bCBsYXllck9wYWNpdHlJc09wYXF1ZShDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgcmV0dXJu
IGxheWVyLT5vcGFjaXR5KCkgPT0gMTsKK30KKworc3RhdGljIGlubGluZSBib29sIGxheWVyT3Bh
Y2l0eUlzT3BhcXVlKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIC8vIElmIHRoZSBvcGFj
aXR5IGlzIGJlaW5nIGFuaW1hdGVkIHRoZW4gdGhlIG9wYWNpdHkgb24gdGhlIG1haW4gdGhyZWFk
IGlzIHVucmVsaWFibGUKKyAgICAvLyAoc2luY2UgdGhlIGltcGwgdGhyZWFkIG1heSBiZSB1c2lu
ZyBhIGRpZmZlcmVudCBvcGFjaXR5KSwgc28gaXQgc2hvdWxkIG5vdCBiZSB0cnVzdGVkLgorICAg
IC8vIEluIHBhcnRpY3VsYXIsIGl0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBvcGFxdWUuCisg
ICAgcmV0dXJuIGxheWVyLT5vcGFjaXR5KCkgPT0gMSAmJiAhbGF5ZXItPm9wYWNpdHlJc0FuaW1h
dGluZygpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNmb3JtVG9QYXJlbnRJc0tub3du
KENDTGF5ZXJJbXBsKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAg
ICByZXR1cm4gIWxheWVyLT50cmFuc2Zvcm1Jc0FuaW1hdGluZygpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgdHJhbnNmb3JtVG9TY3JlZW5Jc0tub3duKENDTGF5ZXJJbXBsKiwgYm9vbCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHRyYW5zZm9ybVRvU2Ny
ZWVuSXNLbm93bihMYXllckNocm9taXVtKiwgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1NjcmVl
bikKK3sKKyAgICByZXR1cm4gIWFuaW1hdGluZ1RyYW5zZm9ybVRvU2NyZWVuOworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Ci1zdGF0aWMgYm9vbCBsYXllclNob3VsZEJlU2tpcHBl
ZChMYXllclR5cGUqIGxheWVyKQorc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5
ZXJUeXBlKiBsYXllciwgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1NjcmVlbikKIHsKICAgICAv
LyBMYXllcnMgY2FuIGJlIHNraXBwZWQgaWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1l
dC4KICAgICAvLyAgIC0gZG9lcyBub3QgZHJhdyBjb250ZW50LgpAQCAtOTMsMTkgKzE3Myw5IEBA
IHN0YXRpYyBib29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSogbGF5ZXIpCiAgICAg
aWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBk
cmF3biBpZiAoMSkgaXQgaXMgbm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRo
ZSBsYXllciBpcyBmYWNpbmcgdGhlIHNjcmVlbi4KLSAgICAvLyBUaGlzIHNlY29uZCBjb25kaXRp
b24gaXMgY2hlY2tlZCBieSBjb21wdXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUg
bGF5ZXIuCi0gICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9hdFJl
Y3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkp
KTsKLSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQobGF5ZXJSZWN0KSk7Ci0gICAgICAgIEZsb2F0U2l6
ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0g
ICAgICAgIEZsb2F0U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRM
YXllci5wMSgpOwotICAgICAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0
aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHlB
eGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOwotICAgICAgICBpZiAo
ekF4aXMueigpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICAvLyBU
aGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMgbm90IGRvdWJsZS1zaWRl
ZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBrbm93biB0byBiZSBmYWNpbmcgdGhl
IHNjcmVlbi4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpICYmIHRyYW5zZm9ybVRvU2Ny
ZWVuSXNLbm93bihsYXllciwgYW5pbWF0aW5nVHJhbnNmb3JtVG9TY3JlZW4pICYmIGJhY2tGYWNl
SXNWaXNpYmxlKGxheWVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC0xMjYsMjkgKzE5Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJ0cmVlU2hv
dWxkQmVTa2lwcGVkKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgIHJldHVybiAhbGF5ZXItPm9w
YWNpdHkoKSAmJiAhbGF5ZXItPm9wYWNpdHlJc0FuaW1hdGluZygpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgbGF5ZXJPcGFjaXR5SXNPcGFxdWUoQ0NMYXllckltcGwqIGxheWVyKQotewotICAg
IHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBs
YXllck9wYWNpdHlJc09wYXF1ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICAvLyBJZiB0
aGUgb3BhY2l0eSBpcyBiZWluZyBhbmltYXRlZCB0aGVuIHRoZSBvcGFjaXR5IG9uIHRoZSBtYWlu
IHRocmVhZCBpcyB1bnJlbGlhYmxlCi0gICAgLy8gKHNpbmNlIHRoZSBpbXBsIHRocmVhZCBtYXkg
YmUgdXNpbmcgYSBkaWZmZXJlbnQgb3BhY2l0eSksIHNvIGl0IHNob3VsZCBub3QgYmUgdHJ1c3Rl
ZC4KLSAgICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgb3Bh
cXVlLgotICAgIHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDEgJiYgIWxheWVyLT5vcGFjaXR5
SXNBbmltYXRpbmcoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zZm9ybVRvUGFyZW50
SXNLbm93bihDQ0xheWVySW1wbCopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCB0cmFuc2Zvcm1Ub1BhcmVudElzS25vd24oTGF5ZXJDaHJvbWl1bSogbGF5ZXIp
Ci17Ci0gICAgcmV0dXJuICFsYXllci0+dHJhbnNmb3JtSXNBbmltYXRpbmcoKTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGJvb2wgc3VidHJlZVNob3VsZFJlbmRl
clRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIsIGJvb2wgYXhpc0FsaWduZWRXaXRo
UmVzcGVjdFRvUGFyZW50KQogewpAQCAtNDgxLDcgKzUyOCw3IEBAIHN0YXRpYyBib29sIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyCiAgICAgLy8gQW55IGxheWVycyB0aGF0IGFyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBv
aW50IGFyZSBpbiB0aGUgbGF5ZXIncyBzdWJ0cmVlIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgaW4g
dGhlIHNvcnRpbmcgcHJvY2Vzcy4KICAgICB1bnNpZ25lZCBzb3J0aW5nU3RhcnRJbmRleCA9IGRl
c2NlbmRhbnRzLnNpemUoKTsKIAotICAgIGlmICghbGF5ZXJTaG91bGRCZVNraXBwZWQobGF5ZXIp
KQorICAgIGlmICghbGF5ZXJTaG91bGRCZVNraXBwZWQobGF5ZXIsIGFuaW1hdGluZ1RyYW5zZm9y
bVRvU2NyZWVuKSkKICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKQEAg
LTUyMSw3ICs1NjgsNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICAvLyBjbGlw
cGVkLgogICAgICAgICBpZiAoIWxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewogICAgICAgICAgICAg
aWYgKCFyZW5kZXJTdXJmYWNlLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSAmJiAhY2xpcHBlZENvbnRl
bnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3Qgc3VyZmFjZUNsaXBS
ZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdChyZW5kZXJT
dXJmYWNlLT5jbGlwUmVjdCgpLCBjbGlwcGVkQ29udGVudFJlY3QsIHJlbmRlclN1cmZhY2UtPm9y
aWdpblRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VDbGlwUmVj
dCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPmNsaXBSZWN0KCksIGNsaXBw
ZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOwogICAgICAg
ICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZUNsaXBSZWN0KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50
ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKQEAgLTYxNSw3ICs2
NjIsNyBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVj
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYQogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUg
ZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
ICAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpi
ZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBpZiAoIWl0LnJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKLSAgICAgICAgICAg
IEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdDxMYXllclR5cGU+KCppdCk7CisgICAgICAgICAgICBJbnRSZWN0
IHZpc2libGVMYXllclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KCppdCk7CiAgICAg
ICAgICAgICBpdC0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXgg
ZGYyM2NkMDFmZWFiNTg0ZTViYzhjNjdhYTU2NDJkZmEyMzdiNjA4Yy4uMmMyMTZjNTgzMDYwZDI0
YTk3NTkyNDVkYzk1YjczMDQyMGRiZTIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKQEAgLTM5LDkgKzM5LDYgQEAgY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIAogY2xh
c3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW50UmVjdCBj
YWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29u
c3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgSW50UmVjdCBjYWxjdWxh
dGVWaXNpYmxlTGF5ZXJSZWN0KExheWVyVHlwZSopOwotCiAgICAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9t
aXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwog
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xh
eWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFy
Y2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhU
ZXh0dXJlU2l6ZSk7CiAKQEAgLTU5LDMzICs1Niw2IEBAIHN0cnVjdCBDQ1Njcm9sbEFuZFNjYWxl
U2V0IHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KLUludFJlY3QgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KExheWVyVHlwZSogbGF5
ZXIpCi17Ci0gICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwotICAgIElu
dFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50UmVjdCgpOwotCi0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQotICAg
ICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOwotCi0g
ICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSB8fCBsYXllci0+Y29udGVudEJvdW5k
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRhcmdldFN1cmZhY2VSZWN0OwotCi0gICAg
Ly8gTm90ZSBjYXJlZnVsbHkgdGhlc2UgYXJlIGFsaWFzZXMKLSAgICBjb25zdCBJbnRTaXplJiBi
b3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Ci0gICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5k
cyA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7Ci0KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91
bmRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwotCi0gICAg
dHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oY29udGVudEJvdW5kcy53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdW5kcy5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy5o
ZWlnaHQoKSkpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgo
KSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOwotCi0gICAgSW50UmVjdCB2
aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
UmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7Ci0gICAg
cmV0dXJuIHZpc2libGVMYXllclJlY3Q7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KIGJvb2wgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNU
b1RhcmdldChMYXllclR5cGUqIGxheWVyLCBpbnQgdGFyZ2V0U3VyZmFjZUxheWVySUQpCiB7CiAg
ICAgLy8gQSBsYXllciB3aWxsIGVpdGhlciBjb250cmlidXRlIGl0cyBvd24gY29udGVudCwgb3Ig
aXRzIHJlbmRlciBzdXJmYWNlJ3MgY29udGVudCwgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4
IDRhOTY1OWRkZDE1M2VmZjZlNjc1MmVhMjA3MDZlMjNjN2UxMjRiNjQuLmVlNjcwMjE1NGI0OGFm
ZGUzMGMxNDQ1MmJiYjVhN2VmNGY5MGU2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtOTc5
LDYgKzk3OSw5NCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1h
dGlvbnNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1LjAs
IGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CiB9CiAKK1RF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nKQorewor
ICAgIC8vIFZlcmlmeSB0aGF0IGxheWVycyBhcmUgYXBwcm9wcmlhdGVseSBjdWxsZWQgd2hlbiB0
aGVpciBiYWNrIGZhY2UgaXMgc2hvd2luZyBhbmQgdGhleSBhcmUgbm90IGRvdWJsZSBzaWRlZC4K
KyAgICAvLworICAgIC8vIExheWVycyB0aGF0IGFyZSBhbmltYXRpbmcgZG8gbm90IGdldCBjdWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkLCBhcyB0aGVpciB0cmFuc2Zvcm1zIHNob3VsZCBiZQorICAg
IC8vIHRyZWF0ZWQgYXMgInVua25vd24iIHNvIHdlIGNhbiBub3QgYmUgc3VyZSB0aGF0IHRoZWly
IGJhY2sgZmFjZSBpcyByZWFsbHkgc2hvd2luZy4KKyAgICAvLworCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gY2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBhbmltYXRpbmdTdXJmYWNlID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBhbmltYXRpbmdDaGls
ZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkMiA9
IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKwor
ICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
Y2hpbGQpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoYW5pbWF0aW5nU3VyZmFjZSk7CisgICAgYW5p
bWF0aW5nU3VyZmFjZS0+YWRkQ2hpbGQoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQoYW5pbWF0aW5nQ2hpbGQpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hp
bGQyKTsKKworICAgIC8vIE5vdGhpbmcgaXMgZG91YmxlLXNpZGVkCisgICAgY2hpbGQtPnNldERv
dWJsZVNpZGVkKGZhbHNlKTsKKyAgICBjaGlsZDItPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKyAg
ICBhbmltYXRpbmdTdXJmYWNlLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CisgICAgY2hpbGRPZkFu
aW1hdGluZ1N1cmZhY2UtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKyAgICBhbmltYXRpbmdDaGls
ZC0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFj
a2ZhY2VNYXRyaXg7CisgICAgYmFja2ZhY2VNYXRyaXgudHJhbnNsYXRlKDUwLCA1MCk7CisgICAg
YmFja2ZhY2VNYXRyaXgucm90YXRlM2QoMCwgMSwgMCwgMTgwKTsKKyAgICBiYWNrZmFjZU1hdHJp
eC50cmFuc2xhdGUoLTUwLCAtNTApOworCisgICAgLy8gSGF2aW5nIGEgZGVzY2VuZGVudCwgYW5k
IGFuaW1hdGluZyB0cmFuc2Zvcm1zLCB3aWxsIG1ha2UgdGhlIGFuaW1hdGluZ1N1cmZhY2Ugb3du
IGEgcmVuZGVyIHN1cmZhY2UuCisgICAgYWRkQW5pbWF0ZWRUcmFuc2Zvcm1Ub0NvbnRyb2xsZXIo
KmFuaW1hdGluZ1N1cmZhY2UtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLCAxMCwgMzAsIDAp
OworICAgIC8vIFRoaXMgaXMganVzdCBhbiBhbmltYXRpbmcgbGF5ZXIsIG5vdCBhIHN1cmZhY2Uu
CisgICAgYWRkQW5pbWF0ZWRUcmFuc2Zvcm1Ub0NvbnRyb2xsZXIoKmFuaW1hdGluZ0NoaWxkLT5s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSwgMTAsIDMwLCAwKTsKKworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAx
MDApLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgp
LCBiYWNrZmFjZU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhhbmltYXRpbmdTdXJmYWNlLmdldCgpLCBiYWNrZmFjZU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZE9mQW5pbWF0aW5nU3VyZmFjZS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoYW5pbWF0aW5nQ2hp
bGQuZ2V0KCksIGJhY2tmYWNlTWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDEwMCwgMTAwKSwgZmFsc2UpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNl
IiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVy
ZSwgdG9vLgorICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQ
RUNUX1RSVUUoYW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGFuaW1hdGluZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9G
QUxTRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUg
YW5pbWF0aW5nQ2hpbGQgYW5kIGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlIHdlcmUgbm90IGN1bGxl
ZCwgYnV0IHRoYXQgY2hpbGQgd2FzLgorICAgIEFTU0VSVF9FUSgydSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJlbmRlclN1cmZh
Y2VMYXllckxpc3RbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShhbmltYXRpbmdTdXJmYWNlLT5p
ZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKKworICAgIC8vIFRoZSBub24t
YW5pbWF0aW5nIGNoaWxkIGJlIGN1bGxlZCBmcm9tIHRoZSBsYXllciBsaXN0IGZvciB0aGUgcGFy
ZW50IHJlbmRlciBzdXJmYWNlLgorICAgIEFTU0VSVF9FUSgzdSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFswXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEVYUEVD
VF9FUShhbmltYXRpbmdTdXJmYWNlLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5y
ZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAgICBFWFBFQ1RfRVEoYW5p
bWF0aW5nQ2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPnJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOworICAgIEVYUEVDVF9FUShjaGlsZDItPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClb
Ml0tPmlkKCkpOworCisgICAgQVNTRVJUX0VRKDJ1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFd
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGFu
aW1hdGluZ1N1cmZhY2UtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0tPnJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShjaGlsZE9mQW5p
bWF0aW5nU3VyZmFjZS0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQy
LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1dCBpZiB0aGUgYmFj
ayBmYWNlIGlzIHZpc2libGUsIHRoZW4gdGhlIHZpc2libGVMYXllclJlY3Qgc2hvdWxkIGJlIGVt
cHR5LgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGluZ0NoaWxkLT52aXNpYmxlTGF5ZXJSZWN0KCku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNlLT52aXNpYmxlTGF5
ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBBbmQgYW55IGxheWVycyBpbiB0aGUgc3VidHJl
ZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgdmlzaWJsZSBlaXRoZXIuCisgICAgRVhQRUNUX1RS
VUUoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkp
OworfQorCiAvLyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTQyCiAvLyAgLSBhZGQgYSB0ZXN0IHRvIHZlcmlm
eSBjbGlwcGluZyB0aGF0IGNoYW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135358</attachid>
            <date>2012-04-03 10:34:05 -0700</date>
            <delta_ts>2012-04-06 18:04:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82571-20120403133403.patch</filename>
            <type>text/plain</type>
            <size>19606</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVjYzMzOTYxNTYzOGNj
YzJiZjFmMjE1NjE3NGM1MmQ5ZjBmNTE4ZC4uYWFjYjIxN2JiM2RhYTZlMzQxZjBlYmQ5MTQ1NjY0
OTY4OGQwNDlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmxp
cCB0cmFuc2l0aW9uIHBhaW50aW5nIGRlbGF5ZWQgd2l0aCB0aHJlYWRlZCBhbmltYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dz
IGZvciBwcmVwYWludGluZyB0byBzZWUgYW5kIHBhaW50IGxheWVycyB0aGF0IGFyZSBub3QgZmFj
aW5nCisgICAgICAgIHRoZSBjYW1lcmEgYnV0IGhhdmUgYW5pbWF0aW5nIHRyYW5zZm9ybXMuIFRo
aXMgaXMgbmVlZGVkIHRvIHByZXBhaW50CisgICAgICAgIGFuaW1hdGlvbnMgdGhhdCAiZmxpcCIg
bGF5ZXJzIGFyb3VuZCB0byBtYWtlIHRoZSBmcm9udCB2aXNpYmxlLgorCisgICAgICAgIFRoZSBj
aGFuZ2VzIGFyZSB0byBhZGQgYSBiYWNrRmFjZUlzVmlzaWJsZSgpIGhlbHBlciBmdW5jdGlvbiBp
bgorICAgICAgICBDQ0xUSENvbW1vbi4gVGhpcyBpcyB1c2VkIGxpa2UgYmVmb3JlIHRvIGN1bGwg
bm9uLWRvdWJsZSBzaWRlZAorICAgICAgICBsYXllcnMsIGJ1dCBjdWxsaW5nIGlzIHByZXZlbnRl
ZCBvbiBtYWluIHRocmVhZCB3aGVuIHRoZSBzY3JlZW4KKyAgICAgICAgc3BhY2UgdHJhbnNmb3Jt
IGlzIHVua25vd24gZHVlIHRvIGFuaW1hdGlvbi4gV2UgYWRkIG5ldworICAgICAgICBoZWxwZXIg
bWV0aG9kcyB0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24oKSB0byBpZGVudGlmeSB0aGlzLgorCisg
ICAgICAgIEhvd2V2ZXIgdGhlIGxheWVyIGlzIG5vdCBhY3R1YWxseSB2aXNpYmxlLCBzbyB3ZSBz
ZXQgdGhlCisgICAgICAgIHZpc2libGVMYXllclJlY3QgdG8gYmUgZW1wdHkgaW4gdGhpcyBjYXNl
LgorCisgICAgICAgIFRoZSBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0IG5lZWRzIHRvIHVzZSB0
aGUgYmFja0ZhY2VJc1Zpc2libGUoKQorICAgICAgICBoZWxwZXIsIHNvIHdlIG1vdmUgaXQgaW50
byB0aGUgLmNwcCBmaWxlIHdoZXJlIGl0IGJlbG9uZ3MsIGFuZCBtYWtlCisgICAgICAgIGl0IHN0
YXRpYyB0byB0aGUgZmlsZSBhbG9uZyB3aXRoIGNhbGN1bGF0ZVZpc2libGVSZWN0LiBUaGVzZSBt
ZXRob2RzCisgICAgICAgIHdlcmUgbm90IHVzZWQgb3V0c2lkZSBvZiB0aGUgQ0NMVEhDb21tb24u
Y3BwIGF0IGFsbC4KKworICAgICAgICBVbml0IHRlc3Q6IENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QudmVyaWZ5QmFja0ZhY2VDdWxsaW5nCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpiYWNrRmFjZUlzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVWaXNp
YmxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3BhY2l0eUlzT3BhcXVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVRvUGFyZW50SXNLbm93bik6CisgICAgICAgIChX
ZWJDb3JlOjp0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6bGF5
ZXJTaG91bGRCZVNraXBwZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6d2Fsa0xheWVy
c0FuZENhbGN1bGF0ZVZpc2libGVMYXllclJlY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorCiAyMDEyLTA0LTAyICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgYWRkIGNzcyBwYXJzaW5nIG9mIC13ZWJraXQtZmxleApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCA2ZDc5ZWIwNGExYWVkYzQzZDhlYzUxOTdiNWRlMWZjYTExZjhjMDlkLi40OTAx
MzhmMjcxODZkMmNjZTVjNWQ5N2JkMzE1NWU0N2ZkMGQ5MjI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTMwICBEYW5hIEphbnNlbnMgIDxkYW5h
a2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmxpcCB0cmFuc2l0aW9uIHBh
aW50aW5nIGRlbGF5ZWQgd2l0aCB0aHJlYWRlZCBhbmltYXRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgIChXZWJL
aXRUZXN0cyk6CisKIDIwMTItMDQtMDIgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQsIENDTGF5ZXJUcmVlSG9z
dCBydW5NdWx0aVRocmVhZCBpcyBmbGFreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IDQxOGRjYTE5MGIzZWJlNjQ0YTI0YWMzZWUyODJiYjVmNWM5Mjk2
MmQuLjJmZmVkYWU2ODAzOTk3MTI3ZjE3MmRjMzYyNDgxMjVlMGRjM2UxOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtNDEsNyArNDEsMjEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0
IEludFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29s
IGJhY2tGYWNlSXNWaXNpYmxlKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgLy8gVGhpcyBpcyBj
aGVja2VkIGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllciBp
biBzY3JlZW4gc3BhY2UuCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdChGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7CisgICAgRmxvYXRRdWFkIG1hcHBlZExheWVy
ID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQobGF5ZXJS
ZWN0KSk7CisgICAgRmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0g
bWFwcGVkTGF5ZXIucDEoKTsKKyAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXll
ci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEoKTsKKyAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpv
bnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsKKyAgICBGbG9hdFBv
aW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDAp
OworICAgIEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKKyAgICByZXR1
cm4gekF4aXMueigpIDwgMDsKK30KKworc3RhdGljIGlubGluZSBJbnRSZWN0IGNhbGN1bGF0ZVZp
c2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkK
IHsKICAgICAvLyBJcyB0aGlzIGxheWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdl
dCBzdXJmYWNlPwogICAgIEludFJlY3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5t
YXBSZWN0KGxheWVyQm91bmRSZWN0KTsKQEAgLTY0LDYgKzc4LDM5IEBAIEludFJlY3QgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlCiAgICAgcmV0dXJuIGxheWVyUmVjdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlPgorc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChMYXll
clR5cGUqIGxheWVyKQoreworICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIC8vIEFuaW1hdGVkIGxheWVycyBjYW4gZXhpc3QgaW4gdGhlIHJlbmRlciBzdXJm
YWNlIHRyZWUgdGhhdCBhcmUgbm90IHZpc2libGUgY3VycmVudGx5CisgICAgLy8gYW5kIGhhdmUg
dGhlaXIgYmFjayBmYWNlIHNob3dpbmcuIEluIHRoaXMgY2FzZSwgdGhlaXIgdmlzaWJsZSByZWN0
IHNob3VsZCBiZSBlbXB0eS4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpICYmIGJhY2tG
YWNlSXNWaXNpYmxlKGxheWVyKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIElu
dFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50UmVjdCgpOworCisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpKQorICAg
ICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPmNsaXBSZWN0KCkpOworCisg
ICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSB8fCBsYXllci0+Y29udGVudEJvdW5k
cygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRhcmdldFN1cmZhY2VSZWN0OworCisgICAg
Ly8gTm90ZSBjYXJlZnVsbHkgdGhlc2UgYXJlIGFsaWFzZXMKKyAgICBjb25zdCBJbnRTaXplJiBi
b3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5k
cyA9IGxheWVyLT5jb250ZW50Qm91bmRzKCk7CisKKyAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91
bmRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworCisgICAg
dHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oY29udGVudEJvdW5kcy53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdW5kcy5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy5o
ZWlnaHQoKSkpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgo
KSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworCisgICAgSW50UmVjdCB2
aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3Qs
IGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOworICAgIHJldHVybiB2aXNpYmxlTGF5ZXJSZWN0
OworfQorCiBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbSkKIHsKICAgICByZXR1cm4gIW0ubTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0u
bTE0KCkKQEAgLTczLDYgKzEyMCwzOSBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlv
bihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIAogfQogCitzdGF0aWMgaW5saW5lIGJv
b2wgbGF5ZXJPcGFjaXR5SXNPcGFxdWUoQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIHJldHVy
biBsYXllci0+b3BhY2l0eSgpID09IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsYXllck9w
YWNpdHlJc09wYXF1ZShMYXllckNocm9taXVtKiBsYXllcikKK3sKKyAgICAvLyBJZiB0aGUgb3Bh
Y2l0eSBpcyBiZWluZyBhbmltYXRlZCB0aGVuIHRoZSBvcGFjaXR5IG9uIHRoZSBtYWluIHRocmVh
ZCBpcyB1bnJlbGlhYmxlCisgICAgLy8gKHNpbmNlIHRoZSBpbXBsIHRocmVhZCBtYXkgYmUgdXNp
bmcgYSBkaWZmZXJlbnQgb3BhY2l0eSksIHNvIGl0IHNob3VsZCBub3QgYmUgdHJ1c3RlZC4KKyAg
ICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgb3BhcXVlLgor
ICAgIHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDEgJiYgIWxheWVyLT5vcGFjaXR5SXNBbmlt
YXRpbmcoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93
bihDQ0xheWVySW1wbCopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCB0cmFuc2Zvcm1Ub1BhcmVudElzS25vd24oTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7Cisg
ICAgcmV0dXJuICFsYXllci0+dHJhbnNmb3JtSXNBbmltYXRpbmcoKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHRyYW5zZm9ybVRvU2NyZWVuSXNLbm93bihDQ0xheWVySW1wbCopCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2Zvcm1Ub1NjcmVlbklz
S25vd24oTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgcmV0dXJuICFsYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGluZygpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGU+CiBzdGF0aWMgYm9vbCBsYXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVy
KQogewpAQCAtOTMsMTkgKzE3Myw5IEBAIHN0YXRpYyBib29sIGxheWVyU2hvdWxkQmVTa2lwcGVk
KExheWVyVHlwZSogbGF5ZXIpCiAgICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgbGF5
ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBU
aGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMgbm90IGRvdWJsZS1zaWRl
ZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBmYWNpbmcgdGhlIHNjcmVlbi4KLSAg
ICAvLyBUaGlzIHNlY29uZCBjb25kaXRpb24gaXMgY2hlY2tlZCBieSBjb21wdXRpbmcgdGhlIHRy
YW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKCFsYXllci0+ZG91YmxlU2lk
ZWQoKSkgewotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKLSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZExheWVy
ID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQobGF5ZXJS
ZWN0KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIucDIo
KSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0U2l6ZSB2ZXJ0aWNhbERpciA9IG1h
cHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOwotICAgICAgICBGbG9hdFBvaW50M0Qg
eEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsK
LSAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2Fs
RGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jv
c3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KKyAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAo
MSkgaXQgaXMgbm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBp
cyBrbm93biB0byBiZSBmYWNpbmcgdGhlIHNjcmVlbi4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVT
aWRlZCgpICYmIHRyYW5zZm9ybVRvU2NyZWVuSXNLbm93bihsYXllcikgJiYgYmFja0ZhY2VJc1Zp
c2libGUobGF5ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTEyNiwyOSArMTk2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHN1YnRyZWVTaG91bGRC
ZVNraXBwZWQoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAgICAgcmV0dXJuICFsYXllci0+b3BhY2l0
eSgpICYmICFsYXllci0+b3BhY2l0eUlzQW5pbWF0aW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBsYXllck9wYWNpdHlJc09wYXF1ZShDQ0xheWVySW1wbCogbGF5ZXIpCi17Ci0gICAgcmV0
dXJuIGxheWVyLT5vcGFjaXR5KCkgPT0gMTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGxheWVy
T3BhY2l0eUlzT3BhcXVlKExheWVyQ2hyb21pdW0qIGxheWVyKQotewotICAgIC8vIElmIHRoZSBv
cGFjaXR5IGlzIGJlaW5nIGFuaW1hdGVkIHRoZW4gdGhlIG9wYWNpdHkgb24gdGhlIG1haW4gdGhy
ZWFkIGlzIHVucmVsaWFibGUKLSAgICAvLyAoc2luY2UgdGhlIGltcGwgdGhyZWFkIG1heSBiZSB1
c2luZyBhIGRpZmZlcmVudCBvcGFjaXR5KSwgc28gaXQgc2hvdWxkIG5vdCBiZSB0cnVzdGVkLgot
ICAgIC8vIEluIHBhcnRpY3VsYXIsIGl0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBvcGFxdWUu
Ci0gICAgcmV0dXJuIGxheWVyLT5vcGFjaXR5KCkgPT0gMSAmJiAhbGF5ZXItPm9wYWNpdHlJc0Fu
aW1hdGluZygpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNmb3JtVG9QYXJlbnRJc0tu
b3duKENDTGF5ZXJJbXBsKikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIHRyYW5zZm9ybVRvUGFyZW50SXNLbm93bihMYXllckNocm9taXVtKiBsYXllcikKLXsK
LSAgICByZXR1cm4gIWxheWVyLT50cmFuc2Zvcm1Jc0FuaW1hdGluZygpOwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBzdGF0aWMgYm9vbCBzdWJ0cmVlU2hvdWxkUmVuZGVyVG9T
ZXBhcmF0ZVN1cmZhY2UoTGF5ZXJUeXBlKiBsYXllciwgYm9vbCBheGlzQWxpZ25lZFdpdGhSZXNw
ZWN0VG9QYXJlbnQpCiB7CkBAIC01MjEsNyArNTY4LDcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5
ZXIKICAgICAgICAgLy8gY2xpcHBlZC4KICAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVy
KCkpIHsKICAgICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5
KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBJ
bnRSZWN0IHN1cmZhY2VDbGlwUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZVJlY3QocmVuZGVyU3VyZmFjZS0+Y2xpcFJlY3QoKSwgY2xpcHBlZENvbnRlbnRSZWN0
LCByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICAgICAgSW50
UmVjdCBzdXJmYWNlQ2xpcFJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlUmVjdChyZW5kZXJTdXJmYWNl
LT5jbGlwUmVjdCgpLCBjbGlwcGVkQ29udGVudFJlY3QsIHJlbmRlclN1cmZhY2UtPm9yaWdpblRy
YW5zZm9ybSgpKTsKICAgICAgICAgICAgICAgICBjbGlwcGVkQ29udGVudFJlY3QuaW50ZXJzZWN0
KHN1cmZhY2VDbGlwUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBGbG9hdFBvaW50
IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2Vu
dGVyKCk7CkBAIC02MTUsNyArNjYyLDcgQEAgc3RhdGljIHZvaWQgd2Fsa0xheWVyc0FuZENhbGN1
bGF0ZVZpc2libGVMYXllclJlY3RzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmEKICAgICBD
Q0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgZm9yIChDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NM
YXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJUeXBlPigqaXQpOwor
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdCgqaXQpOwogICAgICAgICAgICAgaXQtPnNldFZpc2libGVMYXllclJlY3QodmlzaWJs
ZUxheWVyUmVjdCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCmluZGV4IGRmMjNjZDAxZmVhYjU4NGU1YmM4YzY3YWE1NjQyZGZhMjM3YjYw
OGMuLjJjMjE2YzU4MzA2MGQyNGE5NzU5MjQ1ZGM5NWI3MzA0MjBkYmUyMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC0zOSw5ICszOSw2IEBAIGNsYXNzIExh
eWVyQ2hyb21pdW07CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1vbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFy
Z2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3Rh
dGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChMYXllclR5cGUqKTsKLQogICAg
IHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNo
cm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJh
cmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50
IG1heFRleHR1cmVTaXplKTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5
ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCkBAIC01OSwzMyArNTYsNiBAQCBzdHJ1
Y3QgQ0NTY3JvbGxBbmRTY2FsZVNldCB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGU+Ci1JbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVy
UmVjdChMYXllclR5cGUqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKTsKLSAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKLQotICAgIGlmIChsYXllci0+dXNlc0xh
eWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVy
LT5jbGlwUmVjdCgpKTsKLQotICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwg
bGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0YXJnZXRT
dXJmYWNlUmVjdDsKLQotICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoZXNlIGFyZSBhbGlhc2VzCi0g
ICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwotICAgIGNvbnN0IElu
dFNpemUmIGNvbnRlbnRCb3VuZHMgPSBsYXllci0+Y29udGVudEJvdW5kcygpOwotCi0gICAgY29u
c3QgSW50UmVjdCBsYXllckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJv
dW5kcyk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKTsKLQotICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndpZHRo
KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1j
b250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4w
KTsKLQotICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0
LCB0cmFuc2Zvcm0pOwotICAgIHJldHVybiB2aXNpYmxlTGF5ZXJSZWN0OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBib29sIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVy
U3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiBsYXllciwgaW50IHRhcmdldFN1
cmZhY2VMYXllcklEKQogewogICAgIC8vIEEgbGF5ZXIgd2lsbCBlaXRoZXIgY29udHJpYnV0ZSBp
dHMgb3duIGNvbnRlbnQsIG9yIGl0cyByZW5kZXIgc3VyZmFjZSdzIGNvbnRlbnQsIHRvCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LmNwcAppbmRleCA0YTk2NTlkZGQxNTNlZmY2ZTY3NTJlYTIwNzA2ZTIzYzdlMTI0
YjY0Li5lZjdjZjExMTEyM2E0MWFmYmViNzgyNjk2YWJkOGIxNTA2ZTlmYWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKQEAgLTk3OSw2ICs5NzksOTMgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlBbmltYXRpb25zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBF
WFBFQ1RfRkxPQVRfRVEoNS4wLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkubTQyKCkpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJh
Y2tGYWNlQ3VsbGluZykKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCBsYXllcnMgYXJlIGFwcHJvcHJp
YXRlbHkgY3VsbGVkIHdoZW4gdGhlaXIgYmFjayBmYWNlIGlzIHNob3dpbmcgYW5kIHRoZXkgYXJl
IG5vdCBkb3VibGUgc2lkZWQuCisgICAgLy8KKyAgICAvLyBMYXllcnMgdGhhdCBhcmUgYW5pbWF0
aW5nIGRvIG5vdCBnZXQgY3VsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgYXMgdGhlaXIgdHJhbnNm
b3JtcyBzaG91bGQgYmUKKyAgICAvLyB0cmVhdGVkIGFzICJ1bmtub3duIiBzbyB3ZSBjYW4gbm90
IGJlIHN1cmUgdGhhdCB0aGVpciBiYWNrIGZhY2UgaXMgcmVhbGx5IHNob3dpbmcuCisgICAgLy8K
KworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gYW5pbWF0aW5nU3VyZmFj
ZSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkT2ZB
bmltYXRpbmdTdXJmYWNlID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudD4gYW5pbWF0aW5nQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBjaGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGFuaW1hdGlu
Z1N1cmZhY2UpOworICAgIGFuaW1hdGluZ1N1cmZhY2UtPmFkZENoaWxkKGNoaWxkT2ZBbmltYXRp
bmdTdXJmYWNlKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGFuaW1hdGluZ0NoaWxkKTsKKyAgICBw
YXJlbnQtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICAvLyBOb3RoaW5nIGlzIGRvdWJsZS1zaWRl
ZAorICAgIGNoaWxkLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CisgICAgY2hpbGQyLT5zZXREb3Vi
bGVTaWRlZChmYWxzZSk7CisgICAgYW5pbWF0aW5nU3VyZmFjZS0+c2V0RG91YmxlU2lkZWQoZmFs
c2UpOworICAgIGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlLT5zZXREb3VibGVTaWRlZChmYWxzZSk7
CisgICAgYW5pbWF0aW5nQ2hpbGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGJhY2tmYWNlTWF0cml4OworICAgIGJhY2tmYWNlTWF0cml4LnRyYW5z
bGF0ZSg1MCwgNTApOworICAgIGJhY2tmYWNlTWF0cml4LnJvdGF0ZTNkKDAsIDEsIDAsIDE4MCk7
CisgICAgYmFja2ZhY2VNYXRyaXgudHJhbnNsYXRlKC01MCwgLTUwKTsKKworICAgIC8vIEhhdmlu
ZyBhIGRlc2NlbmRlbnQsIGFuZCBhbmltYXRpbmcgdHJhbnNmb3Jtcywgd2lsbCBtYWtlIHRoZSBh
bmltYXRpbmdTdXJmYWNlIG93biBhIHJlbmRlciBzdXJmYWNlLgorICAgIGFkZEFuaW1hdGVkVHJh
bnNmb3JtVG9Db250cm9sbGVyKCphbmltYXRpbmdTdXJmYWNlLT5sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoKSwgMTAsIDMwLCAwKTsKKyAgICAvLyBUaGlzIGlzIGp1c3QgYW4gYW5pbWF0aW5nIGxh
eWVyLCBub3QgYSBzdXJmYWNlLgorICAgIGFkZEFuaW1hdGVkVHJhbnNmb3JtVG9Db250cm9sbGVy
KCphbmltYXRpbmdDaGlsZC0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCksIDEwLCAzMCwgMCk7
CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZC5nZXQoKSwgYmFja2ZhY2VNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoYW5pbWF0aW5nU3VyZmFjZS5nZXQo
KSwgYmFja2ZhY2VNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGFuaW1hdGluZ0NoaWxkLmdldCgpLCBiYWNrZmFjZU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGluZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIEVYUEVDVF9GQUxTRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBWZXJp
ZnkgdGhhdCB0aGUgYW5pbWF0aW5nQ2hpbGQgYW5kIGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlIHdl
cmUgbm90IGN1bGxlZCwgYnV0IHRoYXQgY2hpbGQgd2FzLgorICAgIEFTU0VSVF9FUSgydSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShhbmltYXRp
bmdTdXJmYWNlLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKKworICAg
IC8vIFRoZSBub24tYW5pbWF0aW5nIGNoaWxkIGJlIGN1bGxlZCBmcm9tIHRoZSBsYXllciBsaXN0
IGZvciB0aGUgcGFyZW50IHJlbmRlciBzdXJmYWNlLgorICAgIEFTU0VSVF9FUSgzdSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFswXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkp
OworICAgIEVYUEVDVF9FUShhbmltYXRpbmdTdXJmYWNlLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0WzBdLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAgICBF
WFBFQ1RfRVEoYW5pbWF0aW5nQ2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0t
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOworICAgIEVYUEVDVF9FUShj
aGlsZDItPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPnJlbmRlclN1cmZhY2UoKS0+
bGF5ZXJMaXN0KClbMl0tPmlkKCkpOworCisgICAgQVNTRVJUX0VRKDJ1LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0WzFdLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKGFuaW1hdGluZ1N1cmZhY2UtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3Rb
MV0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgIEVYUEVDVF9F
UShjaGlsZE9mQW5pbWF0aW5nU3VyZmFjZS0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsx
XS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UoY2hpbGQyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1
dCBpZiB0aGUgYmFjayBmYWNlIGlzIHZpc2libGUsIHRoZW4gdGhlIHZpc2libGVMYXllclJlY3Qg
c2hvdWxkIGJlIGVtcHR5LgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGluZ0NoaWxkLT52aXNpYmxl
TGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNl
LT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBBbmQgYW55IGxheWVycyBp
biB0aGUgc3VidHJlZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgdmlzaWJsZSBlaXRoZXIuCisg
ICAgRVhQRUNUX1RSVUUoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnZpc2libGVMYXllclJlY3Qo
KS5pc0VtcHR5KCkpOworfQorCiAvLyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTQyCiAvLyAgLSBhZGQgYSB0
ZXN0IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNoYW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136112</attachid>
            <date>2012-04-06 18:04:38 -0700</date>
            <delta_ts>2012-05-16 05:36:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82571-20120406210437.patch</filename>
            <type>text/plain</type>
            <size>18577</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjEwMWQyOTA2MmE0OWEy
Nzk0OTU0NTQ3YjQxZmQyMWM2NjY1YjU4Yy4uMTM0NTA2YmYxZGRlNDMwZTE2YTVhNDhkZjJlYzRi
MTc4YjJlNDljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAzLTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRmxp
cCB0cmFuc2l0aW9uIHBhaW50aW5nIGRlbGF5ZWQgd2l0aCB0aHJlYWRlZCBhbmltYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBUaGlzIGFsbG93
cyBmb3IgcHJlcGFpbnRpbmcgdG8gc2VlIGFuZCBwYWludCBsYXllcnMgdGhhdCBhcmUgbm90IGZh
Y2luZworICAgICAgICB0aGUgY2FtZXJhIGJ1dCBoYXZlIGFuaW1hdGluZyB0cmFuc2Zvcm1zLiBU
aGlzIGlzIG5lZWRlZCB0byBwcmVwYWludAorICAgICAgICBhbmltYXRpb25zIHRoYXQgImZsaXAi
IGxheWVycyBhcm91bmQgdG8gbWFrZSB0aGUgZnJvbnQgdmlzaWJsZS4KKworICAgICAgICBUaGUg
Y2hhbmdlcyBhcmUgdG8gYWRkIGEgYmFja0ZhY2VJc1Zpc2libGUoKSBoZWxwZXIgZnVuY3Rpb24g
aW4KKyAgICAgICAgQ0NMVEhDb21tb24uIFRoaXMgaXMgdXNlZCBsaWtlIGJlZm9yZSB0byBjdWxs
IG5vbi1kb3VibGUgc2lkZWQKKyAgICAgICAgbGF5ZXJzLCBidXQgY3VsbGluZyBpcyBwcmV2ZW50
ZWQgb24gbWFpbiB0aHJlYWQgd2hlbiB0aGUgc2NyZWVuCisgICAgICAgIHNwYWNlIHRyYW5zZm9y
bSBpcyB1bmtub3duIGR1ZSB0byBhbmltYXRpb24uIFdlIGFkZCBuZXcKKyAgICAgICAgaGVscGVy
IG1ldGhvZHMgdHJhbnNmb3JtVG9TY3JlZW5Jc0tub3duKCkgdG8gaWRlbnRpZnkgdGhpcy4KKwor
ICAgICAgICBIb3dldmVyIHRoZSBsYXllciBpcyBub3QgYWN0dWFsbHkgdmlzaWJsZSwgc28gd2Ug
c2V0IHRoZQorICAgICAgICB2aXNpYmxlTGF5ZXJSZWN0IHRvIGJlIGVtcHR5IGluIHRoaXMgY2Fz
ZS4KKworICAgICAgICBUaGUgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCBuZWVkcyB0byB1c2Ug
dGhlIGJhY2tGYWNlSXNWaXNpYmxlKCkKKyAgICAgICAgaGVscGVyLCBzbyB3ZSBtb3ZlIGl0IGlu
dG8gdGhlIC5jcHAgZmlsZSB3aGVyZSBpdCBiZWxvbmdzLCBhbmQgbWFrZQorICAgICAgICBpdCBz
dGF0aWMgdG8gdGhlIGZpbGUgc2luY2UgaXQgaXMgbm90IHVzZWQgb3V0aWRlIG9mIENDTFRIQ29t
bW9uLmNwcAorICAgICAgICBhdCBhbGwuCisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LnZlcmlmeUJhY2tGYWNlQ3VsbGluZworCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YmFja0ZhY2VJc1Zpc2libGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpsYXllck9wYWNpdHlJc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1U
b1BhcmVudElzS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtVG9TY3JlZW5Jc0tu
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyU2hvdWxkQmVTa2lwcGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OndhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmg6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNC0wNiAgQ2hhcmxlcyBX
ZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIEJ1aWxkIGZpeCB0byBtYXRjaCB0aGUgbGF0ZXN0IFdlYkNvcmUgY2hhbmdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDljYTYzZGFkOTJjMWI0NzliMWY4NjdlMzk1ZGE4YTBjMTQ4
ZmY5YjkuLmRlZDE4NDY3YmY2NWMzMmI5NTQ1NGFjMjMxYjZiZmZkOGRmNDMxN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDMtMzAgIERhbmEgSmFu
c2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBGbGlwIHRy
YW5zaXRpb24gcGFpbnRpbmcgZGVsYXllZCB3aXRoIHRocmVhZGVkIGFuaW1hdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNTcxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6Cisg
ICAgICAgIChXZWJLaXRUZXN0cyk6CisKIDIwMTItMDQtMDYgIEFtaSBGaXNjaG1hbiAgPGZpc2No
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSb2xsIENocm9taXVtIERFUFMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IDk1MTdlN2QyNzUwYmYwZTRi
YWU5Nzc3NDEzMDg1NzU4Mzc1NDVjN2QuLmE5OWYxNWE1ODEyOTdiODIxYzhlYTc5NWFmOGUzOGNl
ZDZhOTMzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApA
QCAtNDIsNiArNDIsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgYmFja0ZhY2VJc1Zpc2libGUoTGF5
ZXJUeXBlKiBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRo
ZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyIGluIHNjcmVlbiBzcGFjZS4KKyAgICBG
bG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91
bmRzKCkpKTsKKyAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKKyAgICBGbG9hdFNpemUg
aG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOworICAg
IEZsb2F0U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5w
MSgpOworICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6
b250YWxEaXIuaGVpZ2h0KCksIDApOworICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0aWNhbERp
ci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7CisgICAgRmxvYXRQb2ludDNEIHpB
eGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOworICAgIHJldHVybiB6QXhpcy56KCkgPCAwOworfQor
CiBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QoY29u
c3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIC8vIElz
IHRoaXMgbGF5ZXIgZnVsbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0IHN1cmZhY2U/CkBA
IC02NSw2ICs3OSwzOSBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIHJldHVybiBsYXll
clJlY3Q7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KK3N0YXRpYyBJbnRSZWN0
IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAgICBBU1NF
UlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBBbmltYXRlZCBsYXll
cnMgY2FuIGV4aXN0IGluIHRoZSByZW5kZXIgc3VyZmFjZSB0cmVlIHRoYXQgYXJlIG5vdCB2aXNp
YmxlIGN1cnJlbnRseQorICAgIC8vIGFuZCBoYXZlIHRoZWlyIGJhY2sgZmFjZSBzaG93aW5nLiBJ
biB0aGlzIGNhc2UsIHRoZWlyIHZpc2libGUgcmVjdCBzaG91bGQgYmUgZW1wdHkuCisgICAgaWYg
KCFsYXllci0+ZG91YmxlU2lkZWQoKSAmJiBiYWNrRmFjZUlzVmlzaWJsZShsYXllcikpCisgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0g
bGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKKworICAgIGlmIChs
YXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50
ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKworICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5p
c0VtcHR5KCkgfHwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKKworICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoZXNlIGFy
ZSBhbGlhc2VzCisgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwor
ICAgIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMgPSBsYXllci0+Y29udGVudEJvdW5kcygp
OworCisgICAgY29uc3QgSW50UmVjdCBsYXllckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgY29udGVudEJvdW5kcyk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0g
bGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0o
Ym91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0
aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhl
aWdodCgpIC8gMi4wKTsKKworICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxh
eWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOworICAgIHJldHVybiB2aXNpYmxlTGF5ZXJSZWN0Owor
fQorCiBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbSkKIHsKICAgICByZXR1cm4gIW0ubTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0ubTE0
KCkKQEAgLTczLDYgKzEyMCwzOSBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKICAgICAgICAgICAgJiYgbS5tNDQoKTsKIH0K
IAorc3RhdGljIGlubGluZSBib29sIGxheWVyT3BhY2l0eUlzT3BhcXVlKENDTGF5ZXJJbXBsKiBs
YXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXItPm9wYWNpdHkoKSA9PSAxOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgbGF5ZXJPcGFjaXR5SXNPcGFxdWUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7
CisgICAgLy8gSWYgdGhlIG9wYWNpdHkgaXMgYmVpbmcgYW5pbWF0ZWQgdGhlbiB0aGUgb3BhY2l0
eSBvbiB0aGUgbWFpbiB0aHJlYWQgaXMgdW5yZWxpYWJsZQorICAgIC8vIChzaW5jZSB0aGUgaW1w
bCB0aHJlYWQgbWF5IGJlIHVzaW5nIGEgZGlmZmVyZW50IG9wYWNpdHkpLCBzbyBpdCBzaG91bGQg
bm90IGJlIHRydXN0ZWQuCisgICAgLy8gSW4gcGFydGljdWxhciwgaXQgc2hvdWxkIG5vdCBiZSB0
cmVhdGVkIGFzIG9wYXF1ZS4KKyAgICByZXR1cm4gbGF5ZXItPm9wYWNpdHkoKSA9PSAxICYmICFs
YXllci0+b3BhY2l0eUlzQW5pbWF0aW5nKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFu
c2Zvcm1Ub1BhcmVudElzS25vd24oQ0NMYXllckltcGwqKQoreworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgdHJhbnNmb3JtVG9QYXJlbnRJc0tub3duKExheWVyQ2hy
b21pdW0qIGxheWVyKQoreworICAgIHJldHVybiAhbGF5ZXItPnRyYW5zZm9ybUlzQW5pbWF0aW5n
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24oQ0NM
YXllckltcGwqKQoreworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
dHJhbnNmb3JtVG9TY3JlZW5Jc0tub3duKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIHJl
dHVybiAhbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmcoKTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRCZVNraXBw
ZWQoTGF5ZXJUeXBlKiBsYXllcikKIHsKQEAgLTkzLDE5ICsxNzMsOSBAQCBzdGF0aWMgYm9vbCBs
YXllclNob3VsZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQogICAgIGlmICghbGF5ZXItPmRy
YXdzQ29udGVudCgpIHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0
IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFj
aW5nIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNoZWNrZWQg
YnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgotICAgIGlm
ICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGxheWVyUmVjdChG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7Ci0gICAgICAgIEZs
b2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFF1
YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbERp
ciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOwotICAgICAgICBGbG9hdFNp
emUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEoKTsKLSAg
ICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgoKSwgaG9yaXpvbnRh
bERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0aWNhbERp
ci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQz
RCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKLSAgICAgICAgaWYgKHpBeGlzLnooKSA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgLy8gVGhlIGxheWVyIHNob3Vs
ZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUg
YmFjayBvZiB0aGUgbGF5ZXIgaXMga25vd24gdG8gYmUgZmFjaW5nIHRoZSBzY3JlZW4uCisgICAg
aWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSAmJiB0cmFuc2Zvcm1Ub1NjcmVlbklzS25vd24obGF5
ZXIpICYmIGJhY2tGYWNlSXNWaXNpYmxlKGxheWVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjYsMjkgKzE5Niw2IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgIHJl
dHVybiAhbGF5ZXItPm9wYWNpdHkoKSAmJiAhbGF5ZXItPm9wYWNpdHlJc0FuaW1hdGluZygpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbGF5ZXJPcGFjaXR5SXNPcGFxdWUoQ0NMYXllckltcGwq
IGxheWVyKQotewotICAgIHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDE7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBsYXllck9wYWNpdHlJc09wYXF1ZShMYXllckNocm9taXVtKiBsYXllcikK
LXsKLSAgICAvLyBJZiB0aGUgb3BhY2l0eSBpcyBiZWluZyBhbmltYXRlZCB0aGVuIHRoZSBvcGFj
aXR5IG9uIHRoZSBtYWluIHRocmVhZCBpcyB1bnJlbGlhYmxlCi0gICAgLy8gKHNpbmNlIHRoZSBp
bXBsIHRocmVhZCBtYXkgYmUgdXNpbmcgYSBkaWZmZXJlbnQgb3BhY2l0eSksIHNvIGl0IHNob3Vs
ZCBub3QgYmUgdHJ1c3RlZC4KLSAgICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCBzaG91bGQgbm90IGJl
IHRyZWF0ZWQgYXMgb3BhcXVlLgotICAgIHJldHVybiBsYXllci0+b3BhY2l0eSgpID09IDEgJiYg
IWxheWVyLT5vcGFjaXR5SXNBbmltYXRpbmcoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHRy
YW5zZm9ybVRvUGFyZW50SXNLbm93bihDQ0xheWVySW1wbCopCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2Zvcm1Ub1BhcmVudElzS25vd24oTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpCi17Ci0gICAgcmV0dXJuICFsYXllci0+dHJhbnNmb3JtSXNBbmltYXRp
bmcoKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgogc3RhdGljIGJvb2wgc3Vi
dHJlZVNob3VsZFJlbmRlclRvU2VwYXJhdGVTdXJmYWNlKExheWVyVHlwZSogbGF5ZXIsIGJvb2wg
YXhpc0FsaWduZWRXaXRoUmVzcGVjdFRvUGFyZW50KQogewpAQCAtNjE1LDcgKzY2Miw3IEBAIHN0
YXRpYyB2b2lkIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhCiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xh
eWVySXRlcmF0b3JUeXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIGZvciAo
Q0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmICghaXQu
cmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAgSW50UmVjdCB2
aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
TGF5ZXJSZWN0PExheWVyVHlwZT4oKml0KTsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoKml0KTsKICAgICAgICAgICAgIGl0
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCBkZjIzY2QwMWZl
YWI1ODRlNWJjOGM2N2FhNTY0MmRmYTIzN2I2MDhjLi4zNzYyZjY0YjE5YjMxMzQ5OThlNDBiNDQ3
NjM4YTI0NmYxMjQ4YmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
aApAQCAtNDAsNyArNDAsNiBAQCBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNp
YmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYg
bGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KExheWVyVHlwZSopOwogCiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogICAgIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIEND
TGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRN
YXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBW
ZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0dXJlU2l6ZSk7
CkBAIC01OSwzMyArNTgsNiBAQCBzdHJ1Y3QgQ0NTY3JvbGxBbmRTY2FsZVNldCB7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Ci1JbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChMYXllclR5cGUqIGxheWVyKQotewotICAgIEFT
U0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKLSAgICBJbnRSZWN0IHRhcmdldFN1
cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsK
LQotICAgIGlmIChsYXllci0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKLSAgICAgICAgdGFyZ2V0U3Vy
ZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKLQotICAgIGlmICh0YXJnZXRT
dXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKLQotICAgIC8vIE5vdGUgY2FyZWZ1
bGx5IHRoZXNlIGFyZSBhbGlhc2VzCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gbGF5ZXIt
PmJvdW5kcygpOwotICAgIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMgPSBsYXllci0+Y29u
dGVudEJvdW5kcygpOwotCi0gICAgY29uc3QgSW50UmVjdCBsYXllckJvdW5kUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcyk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLQotICAgIHRyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRC
b3VuZHMud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVp
Z2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKLSAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKLQotICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVj
dCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QodGFyZ2V0U3Vy
ZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOwotICAgIHJldHVybiB2aXNpYmxl
TGF5ZXJSZWN0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+CiBib29sIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJU
eXBlKiBsYXllciwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKQogewogICAgIC8vIEEgbGF5ZXIg
d2lsbCBlaXRoZXIgY29udHJpYnV0ZSBpdHMgb3duIGNvbnRlbnQsIG9yIGl0cyByZW5kZXIgc3Vy
ZmFjZSdzIGNvbnRlbnQsIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBkYzYzN2Y4ODNiNWYw
ZmViMmQyMzZjYTg4MTZkYWRhNDhiZjg3NjAwLi5jOWQ0ZGZjNGExNzUwOWUxM2M0M2UyOGY4NjBh
MDNkNDJhMDRmMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTEyMzgsNiArMTIzOCw5MyBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVZpc2libGVSZWN0Rm9yUGVy
c3BlY3RpdmVVbnByb2plY3Rpb24pCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGV4cGVjdGVkLCBh
Y3R1YWwpOwogfQogCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tG
YWNlQ3VsbGluZykKK3sKKyAgICAvLyBWZXJpZnkgdGhhdCBsYXllcnMgYXJlIGFwcHJvcHJpYXRl
bHkgY3VsbGVkIHdoZW4gdGhlaXIgYmFjayBmYWNlIGlzIHNob3dpbmcgYW5kIHRoZXkgYXJlIG5v
dCBkb3VibGUgc2lkZWQuCisgICAgLy8KKyAgICAvLyBMYXllcnMgdGhhdCBhcmUgYW5pbWF0aW5n
IGRvIG5vdCBnZXQgY3VsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgYXMgdGhlaXIgdHJhbnNmb3Jt
cyBzaG91bGQgYmUKKyAgICAvLyB0cmVhdGVkIGFzICJ1bmtub3duIiBzbyB3ZSBjYW4gbm90IGJl
IHN1cmUgdGhhdCB0aGVpciBiYWNrIGZhY2UgaXMgcmVhbGx5IHNob3dpbmcuCisgICAgLy8KKwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gYW5pbWF0aW5nU3VyZmFjZSA9
IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkT2ZBbmlt
YXRpbmdTdXJmYWNlID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dD4gYW5pbWF0aW5nQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBjaGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBw
YXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGFuaW1hdGluZ1N1
cmZhY2UpOworICAgIGFuaW1hdGluZ1N1cmZhY2UtPmFkZENoaWxkKGNoaWxkT2ZBbmltYXRpbmdT
dXJmYWNlKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGFuaW1hdGluZ0NoaWxkKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKGNoaWxkMik7CisKKyAgICAvLyBOb3RoaW5nIGlzIGRvdWJsZS1zaWRlZAor
ICAgIGNoaWxkLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CisgICAgY2hpbGQyLT5zZXREb3VibGVT
aWRlZChmYWxzZSk7CisgICAgYW5pbWF0aW5nU3VyZmFjZS0+c2V0RG91YmxlU2lkZWQoZmFsc2Up
OworICAgIGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlLT5zZXREb3VibGVTaWRlZChmYWxzZSk7Cisg
ICAgYW5pbWF0aW5nQ2hpbGQtPnNldERvdWJsZVNpZGVkKGZhbHNlKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGJhY2tmYWNlTWF0cml4OworICAgIGJhY2tmYWNlTWF0cml4LnRyYW5zbGF0
ZSg1MCwgNTApOworICAgIGJhY2tmYWNlTWF0cml4LnJvdGF0ZTNkKDAsIDEsIDAsIDE4MCk7Cisg
ICAgYmFja2ZhY2VNYXRyaXgudHJhbnNsYXRlKC01MCwgLTUwKTsKKworICAgIC8vIEhhdmluZyBh
IGRlc2NlbmRlbnQsIGFuZCBhbmltYXRpbmcgdHJhbnNmb3Jtcywgd2lsbCBtYWtlIHRoZSBhbmlt
YXRpbmdTdXJmYWNlIG93biBhIHJlbmRlciBzdXJmYWNlLgorICAgIGFkZEFuaW1hdGVkVHJhbnNm
b3JtVG9Db250cm9sbGVyKCphbmltYXRpbmdTdXJmYWNlLT5sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSwgMTAsIDMwLCAwKTsKKyAgICAvLyBUaGlzIGlzIGp1c3QgYW4gYW5pbWF0aW5nIGxheWVy
LCBub3QgYSBzdXJmYWNlLgorICAgIGFkZEFuaW1hdGVkVHJhbnNmb3JtVG9Db250cm9sbGVyKCph
bmltYXRpbmdDaGlsZC0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCksIDEwLCAzMCwgMCk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgYmFja2ZhY2VNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoYW5pbWF0aW5nU3VyZmFjZS5nZXQoKSwg
YmFja2ZhY2VNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGFuaW1hdGluZ0NoaWxkLmdldCgpLCBiYWNrZmFjZU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50
UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQt
PnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudC5nZXQoKSk7CisKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW5nU3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGluZ0NoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEVYUEVDVF9GQUxTRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBWZXJpZnkg
dGhhdCB0aGUgYW5pbWF0aW5nQ2hpbGQgYW5kIGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlIHdlcmUg
bm90IGN1bGxlZCwgYnV0IHRoYXQgY2hpbGQgd2FzLgorICAgIEFTU0VSVF9FUSgydSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPmlkKCksIHJl
bmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShhbmltYXRpbmdT
dXJmYWNlLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsKKworICAgIC8v
IFRoZSBub24tYW5pbWF0aW5nIGNoaWxkIGJlIGN1bGxlZCBmcm9tIHRoZSBsYXllciBsaXN0IGZv
ciB0aGUgcGFyZW50IHJlbmRlciBzdXJmYWNlLgorICAgIEFTU0VSVF9FUSgzdSwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdFswXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUShhbmltYXRpbmdTdXJmYWNlLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0WzBdLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKKyAgICBFWFBF
Q1RfRVEoYW5pbWF0aW5nQ2hpbGQtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOworICAgIEVYUEVDVF9FUShjaGls
ZDItPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPnJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KClbMl0tPmlkKCkpOworCisgICAgQVNTRVJUX0VRKDJ1LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0WzFdLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKGFuaW1hdGluZ1N1cmZhY2UtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0t
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworICAgIEVYUEVDVF9FUShj
aGlsZE9mQW5pbWF0aW5nU3VyZmFjZS0+aWQoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+
cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CisKKyAgICBFWFBFQ1RfRkFM
U0UoY2hpbGQyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKworICAgIC8vIEJ1dCBp
ZiB0aGUgYmFjayBmYWNlIGlzIHZpc2libGUsIHRoZW4gdGhlIHZpc2libGVMYXllclJlY3Qgc2hv
dWxkIGJlIGVtcHR5LgorICAgIEVYUEVDVF9UUlVFKGFuaW1hdGluZ0NoaWxkLT52aXNpYmxlTGF5
ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpbmdTdXJmYWNlLT52
aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKTsKKyAgICAvLyBBbmQgYW55IGxheWVycyBpbiB0
aGUgc3VidHJlZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgdmlzaWJsZSBlaXRoZXIuCisgICAg
RVhQRUNUX1RSVUUoY2hpbGRPZkFuaW1hdGluZ1N1cmZhY2UtPnZpc2libGVMYXllclJlY3QoKS5p
c0VtcHR5KCkpOworfQorCiAvLyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTQyCiAvLyAgLSBhZGQgYSB0ZXN0
IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNoYW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>