<?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>109992</bug_id>
          
          <creation_ts>2013-02-15 17:39:08 -0800</creation_ts>
          <short_desc>Minor refactor of RenderLayerCompositor computeCompositingRequirements</short_desc>
          <delta_ts>2013-09-05 10:50:30 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>hartmanng</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>834543</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-15 17:39:08 -0800</bug_when>
    <thetext>We would like to separate updateBacking() and computeCompositingRequirements().

Doing this will allow us to add something like &quot;refineCompositingRequirements()&quot; as a separate walk from originally computing compositing requirements, before we actually go through the trouble of allocating/deallocating backings.  This way we can attempt to compute more intelligent compositing in a multi-pass manner, and such refinements can be optionally skipped based on flags/macros if needed, without modifying the core compositing algorithm.

One detail about this patch - the CompositingChangeRepaint enum was not really ever being used for any other value than &quot;repaintNow&quot;, so this enum is removed.  If we want to keep this enum as-is, then we would need to add another property to RenderLayer objects to represent this value for each layer.  Otherwise we would have no way to separate updateBacking from computeCompositingRequirements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834556</commentid>
    <comment_count>1</comment_count>
      <attachid>188676</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-15 17:45:51 -0800</bug_when>
    <thetext>Created attachment 188676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834574</commentid>
    <comment_count>2</comment_count>
      <attachid>188676</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-15 18:13:23 -0800</bug_when>
    <thetext>Comment on attachment 188676
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Minor refactor of RenderLayerCompositor::computeCompositingRequirements
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=109992
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        No new tests needed, no change in behavior expected.

You need to provide more explanation of the change here. Why are you making it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836610</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-19 11:47:25 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 188676 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188676&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Minor refactor of RenderLayerCompositor::computeCompositingRequirements
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=109992
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        No new tests needed, no change in behavior expected.
&gt; 
&gt; You need to provide more explanation of the change here. Why are you making it?

I&apos;ll add an explanation in the ChangeLog in the next patch.

We would like to have a pattern in RenderLayerCompositor as follows:
 1. computeCompositingRequirements()
 2. refineCompositingRequirements()  // more explanation below
 3. updateLayerBackings()

Currently updateLayerBackings() is effectively integrated into computeCompositingRequirements, so we cannot add refineCompositingRequirements() yet.

The reason we would like to add refineCompositingRequirements() is to add additional intelligence to RenderLayerCompositor.  We would like to add logic that avoids an explosion of composited layers due to overlap.  This can be done as a postprocess to computeCompositingRequirements, recognizing layers that need compositing only because of overlap, and grouping them into one backing.  Even if we add this logic directly into computeCompositingRequirements, we should not incur the overhead of creating backings that may get squashed together, anyway.  Also, refineCompositingRequirements() can be skipped if desired, and this way we won&apos;t be invasive to the existing algorithm that is becoming mature and seems to work correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836615</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 11:50:39 -0800</bug_when>
    <thetext>This means that you&apos;ll do three passes over the layer tree instead of two?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836635</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-19 12:08:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This means that you&apos;ll do three passes over the layer tree instead of two?

In the current code, I&apos;m only seeing one layer pass in computeCompositingRequirements (not counting rebuildCompositingLayerTree), right?

After this patch, there would be two passes.  The new pass should be lightweight, since there is no RenderGeometryMap tracking / overlap testing.  The original pass no longer updates backings, either, so it is marginally lighter.

Then, with refineCompositingRequirements(), yes there would be three passes.  It should be possible to do this post-process &quot;squashing&quot; without additional RenderGeometryMap / overlap testing as well.

I&apos;m working under the assumption that walking the layer tree on it&apos;s own is not expensive - it&apos;s the computations we incur during the walk that are expensive.  Do you feel that&apos;s a reasonable assumption?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836677</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 12:38:23 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m working under the assumption that walking the layer tree on it&apos;s own is not expensive - it&apos;s the computations we incur during the walk that are expensive.  Do you feel that&apos;s a reasonable assumption?

No, some pages have very extensive layer tree, e.g. a facebook page with as much content as the server will provide (keep scrolling to the bottom), or a therverge.com review article with lots of comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836699</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-19 13:07:08 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; I&apos;m working under the assumption that walking the layer tree on it&apos;s own is not expensive - it&apos;s the computations we incur during the walk that are expensive.  Do you feel that&apos;s a reasonable assumption?
&gt; 
&gt; No, some pages have very extensive layer tree, e.g. a facebook page with as much content as the server will provide (keep scrolling to the bottom), or a therverge.com review article with lots of comments.

OK, fair enough.  =)  On the other hand, we also still have the issue of layer explosion for some sites, too, like gmail, so that still needs to be addressed.

This refactor would still be necessary to do any sort of &quot;layer squashing&quot; feature, though, regardless of whether we implement that in the existing pass, or if we implement it as an additional pass through the layer tree.  The reason it is necessary is because we would not know which layers really need backings until the recursion/walk is complete.

Are you OK with moving forward with this patch then?  I&apos;ll try to get some performance numbers to indicate that this additional walk will not add cost for large RenderLayer trees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836706</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 13:10:53 -0800</bug_when>
    <thetext>Having perf numbers would be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837795</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-20 14:58:08 -0800</bug_when>
    <thetext>OK, I have some numbers.  

Conclusion: It&apos;s no surprise that adding a second pass does increase overhead slightly for 2 out of the 3 cases that I tried, by at most about 80-90 microseconds.  In my personal opinion the extra cost is reasonable and not a problem even on these complicated pages.  Overlap testing still clearly dominates (the verge I think had low overlap complexity), and there are likely many other ways we can consider improving the performance of RenderLayerCompositor in further work.


Summary of results, measuring average milliseconds for each invocation of computeCompositingRequirements:

Digg.com
  ~1700 RenderLayers.
  6.22 ms before,  6.19 ms after

theverge.com article
  http://www.theverge.com/2013/2/20/3999860/lenovo-thinkpad-tablet-2-review 
  ~540 RenderLayers
  0.30 ms before, 0.348 ms after

Gmail
  ~2000 RenderLayers
  5.06 ms before, 5.14 ms after



Raw data for your interest:  this measured total milliseconds all occurrences combined for each trial.

Digg.com:
  approx 1700 RenderLayers

  before patch:
  computeCompositingRequirements trial 1:  1193.632 ms  192 occurrences   (avg: 6.22 ms)
  computeCompositingRequirements trial 2:  1267.236 ms  204 occurrences   (avg: 6.22 ms)

  after patch:
  computeCompositingRequirements trial 3:  1363.162 ms  235 occurrences   (avg: 5.80 ms)
  updateLayerBackings trial 3: 74.941 ms   235 occurrences                (avg: 0.32 ms)

  computeCompositingRequirements trial 4:  1423.607 ms  243 occurrences   (avg: 5.86 ms)
  updateLayerBackings trial 4:  81.32 ms   243 occurrences                (avg: 0.33 ms)


http://www.theverge.com/2013/2/20/3999860/lenovo-thinkpad-tablet-2-review:
  approx 540 RenderLayers

  computeCompositingRequirements trial 1:  391.057ms   1303 occurrences   (avg: 0.30 ms)
  computeCompositingRequirements trial 2:  246.431 ms  818 occurrences    (avg: 0.30 ms)

  computeCompositingRequirements trial 3:  224.162 ms  879 occurrences    (avg: 0.255 ms)
  updateLayerBackings trial 3: 79.818 ms   879 occurrences                (avg: 0.090 ms)
  computeCompositingRequirements trial 4: 210.066 ms    816 occurrences   (avg: 0.257 ms)
  updateLayerBackings trial 4:  74.568 ms 816 occurrences                 (avg: 0.091 ms)

gmail:
  approx 2000 RenderLayers
  computeCompositingRequirements trial 1: 5839.237 ms  1155 occurrences   (avg: 5.06 ms)
  computeCompositingRequirements trial 2: 3295.727 ms  655 occurrences    (avg: 5.03 ms)

  computeCompositingRequirements trial 3:  2752.019 ms 557 occurrences    (avg: 4.94 ms)
  updateLayerBackings trial 3: 140.781 ms  557 occurrences                (avg: 0.253 ms)
  computeCompositingRequirements trial 4:  2846.227 ms  579 occurrences   (avg: 4.91 ms)
  updateLayerBackings trial 4:  133.181 ms 579 occurrences                (avg: 0.23 ms)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838717</commentid>
    <comment_count>10</comment_count>
      <attachid>189578</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-21 12:44:12 -0800</bug_when>
    <thetext>Created attachment 189578
Added explanation in changelog, otherwise same patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871250</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-04-08 16:04:18 -0700</bug_when>
    <thetext>This was primarily to support layer squashing in WebKit;  but I will not be pushing for that anymore.   

Simon, I&apos;m happy to discuss how layer squashing might work or cc you on the Blink version of the layer squashing work - please just let me know if you would like to be included.   The layer squashing not-very-clean prototype I had written can be found here:  https://codereview.appspot.com/7625051/ .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925125</commentid>
    <comment_count>12</comment_count>
      <attachid>189578</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-09-05 10:50:30 -0700</bug_when>
    <thetext>Comment on attachment 189578
Added explanation in changelog, otherwise same patch

The work on the bug has ceased, removing the r? flag on this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188676</attachid>
            <date>2013-02-15 17:45:51 -0800</date>
            <delta_ts>2013-02-21 12:44:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109992-20130215174217.patch</filename>
            <type>text/plain</type>
            <size>12334</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJlMTMzNzg4NGI2ZTYy
NGYwY2FmZDNkOTI4YWQ5NzQ3ZWE1Mzc0MC4uZDkyNWVkYzI5MDQ3MzFmYjJiOGUyY2RhNWQxMDcz
MjE0ZGJjMDE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEzLTAyLTE1ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1pbm9yIHJlZmFj
dG9yIG9mIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5
OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgbmVlZGVkLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IgZXhwZWN0ZWQuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKToKKyAg
ICAgICAgcmVtb3ZlZCB0aGUgQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50IGVudW0KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0
YXRlKToKKyAgICAgICAgcmVtb3ZlZCB0aGUgQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50IGVudW0K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0
aW5nUmVxdWlyZW1lbnRzKToKKyAgICAgICAgcmVtb3ZlZCB0aGUgY29kZSByZWxhdGVkIHRvIHVw
ZGF0ZUJhY2tpbmcoKSBhbmQgbGF5ZXJzQ2hhbmdlZCBib29sZWFuIHRyYWNraW5nLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckJhY2tpbmdzKToK
KyAgICAgICAgTmV3IGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYWxsIHRoZSBsYXllcnNDaGFuZ2Vk
IGJvb2xlYW4gdHJhY2tpbmcgYW5kIGNhbGxzIHVwZGF0ZUJhY2tpbmcoKSBmb3IgYWxsIGxheWVy
cy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oOgorICAgICAgICAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKToKKwogMjAxMy0w
Mi0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
bW92ZSBjb25zdCBmcm9tIGEgYnVuY2ggb2YgU3RvcmFnZUFyZWEgbWVtYmVyIGZ1bmN0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAppbmRleCAwNDM3MzMwZDdmY2U1MWVjZGUxMjVmOTcyOWIzYWRhYjEyOGRlOTU3Li4xNzMwM2Uw
MjUyY2UzMGIxMTA2NWIzMWFmMDdiYzM2MDIxNTQzZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDc4LDEwICs0Nzgs
MTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICAgICAgYm9vbCBzYXczRFRyYW5zZm9y
bSA9IGZhbHNlOwogICAgICAgICBpZiAobV9jb21wb3NpdGluZ0NvbnN1bHRzT3ZlcmxhcCkgewog
ICAgICAgICAgICAgT3ZlcmxhcE1hcCBvdmVybGFwVGVzdFJlcXVlc3RNYXA7Ci0gICAgICAgICAg
ICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoMCwgdXBkYXRlUm9vdCwgJm92ZXJsYXBU
ZXN0UmVxdWVzdE1hcCwgY29tcFN0YXRlLCBsYXllcnNDaGFuZ2VkLCBzYXczRFRyYW5zZm9ybSk7
CisgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoMCwgdXBkYXRlUm9v
dCwgJm92ZXJsYXBUZXN0UmVxdWVzdE1hcCwgY29tcFN0YXRlLCBzYXczRFRyYW5zZm9ybSk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRz
KDAsIHVwZGF0ZVJvb3QsIDAsIGNvbXBTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCwgc2F3M0RUcmFuc2Zv
cm0pOwotICAgICAgICAKKyAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cygwLCB1cGRhdGVSb290LCAwLCBjb21wU3RhdGUsIHNhdzNEVHJhbnNmb3JtKTsKKworICAgICAg
ICB1cGRhdGVMYXllckJhY2tpbmdzKHVwZGF0ZVJvb3QsIGxheWVyc0NoYW5nZWQpOwogICAgICAg
ICBuZWVkSGllcmFyY2h5VXBkYXRlIHw9IGxheWVyc0NoYW5nZWQ7CiAgICAgfQogCkBAIC01Njgs
NyArNTY5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxvZ0xheWVySW5mbyhjb25z
dCBSZW5kZXJMYXllciogbGF5ZXIsIGludCBkZXB0aCkKIH0KICNlbmRpZgogCi1ib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciogbGF5ZXIsIENvbXBv
c2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50KQorYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgbGF5
ZXJDaGFuZ2VkID0gZmFsc2U7CiAgICAgUmVuZGVyTGF5ZXI6OlZpZXdwb3J0Q29uc3RyYWluZWRO
b3RDb21wb3NpdGVkUmVhc29uIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29u
ID0gUmVuZGVyTGF5ZXI6Ok5vTm90Q29tcG9zaXRlZFJlYXNvbjsKQEAgLTU3Nyw5ICs1NzgsOCBA
QCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciog
bGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUgogICAgICAgICBlbmFibGVDb21wb3NpdGluZ01vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghbGF5ZXItPmJhY2tpbmcoKSkgewotICAgICAgICAg
ICAgLy8gSWYgd2UgbmVlZCB0byByZXBhaW50LCBkbyBzbyBiZWZvcmUgbWFraW5nIGJhY2tpbmcK
LSAgICAgICAgICAgIGlmIChzaG91bGRSZXBhaW50ID09IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWlu
dE5vdykKLSAgICAgICAgICAgICAgICByZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZShsYXllcik7
CisgICAgICAgICAgICAvLyBSZXBhaW50IGJlZm9yZSBtYWtpbmcgYmFja2luZworICAgICAgICAg
ICAgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIpOwogCiAgICAgICAgICAgICBsYXll
ci0+ZW5zdXJlQmFja2luZygpOwogCkBAIC02MTksOSArNjE5LDggQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGlu
Z0NoYW5nZVIKICAgICAgICAgICAgIC8vIHRoZSByZXBhaW50IGNvbnRhaW5lciwgc28gY2hhbmdl
IHdoZW4gY29tcG9zaXRpbmcgY2hhbmdlczsgd2UgbmVlZCB0byB1cGRhdGUgdGhlbSBoZXJlLgog
ICAgICAgICAgICAgbGF5ZXItPmNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogCi0gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIHJlcGFpbnQsIGRvIHNvIG5vdyB0
aGF0IHdlJ3ZlIHJlbW92ZWQgdGhlIGJhY2tpbmcKLSAgICAgICAgICAgIGlmIChzaG91bGRSZXBh
aW50ID09IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdykKLSAgICAgICAgICAgICAgICByZXBh
aW50T25Db21wb3NpdGluZ0NoYW5nZShsYXllcik7CisgICAgICAgICAgICAvLyBSZXBhaW50IGFm
dGVyIHdlJ3ZlIHJlbW92ZWQgdGhlIGJhY2tpbmcKKyAgICAgICAgICAgIHJlcGFpbnRPbkNvbXBv
c2l0aW5nQ2hhbmdlKGxheWVyKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTY2MSw5ICs2
NjAsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJM
YXllciogbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUgogICAgIHJldHVybiBsYXllckNoYW5nZWQ7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckNvbXBvc2l0aW5n
U3RhdGUoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxk
UmVwYWludCkKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckNvbXBvc2l0
aW5nU3RhdGUoUmVuZGVyTGF5ZXIqIGxheWVyKQogewotICAgIGJvb2wgbGF5ZXJDaGFuZ2VkID0g
dXBkYXRlQmFja2luZyhsYXllciwgc2hvdWxkUmVwYWludCk7CisgICAgYm9vbCBsYXllckNoYW5n
ZWQgPSB1cGRhdGVCYWNraW5nKGxheWVyKTsKIAogICAgIC8vIFNlZSBpZiB3ZSBuZWVkIGNvbnRl
bnQgb3IgY2xpcHBpbmcgbGF5ZXJzLiBNZXRob2RzIGNhbGxlZCBoZXJlIHNob3VsZCBhc3N1bWUK
ICAgICAvLyB0aGF0IHRoZSBjb21wb3NpdGluZyBzdGF0ZSBvZiBkZXNjZW5kYW50IGxheWVycyBo
YXMgbm90IGJlZW4gdXBkYXRlZCB5ZXQuCkBAIC04MzEsNyArODMwLDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShPdmVybGFwTWFwJiBvdmVy
bGFwTWFwLCBSZW4KIC8vICAgICAgbXVzdCBiZSBjb21wb3NpdGluZyBzbyB0aGF0IGl0cyBjb250
ZW50cyByZW5kZXIgb3ZlciB0aGF0IGNoaWxkLgogLy8gICAgICBUaGlzIGltcGxpZXMgdGhhdCBp
dHMgcG9zaXRpdmUgei1pbmRleCBjaGlsZHJlbiBtdXN0IGFsc28gYmUgY29tcG9zaXRpbmcuCiAv
Lwotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVt
ZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVuZGVyTGF5ZXIqIGxheWVyLCBPdmVy
bGFwTWFwKiBvdmVybGFwTWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjb21wb3NpdGluZ1N0YXRlLCBi
b29sJiBsYXllcnNDaGFuZ2VkLCBib29sJiBkZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pCit2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJl
bmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBSZW5kZXJMYXllciogbGF5ZXIsIE92ZXJsYXBNYXAq
IG92ZXJsYXBNYXAsIENvbXBvc2l0aW5nU3RhdGUmIGNvbXBvc2l0aW5nU3RhdGUsIGJvb2wmIGRl
c2NlbmRhbnRIYXMzRFRyYW5zZm9ybSkKIHsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJMaXN0c0lm
TmVlZGVkKCk7CiAgICAgCkBAIC04OTgsNyArODk3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0
b3IKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewogICAg
ICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkp
OwotICAgICAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwg
Y3VyTGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2Nl
bmRhbnRIYXMzRFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5n
UmVxdWlyZW1lbnRzKGxheWVyLCBjdXJMYXllciwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgYW55
RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKIAogICAgICAgICAgICAgICAgIC8vIElmIHdlIGhh
dmUgdG8gbWFrZSBhIGxheWVyIGZvciB0aGlzIGNoaWxkLCBtYWtlIG9uZSBub3cgc28gd2UgY2Fu
IGhhdmUgYSBjb250ZW50cyBsYXllcgogICAgICAgICAgICAgICAgIC8vIChzaW5jZSB3ZSBuZWVk
IHRvIGVuc3VyZSB0aGF0IHRoZSAtdmUgei1vcmRlciBjaGlsZCByZW5kZXJzIHVuZGVybmVhdGgg
b3VyIGNvbnRlbnRzKS4KQEAgLTkyMSw3ICs5MjAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBhbmNlc3Rv
cgogICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAg
IFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5vcm1hbEZsb3dMaXN0LT5hdChpKTsKLSAgICAgICAg
ICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwgY3VyTGF5ZXIsIG92ZXJs
YXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5z
Zm9ybSk7CisgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMobGF5ZXIs
IGN1ckxheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFu
c2Zvcm0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MzAsNyArOTI5LDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJM
YXllciogYW5jZXN0b3IKICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxp
c3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7
ICsraSkgewogICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRl
ckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVt
ZW50cyhsYXllciwgY3VyTGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5n
ZWQsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgY29tcHV0
ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKGxheWVyLCBjdXJMYXllciwgb3ZlcmxhcE1hcCwgY2hp
bGRTdGF0ZSwgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTEwMTIsMTkgKzEwMTEsNDkgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5j
ZXN0b3IKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSAmJiB3aWxsQmVDb21wb3NpdGVk
KQogICAgICAgICByZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZShsYXllcik7CiAKLSAgICAvLyBV
cGRhdGUgYmFja2luZyBub3csIHNvIHRoYXQgd2UgY2FuIHVzZSBpc0NvbXBvc2l0ZWQoKSByZWxp
YWJseSBkdXJpbmcgdHJlZSB0cmF2ZXJzYWwgaW4gcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVl
KCkuCi0gICAgaWYgKHVwZGF0ZUJhY2tpbmcobGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWlu
dE5vdykpCi0gICAgICAgIGxheWVyc0NoYW5nZWQgPSB0cnVlOwotCi0gICAgaWYgKGxheWVyLT5y
ZWZsZWN0aW9uTGF5ZXIoKSAmJiB1cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUobGF5ZXItPnJl
ZmxlY3Rpb25MYXllcigpLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpKQotICAgICAgICBs
YXllcnNDaGFuZ2VkID0gdHJ1ZTsKLQogICAgIGRlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSB8PSBh
bnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0gfHwgbGF5ZXItPmhhczNEVHJhbnNmb3JtKCk7CiAK
ICAgICBpZiAob3ZlcmxhcE1hcCkKICAgICAgICAgb3ZlcmxhcE1hcC0+Z2VvbWV0cnlNYXAoKS5w
b3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXllcik7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckJhY2tpbmdzKFJlbmRlckxheWVyKiBsYXllciwgYm9v
bCYgbGF5ZXJzQ2hhbmdlZCkKK3sKKyAgICBpZiAobGF5ZXItPmlzU3RhY2tpbmdDb250YWluZXIo
KSkgeworICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBs
YXllci0+bmVnWk9yZGVyTGlzdCgpKSB7CisgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBu
ZWdaT3JkZXJMaXN0LT5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3RTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIg
PSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXllckJhY2tp
bmdzKGN1ckxheWVyLCBsYXllcnNDaGFuZ2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3QgPSBs
YXllci0+bm9ybWFsRmxvd0xpc3QoKSkgeworICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBub3Jt
YWxGbG93TGlzdC0+c2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RT
aXplOyArK2kpIHsKKyAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5vcm1hbEZs
b3dMaXN0LT5hdChpKTsKKyAgICAgICAgICAgIHVwZGF0ZUxheWVyQmFja2luZ3MoY3VyTGF5ZXIs
IGxheWVyc0NoYW5nZWQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5pc1N0
YWNraW5nQ29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBw
b3NaT3JkZXJMaXN0ID0gbGF5ZXItPnBvc1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgc2l6
ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVy
TGF5ZXIqIGN1ckxheWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7CisgICAgICAgICAgICAgICAg
dXBkYXRlTGF5ZXJCYWNraW5ncyhjdXJMYXllciwgbGF5ZXJzQ2hhbmdlZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXBkYXRlQmFja2luZyhsYXllcikpCisg
ICAgICAgIGxheWVyc0NoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKGxheWVyLT5yZWZsZWN0aW9u
TGF5ZXIoKSAmJiB1cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUobGF5ZXItPnJlZmxlY3Rpb25M
YXllcigpKSkKKyAgICAgICAgbGF5ZXJzQ2hhbmdlZCA9IHRydWU7Cit9CisKIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5kZXJMYXllciogY2hpbGRM
YXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQogewogICAgIEFTU0VSVCghcGFyZW50TGF5
ZXIgfHwgY2hpbGRMYXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkgPT0gcGFyZW50TGF5
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCmluZGV4IGNiZTFkOWI2YjI3NTdjYzI1NWVjYTAxOGYzODM2M2RiMzg3YzNlYTkuLmJiYzM2
YTRhMGU2NWU3NjhmZDBmZDgwZjg5MWJlYzYyM2Q1NzI0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTExNCw4ICsxMTQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsKICAg
ICAKICAgICAvLyBVcGRhdGUgdGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIHRoZSBnaXZlbiBsYXll
ci4gUmV0dXJucyB0cnVlIGlmIHRoYXQgc3RhdGUgY2hhbmdlZC4KLSAgICBlbnVtIENvbXBvc2l0
aW5nQ2hhbmdlUmVwYWludCB7IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdywgQ29tcG9zaXRp
bmdDaGFuZ2VXaWxsUmVwYWludExhdGVyIH07Ci0gICAgYm9vbCB1cGRhdGVMYXllckNvbXBvc2l0
aW5nU3RhdGUoUmVuZGVyTGF5ZXIqLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgPSBDb21wb3Np
dGluZ0NoYW5nZVJlcGFpbnROb3cpOworICAgIGJvb2wgdXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0
YXRlKFJlbmRlckxheWVyKik7CiAKICAgICAvLyBVcGRhdGUgdGhlIGdlb21ldHJ5IGZvciBjb21w
b3NpdGluZyBjaGlsZHJlbiBvZiBjb21wb3NpdGluZ0FuY2VzdG9yLgogICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRpbmdEZXNjZW5kYW50R2VvbWV0cnkoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5j
ZXN0b3IsIFJlbmRlckxheWVyKiwgYm9vbCBjb21wb3NpdGVkQ2hpbGRyZW5Pbmx5KTsKQEAgLTI1
OCw3ICsyNTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgY2FuQmVDb21wb3NpdGVkKGNvbnN0IFJl
bmRlckxheWVyKikgY29uc3Q7CiAKICAgICAvLyBNYWtlIG9yIGRlc3Ryb3kgdGhlIGJhY2tpbmcg
Zm9yIHRoaXMgbGF5ZXI7IHJldHVybnMgdHJ1ZSBpZiBiYWNraW5nIGNoYW5nZWQuCi0gICAgYm9v
bCB1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyKiwgQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50IHNo
b3VsZFJlcGFpbnQpOworICAgIGJvb2wgdXBkYXRlQmFja2luZyhSZW5kZXJMYXllciopOwogCiAg
ICAgdm9pZCBjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKFJlbmRlckxh
eWVyKik7CiAKQEAgLTI3MCwxMCArMjY5LDE2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXJGaXJlZChUaW1lcjxSZW5kZXJMYXllckNvbXBvc2l0b3I+
Kik7CiAKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGxheWVyJ3MgY29tcG9zaXRpbmcgY2hh
bmdlZAotICAgIHZvaWQgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBSZW5kZXJMYXllciosIE92ZXJsYXBNYXAqLCBzdHJ1Y3QgQ29tcG9z
aXRpbmdTdGF0ZSYsIGJvb2wmIGxheWVyc0NoYW5nZWQsIGJvb2wmIGRlc2NlbmRhbnRIYXMzRFRy
YW5zZm9ybSk7CisgICAgLy8gUmVjdXJzZXMgdGhlIHRyZWUgaW4gcGFpbnQgb3JkZXIsIGRldGVy
bWluaW5nIHdoaWNoIGxheWVycyBzaG91bGQgaGF2ZSBiYWNraW5ncy4KKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGRvZXMgbm90IHlldCBhbGxvY2F0ZS9kZWFsbG9jYXRlIHRoZSBiYWNraW5ncywgdGhv
dWdoLgorICAgIHZvaWQgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBSZW5kZXJMYXllciosIE92ZXJsYXBNYXAqLCBzdHJ1Y3QgQ29tcG9z
aXRpbmdTdGF0ZSYsIGJvb2wmIGRlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CisKKyAgICAvLyBX
YWxrcyB0aGUgbGF5ZXIgdHJlZSB0byBhbGxvY2F0ZS9kZWFsbG9jYXRlIGJhY2tpbmdzLCBhZnRl
ciBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaGF2ZSBiZWVuIGNvbXB1dGVkLgorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBhbnkgbGF5ZXJzIGRpZCBjaGFuZ2Ugd2hldGhlciB0aGV5IGNvbXBvc2l0
ZSBvciBub3QuCisgICAgdm9pZCB1cGRhdGVMYXllckJhY2tpbmdzKFJlbmRlckxheWVyKiwgYm9v
bCYgbGF5ZXJzQ2hhbmdlZCk7CiAgICAgCiAgICAgLy8gUmVjdXJzZXMgZG93biB0aGUgdHJlZSwg
cGFyZW50aW5nIGRlc2NlbmRhbnQgY29tcG9zaXRpbmcgbGF5ZXJzIGFuZCBjb2xsZWN0aW5nIGFu
IGFycmF5IG9mIGNoaWxkIGxheWVycyBmb3IgdGhlIGN1cnJlbnQgY29tcG9zaXRpbmcgbGF5ZXIu
CisgICAgLy8gQXNzdW1lcyB0aGF0IGxheWVyIGJhY2tpbmdzIGhhdmUgYmVlbiBjb3JyZWN0bHkg
YWxsb2NhdGVkL2RlYWxsb2NhdGVkIGZvciB0aGUgbGF0ZXN0IFJlbmRlckxheWVyIHRyZWUgc3Rh
dGUuCiAgICAgdm9pZCByZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXIqLCBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZEdyYXBoaWNzTGF5ZXJzT2ZFbmNsb3NpbmdMYXll
ciwgaW50IGRlcHRoKTsKIAogICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHVwZGF0aW5n
IGxheWVyIGdlb21ldHJ5IG9ubHkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189578</attachid>
            <date>2013-02-21 12:44:12 -0800</date>
            <delta_ts>2013-09-05 10:50:30 -0700</delta_ts>
            <desc>Added explanation in changelog, otherwise same patch</desc>
            <filename>bug-109992-20130221124032.patch</filename>
            <type>text/plain</type>
            <size>13160</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg5NGI5ZTNhN2I3MDQx
ZmI3MWE0Y2IwYmU0YzI3MDBjNzk4MDIxMC4uNDFmMzA4YWM0MzI5NmQwMTNjNjMxY2Q2MzhlYzM4
MWJkZmYzYzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAyLTIxICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1pbm9yIHJlZmFj
dG9yIG9mIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5
OTIKKworICAgICAgICBUaGlzIHJlZmFjdG9yIHNlcGFyYXRlcyB0aGUgY29uY2VwdHMgb2YgY29t
cHV0aW5nIGNvbXBvc2l0aW5nCisgICAgICAgIHJlcXVpcmVtZW50cyBhbmQgdXBkYXRpbmcgd2hp
Y2ggUmVuZGVyTGF5ZXJzIG5lZWQgYmFja2luZ3MuIEluIHRoZQorICAgICAgICBwcmV2aW91cyBj
b2RlLCB1cGRhdGVCYWNraW5nKCkgd2FzIHVzZWQgaW5zaWRlIG9mIHRoZSByZWN1cnNpb24gb2YK
KyAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKCkuIFRoaXMgbWFrZXMgaXQg
aW1wcmFjdGljYWwgdG8gYWRkCisgICAgICAgIGNlcnRhaW4gdHlwZXMgb2YgaW50ZWxsaWdlbmNl
IHRvIHRoZSBSZW5kZXJMYXllckNvbXBvc2l0b3IsIGZvcgorICAgICAgICBleGFtcGxlLCBpZiB3
ZSB3YW50IHRvIGV4YW1pbmUgd2hldGhlciB3ZSBjYW4gInJlZmluZSIgY29tcG9zaXRpbmcKKyAg
ICAgICAgcmVxdWlyZW1lbnRzIGFmdGVyIHRoZXkndmUgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLiAg
VG8gYWRkIHN1Y2gKKyAgICAgICAgaW50ZWxsaWdlbmNlLCBlaXRoZXIgd2UgYWRkIHNpZ25pZmlj
YW50IGFsZ29yaXRobWljIGNvbXBsZXhpdHkgdG8KKyAgICAgICAgdGhlIGV4aXN0aW5nIHJlY3Vy
c2lvbiwgb3Igd2UgbWF5IHdhc3RlZnVsbHkgZGUtYWxsb2NhdGUgYmFja2luZ3MsCisgICAgICAg
IG9yLCB0aGUgc29sdXRpb24gdGhpcyBwYXRjaCBwcm9wb3Nlcywgd2UgZG8gbm90IHVwZGF0ZSBi
YWNraW5ncworICAgICAgICB1bnRpbCB3ZSd2ZSBmdWxseSBjb21wdXRlZCBjb21wb3NpdGluZyBy
ZXF1aXJlbWVudHMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZCwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6Cisg
ICAgICAgIHJlbW92ZWQgdGhlIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBlbnVtCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdT
dGF0ZSk6CisgICAgICAgIHJlbW92ZWQgdGhlIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBlbnVt
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3Np
dGluZ1JlcXVpcmVtZW50cyk6CisgICAgICAgIHJlbW92ZWQgdGhlIGNvZGUgcmVsYXRlZCB0byB1
cGRhdGVCYWNraW5nKCkgYW5kIGxheWVyc0NoYW5nZWQgYm9vbGVhbiB0cmFja2luZy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJCYWNraW5ncyk6
CisgICAgICAgIE5ldyBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFsbCB0aGUgbGF5ZXJzQ2hhbmdl
ZCBib29sZWFuIHRyYWNraW5nIGFuZCBjYWxscyB1cGRhdGVCYWNraW5nKCkgZm9yIGFsbCBSZW5k
ZXJMYXllcnMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorCiAy
MDEzLTAyLTE5ICBLYXNzeSBDb2FuICA8a2Fzc3ljb2FuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVcGRhdGUgRmVhdHVyZU9ic2VydmVyIG9uIHRvcCBsZXZlbCBuYXZpZ2F0aW9uIGluIGFkZGl0
aW9uIHRvIHBhZ2UgZGVzdHJ1Y3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGE2ZGI4ZmQwMDlhMmNiMGQxOGQ0YTlj
NjRlNmI3MDI4YWJkMDM5NWEuLjczOWRiNDA1MDA0YWQ2ZTI1ZTUwZDYwOTljYzBlZWIzYmM5ZWNm
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCkBAIC00NzgsMTAgKzQ3OCwxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQog
ICAgICAgICBib29sIHNhdzNEVHJhbnNmb3JtID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2NvbXBv
c2l0aW5nQ29uc3VsdHNPdmVybGFwKSB7CiAgICAgICAgICAgICBPdmVybGFwTWFwIG92ZXJsYXBU
ZXN0UmVxdWVzdE1hcDsKLSAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cygwLCB1cGRhdGVSb290LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0TWFwLCBjb21wU3RhdGUsIGxheWVy
c0NoYW5nZWQsIHNhdzNEVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGlu
Z1JlcXVpcmVtZW50cygwLCB1cGRhdGVSb290LCAmb3ZlcmxhcFRlc3RSZXF1ZXN0TWFwLCBjb21w
U3RhdGUsIHNhdzNEVHJhbnNmb3JtKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb21w
dXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoMCwgdXBkYXRlUm9vdCwgMCwgY29tcFN0YXRlLCBs
YXllcnNDaGFuZ2VkLCBzYXczRFRyYW5zZm9ybSk7Ci0gICAgICAgIAorICAgICAgICAgICAgY29t
cHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKDAsIHVwZGF0ZVJvb3QsIDAsIGNvbXBTdGF0ZSwg
c2F3M0RUcmFuc2Zvcm0pOworCisgICAgICAgIHVwZGF0ZUxheWVyQmFja2luZ3ModXBkYXRlUm9v
dCwgbGF5ZXJzQ2hhbmdlZCk7CisKICAgICAgICAgbmVlZEhpZXJhcmNoeVVwZGF0ZSB8PSBsYXll
cnNDaGFuZ2VkOwogICAgIH0KIApAQCAtNTY4LDcgKzU3MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpsb2dMYXllckluZm8oY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBpbnQgZGVw
dGgpCiB9CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tp
bmcoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxkUmVw
YWludCkKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxh
eWVyKiBsYXllcikKIHsKICAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOwogICAgIFJlbmRl
ckxheWVyOjpWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiB2aWV3cG9ydENv
bnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA9IFJlbmRlckxheWVyOjpOb05vdENvbXBvc2l0
ZWRSZWFzb247CkBAIC01NzcsOSArNTc5LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAg
ICAgICAgZW5hYmxlQ29tcG9zaXRpbmdNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWxh
eWVyLT5iYWNraW5nKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gcmVwYWludCwg
ZG8gc28gYmVmb3JlIG1ha2luZyBiYWNraW5nCi0gICAgICAgICAgICBpZiAoc2hvdWxkUmVwYWlu
dCA9PSBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpCi0gICAgICAgICAgICAgICAgcmVwYWlu
dE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIpOworICAgICAgICAgICAgLy8gUmVwYWludCBiZWZv
cmUgbWFraW5nIGJhY2tpbmcKKyAgICAgICAgICAgIHJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdl
KGxheWVyKTsKIAogICAgICAgICAgICAgbGF5ZXItPmVuc3VyZUJhY2tpbmcoKTsKIApAQCAtNjE5
LDkgKzYyMCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJl
bmRlckxheWVyKiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICAvLyB0aGUg
cmVwYWludCBjb250YWluZXIsIHNvIGNoYW5nZSB3aGVuIGNvbXBvc2l0aW5nIGNoYW5nZXM7IHdl
IG5lZWQgdG8gdXBkYXRlIHRoZW0gaGVyZS4KICAgICAgICAgICAgIGxheWVyLT5jb21wdXRlUmVw
YWludFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIAotICAgICAgICAgICAgLy8gSWYgd2Ug
bmVlZCB0byByZXBhaW50LCBkbyBzbyBub3cgdGhhdCB3ZSd2ZSByZW1vdmVkIHRoZSBiYWNraW5n
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUmVwYWludCA9PSBDb21wb3NpdGluZ0NoYW5nZVJlcGFp
bnROb3cpCi0gICAgICAgICAgICAgICAgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIp
OworICAgICAgICAgICAgLy8gUmVwYWludCBhZnRlciB3ZSd2ZSByZW1vdmVkIHRoZSBiYWNraW5n
CisgICAgICAgICAgICByZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZShsYXllcik7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkBAIC02NjEsOSArNjYxLDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqIGxheWVyLCBDb21wb3NpdGluZ0NoYW5n
ZVIKICAgICByZXR1cm4gbGF5ZXJDaGFuZ2VkOwogfQogCi1ib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKFJlbmRlckxheWVyKiBsYXllciwgQ29t
cG9zaXRpbmdDaGFuZ2VSZXBhaW50IHNob3VsZFJlcGFpbnQpCitib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKFJlbmRlckxheWVyKiBsYXllcikK
IHsKLSAgICBib29sIGxheWVyQ2hhbmdlZCA9IHVwZGF0ZUJhY2tpbmcobGF5ZXIsIHNob3VsZFJl
cGFpbnQpOworICAgIGJvb2wgbGF5ZXJDaGFuZ2VkID0gdXBkYXRlQmFja2luZyhsYXllcik7CiAK
ICAgICAvLyBTZWUgaWYgd2UgbmVlZCBjb250ZW50IG9yIGNsaXBwaW5nIGxheWVycy4gTWV0aG9k
cyBjYWxsZWQgaGVyZSBzaG91bGQgYXNzdW1lCiAgICAgLy8gdGhhdCB0aGUgY29tcG9zaXRpbmcg
c3RhdGUgb2YgZGVzY2VuZGFudCBsYXllcnMgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgeWV0LgpAQCAt
ODMxLDcgKzgzMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBN
YXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuCiAvLyAgICAgIG11c3QgYmUg
Y29tcG9zaXRpbmcgc28gdGhhdCBpdHMgY29udGVudHMgcmVuZGVyIG92ZXIgdGhhdCBjaGlsZC4K
IC8vICAgICAgVGhpcyBpbXBsaWVzIHRoYXQgaXRzIHBvc2l0aXZlIHotaW5kZXggY2hpbGRyZW4g
bXVzdCBhbHNvIGJlIGNvbXBvc2l0aW5nLgogLy8KLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIFJlbmRlckxheWVyKiBsYXllciwgT3ZlcmxhcE1hcCogb3ZlcmxhcE1hcCwgQ29tcG9zaXRp
bmdTdGF0ZSYgY29tcG9zaXRpbmdTdGF0ZSwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCwgYm9vbCYgZGVz
Y2VuZGFudEhhczNEVHJhbnNmb3JtKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1
dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVu
ZGVyTGF5ZXIqIGxheWVyLCBPdmVybGFwTWFwKiBvdmVybGFwTWFwLCBDb21wb3NpdGluZ1N0YXRl
JiBjb21wb3NpdGluZ1N0YXRlLCBib29sJiBkZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pCiB7CiAg
ICAgbGF5ZXItPnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwogICAgIApAQCAtODk4LDcgKzg5
OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgICAgICAgICBzaXplX3QgbGlzdFNp
emUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vy
TGF5ZXIgPSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAgICBjb21wdXRlQ29t
cG9zaXRpbmdSZXF1aXJlbWVudHMobGF5ZXIsIGN1ckxheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0
YXRlLCBsYXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOworICAgICAg
ICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwgY3VyTGF5ZXIs
IG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHRvIG1ha2UgYSBsYXllciBmb3IgdGhpcyBj
aGlsZCwgbWFrZSBvbmUgbm93IHNvIHdlIGNhbiBoYXZlIGEgY29udGVudHMgbGF5ZXIKICAgICAg
ICAgICAgICAgICAvLyAoc2luY2Ugd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgLXZlIHotb3Jk
ZXIgY2hpbGQgcmVuZGVycyB1bmRlcm5lYXRoIG91ciBjb250ZW50cykuCkBAIC05MjEsNyArOTIx
LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVp
cmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3IKICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0g
bm9ybWFsRmxvd0xpc3QtPnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBub3Jt
YWxGbG93TGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJl
bWVudHMobGF5ZXIsIGN1ckxheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFu
Z2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOworICAgICAgICAgICAgY29tcHV0ZUNv
bXBvc2l0aW5nUmVxdWlyZW1lbnRzKGxheWVyLCBjdXJMYXllciwgb3ZlcmxhcE1hcCwgY2hpbGRT
dGF0ZSwgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtOTMwLDcgKzkzMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29t
cG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgICAgICAgICBz
aXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5k
ZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAg
ICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMobGF5ZXIsIGN1ckxheWVyLCBvdmVybGFw
TWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zv
cm0pOworICAgICAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXll
ciwgY3VyTGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGFueURlc2NlbmRhbnRIYXMzRFRy
YW5zZm9ybSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDEyLDE5ICsx
MDEyLDQ5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yCiAgICAgaWYgKCFsYXllci0+aXNDb21w
b3NpdGVkKCkgJiYgd2lsbEJlQ29tcG9zaXRlZCkKICAgICAgICAgcmVwYWludE9uQ29tcG9zaXRp
bmdDaGFuZ2UobGF5ZXIpOwogCi0gICAgLy8gVXBkYXRlIGJhY2tpbmcgbm93LCBzbyB0aGF0IHdl
IGNhbiB1c2UgaXNDb21wb3NpdGVkKCkgcmVsaWFibHkgZHVyaW5nIHRyZWUgdHJhdmVyc2FsIGlu
IHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSgpLgotICAgIGlmICh1cGRhdGVCYWNraW5nKGxh
eWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpKQotICAgICAgICBsYXllcnNDaGFuZ2Vk
ID0gdHJ1ZTsKLQotICAgIGlmIChsYXllci0+cmVmbGVjdGlvbkxheWVyKCkgJiYgdXBkYXRlTGF5
ZXJDb21wb3NpdGluZ1N0YXRlKGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSwgQ29tcG9zaXRpbmdD
aGFuZ2VSZXBhaW50Tm93KSkKLSAgICAgICAgbGF5ZXJzQ2hhbmdlZCA9IHRydWU7Ci0KICAgICBk
ZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0gfD0gYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtIHx8
IGxheWVyLT5oYXMzRFRyYW5zZm9ybSgpOwogCiAgICAgaWYgKG92ZXJsYXBNYXApCiAgICAgICAg
IG92ZXJsYXBNYXAtPmdlb21ldHJ5TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9y
TGF5ZXIpOwogfQogCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJCYWNr
aW5ncyhSZW5kZXJMYXllciogbGF5ZXIsIGJvb2wmIGxheWVyc0NoYW5nZWQpCit7CisgICAgaWYg
KGxheWVyLT5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKFZlY3RvcjxSZW5k
ZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gbGF5ZXItPm5lZ1pPcmRlckxpc3QoKSkgeworICAg
ICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9yZGVyTGlzdC0+c2l6ZSgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9yZGVyTGlzdC0+YXQoaSk7CisgICAg
ICAgICAgICAgICAgdXBkYXRlTGF5ZXJCYWNraW5ncyhjdXJMYXllciwgbGF5ZXJzQ2hhbmdlZCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVmVjdG9yPFJlbmRl
ckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXItPm5vcm1hbEZsb3dMaXN0KCkpIHsKKyAg
ICAgICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3QtPnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBSZW5k
ZXJMYXllciogY3VyTGF5ZXIgPSBub3JtYWxGbG93TGlzdC0+YXQoaSk7CisgICAgICAgICAgICB1
cGRhdGVMYXllckJhY2tpbmdzKGN1ckxheWVyLCBsYXllcnNDaGFuZ2VkKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChsYXllci0+aXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CisgICAgICAg
IGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVyLT5wb3NaT3Jk
ZXJMaXN0KCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3Qt
PnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsr
aSkgeworICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxp
c3QtPmF0KGkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyQmFja2luZ3MoY3VyTGF5ZXIs
IGxheWVyc0NoYW5nZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHVwZGF0ZUJhY2tpbmcobGF5ZXIpKQorICAgICAgICBsYXllcnNDaGFuZ2VkID0gdHJ1ZTsK
KworICAgIGlmIChsYXllci0+cmVmbGVjdGlvbkxheWVyKCkgJiYgdXBkYXRlTGF5ZXJDb21wb3Np
dGluZ1N0YXRlKGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSkpCisgICAgICAgIGxheWVyc0NoYW5n
ZWQgPSB0cnVlOworfQorCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Q29tcG9zaXRp
bmdQYXJlbnQoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVyKiBwYXJlbnRMYXll
cikKIHsKICAgICBBU1NFUlQoIXBhcmVudExheWVyIHx8IGNoaWxkTGF5ZXItPmFuY2VzdG9yQ29t
cG9zaXRpbmdMYXllcigpID09IHBhcmVudExheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjYmUxZDliNmIyNzU3Y2MyNTVl
Y2EwMThmMzgzNjNkYjM4N2MzZWE5Li5iYmMzNmE0YTBlNjVlNzY4ZmQwZmQ4MGY4OTFiZWM2MjNk
NTcyNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oCkBAIC0xMTQsOCArMTE0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyVXBkYXRlKCk7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBjb21wb3Np
dGluZyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gbGF5ZXIuIFJldHVybnMgdHJ1ZSBpZiB0aGF0IHN0YXRl
IGNoYW5nZWQuCi0gICAgZW51bSBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgeyBDb21wb3NpdGlu
Z0NoYW5nZVJlcGFpbnROb3csIENvbXBvc2l0aW5nQ2hhbmdlV2lsbFJlcGFpbnRMYXRlciB9Owot
ICAgIGJvb2wgdXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKFJlbmRlckxheWVyKiwgQ29tcG9z
aXRpbmdDaGFuZ2VSZXBhaW50ID0gQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50Tm93KTsKKyAgICBi
b29sIHVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZShSZW5kZXJMYXllciopOwogCiAgICAgLy8g
VXBkYXRlIHRoZSBnZW9tZXRyeSBmb3IgY29tcG9zaXRpbmcgY2hpbGRyZW4gb2YgY29tcG9zaXRp
bmdBbmNlc3Rvci4KICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nRGVzY2VuZGFudEdlb21ldHJ5
KFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yLCBSZW5kZXJMYXllciosIGJvb2wgY29t
cG9zaXRlZENoaWxkcmVuT25seSk7CkBAIC0yNTgsNyArMjU3LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGNhbkJlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OwogCiAgICAgLy8g
TWFrZSBvciBkZXN0cm95IHRoZSBiYWNraW5nIGZvciB0aGlzIGxheWVyOyByZXR1cm5zIHRydWUg
aWYgYmFja2luZyBjaGFuZ2VkLgotICAgIGJvb2wgdXBkYXRlQmFja2luZyhSZW5kZXJMYXllcios
IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50KTsKKyAgICBib29sIHVwZGF0
ZUJhY2tpbmcoUmVuZGVyTGF5ZXIqKTsKIAogICAgIHZvaWQgY2xlYXJCYWNraW5nRm9yTGF5ZXJJ
bmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJMYXllciopOwogCkBAIC0yNzAsMTAgKzI2OSwxNiBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQo
VGltZXI8UmVuZGVyTGF5ZXJDb21wb3NpdG9yPiopOwogCi0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IGFueSBsYXllcidzIGNvbXBvc2l0aW5nIGNoYW5nZWQKLSAgICB2b2lkIGNvbXB1dGVDb21wb3Np
dGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVuZGVyTGF5ZXIq
LCBPdmVybGFwTWFwKiwgc3RydWN0IENvbXBvc2l0aW5nU3RhdGUmLCBib29sJiBsYXllcnNDaGFu
Z2VkLCBib29sJiBkZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOworICAgIC8vIFJlY3Vyc2VzIHRo
ZSB0cmVlIGluIHBhaW50IG9yZGVyLCBkZXRlcm1pbmluZyB3aGljaCBsYXllcnMgc2hvdWxkIGhh
dmUgYmFja2luZ3MuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB5ZXQgYWxsb2NhdGUv
ZGVhbGxvY2F0ZSB0aGUgYmFja2luZ3MsIHRob3VnaC4KKyAgICB2b2lkIGNvbXB1dGVDb21wb3Np
dGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVuZGVyTGF5ZXIq
LCBPdmVybGFwTWFwKiwgc3RydWN0IENvbXBvc2l0aW5nU3RhdGUmLCBib29sJiBkZXNjZW5kYW50
SGFzM0RUcmFuc2Zvcm0pOworCisgICAgLy8gV2Fsa3MgdGhlIGxheWVyIHRyZWUgdG8gYWxsb2Nh
dGUvZGVhbGxvY2F0ZSBiYWNraW5ncywgYWZ0ZXIgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGhh
dmUgYmVlbiBjb21wdXRlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGxheWVycyBkaWQg
Y2hhbmdlIHdoZXRoZXIgdGhleSBjb21wb3NpdGUgb3Igbm90LgorICAgIHZvaWQgdXBkYXRlTGF5
ZXJCYWNraW5ncyhSZW5kZXJMYXllciosIGJvb2wmIGxheWVyc0NoYW5nZWQpOwogICAgIAogICAg
IC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0
aW5nIGxheWVycyBhbmQgY29sbGVjdGluZyBhbiBhcnJheSBvZiBjaGlsZCBsYXllcnMgZm9yIHRo
ZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVyLgorICAgIC8vIEFzc3VtZXMgdGhhdCBsYXllciBi
YWNraW5ncyBoYXZlIGJlZW4gY29ycmVjdGx5IGFsbG9jYXRlZC9kZWFsbG9jYXRlZCBmb3IgdGhl
IGxhdGVzdCBSZW5kZXJMYXllciB0cmVlIHN0YXRlLgogICAgIHZvaWQgcmVidWlsZENvbXBvc2l0
aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRH
cmFwaGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIsIGludCBkZXB0aCk7CiAKICAgICAvLyBSZWN1
cnNlcyBkb3duIHRoZSB0cmVlLCB1cGRhdGluZyBsYXllciBnZW9tZXRyeSBvbmx5Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>