<?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>115304</bug_id>
          
          <creation_ts>2013-04-27 05:39:16 -0700</creation_ts>
          <short_desc>REGRESSION(SUBPIXEL_LAYOUT) Composited layers can cause one pixel shifts</short_desc>
          <delta_ts>2013-12-09 11:06:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>94792</blocked>
    
    <blocked>101076</blocked>
    
    <blocked>113199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eae</cc>
    
    <cc>efidler</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jonlee</cc>
    
    <cc>leviw</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882168</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-27 05:39:16 -0700</bug_when>
    <thetext>The issues was observed on hulu.com, the reduced test case is one div on a subpixel position with a an image below it also on a subpixel position. If the outer div is caused to become composited the image below it may change its pixel rounding, which causes it to shift.

Of the issues one pixel offset observed by Mac, this is the only one reliably observed on Qt as well.

Imagine element A a placed at (0,  10.6) with an image B inside placed relatively to A at (0, 4.8). The image B then has an absolute position of  (0, 15.4) which causes it to rendered at (0,15). If A becomes accelerated composited, then A will be rendered at (0,5) on the composited layer, and the composited layer will be rendered at (0,11), causing image B to end up at (0,16).

To avoid this issue, the position of accelerated layers must be floored to an integer position, and be given an internal subpixel padding of the remainder, making their content get the at the same fractional coordinates as if there were no compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882173</commentid>
    <comment_count>1</comment_count>
      <attachid>199903</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-27 06:19:24 -0700</bug_when>
    <thetext>Created attachment 199903
test.html

Test case demonstrating rounding of fractional positions being affected by the presence or absence of compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882174</commentid>
    <comment_count>2</comment_count>
      <attachid>199904</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-27 06:54:07 -0700</bug_when>
    <thetext>Created attachment 199904
test.html

Updated test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882760</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-29 14:18:28 -0700</bug_when>
    <thetext>        var test = document.getElementById(&apos;test&apos;);
        var clas = test.getAttribute(&apos;class&apos;);
        if (clas == &apos;composite&apos;) {
            test.setAttribute(&apos;class&apos;, &apos;&apos;);
        } else {
            test.setAttribute(&apos;class&apos;, &apos;composite&apos;);
        }

This could be document.getElementById(&apos;test&apos;).classList.toggle(&apos;composite&apos;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883038</commentid>
    <comment_count>4</comment_count>
      <attachid>200103</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-30 06:11:10 -0700</bug_when>
    <thetext>Created attachment 200103
Patch

Preliminary patch. Fixes all shifts are resizes in the uploaded case, except for ones ending in exactly 0.5. I am guessing a rounding somewhere gets confused by negative vs positive rounding, but I haven&apos;t found it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883043</commentid>
    <comment_count>5</comment_count>
      <attachid>200105</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-04-30 06:16:43 -0700</bug_when>
    <thetext>Created attachment 200105
subpixel-stutter.html

Updated test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883128</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2013-04-30 09:57:53 -0700</bug_when>
    <thetext>I&apos;ve seen other places where double-snapping cause  off-by-one issues (I try to dig them out). It&apos;d be nice to see some common pattern to fix them, instead of different type of local fixes (if possible at all). This might be a good topic for the WebKit contr meeting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883760</commentid>
    <comment_count>7</comment_count>
      <attachid>200309</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-05-02 05:24:56 -0700</bug_when>
    <thetext>Created attachment 200309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883767</commentid>
    <comment_count>8</comment_count>
      <attachid>200309</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-02 05:59:28 -0700</bug_when>
    <thetext>Comment on attachment 200309
Patch

Attachment 200309 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/308160</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883770</commentid>
    <comment_count>9</comment_count>
      <attachid>200309</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-02 06:17:24 -0700</bug_when>
    <thetext>Comment on attachment 200309
Patch

Attachment 200309 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/343112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883773</commentid>
    <comment_count>10</comment_count>
      <attachid>200311</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-05-02 06:29:06 -0700</bug_when>
    <thetext>Created attachment 200311
Patch

Build fix for pendantic clang</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883779</commentid>
    <comment_count>11</comment_count>
      <attachid>200311</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-02 07:07:28 -0700</bug_when>
    <thetext>Comment on attachment 200311
Patch

Attachment 200311 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/290143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883788</commentid>
    <comment_count>12</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-05-02 07:24:07 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 200311 [details])
&gt; Attachment 200311 [details] did not pass mac-wk2-ews (mac-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/290143

Also needs updated exported symbols it appears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883789</commentid>
    <comment_count>13</comment_count>
      <attachid>200311</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-02 07:28:05 -0700</bug_when>
    <thetext>Comment on attachment 200311
Patch

Attachment 200311 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/391133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885661</commentid>
    <comment_count>14</comment_count>
      <attachid>200888</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-05-07 03:41:56 -0700</bug_when>
    <thetext>Created attachment 200888
Patch

Export missing symbol for mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>885815</commentid>
    <comment_count>15</comment_count>
      <attachid>200888</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-05-07 10:39:49 -0700</bug_when>
    <thetext>Comment on attachment 200888
Patch

This LGTM, but I&apos;ll let smfr comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893317</commentid>
    <comment_count>16</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-05-24 08:43:25 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 200888 [details])
&gt; This LGTM, but I&apos;ll let smfr comment.

Simon, any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897857</commentid>
    <comment_count>17</comment_count>
      <attachid>200888</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-06-06 11:01:21 -0700</bug_when>
    <thetext>Comment on attachment 200888
Patch

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

I think the spirit of the patch is OK, but not the implementation.

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:252
&gt;      IntSize offsetFromRenderer() const { return m_offsetFromRenderer; }
&gt;      void setOffsetFromRenderer(const IntSize&amp;, ShouldSetNeedsDisplay = SetNeedsDisplay);
&gt;  
&gt; +    LayoutSize subpixelAccumulation() const { return m_subpixelAccumulation; }
&gt; +    void setSubpixelAccumulation(const LayoutSize&amp; subpixelAccumulation) { m_subpixelAccumulation = subpixelAccumulation; }

Unclear why we would need both offsetFromRenderer and subpixelAccumulation. Why is it ok for offsetFromRenderer to be IntSize?

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:502
&gt; +    // Accumulated subpixel error to be used by subpixel layout of the content.
&gt; +    LayoutSize m_subpixelAccumulation;

I don&apos;t think GraphicsLayer should every see Layout*

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:656
&gt; +    // We must move the bounds by the subpixel part of delta,
&gt; +    // so that they can be pixel snapped to actual pixels.

That comment doesn&apos;t make much sense.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:710
&gt; +    m_graphicsLayer-&gt;setPosition(FloatPoint(relativePixelCompositingBounds.location() - graphicsLayerParentLocation));
&gt; +    m_graphicsLayer-&gt;setOffsetFromRenderer(toIntSize(localPixelCompositingBounds.location()));
&gt; +    m_graphicsLayer-&gt;setSubpixelAccumulation(toLayoutSize(delta.fraction()));

What about m_foregroundLayer, m_maskLayer and m_backgroundLayer?

Why not store subpixel accumulation here on the RLB?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898095</commentid>
    <comment_count>18</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-07 03:35:44 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 200888 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200888&amp;action=review
&gt; 
&gt; I think the spirit of the patch is OK, but not the implementation.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayer.h:252
&gt; &gt;      IntSize offsetFromRenderer() const { return m_offsetFromRenderer; }
&gt; &gt;      void setOffsetFromRenderer(const IntSize&amp;, ShouldSetNeedsDisplay = SetNeedsDisplay);
&gt; &gt;  
&gt; &gt; +    LayoutSize subpixelAccumulation() const { return m_subpixelAccumulation; }
&gt; &gt; +    void setSubpixelAccumulation(const LayoutSize&amp; subpixelAccumulation) { m_subpixelAccumulation = subpixelAccumulation; }
&gt; 
&gt; Unclear why we would need both offsetFromRenderer and subpixelAccumulation. Why is it ok for offsetFromRenderer to be IntSize?
&gt; 

Making offsetFromRenderer a LayoutSize would not help since it is the relative offset, where subpixelAccumulation is the fractional part of the absolute offset. SubpixelAccumulation is what you add to the relative coordinates when painting to ensure snap-to-pixel snaps as it would if they were absolute coordinates.

&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:710
&gt; &gt; +    m_graphicsLayer-&gt;setPosition(FloatPoint(relativePixelCompositingBounds.location() - graphicsLayerParentLocation));
&gt; &gt; +    m_graphicsLayer-&gt;setOffsetFromRenderer(toIntSize(localPixelCompositingBounds.location()));
&gt; &gt; +    m_graphicsLayer-&gt;setSubpixelAccumulation(toLayoutSize(delta.fraction()));
&gt; 
&gt; What about m_foregroundLayer, m_maskLayer and m_backgroundLayer?
&gt; 
Yes, I overlooked them.

&gt; Why not store subpixel accumulation here on the RLB?

That might work, I will give it a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898108</commentid>
    <comment_count>19</comment_count>
      <attachid>204023</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-06-07 04:57:13 -0700</bug_when>
    <thetext>Created attachment 204023
Patch

Subpixel accumulation moved to RenderLayerBacking as suggested by smfr. Improved variable naming and comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916727</commentid>
    <comment_count>20</comment_count>
      <attachid>204023</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-08-13 08:49:05 -0700</bug_when>
    <thetext>Comment on attachment 204023
Patch

r=me

This looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916775</commentid>
    <comment_count>21</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-08-13 10:07:16 -0700</bug_when>
    <thetext>Committed r154009: &lt;http://trac.webkit.org/changeset/154009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957996</commentid>
    <comment_count>22</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2013-12-09 11:06:00 -0800</bug_when>
    <thetext>*** Bug 112229 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>199903</attachid>
            <date>2013-04-27 06:19:24 -0700</date>
            <delta_ts>2013-04-27 06:54:07 -0700</delta_ts>
            <desc>test.html</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>1509</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+CiAgICAjdGVzdCB7IAogICAgICAgIG1hcmdpbjo1cHg7CiAg
ICB9CiAgICAjdGVzdC5jb21wb3NpdGUgPiAuY29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRy
YW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvcGFjaXR5OiAwLjk1OwogICAgfQogICAg
LmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQogICAgLnNoaWZ0
ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibGFjazsKICAgICAgICB3aWR0aDogMjAuNXB4OwogICAgICAgIGhlaWdodDogMjAuNXB4Owog
ICAgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPXRlc3Q+CjwvZGl2Pgo8c2NyaXB0
PgogICAgZnVuY3Rpb24gc2V0dXBUZXN0KCkgewogICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBp
KyspIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxMDsgaisrKSB7CiAgICAgICAg
ICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAg
ICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwogICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnY29udGFp
bmVyJyk7CiAgICAgICAgICAgICAgICBzaGlmdGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2hp
ZnRlcicpOwogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAoNSArIGogKiAz
MCkgKyAicHgiCiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKGkgKiAzMC4x
KSArICJweCIKICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5bGUudG9wID0gKDUgKyBqICogMC4x
KSArICJweCIKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzaGlmdGVyKTsK
ICAgICAgICAgICAgICAgIHRlc3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgICAgdmFyIHRl
c3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwogICAgICAgIHZhciBjbGFzID0g
dGVzdC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7CiAgICAgICAgaWYgKGNsYXMgPT0gJ2NvbXBvc2l0
ZScpIHsKICAgICAgICAgICAgdGVzdC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJycpOwogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIHRlc3Quc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb21wb3Np
dGUnKTsKICAgICAgICB9CiAgICAgICAgd2luZG93LnNldFRpbWVvdXQocnVuVGVzdCwgNTAwKTsK
ICAgIH0KICAgIHNldHVwVGVzdCgpOwogICAgZG9jdW1lbnQuYm9keS5vbmxvYWQgPSBydW5UZXN0
Owo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>199904</attachid>
            <date>2013-04-27 06:54:07 -0700</date>
            <delta_ts>2013-04-30 06:16:43 -0700</delta_ts>
            <desc>test.html</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>1891</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+CiAgICAjdGVzdCB7IAogICAgICAgIG1hcmdpbjo1cHg7CiAg
ICB9CiAgICAjdGVzdC5jb21wb3NpdGUgPiAuY29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRy
YW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvcGFjaXR5OiAwLjk1OwogICAgfQogICAg
LmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQogICAgLnNoaWZ0
ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibGFjazsKICAgICAgICB3aWR0aDogMjAuNXB4OwogICAgICAgIGhlaWdodDogMjAuNXB4Owog
ICAgfQogICAgI2Rlc2NyaXB0aW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAg
ICAgdG9wOiAzMzBweDsKICAgICAgICB3aWR0aDogNDQwcHg7CiAgICB9Cjwvc3R5bGU+CjwvaGVh
ZD4KPGJvZHk+CjxkaXYgaWQ9dGVzdD4KPC9kaXY+CjxkaXYgaWQ9ZGVzY3JpcHRpb24+ClRlc3Rp
bmcgdGhhdCBwb3NpdGlvbnMgYW5kIG1ldHJpY3Mgb2YgZWxlbWVudHMgYXJlIG5vdCBhZmZlY3Rl
ZCBieSB0aGUgcHJlc2VuY2Ugb2YgYWJzZW5jZSBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4K
PGJyPgpUaGUgdGVzdCBmYWlscyBpZiBhbnkgb2YgdGhlIGJsYWNrIGJveGVzIGFib3V0IHNoaWZ0
cyBvciBjaGFuZ2VzIHNpemUuCjwvZGl2Pgo8c2NyaXB0PgogICAgZnVuY3Rpb24gc2V0dXBUZXN0
KCkgewogICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsK
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCAxMDsgaisrKSB7CiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICAgICB2YXIgc2hpZnRl
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgICAgY29udGFp
bmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnY29udGFpbmVyJyk7CiAgICAgICAgICAgICAgICBz
aGlmdGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2hpZnRlcicpOwogICAgICAgICAgICAgICAg
Y29udGFpbmVyLnN0eWxlLmxlZnQgPSAoaiAqIDMwIC0gaSAqIDAuMSkgKyAicHgiCiAgICAgICAg
ICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKGkgKiAzMC4xKSArICJweCIKICAgICAgICAg
ICAgICAgIHNoaWZ0ZXIuc3R5bGUudG9wID0gKDUgKyBqICogMC4xKSArICJweCIKICAgICAgICAg
ICAgICAgIHNoaWZ0ZXIuc3R5bGUubGVmdCA9ICg1IC0gaiAqIDAuMSkgKyAicHgiCiAgICAgICAg
ICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CiAgICAgICAgICAgICAgICB0
ZXN0LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CiAgICBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKICAgICAgICB2YXIgY2xhcyA9IHRlc3QuZ2V0QXR0cmlidXRl
KCdjbGFzcycpOwogICAgICAgIGlmIChjbGFzID09ICdjb21wb3NpdGUnKSB7CiAgICAgICAgICAg
IHRlc3Quc2V0QXR0cmlidXRlKCdjbGFzcycsICcnKTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICB0ZXN0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnY29tcG9zaXRlJyk7CiAgICAgICAgfQog
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1blRlc3QsIDEwMCk7CiAgICB9CiAgICBzZXR1cFRl
c3QoKTsKICAgIGRvY3VtZW50LmJvZHkub25sb2FkID0gcnVuVGVzdDsKPC9zY3JpcHQ+CjwvYm9k
eT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200103</attachid>
            <date>2013-04-30 06:11:10 -0700</date>
            <delta_ts>2013-05-02 05:24:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>26343</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">Y29tbWl0IDAyYWE0MzgxYjE4ZjM3ZDU3ZTA2YjAyOTA2M2U0ZWJlMWVhMTZjM2MKQXV0aG9yOiBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CkRhdGU6ICAgVHVl
IEFwciAzMCAxMTo0NTo0OCAyMDEzICswMjAwCgogICAgTWluaW1pemluZyBzdHV0dGVyLiAxIHNo
aWZ0IGxlZnQKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmNwcAppbmRleCA4OWVlODU4Li5iNTRkY2E5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTE4
MCw3ICsxODAsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpMYXllclRyZWU6OkxheWVyPiBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGbwogICAgICAgICAuc2V0Tm9kZUlk
KGlkRm9yTm9kZShlcnJvclN0cmluZywgbm9kZSkpCiAgICAgICAgIC5zZXRCb3VuZHMoYnVpbGRP
YmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KCkpKSkKICAgICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVN
ZW1vcnlFc3RpbWF0ZSgpKQotICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVj
dEZvckludFJlY3QoYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpKSkKKyAgICAgICAgLnNldENv
bXBvc2l0ZWRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFj
a2luZy0+Y29tcG9zaXRlZEJvdW5kcygpKSkpCiAgICAgICAgIC5zZXRQYWludENvdW50KGJhY2tp
bmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwYWludENvdW50KCkpOwogCiAgICAgaWYgKG5vZGUgJiYg
bm9kZS0+c2hhZG93SG9zdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCBiMGVkYWNlLi5mNmY4YTM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAt
Mjk1LDcgKzI5NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgbV9yZXBsaWNhTGF5ZXIgPSBsYXllcjsKIH0KIAot
dm9pZCBHcmFwaGljc0xheWVyOjpzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgSW50U2l6ZSYg
b2Zmc2V0LCBTaG91bGRTZXROZWVkc0Rpc3BsYXkgc2hvdWxkU2V0TmVlZHNEaXNwbGF5KQordm9p
ZCBHcmFwaGljc0xheWVyOjpzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0LCBTaG91bGRTZXROZWVkc0Rpc3BsYXkgc2hvdWxkU2V0TmVlZHNEaXNwbGF5KQogewog
ICAgIGlmIChvZmZzZXQgPT0gbV9vZmZzZXRGcm9tUmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTMxNSwxMyArMzE1LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHZvaWQgR3JhcGhpY3NMYXllcjo6cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBj
bGlwKQogewogICAgIGlmIChtX2NsaWVudCkgewotICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9
IG9mZnNldEZyb21SZW5kZXJlcigpOworICAgICAgICBJbnRTaXplIG9mZnNldCA9IHBpeGVsT2Zm
c2V0RnJvbVJlbmRlcmVyKCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vZmZzZXQpOwog
CiAgICAgICAgIExheW91dFJlY3QgY2xpcFJlY3QoY2xpcCk7Ci0gICAgICAgIGNsaXBSZWN0Lm1v
dmUob2Zmc2V0KTsKKyAgICAgICAgY2xpcFJlY3QubW92ZShvZmZzZXRGcm9tUmVuZGVyZXIoKSk7
CiAKLSAgICAgICAgbV9jbGllbnQtPnBhaW50Q29udGVudHModGhpcywgY29udGV4dCwgbV9wYWlu
dGluZ1BoYXNlLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KSk7CisgICAgICAgIG1fY2xp
ZW50LT5wYWludENvbnRlbnRzKHRoaXMsIGNvbnRleHQsIG1fcGFpbnRpbmdQaGFzZSwgZW5jbG9z
aW5nSW50UmVjdChjbGlwUmVjdCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IDk3OWM5M2UuLjBlOTYwYWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmgKQEAgLTI0OSw4ICsyNDksOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIE9mZnNldCBp
cyBvcmlnaW4gb2YgdGhlIHJlbmRlcmVyIG1pbnVzIG9yaWdpbiBvZiB0aGUgZ3JhcGhpY3MgbGF5
ZXIgKHNvIGVpdGhlciB6ZXJvIG9yIG5lZ2F0aXZlKS4KLSAgICBJbnRTaXplIG9mZnNldEZyb21S
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbVJlbmRlcmVyOyB9Ci0gICAgdm9p
ZCBzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgSW50U2l6ZSYsIFNob3VsZFNldE5lZWRzRGlz
cGxheSA9IFNldE5lZWRzRGlzcGxheSk7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUmVuZGVy
ZXIoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21SZW5kZXJlcjsgfQorICAgIHZvaWQgc2V0
T2Zmc2V0RnJvbVJlbmRlcmVyKGNvbnN0IExheW91dFNpemUmLCBTaG91bGRTZXROZWVkc0Rpc3Bs
YXkgPSBTZXROZWVkc0Rpc3BsYXkpOworICAgIEludFNpemUgcGl4ZWxPZmZzZXRGcm9tUmVuZGVy
ZXIoKSBjb25zdCB7IHJldHVybiBmbG9vcmVkSW50U2l6ZShtX29mZnNldEZyb21SZW5kZXJlcik7
IH0KIAogICAgIC8vIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgKHRoZSBsb2NhdGlvbiBvZiBp
dHMgdG9wLWxlZnQgY29ybmVyIGluIGl0cyBwYXJlbnQpCiAgICAgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CkBAIC00OTcsNyArNDk4LDcg
QEAgcHJvdGVjdGVkOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgCiAgICAgLy8gT2Zmc2V0IGZy
b20gdGhlIG93bmluZyByZW5kZXJlcgotICAgIEludFNpemUgbV9vZmZzZXRGcm9tUmVuZGVyZXI7
CisgICAgTGF5b3V0U2l6ZSBtX29mZnNldEZyb21SZW5kZXJlcjsKICAgICAKICAgICAvLyBQb3Np
dGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEdyYXBoaWNzTGF5ZXIKICAgICBGbG9hdFBv
aW50IG1fcG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCBjYzZhOWM5Li4zYzljNDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKQEAgLTM3NTEsNyArMzc1MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5
ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAg
ICAgICAgICAgICBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0aCA9IHN0YXRpY19jYXN0
PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24qPihzdHlsZS0+Y2xpcFBhdGgoKSk7CiAKICAgICAgICAg
ICAgIGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKLSAgICAgICAgICAgICAgICBy
b290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9v
dExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOworICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2
ZUJvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3QoY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290LCAwKSk7CiAgICAgICAgICAgICAgICAg
cm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC0z
NzY1LDcgKzM3NjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKHJlZmVy
ZW5jZUNsaXBQYXRoT3BlcmF0aW9uLT5mcmFnbWVudCgpKSA6IDA7CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpjbGlwUGF0aFRhZykgJiYg
ZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGlmICghcm9vdFJlbGF0aXZl
Qm91bmRzQ29tcHV0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRz
ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZy
b21Sb290LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExh
eWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApKTsKICAgICAgICAgICAgICAgICAgICAgcm9vdFJlbGF0
aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMzc4Niw3
ICszNzg2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgZmlsdGVyUmVwYWlu
dFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdC54KCksIG9mZnNldEZyb21Sb290LnkoKSk7CiAKICAg
ICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAgcm9v
dFJlbGF0aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgJm9mZnNldEZyb21Sb290LCAwKTsKKyAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5k
cyA9IHBpeGVsU25hcHBlZEludFJlY3QoY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290LCAwKSk7CiAgICAgICAgICAgICByb290UmVsYXRp
dmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAgICAgIH0KIApAQCAtNTMzOSwxNCArNTMzOSwx
NCBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjphYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3QKICAg
ICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0JveChyb290KCkpKTsKIH0KIAot
SW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwgQ2Fs
Y3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIENhbGN1bGF0ZUxheWVyQm91bmRz
RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCB0byBkbyBhIGNoZWNrIGxpa2Ug
aGFzVmlzaWJsZU5vbkNvbXBvc2l0aW5nRGVzY2VuZGFudExheWVycygpIChidWcgOTI1ODApLgog
ICAgIGlmICgoZmxhZ3MgJiBFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMpICYmIHRoaXMgIT0gYW5j
ZXN0b3JMYXllciAmJiAhaGFzVmlzaWJsZUNvbnRlbnQoKSAmJiAhaGFzVmlzaWJsZURlc2NlbmRh
bnQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKTsKIApAQCAtNTM4Niw3ICs1Mzg2LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2Fs
Y3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMK
ICAgICAgICAgICAgIExheW91dFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgICAgICAgICAg
Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwog
ICAgICAgICAgICAgbG9jYWxDbGlwUmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQpOwotICAg
ICAgICAgICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QobG9jYWxDbGlwUmVjdCk7CisgICAg
ICAgICAgICByZXR1cm4gbG9jYWxDbGlwUmVjdDsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM5
Nyw3ICs1Mzk3LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKIAogICAgIGlmIChSZW5kZXJM
YXllciogcmVmbGVjdGlvbiA9IHJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgIGlmICghcmVm
bGVjdGlvbi0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgY2hpbGRVbmlv
bkJvdW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2Nl
bmRhbnRGbGFncyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBy
ZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3Mp
OwogICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC01NDEzLDcgKzU0MTMsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29u
cwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAg
ICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3Vy
TGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBjaGlsZFVu
aW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2Nl
bmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRz
ID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFn
cyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU0MjQsNyArNTQyNCw3IEBAIEludFJlY3Qg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBjb25zCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7
ICsraSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gcG9zWk9yZGVyTGlz
dC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2Nl
bmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBJ
bnRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHMo
dGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGNo
aWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgMCwg
ZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0ZShjaGls
ZFVuaW9uQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTQzNSw3ICs1NDM1
LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIg
PSBub3JtYWxGbG93TGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRl
Q29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBJbnRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExh
eW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRo
aXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5p
dGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTQ2Miw3ICs1
NDYyLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgY29udmVydFRvTGF5ZXJD
b29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgIHVuaW9uQm91bmRz
Lm1vdmVCeShhbmNlc3RvclJlbE9mZnNldCk7CiAgICAgCi0gICAgcmV0dXJuIHBpeGVsU25hcHBl
ZEludFJlY3QodW5pb25Cb3VuZHMpOworICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KIAogdm9p
ZCBSZW5kZXJMYXllcjo6Y2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVj
dHNUeXBlIHR5cGVUb0NsZWFyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApp
bmRleCA5MjVhYjAwLi4zMTBhYzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaApAQCAtNzAxLDcgKzcwMSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ2FuIHBh
c3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgSW50UmVjdCBjYWxjdWxhdGVMYXllckJv
dW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQq
IG9mZnNldEZyb21Sb290ID0gMCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRD
YWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlv
dXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0g
RGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MpIGNvbnN0OwogICAgIAogICAgIC8vIFdB
Uk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG9mZnNldCBmb3IgdGhlIHBhcmVudCBhcyB0
aGlzIGlzIHdoYXQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMgZXhwZWN0cy4KICAgICBMYXlvdXRQb2lu
dCBjb21wdXRlT2Zmc2V0RnJvbVJvb3QoYm9vbCYgaGFzTGF5ZXJPZmZzZXQpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAw
ZjQzNDE0Li41NzYzMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpzaG91bGRDbGlwQ29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKCkKIHsKLSAgICBJbnRSZWN0IGxheWVy
Qm91bmRzID0gY29tcG9zaXRvcigpLT5jYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKG1fb3duaW5n
TGF5ZXIsIG1fb3duaW5nTGF5ZXIpOworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMgPSBjb21w
b3NpdG9yKCktPmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMobV9vd25pbmdMYXllciwgbV9vd25p
bmdMYXllcik7CiAKICAgICAvLyBDbGlwIHRvIHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCBvciBl
bmNsb3Npbmcgb3ZlcmZsb3ctc2Nyb2xsIGxheWVyLgogICAgIC8vIElmIHRoaXMgb3IgYW4gYW5j
ZXN0b3IgaXMgdHJhbnNmb3JtZWQsIHdlIGNhbid0IGN1cnJlbnRseSBjb21wdXRlIHRoZSBjb3Jy
ZWN0IHJlY3QgdG8gaW50ZXJzZWN0IHdpdGguCkBAIC00NDgsNyArNDQ4LDcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogICAgICAgICBtX293bmlu
Z0xheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAgICAgICAg
Y2xpcHBpbmdCb3VuZHMubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKIAotICAgICAgICBs
YXllckJvdW5kcy5pbnRlcnNlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwcGluZ0JvdW5kcykp
OworICAgICAgICBsYXllckJvdW5kcy5pbnRlcnNlY3QoY2xpcHBpbmdCb3VuZHMpOwogICAgICAg
ICBtX2JvdW5kc0NvbnN0cmFpbmVkQnlDbGlwcGluZyA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fYm91bmRzQ29uc3RyYWluZWRCeUNsaXBwaW5nID0gZmFsc2U7CkBAIC00NzEsNyArNDcx
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUFmdGVyV2lkZ2V0UmVzaXplKCkK
ICAgICBpZiAocmVuZGVyZXIoKS0+aXNSZW5kZXJQYXJ0KCkpIHsKICAgICAgICAgaWYgKFJlbmRl
ckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3NpdG9yID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcih0b1JlbmRlclBhcnQocmVuZGVyZXIoKSkpKSB7CiAg
ICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKLSAg
ICAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRpb24oY29u
dGVudHNCb3goKS5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJh
bWVWaWV3RGlkQ2hhbmdlTG9jYXRpb24oZmxvb3JlZEludFBvaW50KGNvbnRlbnRzQm94KCkubG9j
YXRpb24oKSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNjQ3LDEyICs2NDcsMTMgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAg
ICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbXBB
bmNlc3Rvci0+YmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCkpOwogICAgIH0KIAotICAgIElu
dFJlY3QgbG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3QoY29tcG9z
aXRlZEJvdW5kcygpKTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBj
b21wb3NpdGVkQm91bmRzKCk7CiAKLSAgICBJbnRSZWN0IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3Vu
ZHMobG9jYWxDb21wb3NpdGluZ0JvdW5kcyk7Ci0gICAgSW50UG9pbnQgZGVsdGE7Ci0gICAgbV9v
d25pbmdMYXllci0+Y29udmVydFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29yZHMoY29tcEFuY2VzdG9y
LCBkZWx0YSk7CisgICAgTGF5b3V0UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2Fs
Q29tcG9zaXRpbmdCb3VuZHMpOworICAgIExheW91dFBvaW50IGRlbHRhOworICAgIG1fb3duaW5n
TGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOwogICAgIHJl
bGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5KGRlbHRhKTsKKyAgICBJbnRSZWN0IHBpeGVs
Qm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKTsK
IAogICAgIEludFBvaW50IGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbjsKICAgICBpZiAoY29t
cEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+YmFja2luZygpLT5oYXNDbGlwcGluZ0xheWVyKCkp
IHsKQEAgLTY4OSwxOSArNjkwLDE5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
cmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRp
b24gPSBwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpOwogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBj
b250ZW50c1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUoKTsKKyAgICBGbG9h
dFNpemUgY29udGVudHNTaXplID0gcGl4ZWxCb3VuZHMuc2l6ZSgpOwogICAgIAogICAgIGlmICht
X2NvbnRlbnRzQ29udGFpbm1lbnRMYXllcikgewogICAgICAgICBtX2NvbnRlbnRzQ29udGFpbm1l
bnRMYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QpOwogICAgICAgICBtX2NvbnRlbnRz
Q29udGFpbm1lbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZUNvbXBvc2l0
aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAg
ICAgICAgLy8gVXNlIHRoZSBzYW1lIHNpemUgYXMgbV9ncmFwaGljc0xheWVyIHNvIHRyYW5zZm9y
bXMgYmVoYXZlIGNvcnJlY3RseS4KICAgICAgICAgbV9jb250ZW50c0NvbnRhaW5tZW50TGF5ZXIt
PnNldFNpemUoY29udGVudHNTaXplKTsKLSAgICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0
aW9uID0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpOworICAgICAgICBncmFw
aGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBwaXhlbEJvdW5kcy5sb2NhdGlvbigpOwogICAgIH0K
IAogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZUNv
bXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24p
KTsKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcih0b0ludFNpemUo
bG9jYWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpKSk7Ci0gICAgCisgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIodG9MYXlvdXRTaXplKGxvY2FsQ29tcG9zaXRp
bmdCb3VuZHMubG9jYXRpb24oKSkpOworCiAgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX2dyYXBo
aWNzTGF5ZXItPnNpemUoKTsKICAgICBpZiAob2xkU2l6ZSAhPSBjb250ZW50c1NpemUpIHsKICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7CkBAIC03MzYsMTAg
KzczNywxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KCkKICAgICB9CiAgICAgCiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9y
bSgpKSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSktPnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKTsKKyAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVj
dCgpOwogCiAgICAgICAgIC8vIEdldCBsYXlvdXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29t
cEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuCi0gICAgICAgIElu
dFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgpKTsKKyAg
ICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcyA9IExheW91dFJlY3QoZGVsdGEsIGJvcmRlckJv
eC5zaXplKCkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9u
IGxheWVyIGRpbWVuc2lvbnMKICAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9
IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKQEAgLTc3OCw3ICs3NzksNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAg
ICBpZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsKICAgICAgICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5k
UG9zaXRpb247CiAgICAgICAgIEZsb2F0U2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9IGNvbnRlbnRzU2l6
ZTsKLSAgICAgICAgSW50U2l6ZSBmb3JlZ3JvdW5kT2Zmc2V0ID0gbV9ncmFwaGljc0xheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBmb3JlZ3JvdW5kT2Zmc2V0
ID0gbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICAgICAgaWYgKGhh
c0NsaXBwaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNsaXBwaW5n
IGxheWVyICh3aGljaCBjbGlwcyBkZXNjZW5kYW50cyksIHRoZW4gdGhlIGZvcmVncm91bmQgbGF5
ZXIgaXMgYSBjaGlsZCBvZiBpdCwKICAgICAgICAgICAgIC8vIHNvIHRoYXQgaXQgZ2V0cyBjb3Jy
ZWN0bHkgc29ydGVkIHdpdGggY2hpbGRyZW4uIEluIHRoYXQgY2FzZSwgcG9zaXRpb24gcmVsYXRp
dmUgdG8gdGhlIGNsaXBwaW5nIGxheWVyLgpAQCAtODMyLDggKzgzMyw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICBtX3Nj
cm9sbGluZ0xheWVyLT5zZXRTaXplKHBhZGRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgbV9zY3Jv
bGxpbmdDb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxPZmZzZXQu
d2lkdGgoKSwgLXNjcm9sbE9mZnNldC5oZWlnaHQoKSkpOwogCi0gICAgICAgIEludFNpemUgb2xk
U2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbGluZ0xheWVyLT5vZmZzZXRGcm9tUmVuZGVy
ZXIoKTsKLSAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKC10
b0ludFNpemUocGFkZGluZ0JveC5sb2NhdGlvbigpKSk7CisgICAgICAgIExheW91dFNpemUgb2xk
U2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbGluZ0xheWVyLT5vZmZzZXRGcm9tUmVuZGVy
ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxpbmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKC10
b0xheW91dFNpemUocGFkZGluZ0JveC5sb2NhdGlvbigpKSk7CiAKICAgICAgICAgYm9vbCBwYWRk
aW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xs
aW5nTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCkBAIC05NDksNyArOTUwLDcgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUludGVybmFsSGllcmFyY2h5KCkKIAogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnJlc2V0Q29udGVudHNSZWN0KCkKIHsKLSAgICBJbnRSZWN0IHJl
Y3QgPSBjb250ZW50c0JveCgpOworICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBlZEludFJl
Y3QoY29udGVudHNCb3goKSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1JlY3Qo
cmVjdCk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RpbGVTaXplKEludFNpemUo
KSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RpbGVQaGFzZShJbnRQb2ludCgp
KTsKQEAgLTEwOTYsNyArMTA5Nyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVP
dmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAKIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCiB7Ci0gICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVuZGVy
ZXIgPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOworICAgIEludFNpemUg
b2Zmc2V0RnJvbVJlbmRlcmVyID0gbV9ncmFwaGljc0xheWVyLT5waXhlbE9mZnNldEZyb21SZW5k
ZXJlcigpOwogICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpKSB7CiAgICAgICAgIFNjcm9sbGJhciogaEJhciA9IG1fb3duaW5nTGF5ZXIt
Pmhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICAgICAgaWYgKGhCYXIpIHsKQEAgLTE3NDMsNyAr
MTc0NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKCkK
ICAgICBpbWFnZS0+c3RhcnRBbmltYXRpb24oKTsKIH0KIAotRmxvYXRQb2ludDNEIFJlbmRlckxh
eWVyQmFja2luZzo6Y29tcHV0ZVRyYW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJC
b3gpIGNvbnN0CitGbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNm
b3JtT3JpZ2luKGNvbnN0IExheW91dFJlY3QmIGJvcmRlckJveCkgY29uc3QKIHsKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogCkBAIC0xNzcwLDI0ICsxNzcx
LDI0IEBAIEZsb2F0UG9pbnQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGVyc3BlY3RpdmVP
cmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94CiB9CiAKIC8vIFJldHVybiB0aGUgb2Zmc2V0
IGZyb20gdGhlIHRvcC1sZWZ0IG9mIHRoaXMgY29tcG9zaXRpbmcgbGF5ZXIgYXQgd2hpY2ggdGhl
IHJlbmRlcmVyJ3MgY29udGVudHMgYXJlIHBhaW50ZWQuCi1JbnRTaXplIFJlbmRlckxheWVyQmFj
a2luZzo6Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3QKK0xheW91dFNpemUg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25z
dAogewotICAgIHJldHVybiBJbnRTaXplKC1tX2NvbXBvc2l0ZWRCb3VuZHMueCgpLCAtbV9jb21w
b3NpdGVkQm91bmRzLnkoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoLW1fY29tcG9zaXRlZEJv
dW5kcy54KCksIC1tX2NvbXBvc2l0ZWRCb3VuZHMueSgpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJM
YXllckJhY2tpbmc6OmNvbnRlbnRzQm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJC
YWNraW5nOjpjb250ZW50c0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5pc0Jv
eCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCi0gICAgSW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgTGF5b3V0UmVjdCBjb250ZW50
c1JlY3Q7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkp
IHsKICAgICAgICAgUmVuZGVyVmlkZW8qIHZpZGVvUmVuZGVyZXIgPSB0b1JlbmRlclZpZGVvKHJl
bmRlcmVyKCkpOwogICAgICAgICBjb250ZW50c1JlY3QgPSB2aWRlb1JlbmRlcmVyLT52aWRlb0Jv
eCgpOwogICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgIGNvbnRlbnRzUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCkpOwor
ICAgICAgICBjb250ZW50c1JlY3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVudEJv
eFJlY3QoKTsKIAogICAgIGNvbnRlbnRzUmVjdC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBvc3Rp
bmdMYXllcigpKTsKICAgICByZXR1cm4gY29udGVudHNSZWN0OwpAQCAtMTgxNSw5ICsxODE2LDkg
QEAgSW50UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmJhY2tncm91bmRCb3goKSBjb25zdAogICAg
IGlmICghcmVuZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAot
ICAgIEludFJlY3QgcGl4ZWxTbmFwcGVkQmFja2dyb3VuZEJveCA9IHBpeGVsU25hcHBlZEludFJl
Y3QoYmFja2dyb3VuZFJlY3RGb3JCb3godG9SZW5kZXJCb3gocmVuZGVyZXIoKSkpKTsKLSAgICBw
aXhlbFNuYXBwZWRCYWNrZ3JvdW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xh
eWVyKCkpOwotICAgIHJldHVybiBwaXhlbFNuYXBwZWRCYWNrZ3JvdW5kQm94OworICAgIExheW91
dFJlY3QgYmFja2dyb3VuZEJveCA9IGJhY2tncm91bmRSZWN0Rm9yQm94KHRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpKTsKKyAgICBiYWNrZ3JvdW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9z
dGluZ0xheWVyKCkpOworICAgIHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGJhY2tncm91bmRC
b3gpOwogfQogCiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckJhY2tpbmc6OnBhcmVudEZvclN1
YmxheWVycygpIGNvbnN0CkBAIC0xOTA0LDMyICsxOTA1LDMyIEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHIpCiAK
ICAgICBpZiAobV9ncmFwaGljc0xheWVyICYmIG1fZ3JhcGhpY3NMYXllci0+ZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgSW50UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGxheWVy
RGlydHlSZWN0Lm1vdmUoLW1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwor
ICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX2dyYXBoaWNzTGF5ZXItPnBpeGVsT2Zmc2V0
RnJvbVJlbmRlcmVyKCkpOwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChsYXllckRpcnR5UmVjdCk7CiAgICAgfQogCiAgICAgaWYgKG1fZm9yZWdyb3VuZExh
eWVyICYmIG1fZm9yZWdyb3VuZExheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAgICBJbnRS
ZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9m
b3JlZ3JvdW5kTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKTsKKyAgICAgICAgbGF5ZXJEaXJ0
eVJlY3QubW92ZSgtbV9mb3JlZ3JvdW5kTGF5ZXItPnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKCkp
OwogICAgICAgICBtX2ZvcmVncm91bmRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVy
RGlydHlSZWN0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogbmVlZCB0byBzcGxpdCBvdXQgcmVw
YWludHMgZm9yIHRoZSBiYWNrZ3JvdW5kLgogICAgIGlmIChtX2JhY2tncm91bmRMYXllciAmJiBt
X2JhY2tncm91bmRMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKICAgICAgICAgSW50UmVjdCBsYXll
ckRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fYmFja2dyb3Vu
ZExheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisgICAgICAgIGxheWVyRGlydHlSZWN0Lm1v
dmUoLW1fYmFja2dyb3VuZExheWVyLT5waXhlbE9mZnNldEZyb21SZW5kZXJlcigpKTsKICAgICAg
ICAgbV9iYWNrZ3JvdW5kTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVj
dCk7CiAgICAgfQogCiAgICAgaWYgKG1fbWFza0xheWVyICYmIG1fbWFza0xheWVyLT5kcmF3c0Nv
bnRlbnQoKSkgewogICAgICAgICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKLSAgICAgICAg
bGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9tYXNrTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKTsK
KyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9tYXNrTGF5ZXItPnBpeGVsT2Zmc2V0RnJv
bVJlbmRlcmVyKCkpOwogICAgICAgICBtX21hc2tMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGxheWVyRGlydHlSZWN0KTsKICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxpbmdDb250ZW50c0xh
eWVyICYmIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKICAgICAg
ICAgSW50UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1v
dmUoLW1fc2Nyb2xsaW5nQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOworICAg
ICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXItPnBpeGVs
T2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwogICAgICAgICBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVjdCk7CiAgICAgfQogfQpAQCAtMTk2
Myw3ICsxOTY0LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihj
b25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgICAgIHBhaW50Rmxh
Z3MgfD0gUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZDsK
ICAgICAKICAgICAvLyBGSVhNRTogR3JhcGhpY3NMYXllcnMgbmVlZCBhIHdheSB0byBzcGxpdCBm
b3IgUmVuZGVyUmVnaW9ucy4KLSAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFp
bnRpbmdJbmZvKG1fb3duaW5nTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCBM
YXlvdXRTaXplKCkpOworICAgIExheW91dFNpemUgb2Zmc2V0SW5QaXhlbHMgPSBncmFwaGljc0xh
eWVyLT5waXhlbE9mZnNldEZyb21SZW5kZXJlcigpOworICAgIExheW91dFNpemUgb2Zmc2V0ID0g
Z3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CisgICAgTGF5b3V0U2l6ZSBzdWJQ
aXhlbEFjY3VtdWxhdGlvbiA9IHRvTGF5b3V0UG9pbnQob2Zmc2V0SW5QaXhlbHMpIC0gdG9MYXlv
dXRQb2ludChvZmZzZXQpOworICAgIFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyBwYWlu
dGluZ0luZm8obV9vd25pbmdMYXllciwgcGFpbnREaXJ0eVJlY3QsIHBhaW50QmVoYXZpb3IsIHN1
YlBpeGVsQWNjdW11bGF0aW9uKTsKICAgICBtX293bmluZ0xheWVyLT5wYWludExheWVyQ29udGVu
dHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAogICAgIGlmIChtX293bmlu
Z0xheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSkKQEAgLTIwMDQsNyArMjAw
OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgIC8vIFRoZSBkaXJ0eVJlY3Qg
aXMgaW4gdGhlIGNvb3JkcyBvZiB0aGUgcGFpbnRpbmcgcm9vdC4KICAgICAgICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSBjbGlwOwogICAgICAgICBpZiAoIShwYWludGluZ1BoYXNlICYgR3JhcGhpY3NM
YXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpCi0gICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJz
ZWN0KGNvbXBvc2l0ZWRCb3VuZHMoKSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KHBpeGVsU25hcHBlZEludFJlY3QoY29tcG9zaXRlZEJvdW5kcygpKSk7CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgcm9vdCBhcyBmb3IgaGl0IHRlc3RpbmcsIGJlY2F1c2Ug
Ym90aCBtZXRob2RzIGNhbiBjb21wdXRlIGFuZCBjYWNoZSBjbGlwUmVjdHMuCiAgICAgICAgIHBh
aW50SW50b0xheWVyKGdyYXBoaWNzTGF5ZXIsICZjb250ZXh0LCBkaXJ0eVJlY3QsIFBhaW50QmVo
YXZpb3JOb3JtYWwsIHBhaW50aW5nUGhhc2UpOwpAQCAtMjI1NiwxMiArMjI2MCwxMiBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgbV9ncmFwaGljc0xh
eWVyLT5yZXN1bWVBbmltYXRpb25zKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGVkQm91
bmRzOwogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29tcG9zaXRlZEJvdW5kcyhj
b25zdCBJbnRSZWN0JiBib3VuZHMpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29tcG9z
aXRlZEJvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpCiB7CiAgICAgbV9jb21wb3NpdGVk
Qm91bmRzID0gYm91bmRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oCmluZGV4IDZjNGM4N2EuLjUwMTVlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE0MSw4ICsxNDEsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSA9IDApOwogICAgIHZv
aWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCi0gICAgSW50UmVjdCBjb21wb3NpdGVkQm91bmRzKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IEludFJlY3QmKTsKKyAg
ICBMYXlvdXRSZWN0IGNvbXBvc2l0ZWRCb3VuZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBv
c2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRl
ZEJvdW5kcygpOwogICAgIAogICAgIHZvaWQgdXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKTsKQEAg
LTE3NSw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZlcmlmeU5vdFBhaW50
aW5nKCk7CiAjZW5kaWYKIAotICAgIEludFJlY3QgY29udGVudHNCb3goKSBjb25zdDsKKyAgICBM
YXlvdXRSZWN0IGNvbnRlbnRzQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBiYWNrZ3JvdW5kQm94
KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRm9yIGluZm9ybWF0aXZlIHB1cnBvc2VzIG9ubHkuCkBA
IC0yMjksOSArMjI5LDkgQEAgcHJpdmF0ZToKIAogICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlIHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAKLSAgICBJbnRT
aXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OworICAgIExheW91dFNp
emUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAgLy8gUmVzdWx0
IGlzIHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQzRCBjb21wdXRl
VHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CisgICAgRmxv
YXRQb2ludDNEIGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgTGF5b3V0UmVjdCYgYm9yZGVy
Qm94KSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMgcGVyc3BlY3RpdmUgb3JpZ2luIGluIHBpeGVs
cy4KICAgICBGbG9hdFBvaW50IGNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0
JiBib3JkZXJCb3gpIGNvbnN0OwogCkBAIC0yOTcsNyArMjk3LDcgQEAgcHJpdmF0ZToKIAogICAg
IHVpbnQ2NF90IG1fc2Nyb2xsTGF5ZXJJRDsKIAotICAgIEludFJlY3QgbV9jb21wb3NpdGVkQm91
bmRzOworICAgIExheW91dFJlY3QgbV9jb21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2Fy
dGlmaWNpYWxseUluZmxhdGVkQm91bmRzOyAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXpl
cm8gdG8gbWFrZSB0cmFuc2Zvcm0tb3JpZ2luIHdvcmsKICAgICBib29sIG1fYm91bmRzQ29uc3Ry
YWluZWRCeUNsaXBwaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhM2E0OTExLi4yNmIxYzIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNzcz
LDEwICs3NzMsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcGFpbnRJbkNvbXBv
c2l0ZWRBbmNlc3RvcihSZW5kZXJMYXllciogbGF5ZXIsIGNvbnMKIAogLy8gVGhlIGJvdW5kcyBv
ZiB0aGUgR3JhcGhpY3NMYXllciBjcmVhdGVkIGZvciBhIGNvbXBvc2l0aW5nIGxheWVyIGlzIHRo
ZSB1bmlvbiBvZiB0aGUgYm91bmRzIG9mIGFsbCB0aGUgZGVzY2VuZGFudAogLy8gUmVuZGVyTGF5
ZXJzIHRoYXQgYXJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdGVkIFJlbmRlckxheWVyLgotSW50
UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGVDb21wb3Np
dGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFu
Y2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW5CZUNvbXBvc2l0ZWQobGF5ZXIpKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
ICAgIHJldHVybiBsYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoYW5jZXN0b3JMYXllciwgMCwg
UmVuZGVyTGF5ZXI6OkRlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIHwgUmVuZGVyTGF5
ZXI6OkV4Y2x1ZGVIaWRkZW5EZXNjZW5kYW50cyB8IFJlbmRlckxheWVyOjpEb250Q29uc3RyYWlu
Rm9yTWFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAppbmRleCBhMzVlNWMyLi41ZjI2NTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0xNjEsNyArMTYxLDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybiB0aGUgYm91bmRpbmcgYm94IHJlcXVpcmVk
IGZvciBjb21wb3NpdGluZyBsYXllciBhbmQgaXRzIGNoaWxkZXJuLCByZWxhdGl2ZSB0byBhbmNl
c3RvckxheWVyLgogICAgIC8vIElmIGxheWVyQm91bmRpbmdCb3ggaXMgbm90IDAsIG9uIHJldHVy
biBpdCBjb250YWlucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgbGF5ZXIgb25seS4KLSAgICBJ
bnRSZWN0IGNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqLCBjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBjYWxj
dWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiwgY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0OwogCiAgICAgLy8gUmVwYWludCB0aGUgYXBwcm9wcmlh
dGUgbGF5ZXJzIHdoZW4gdGhlIGdpdmVuIFJlbmRlckxheWVyIHN0YXJ0cyBvciBzdG9wcyBiZWlu
ZyBjb21wb3NpdGVkLgogICAgIHZvaWQgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UoUmVuZGVy
TGF5ZXIqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>200105</attachid>
            <date>2013-04-30 06:16:43 -0700</date>
            <delta_ts>2013-04-30 06:16:43 -0700</delta_ts>
            <desc>subpixel-stutter.html</desc>
            <filename>subpixel-stutter.html</filename>
            <type>text/html</type>
            <size>2208</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+CiAgICAjdGVzdCB7IAogICAgICAgIG1hcmdpbjo1cHg7CiAg
ICB9CiAgICAjdGVzdC5jb21wb3NpdGUgPiAuY29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRy
YW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvcGFjaXR5OiAwLjk1OwogICAgfQogICAg
LmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQogICAgLnNoaWZ0
ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibGFjazsKICAgICAgICB3aWR0aDogMTIuNXB4OwogICAgICAgIGhlaWdodDogMTIuNXB4Owog
ICAgfQogICAgI2Rlc2NyaXB0aW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAg
ICAgdG9wOiAyMDBweDsKICAgICAgICB3aWR0aDogNDQwcHg7CiAgICB9Cjwvc3R5bGU+CjwvaGVh
ZD4KPGJvZHk+CjxkaXYgaWQ9dGVzdD4KPC9kaXY+CjxkaXYgaWQ9ZGVzY3JpcHRpb24+ClRlc3Rp
bmcgdGhhdCBwb3NpdGlvbnMgYW5kIG1ldHJpY3Mgb2YgZWxlbWVudHMgYXJlIG5vdCBhZmZlY3Rl
ZCBieSB0aGUgcHJlc2VuY2Ugb2YgYWJzZW5jZSBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4K
PGJyPgpUaGUgdGVzdCBmYWlscyBpZiBhbnkgb2YgdGhlIGJsYWNrIGJveGVzIGFib3ZlIHNoaWZ0
IGFib3V0IG9yIGNoYW5nZSBzaXplLgo8L2Rpdj4KPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHNldHVw
R3JpZChsZWZ0T2Zmc2V0LCB0b3BPZmZzZXQsIGxlZnRGcmFjdGlvbiwgdG9wRnJhY3Rpb24pCiAg
ICB7CiAgICAgICAgdmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwog
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgICAgICAgICBpZiAoaSA9
PSA1KQogICAgICAgICAgICAgICAgdG9wT2Zmc2V0ICs9IDU7CiAgICAgICAgICAgIHZhciBsZWZ0
T2Zmc2V0aiA9IGxlZnRPZmZzZXQ7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7
IGorKykgewogICAgICAgICAgICAgICAgaWYgKGogPT0gNSkKICAgICAgICAgICAgICAgICAgICBs
ZWZ0T2Zmc2V0aiArPSA1OwogICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgICAgdmFyIHNoaWZ0ZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRB
dHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbnRhaW5lcicpOwogICAgICAgICAgICAgICAgc2hpZnRlci5z
ZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3NoaWZ0ZXInKTsKICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5zdHlsZS5sZWZ0ID0gKGxlZnRPZmZzZXRqICsgaiAqIDE2ICsgaSAqIGxlZnRGcmFjdGlvbikg
KyAicHgiCiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCAr
IGkgKiAxNiArIGkgKiB0b3BGcmFjdGlvbikgKyAicHgiCiAgICAgICAgICAgICAgICBzaGlmdGVy
LnN0eWxlLmxlZnQgPSAoNSArIGogKiBsZWZ0RnJhY3Rpb24pICsgInB4IgogICAgICAgICAgICAg
ICAgc2hpZnRlci5zdHlsZS50b3AgPSAoNSArIGogKiB0b3BGcmFjdGlvbikgKyAicHgiCiAgICAg
ICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CiAgICAgICAgICAgICAg
ICB0ZXN0LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CgogICAgZnVuY3Rpb24gc2V0dXBUZXN0KCkKICAgIHsKICAgICAgICAvLyBWZXJ0aWNhbCBz
aGlmdHM6CiAgICAgICAgc2V0dXBHcmlkKDEwLCAxMCwgMCwgMC4xKTsKCiAgICAgICAgLy8gSG9y
aXpvbnRhbCBzaGlmdHM6CiAgICAgICAgc2V0dXBHcmlkKDIwMCwgMTAsIDAuMDUsIDApOwogICAg
fQoKICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0ZXN0JykuY2xhc3NMaXN0LnRvZ2dsZSgnY29tcG9zaXRlJyk7CiAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQocnVuVGVzdCwgMTAwKTsKICAgIH0KCiAgICBzZXR1cFRlc3QoKTsKLy8g
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1blRlc3QsIDIwMDApOwogICAgZG9jdW1lbnQuYm9keS5v
bmxvYWQgPSBydW5UZXN0Owo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200309</attachid>
            <date>2013-05-02 05:24:56 -0700</date>
            <delta_ts>2013-05-02 06:29:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115304-20130502142408.patch</filename>
            <type>text/plain</type>
            <size>35784</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM0Y2RkZGJlOWY3Y2Qz
YmY3ZWMwNTNkNGY0ZTMzNTFlNzhmNWZhOS4uMjc0ZTNhZDNiY2IxOWRlYTFiNzJkNzEzN2U5NTJm
MmMxMjljN2ExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA1LTAyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgorCisgICAgICAgIFJF
R1JFU1NJT04oU1VCUElYRUxfTEFZT1VUKSBDb21wb3NpdGVkIGxheWVycyBjYW4gY2F1c2Ugb25l
IHBpeGVsIHNoaWZ0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE1MzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWNjZWxlcmF0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBibG9ja3MgYXQgc3VicGl4ZWwgb2Zm
c2V0cyB0byBzaGlmdCBiZWNhdXNlCisgICAgICAgIGFjY3VtdWxhdGVkIHN1YnBpeGVsIG9mZnNl
dHMgYXJlIGxvc3QgYmV0d2VlbiBlYWNoIGxheWVycy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IGxheW91dCBib3VuZHMgYXJlIG5vdyBjYWxjdWxhdGVkIGluIExheW91dFVuaXRzLCBhbmQgdGhl
aXIKKyAgICAgICAgc3VicGl4ZWwgb2Zmc2V0IHVzZWQgdG8gZW5zdXJlIGNvcnJlY3QgcGl4ZWwg
c25hcHBpbmcgb2YgdGhlIGFjY2VsZXJhdGVkCisgICAgICAgIGxheWVyIGl0c2VsZiwgYW5kIHBh
c3NlZCBvbiB0byB0aGUgbGF5b3V0IG9mIGl0cyBjb250ZW50LgorCisgICAgICAgIFRlc3Q6IGZh
c3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy5odG1sCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OnN1YnBpeGVsQWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OnNldFN1YnBpeGVsQWNjdW11bGF0aW9uKToKKyAgICAgICAgKEdyYXBoaWNz
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRQb2ludDo6ZnJhY3Rpb24pOgorICAgICAgICAoTGF5b3V0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChSZW5kZXJMYXll
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdldFJl
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBo
aWNzTGF5ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnJlc2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6Y29udGVudHNCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpiYWNrZ3JvdW5kQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnNldENvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuaDoKKyAgICAgICAgKFJlbmRlckxheWVyQmFja2luZyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxvZ0xheWVySW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEzLTA1LTAxICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgdGV4dC1jb21iaW5lOiBob3Jpem9udGFsIGRvZXMg
bm90IHdvcmsgcHJvcGVybHkgZm9yIHNvbWUgZm9udHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCA4OWVlODU4ZTJh
YTQwZDVkZTcwYzE3M2U5MWQ5MjM3MTk4NDE0MjMzLi5iNTRkY2E5N2NlMDU3MTgwZjE3YzRlMTVm
ODVjOThlNGMwZmYyMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6
YnVpbGRPYmplY3RGbwogICAgICAgICAuc2V0Tm9kZUlkKGlkRm9yTm9kZShlcnJvclN0cmluZywg
bm9kZSkpCiAgICAgICAgIC5zZXRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKSkKICAgICAgICAg
LnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpKQotICAgICAg
ICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoYmFja2luZy0+Y29t
cG9zaXRlZEJvdW5kcygpKSkKKyAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMoYnVpbGRPYmpl
Y3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygp
KSkpCiAgICAgICAgIC5zZXRQYWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVw
YWludENvdW50KCkpOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93SG9zdCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApp
bmRleCBiMGVkYWNlM2U2NGFhZTdiYTgyYzUxMmUyZjUzMmRlN2JmNGJkNWFjLi45ODRjYjc3Zjlh
ZTRmZjllY2Q4ZjU3NjNjZmQ2Y2E2ODQ5MzVhZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAtMzE1LDEzICszMTUsMTMg
QEAgdm9pZCBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogdm9pZCBHcmFwaGljc0xheWVyOjpwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCiB7CiAgICAgaWYgKG1f
Y2xpZW50KSB7Ci0gICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gb2Zmc2V0RnJvbVJlbmRlcmVy
KCk7CisgICAgICAgIEludFNpemUgb2Zmc2V0ID0gb2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAgICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKC1vZmZzZXQpOwogCi0gICAgICAgIExheW91dFJlY3QgY2xp
cFJlY3QoY2xpcCk7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QoY2xpcCk7CiAgICAgICAgIGNs
aXBSZWN0Lm1vdmUob2Zmc2V0KTsKIAotICAgICAgICBtX2NsaWVudC0+cGFpbnRDb250ZW50cyh0
aGlzLCBjb250ZXh0LCBtX3BhaW50aW5nUGhhc2UsIHBpeGVsU25hcHBlZEludFJlY3QoY2xpcFJl
Y3QpKTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50Q29udGVudHModGhpcywgY29udGV4dCwgbV9w
YWludGluZ1BoYXNlLCBjbGlwUmVjdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggOTc5YzkzZTdlMWE3MDQ5
NDdjZGI3ZTI0YzJjZDQ3OWRiMTczOTBjOS4uMmFlOWYwZDhiNmY3ZjllZjkyYjY3NzZlYzIxMzNi
MzY0M2YzMzFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaApAQCAtMjUyLDYgKzI1Miw5IEBAIHB1YmxpYzoKICAgICBJbnRTaXplIG9m
ZnNldEZyb21SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbVJlbmRlcmVyOyB9
CiAgICAgdm9pZCBzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgSW50U2l6ZSYsIFNob3VsZFNl
dE5lZWRzRGlzcGxheSA9IFNldE5lZWRzRGlzcGxheSk7CiAKKyAgICBMYXlvdXRTaXplIHN1YnBp
eGVsQWNjdW11bGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdWJwaXhlbEFjY3VtdWxhdGlvbjsg
fQorICAgIHZvaWQgc2V0U3VicGl4ZWxBY2N1bXVsYXRpb24oY29uc3QgTGF5b3V0U2l6ZSYgc3Vi
cGl4ZWxBY2N1bXVsYXRpb24pIHsgbV9zdWJwaXhlbEFjY3VtdWxhdGlvbiA9IHN1YnBpeGVsQWNj
dW11bGF0aW9uOyB9CisKICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIGxheWVyICh0aGUgbG9j
YXRpb24gb2YgaXRzIHRvcC1sZWZ0IGNvcm5lciBpbiBpdHMgcGFyZW50KQogICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcG9zaXRpb24g
PSBwOyB9CkBAIC00OTgsNyArNTAxLDEwIEBAIHByb3RlY3RlZDoKICAgICAKICAgICAvLyBPZmZz
ZXQgZnJvbSB0aGUgb3duaW5nIHJlbmRlcmVyCiAgICAgSW50U2l6ZSBtX29mZnNldEZyb21SZW5k
ZXJlcjsKLSAgICAKKworICAgIC8vIEFjY3VtdWxhdGVkIHN1YnBpeGVsIGVycm9yIHRvIGJlIHVz
ZWQgYnkgc3VicGl4ZWwgbGF5b3V0IG9mIHRoZSBjb250ZW50LgorICAgIExheW91dFNpemUgbV9z
dWJwaXhlbEFjY3VtdWxhdGlvbjsKKwogICAgIC8vIFBvc2l0aW9uIGlzIHJlbGF0aXZlIHRvIHRo
ZSBwYXJlbnQgR3JhcGhpY3NMYXllcgogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50M0QgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRQb2ludC5oCmluZGV4IDY0N2E2NTFiZWFmYjNjMDE2ZDgyODI5NjkwNzU2
NTNhMWE2NDQzY2UuLjBhMTU4NGUxMDhmNjIzYzJkNjg0NmY1ODNlNjFkZjFlOGIxZTZiZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaApAQCAt
OTAsNiArOTAsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQobV95LCBt
X3gpOwogICAgIH0KIAorICAgIExheW91dFBvaW50IGZyYWN0aW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBMYXlvdXRQb2ludChtX3guZnJhY3Rpb24oKSwgbV95LmZyYWN0aW9uKCkp
OworICAgIH0KKwogI2lmIFBMQVRGT1JNKFFUKQogICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNv
bnN0IFFQb2ludCYpOwogICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQb2ludEYmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDU0OTNmMGNkYzhk
NWIyZjllZDM2YjBiYjM2MmY2MGZiYjY1ZjlkMzIuLjgxZThlNmVhNWUyNTk0ODY4YTEwM2QxNGMw
NmY2ODYwODg3YjQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtMjg3Nyw5ICsyODc3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5n
aW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKTsKLSAgICAKICAgICBQYWludFBoYXNlIHBoYXNlID0gcGFpbnRJbmZvLnBoYXNl
OwotCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAg
Ly8gRklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJh
Y2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAgIC8vIHBhaW50cyB0
aGUgcm9vdCdzIGJhY2tncm91bmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCBjYzZhOWM5ODk2ZTQzNmQ4YjNhZGYyYWFhNDM0YmI3MDk1NzE5YjdmLi5kY2Vj
M2I4ZmRjNGFkMTZiNGJiMTg2YTJiZDFlYjU3MDFmMmFiOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM3MTcsNyArMzcxNyw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheWVyUGFpbnRpCiAgICAgTGF5b3V0UG9pbnQgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgY29udmVy
dFRvTGF5ZXJDb29yZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0RnJvbVJvb3QpOwog
Ci0gICAgSW50UmVjdCByb290UmVsYXRpdmVCb3VuZHM7CisgICAgTGF5b3V0UmVjdCByb290UmVs
YXRpdmVCb3VuZHM7CiAgICAgYm9vbCByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IGZhbHNl
OwogCiAgICAgYm9vbCBkaWRRdWFudGl6ZUZvbnRzID0gdHJ1ZTsKQEAgLTUzMzksMTQgKzUzMzks
MTQgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gocm9vdCgpKSk7CiB9CiAK
LUludFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxh
eWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIENh
bGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxh
eWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5k
c0ZsYWdzIGZsYWdzKSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgaW1wcm92ZWQgdG8gZG8gYSBjaGVjayBsaWtl
IGhhc1Zpc2libGVOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRMYXllcnMoKSAoYnVnIDkyNTgwKS4K
ICAgICBpZiAoKGZsYWdzICYgRXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzKSAmJiB0aGlzICE9IGFu
Y2VzdG9yTGF5ZXIgJiYgIWhhc1Zpc2libGVDb250ZW50KCkgJiYgIWhhc1Zpc2libGVEZXNjZW5k
YW50KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KCk7CiAKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJl
bmRlcmVyKCk7CiAKQEAgLTUzODYsNyArNTM4Niw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25z
CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBhbmNlc3RvclJlbE9mZnNldDsKICAgICAgICAgICAg
IGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2VzdG9yUmVsT2Zmc2V0KTsK
ICAgICAgICAgICAgIGxvY2FsQ2xpcFJlY3QubW92ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsKLSAg
ICAgICAgICAgIHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGxvY2FsQ2xpcFJlY3QpOworICAg
ICAgICAgICAgcmV0dXJuIGxvY2FsQ2xpcFJlY3Q7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUz
OTcsNyArNTM5Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zCiAKICAgICBpZiAoUmVuZGVy
TGF5ZXIqIHJlZmxlY3Rpb24gPSByZWZsZWN0aW9uTGF5ZXIoKSkgewogICAgICAgICBpZiAoIXJl
ZmxlY3Rpb24tPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGNoaWxkVW5p
b25Cb3VuZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNj
ZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0g
cmVmbGVjdGlvbi0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdz
KTsKICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTQxMyw3ICs1NDEzLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNv
bnMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKICAg
ICAgICAgICAgIGlmIChmbGFncyAmIEluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1
ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3QgY2hpbGRV
bmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNj
ZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5k
cyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50Rmxh
Z3MpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NDI0LDcgKzU0MjQsNyBAQCBJbnRSZWN0
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5j
ZXN0b3JMYXllciwgY29ucwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXpl
OyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxp
c3QtPmF0KGkpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNj
ZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
SW50UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRz
KHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBj
aGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAs
IGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hp
bGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU0MzUsNyArNTQz
NSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJl
bmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVy
ID0gbm9ybWFsRmxvd0xpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVk
ZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgSW50UmVjdCBjdXJBYnNCb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRl
TGF5ZXJCb3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0
aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVu
aXRlKGN1ckFic0JvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU0NjIsNyAr
NTQ2Miw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zCiAgICAgICAgIGNvbnZlcnRUb0xheWVy
Q29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2VzdG9yUmVsT2Zmc2V0KTsKICAgICB1bmlvbkJvdW5k
cy5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgIAotICAgIHJldHVybiBwaXhlbFNuYXBw
ZWRJbnRSZWN0KHVuaW9uQm91bmRzKTsKKyAgICByZXR1cm4gdW5pb25Cb3VuZHM7CiB9CiAKIHZv
aWQgUmVuZGVyTGF5ZXI6OmNsZWFyQ2xpcFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoQ2xpcFJl
Y3RzVHlwZSB0eXBlVG9DbGVhcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggOTI1YWIwMDEzZDQ2ZjJlYzAyYTY5NDI3OGMzMWZmNTgxZGFjMjMyMS4uMzEwYWM3OTJi
NDY5MTA4MGM2ZTRiOGUzNTYwZWFmOTM3MDU5MzllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKQEAgLTcwMSw3ICs3MDEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IC8vIENhbiBwYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIEludFJlY3QgY2FsY3Vs
YXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExh
eW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3Mg
PSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncykgY29uc3Q7CisgICAgTGF5b3V0UmVj
dCBjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
Y29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCwgQ2FsY3VsYXRlTGF5ZXJCb3Vu
ZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKICAgICAK
ICAgICAvLyBXQVJOSU5HOiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBvZmZzZXQgZm9yIHRoZSBw
YXJlbnQgYXMgdGhpcyBpcyB3aGF0IHVwZGF0ZUxheWVyUG9zaXRpb25zIGV4cGVjdHMuCiAgICAg
TGF5b3V0UG9pbnQgY29tcHV0ZU9mZnNldEZyb21Sb290KGJvb2wmIGhhc0xheWVyT2Zmc2V0KSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKaW5kZXggMGY0MzQxNDI5N2RjM2FlYWE5NDkyMmVhNTk2Y2YzMTcxNGRlODk3Zi4uY2M2YTQ1
YjAzNjNiNzBlYjljY2NiNzJlZmQwN2ZmOWE3MmQyZmYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTQyNiw3ICs0MjYsNyBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMoKSBjb25z
dAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiB7
Ci0gICAgSW50UmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0b3IoKS0+Y2FsY3VsYXRlQ29tcG9z
aXRlZEJvdW5kcyhtX293bmluZ0xheWVyLCBtX293bmluZ0xheWVyKTsKKyAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRzID0gY29tcG9zaXRvcigpLT5jYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKG1f
b3duaW5nTGF5ZXIsIG1fb3duaW5nTGF5ZXIpOwogCiAgICAgLy8gQ2xpcCB0byB0aGUgc2l6ZSBv
ZiB0aGUgZG9jdW1lbnQgb3IgZW5jbG9zaW5nIG92ZXJmbG93LXNjcm9sbCBsYXllci4KICAgICAv
LyBJZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGlzIHRyYW5zZm9ybWVkLCB3ZSBjYW4ndCBjdXJyZW50
bHkgY29tcHV0ZSB0aGUgY29ycmVjdCByZWN0IHRvIGludGVyc2VjdCB3aXRoLgpAQCAtNDQ4LDcg
KzQ0OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRz
KCkKICAgICAgICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVy
LCBkZWx0YSk7CiAgICAgICAgIGNsaXBwaW5nQm91bmRzLm1vdmUoLWRlbHRhLngoKSwgLWRlbHRh
LnkoKSk7CiAKLSAgICAgICAgbGF5ZXJCb3VuZHMuaW50ZXJzZWN0KHBpeGVsU25hcHBlZEludFJl
Y3QoY2xpcHBpbmdCb3VuZHMpKTsKKyAgICAgICAgbGF5ZXJCb3VuZHMuaW50ZXJzZWN0KGNsaXBw
aW5nQm91bmRzKTsKICAgICAgICAgbV9ib3VuZHNDb25zdHJhaW5lZEJ5Q2xpcHBpbmcgPSB0cnVl
OwogICAgIH0gZWxzZQogICAgICAgICBtX2JvdW5kc0NvbnN0cmFpbmVkQnlDbGlwcGluZyA9IGZh
bHNlOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVB
ZnRlcldpZGdldFJlc2l6ZSgpCiAgICAgaWYgKHJlbmRlcmVyKCktPmlzUmVuZGVyUGFydCgpKSB7
CiAgICAgICAgIGlmIChSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IodG9SZW5kZXJQYXJ0
KHJlbmRlcmVyKCkpKSkgewogICAgICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdE
aWRDaGFuZ2VTaXplKCk7Ci0gICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0Rp
ZENoYW5nZUxvY2F0aW9uKGNvbnRlbnRzQm94KCkubG9jYXRpb24oKSk7CisgICAgICAgICAgICBp
bm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZUxvY2F0aW9uKGZsb29yZWRJbnRQb2lu
dChjb250ZW50c0JveCgpLmxvY2F0aW9uKCkpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTY0
NywxMiArNjQ3LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xh
eWVyR2VvbWV0cnkoKQogICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxT
bmFwcGVkSW50UmVjdChjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+Y29tcG9zaXRlZEJvdW5kcygp
KTsKICAgICB9CiAKLSAgICBJbnRSZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBwaXhlbFNu
YXBwZWRJbnRSZWN0KGNvbXBvc2l0ZWRCb3VuZHMoKSk7Ci0KLSAgICBJbnRSZWN0IHJlbGF0aXZl
Q29tcG9zaXRpbmdCb3VuZHMobG9jYWxDb21wb3NpdGluZ0JvdW5kcyk7Ci0gICAgSW50UG9pbnQg
ZGVsdGE7Ci0gICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29y
ZHMoY29tcEFuY2VzdG9yLCBkZWx0YSk7CisgICAgTGF5b3V0UmVjdCBsb2NhbENvbXBvc2l0aW5n
Qm91bmRzID0gY29tcG9zaXRlZEJvdW5kcygpOworICAgIExheW91dFJlY3QgcmVsYXRpdmVDb21w
b3NpdGluZ0JvdW5kcyhsb2NhbENvbXBvc2l0aW5nQm91bmRzKTsKKyAgICBMYXlvdXRQb2ludCBk
ZWx0YTsKKyAgICBtX293bmluZ0xheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0
b3IsIGRlbHRhKTsKICAgICByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShkZWx0YSk7
CisgICAgLy8gV2UgbXVzdCBtb3ZlIHRoZSBib3VuZHMgYnkgdGhlIHN1YnBpeGVsIHBhcnQgb2Yg
ZGVsdGEsCisgICAgLy8gc28gdGhhdCB0aGV5IGNhbiBiZSBwaXhlbCBzbmFwcGVkIHRvIGFjdHVh
bCBwaXhlbHMuCisgICAgbG9jYWxDb21wb3NpdGluZ0JvdW5kcy5tb3ZlQnkoZGVsdGEuZnJhY3Rp
b24oKSk7CisKKyAgICBJbnRQb2ludCBwaXhlbERlbHRhID0gZmxvb3JlZEludFBvaW50KGRlbHRh
KTsKKyAgICBJbnRSZWN0IGxvY2FsUGl4ZWxDb21wb3NpdGluZ0JvdW5kcyA9IHBpeGVsU25hcHBl
ZEludFJlY3QobG9jYWxDb21wb3NpdGluZ0JvdW5kcyk7CisgICAgSW50UmVjdCByZWxhdGl2ZVBp
eGVsQ29tcG9zaXRpbmdCb3VuZHMgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KHJlbGF0aXZlQ29tcG9z
aXRpbmdCb3VuZHMpOwogCiAgICAgSW50UG9pbnQgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9u
OwogICAgIGlmIChjb21wQW5jZXN0b3IgJiYgY29tcEFuY2VzdG9yLT5iYWNraW5nKCktPmhhc0Ns
aXBwaW5nTGF5ZXIoKSkgewpAQCAtNjgzLDI1ICs2ODksMjYgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgICAgIG1fYW5jZXN0b3JD
bGlwcGluZ0xheWVyLT5zZXRTaXplKHBhcmVudENsaXBSZWN0LnNpemUoKSk7CiAKICAgICAgICAg
Ly8gYmFja2dyb3VuZFJlY3QgaXMgcmVsYXRpdmUgdG8gY29tcEFuY2VzdG9yLCBzbyBzdWJ0cmFj
dCBkZWx0YVgvZGVsdGFZIHRvIGdldCBiYWNrIHRvIGxvY2FsIGNvb3Jkcy4KLSAgICAgICAgbV9h
bmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihwYXJlbnRDbGlwUmVj
dC5sb2NhdGlvbigpIC0gZGVsdGEpOworICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+
c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkgLSBwaXhlbERl
bHRhKTsKIAogICAgICAgICAvLyBUaGUgcHJpbWFyeSBsYXllciBpcyB0aGVuIHBhcmVudGVkIGlu
LCBhbmQgcG9zaXRpb25lZCByZWxhdGl2ZSB0byB0aGlzIGNsaXBwaW5nIGxheWVyLgogICAgICAg
ICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigp
OwogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBjb250ZW50c1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0
aW5nQm91bmRzLnNpemUoKTsKKyAgICBGbG9hdFNpemUgY29udGVudHNTaXplID0gcmVsYXRpdmVQ
aXhlbENvbXBvc2l0aW5nQm91bmRzLnNpemUoKTsKICAgICAKICAgICBpZiAobV9jb250ZW50c0Nv
bnRhaW5tZW50TGF5ZXIpIHsKICAgICAgICAgbV9jb250ZW50c0NvbnRhaW5tZW50TGF5ZXItPnNl
dFByZXNlcnZlczNEKHByZXNlcnZlczNEKTsKLSAgICAgICAgbV9jb250ZW50c0NvbnRhaW5tZW50
TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5s
b2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uKSk7CisgICAgICAgIG1fY29u
dGVudHNDb250YWlubWVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJlbGF0aXZlUGl4
ZWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExvY2F0
aW9uKSk7CiAgICAgICAgIC8vIFVzZSB0aGUgc2FtZSBzaXplIGFzIG1fZ3JhcGhpY3NMYXllciBz
byB0cmFuc2Zvcm1zIGJlaGF2ZSBjb3JyZWN0bHkuCiAgICAgICAgIG1fY29udGVudHNDb250YWlu
bWVudExheWVyLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAgICAgIGdyYXBoaWNzTGF5ZXJQ
YXJlbnRMb2NhdGlvbiA9IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKTsKKyAg
ICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uID0gcmVsYXRpdmVQaXhlbENvbXBvc2l0
aW5nQm91bmRzLmxvY2F0aW9uKCk7CiAgICAgfQogCi0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAt
IGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwotICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
T2Zmc2V0RnJvbVJlbmRlcmVyKHRvSW50U2l6ZShsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0
aW9uKCkpKTsKLSAgICAKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9p
bnQocmVsYXRpdmVQaXhlbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb24pKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE9mZnNldEZyb21S
ZW5kZXJlcih0b0ludFNpemUobG9jYWxQaXhlbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkp
KTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFN1YnBpeGVsQWNjdW11bGF0aW9uKHRvTGF5b3V0
U2l6ZShkZWx0YS5mcmFjdGlvbigpKSk7CisKICAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpOwogICAgIGlmIChvbGRTaXplICE9IGNvbnRlbnRzU2l6ZSkgewog
ICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUoY29udGVudHNTaXplKTsKQEAgLTcyMSw3
ICs3MjgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KCkKICAgICBJbnRSZWN0IGNsaXBwaW5nQm94OwogICAgIGlmIChHcmFwaGljc0xheWVy
KiBjbGlwTGF5ZXIgPSBjbGlwcGluZ0xheWVyKCkpIHsKICAgICAgICAgY2xpcHBpbmdCb3ggPSBj
bGlwQm94KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKLSAgICAgICAgY2xpcExheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0
aW5nQm91bmRzLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgY2xpcExheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbFBpeGVsQ29tcG9zaXRpbmdC
b3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBjbGlwTGF5ZXItPnNldFNpemUoY2xpcHBpbmdC
b3guc2l6ZSgpKTsKICAgICAgICAgY2xpcExheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIodG9J
bnRTaXplKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkpKTsKICAgICB9CkBAIC03MzksNyArNzQ2LDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgp
CiAgICAgICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIo
KSktPnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKTsKIAogICAgICAgICAvLyBHZXQgbGF5b3V0
IGJvdW5kcyBpbiB0aGUgY29vcmRzIG9mIGNvbXBBbmNlc3RvciB0byBtYXRjaCByZWxhdGl2ZUNv
bXBvc2l0aW5nQm91bmRzLgotICAgICAgICBJbnRSZWN0IGxheWVyQm91bmRzID0gSW50UmVjdChk
ZWx0YSwgYm9yZGVyQm94LnNpemUoKSk7CisgICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMocGl4
ZWxEZWx0YSwgYm9yZGVyQm94LnNpemUoKSk7CiAKICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRp
ZXMgdGhhdCBkZXBlbmQgb24gbGF5ZXIgZGltZW5zaW9ucwogICAgICAgICBGbG9hdFBvaW50M0Qg
dHJhbnNmb3JtT3JpZ2luID0gY29tcHV0ZVRyYW5zZm9ybU9yaWdpbihib3JkZXJCb3gpOwpAQCAt
OTQ5LDcgKzk1Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhp
ZXJhcmNoeSgpCiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXNldENvbnRlbnRzUmVjdCgp
CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNCb3goKTsKKyAgICBJbnRSZWN0IHJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzQm94KCkpOwogICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNSZWN0KHJlY3QpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVu
dHNUaWxlU2l6ZShJbnRTaXplKCkpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNU
aWxlUGhhc2UoSW50UG9pbnQoKSk7CkBAIC0xNzcwLDI0ICsxNzc3LDI0IEBAIEZsb2F0UG9pbnQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGVyc3BlY3RpdmVPcmlnaW4oY29uc3QgSW50UmVj
dCYgYm9yZGVyQm94CiB9CiAKIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIHRvcC1sZWZ0
IG9mIHRoaXMgY29tcG9zaXRpbmcgbGF5ZXIgYXQgd2hpY2ggdGhlIHJlbmRlcmVyJ3MgY29udGVu
dHMgYXJlIHBhaW50ZWQuCi1JbnRTaXplIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudE9mZnNl
dEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBJ
bnRTaXplKC1tX2NvbXBvc2l0ZWRCb3VuZHMueCgpLCAtbV9jb21wb3NpdGVkQm91bmRzLnkoKSk7
CisgICAgcmV0dXJuIExheW91dFNpemUoLW1fY29tcG9zaXRlZEJvdW5kcy54KCksIC1tX2NvbXBv
c2l0ZWRCb3VuZHMueSgpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRl
bnRzQm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50c0Jv
eCgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgSW50UmVj
dCBjb250ZW50c1JlY3Q7CisgICAgTGF5b3V0UmVjdCBjb250ZW50c1JlY3Q7CiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKICAgICAgICAgUmVuZGVy
VmlkZW8qIHZpZGVvUmVuZGVyZXIgPSB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpOwogICAgICAg
ICBjb250ZW50c1JlY3QgPSB2aWRlb1JlbmRlcmVyLT52aWRlb0JveCgpOwogICAgIH0gZWxzZQog
I2VuZGlmCi0gICAgICAgIGNvbnRlbnRzUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QodG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCkpOworICAgICAgICBjb250ZW50c1Jl
Y3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVudEJveFJlY3QoKTsKIAogICAgIGNv
bnRlbnRzUmVjdC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpKTsKICAgICBy
ZXR1cm4gY29udGVudHNSZWN0OwpAQCAtMTgxNSw5ICsxODIyLDkgQEAgSW50UmVjdCBSZW5kZXJM
YXllckJhY2tpbmc6OmJhY2tncm91bmRCb3goKSBjb25zdAogICAgIGlmICghcmVuZGVyZXIoKS0+
aXNCb3goKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgcGl4ZWxT
bmFwcGVkQmFja2dyb3VuZEJveCA9IHBpeGVsU25hcHBlZEludFJlY3QoYmFja2dyb3VuZFJlY3RG
b3JCb3godG9SZW5kZXJCb3gocmVuZGVyZXIoKSkpKTsKLSAgICBwaXhlbFNuYXBwZWRCYWNrZ3Jv
dW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkpOwotICAgIHJldHVy
biBwaXhlbFNuYXBwZWRCYWNrZ3JvdW5kQm94OworICAgIExheW91dFJlY3QgYmFja2dyb3VuZEJv
eCA9IGJhY2tncm91bmRSZWN0Rm9yQm94KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKKyAgICBi
YWNrZ3JvdW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkpOworICAg
IHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGJhY2tncm91bmRCb3gpOwogfQogCiBHcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllckJhY2tpbmc6OnBhcmVudEZvclN1YmxheWVycygpIGNvbnN0CkBA
IC0xOTYzLDcgKzE5NzAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5
ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBwYWlu
dEZsYWdzIHw9IFJlbmRlckxheWVyOjpQYWludExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91
bmQ7CiAgICAgCiAgICAgLy8gRklYTUU6IEdyYXBoaWNzTGF5ZXJzIG5lZWQgYSB3YXkgdG8gc3Bs
aXQgZm9yIFJlbmRlclJlZ2lvbnMuCi0gICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZv
IHBhaW50aW5nSW5mbyhtX293bmluZ0xheWVyLCBwYWludERpcnR5UmVjdCwgcGFpbnRCZWhhdmlv
ciwgTGF5b3V0U2l6ZSgpKTsKKyAgICBMYXlvdXRTaXplIHN1YlBpeGVsQWNjdW11bGF0aW9uID0g
Z3JhcGhpY3NMYXllci0+c3VicGl4ZWxBY2N1bXVsYXRpb24oKTsKKyAgICBSZW5kZXJMYXllcjo6
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKG1fb3duaW5nTGF5ZXIsIHBhaW50RGlydHlS
ZWN0LCBwYWludEJlaGF2aW9yLCBzdWJQaXhlbEFjY3VtdWxhdGlvbik7CiAgICAgbV9vd25pbmdM
YXllci0+cGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CiAKICAgICBpZiAobV9vd25pbmdMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKCkpCkBAIC0yMDA0LDcgKzIwMTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaAogICAg
ICAgICAvLyBUaGUgZGlydHlSZWN0IGlzIGluIHRoZSBjb29yZHMgb2YgdGhlIHBhaW50aW5nIHJv
b3QuCiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0ID0gY2xpcDsKICAgICAgICAgaWYgKCEocGFp
bnRpbmdQaGFzZSAmIEdyYXBoaWNzTGF5ZXJQYWludE92ZXJmbG93Q29udGVudHMpKQotICAgICAg
ICAgICAgZGlydHlSZWN0LmludGVyc2VjdChjb21wb3NpdGVkQm91bmRzKCkpOworICAgICAgICAg
ICAgZGlydHlSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KGNvbXBvc2l0ZWRCb3VuZHMo
KSkpOwogCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHJvb3QgYXMgZm9yIGhp
dCB0ZXN0aW5nLCBiZWNhdXNlIGJvdGggbWV0aG9kcyBjYW4gY29tcHV0ZSBhbmQgY2FjaGUgY2xp
cFJlY3RzLgogICAgICAgICBwYWludEludG9MYXllcihncmFwaGljc0xheWVyLCAmY29udGV4dCwg
ZGlydHlSZWN0LCBQYWludEJlaGF2aW9yTm9ybWFsLCBwYWludGluZ1BoYXNlKTsKQEAgLTIyNTYs
MTIgKzIyNjQsMTIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlc3VtZUFuaW1hdGlvbnMo
KQogICAgIG1fZ3JhcGhpY3NMYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwogfQogCi1JbnRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CitMYXlvdXRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fY29tcG9zaXRlZEJvdW5kczsKIH0KIAotdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNl
dENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgSW50UmVjdCYgYm91bmRzKQordm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQog
ewogICAgIG1fY29tcG9zaXRlZEJvdW5kcyA9IGJvdW5kczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCA2YzRjODdhZDE4NzM2Y2VhNzcy
ZmVlMTUxYzQ5MTI3NzNlYzIxYWU2Li41NzUwYmU4MGFiMTE0ZjcwYmRjMTUxYmYyYzdkODY0MDdk
MWEyMTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oCkBAIC0xNDEsOCArMTQxLDggQEAgcHVibGljOgogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlv
bnMoZG91YmxlIHRpbWUgPSAwKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKIAotICAg
IEludFJlY3QgY29tcG9zaXRlZEJvdW5kcygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcG9zaXRl
ZEJvdW5kcyhjb25zdCBJbnRSZWN0Jik7CisgICAgTGF5b3V0UmVjdCBjb21wb3NpdGVkQm91bmRz
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IExheW91dFJlY3Qm
KTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKTsKICAgICAKICAgICB2b2lkIHVw
ZGF0ZUFmdGVyV2lkZ2V0UmVzaXplKCk7CkBAIC0xNzUsNyArMTc1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB2ZXJpZnlOb3RQYWludGluZygpOwogI2VuZGlmCiAKLSAgICBJbnRSZWN0
IGNvbnRlbnRzQm94KCkgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBjb250ZW50c0JveCgpIGNvbnN0
OwogICAgIEludFJlY3QgYmFja2dyb3VuZEJveCgpIGNvbnN0OwogICAgIAogICAgIC8vIEZvciBp
bmZvcm1hdGl2ZSBwdXJwb3NlcyBvbmx5LgpAQCAtMjI5LDcgKzIyOSw3IEBAIHByaXZhdGU6CiAK
ICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxh
eWVyKCkgY29uc3Q7CiAgICAgCi0gICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5n
TGF5ZXIoKSBjb25zdDsKKyAgICBMYXlvdXRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdM
YXllcigpIGNvbnN0OwogICAgIC8vIFJlc3VsdCBpcyB0cmFuc2Zvcm0gb3JpZ2luIGluIHBpeGVs
cy4KICAgICBGbG9hdFBvaW50M0QgY29tcHV0ZVRyYW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0
JiBib3JkZXJCb3gpIGNvbnN0OwogICAgIC8vIFJlc3VsdCBpcyBwZXJzcGVjdGl2ZSBvcmlnaW4g
aW4gcGl4ZWxzLgpAQCAtMjk3LDcgKzI5Nyw3IEBAIHByaXZhdGU6CiAKICAgICB1aW50NjRfdCBt
X3Njcm9sbExheWVySUQ7CiAKLSAgICBJbnRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKKyAgICBM
YXlvdXRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJ
bmZsYXRlZEJvdW5kczsgLy8gYm91bmRzIGhhZCB0byBiZSBtYWRlIG5vbi16ZXJvIHRvIG1ha2Ug
dHJhbnNmb3JtLW9yaWdpbiB3b3JrCiAgICAgYm9vbCBtX2JvdW5kc0NvbnN0cmFpbmVkQnlDbGlw
cGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKaW5kZXggYTNhNDkxMWMzYTk1MTA2NjM5YmQ2NGQ1NzY2YTQyMmE1NDU2MmMyNy4u
YzRhN2Y1MDA5MzcyMzFjZTQ3YWExYTk3OWUzOTUyMDcwOGVlOGQ4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTYxOCw3
ICs2MTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bG9nTGF5ZXJJbmZvKGNvbnN0
IFJlbmRlckxheWVyKiBsYXllciwgaW50IGRlcHRoKQogICAgICAgICBtX3NlY29uZGFyeUJhY2tp
bmdTdG9yZUJ5dGVzICs9IGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCk7CiAg
ICAgfQogCi0gICAgTE9HKENvbXBvc2l0aW5nLCAiJSpwICVkeCVkICUuMmZLQiAlcyglcykgJXNc
biIsIDEyICsgZGVwdGggKiAyLCBsYXllciwgYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpLndp
ZHRoKCksIGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKS5oZWlnaHQoKSwKKyAgICBMT0coQ29t
cG9zaXRpbmcsICIlKnAgJWR4JWQgJS4yZktCICVzKCVzKSAlc1xuIiwgMTIgKyBkZXB0aCAqIDIs
IGxheWVyLCBiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkud2lkdGgoKS5yb3VuZCgpLCBiYWNr
aW5nLT5jb21wb3NpdGVkQm91bmRzKCkuaGVpZ2h0KCkucm91bmQoKSwKICAgICAgICAgYmFja2lu
Zy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSAvIDEwMjQsCiAgICAgICAgIGJhY2tpbmct
PmdyYXBoaWNzTGF5ZXIoKS0+Y29udGVudHNPcGFxdWUoKSA/ICJvcGFxdWUgIiA6ICIiLAogICAg
ICAgICBsb2dSZWFzb25zRm9yQ29tcG9zaXRpbmcobGF5ZXIpLCBsYXllci0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOwpAQCAtNzczLDEwICs3NzMsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcGFpbnRJbkNvbXBvc2l0ZWRBbmNlc3RvcihSZW5kZXJMYXllciogbGF5ZXIsIGNvbnMK
IAogLy8gVGhlIGJvdW5kcyBvZiB0aGUgR3JhcGhpY3NMYXllciBjcmVhdGVkIGZvciBhIGNvbXBv
c2l0aW5nIGxheWVyIGlzIHRoZSB1bmlvbiBvZiB0aGUgYm91bmRzIG9mIGFsbCB0aGUgZGVzY2Vu
ZGFudAogLy8gUmVuZGVyTGF5ZXJzIHRoYXQgYXJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdGVk
IFJlbmRlckxheWVyLgotSW50UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNv
bXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllcikgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW5CZUNv
bXBvc2l0ZWQobGF5ZXIpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogICAgIHJldHVybiBsYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHMo
YW5jZXN0b3JMYXllciwgMCwgUmVuZGVyTGF5ZXI6OkRlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5k
c0ZsYWdzIHwgUmVuZGVyTGF5ZXI6OkV4Y2x1ZGVIaWRkZW5EZXNjZW5kYW50cyB8IFJlbmRlckxh
eWVyOjpEb250Q29uc3RyYWluRm9yTWFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBhMzVlNWMyN2FjMGVlZGE5YmZm
YzI1NWNhYzRkMmVkMWUwZmM0NDU0Li41ZjI2NTVlZmY1ZDIwYTcxMWM0MTMyNWI4OGIxY2MxZDE3
YjNhOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVy
biB0aGUgYm91bmRpbmcgYm94IHJlcXVpcmVkIGZvciBjb21wb3NpdGluZyBsYXllciBhbmQgaXRz
IGNoaWxkZXJuLCByZWxhdGl2ZSB0byBhbmNlc3RvckxheWVyLgogICAgIC8vIElmIGxheWVyQm91
bmRpbmdCb3ggaXMgbm90IDAsIG9uIHJldHVybiBpdCBjb250YWlucyB0aGUgYm91bmRpbmcgYm94
IG9mIHRoaXMgbGF5ZXIgb25seS4KLSAgICBJbnRSZWN0IGNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3Vu
ZHMoY29uc3QgUmVuZGVyTGF5ZXIqLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikg
Y29uc3Q7CisgICAgTGF5b3V0UmVjdCBjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJl
bmRlckxheWVyKiwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0OwogCiAg
ICAgLy8gUmVwYWludCB0aGUgYXBwcm9wcmlhdGUgbGF5ZXJzIHdoZW4gdGhlIGdpdmVuIFJlbmRl
ckxheWVyIHN0YXJ0cyBvciBzdG9wcyBiZWluZyBjb21wb3NpdGVkLgogICAgIHZvaWQgcmVwYWlu
dE9uQ29tcG9zaXRpbmdDaGFuZ2UoUmVuZGVyTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBiMzY5ZTEyMzMzNDc1Y2IzOTJlZDJk
OGNlMDA4NmYzNzkyNTcxMDJlLi5lNmNkNDk3MTM5NzRhMzkzZDZkMjAyNmJlMjNhZDQ1YWM4MjZj
NThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC04OSw2ICs4OSwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBJbnRQb2ludCYgcCkKICAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIs
IiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IExheW91dFJlY3QmIHIpCit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3Vs
ZCBiZSBwcmludGVkIGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5
IHdpdGggcGVydmlvdXMgdGVzdCBleHBlY3RhdGlvbnMuCisgICAgcmV0dXJuIHRzIDw8IHBpeGVs
U25hcHBlZEludFJlY3Qocik7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IExheW91dFBvaW50JiBwKQogewogICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91
bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBpbnRzIGZvciBjb25zaXN0ZW5j
eSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDlkZTM0NTliYWU3ZjNk
ZGI3Yjg2Y2M0YTJkNmZkMTI5MThmZDQyOWYuLmQ2MDc2ZGVjNTIxNTQwNGFjYTNlZjc4MmI2MmIy
NGVlY2VjOGNmMWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wNS0wMiAgQWxsYW4gU2Fu
ZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KKworICAgICAgICBSRUdSRVNT
SU9OKFNVQlBJWEVMX0xBWU9VVCkgQ29tcG9zaXRlZCBsYXllcnMgY2FuIGNhdXNlIG9uZSBwaXhl
bCBzaGlmdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNTMwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLWV4cGVjdGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVk
LWxheWVycy5odG1sOiBBZGRlZC4KKwogMjAxMy0wNS0wMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNo
b2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBFRkwgZ2FyZGVuaW5nLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBvc2l0ZWQt
bGF5ZXJzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4
ZWwtY29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzMxZmY1Y2E1
MTUzNjQ5ZTIyODM4ZmMwOGE0YWQxM2VkMjUyYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLWV4cGVjdGVk
Lmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAjdGVz
dCB7IAorICAgICAgICBtYXJnaW46IDVweDsKKyAgICB9CisgICAgLmNvbnRhaW5lciB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgb3BhY2l0eTogMC45NTsKKyAgICB9Cisg
ICAgLnNoaWZ0ZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3aWR0aDogMTIuNXB4OworICAgICAgICBoZWln
aHQ6IDEyLjVweDsKKyAgICB9CisgICAgLnNoaWZ0ZXI4eDggeworICAgICAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3aWR0
aDogMTYuNXB4OworICAgICAgICBoZWlnaHQ6IDE2LjVweDsKKyAgICB9Cis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPXRlc3Q+Cis8L2Rpdj4KKzxzY3JpcHQ+CisgICAgZnVuY3Rp
b24gc2V0dXBHcmlkMTB4MTAobGVmdE9mZnNldCwgdG9wT2Zmc2V0LCBsZWZ0RnJhY3Rpb24sIHRv
cEZyYWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndGVzdCcpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAg
ICAgICAgICAgIGlmIChpID09IDUpCisgICAgICAgICAgICAgICAgdG9wT2Zmc2V0ICs9IDU7Cisg
ICAgICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCAxMDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gNSkK
KyAgICAgICAgICAgICAgICAgICAgbGVmdE9mZnNldGogKz0gNTsKKyAgICAgICAgICAgICAgICB2
YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAg
ICAgICAgdmFyIHNoaWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb250YWluZXInKTsK
KyAgICAgICAgICAgICAgICBzaGlmdGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2hpZnRlcicp
OworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gKGxlZnRPZmZzZXRqICsg
aiAqIDE2ICsgaSAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgY29udGFp
bmVyLnN0eWxlLnRvcCA9ICh0b3BPZmZzZXQgKyBpICogMTYgKyBpICogdG9wRnJhY3Rpb24pICsg
InB4IgorICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5bGUubGVmdCA9ICg1ICsgaiAqIGxlZnRG
cmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS50b3AgPSAoNSAr
IGogKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKHNoaWZ0ZXIpOworICAgICAgICAgICAgICAgIHRlc3QuYXBwZW5kQ2hpbGQoY29udGFp
bmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNl
dHVwR3JpZDh4OChsZWZ0T2Zmc2V0LCB0b3BPZmZzZXQsIGxlZnRGcmFjdGlvbiwgdG9wRnJhY3Rp
b24pCisgICAgeworICAgICAgICB2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
ZXN0Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAg
ICBpZiAoaSA9PSA0KQorICAgICAgICAgICAgICAgIHRvcE9mZnNldCArPSA1OworICAgICAgICAg
ICAgdmFyIGxlZnRPZmZzZXRqID0gbGVmdE9mZnNldDsKKyAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgODsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gNCkKKyAgICAgICAg
ICAgICAgICAgICAgbGVmdE9mZnNldGogKz0gNTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGFp
bmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgdmFy
IHNoaWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAg
ICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdjb250YWluZXInKTsKKyAgICAgICAg
ICAgICAgICBzaGlmdGVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc2hpZnRlcjh4OCcpOworICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gKGxlZnRPZmZzZXRqICsgaiAqIDIw
ICsgaSAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0
eWxlLnRvcCA9ICh0b3BPZmZzZXQgKyBpICogMjAgKyBpICogdG9wRnJhY3Rpb24pICsgInB4Igor
ICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5bGUubGVmdCA9ICg1ICsgaiAqIGxlZnRGcmFjdGlv
bikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS50b3AgPSAoNSArIGogKiB0
b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxk
KHNoaWZ0ZXIpOworICAgICAgICAgICAgICAgIHRlc3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNldHVwVGVz
dCgpCisgICAgeworICAgICAgICAvLyBWZXJ0aWNhbCBzaGlmdHM6CisgICAgICAgIHNldHVwR3Jp
ZDEweDEwKDEwLCAxMCwgMCwgMC4xKQorICAgICAgICAvLyBIb3Jpem9udGFsIHNoaWZ0czoKKyAg
ICAgICAgc2V0dXBHcmlkMTB4MTAoMjAwLCAxMCwgMC4xLCAwKTsKKworICAgICAgICAvLyBBbmQg
aW4gOHg4ICh3aGVyZSBleGFjdGx5IDAuNSBpcyBtb3JlIGNvbW1vbikKKyAgICAgICAgc2V0dXBH
cmlkOHg4KDEwLCAyMDAsIDAsIDAuMTI1KTsKKyAgICAgICAgc2V0dXBHcmlkOHg4KDIwMCwgMjAw
LCAwLjEyNSwgMCk7CisgICAgfQorCisgICAgc2V0dXBUZXN0KCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM4MjFiNWMxNGQ1MjIzNmYzM2EzNmYyMTYyNjY2NjFlZmZmMDljYjcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwt
Y29tcG9zaXRlZC1sYXllcnMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorICAgICN0ZXN0IHsgCisgICAgICAgIG1hcmdpbjogNXB4OworICAgIH0KKyAgICAj
dGVzdC5jb21wb3NpdGUgPiAuY29udGFpbmVyIHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06
IHRyYW5zbGF0ZVooMCk7CisgICAgICAgIG9wYWNpdHk6IDAuOTU7CisgICAgfQorICAgIC5jb250
YWluZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgfQorICAgIC5zaGlmdGVy
IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibGFjazsKKyAgICAgICAgd2lkdGg6IDEyLjVweDsKKyAgICAgICAgaGVpZ2h0OiAxMi41cHg7
CisgICAgfQorICAgIC5zaGlmdGVyOHg4IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICAgICAgd2lkdGg6IDE2LjVweDsK
KyAgICAgICAgaGVpZ2h0OiAxNi41cHg7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBpZD10ZXN0IGNsYXNzPWNvbXBvc2l0ZT4KKzwvZGl2PgorPHNjcmlwdD4KKyAgICBm
dW5jdGlvbiBzZXR1cEdyaWQxMHgxMChsZWZ0T2Zmc2V0LCB0b3BPZmZzZXQsIGxlZnRGcmFjdGlv
biwgdG9wRnJhY3Rpb24pCisgICAgeworICAgICAgICB2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykg
eworICAgICAgICAgICAgaWYgKGkgPT0gNSkKKyAgICAgICAgICAgICAgICB0b3BPZmZzZXQgKz0g
NTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxlZnRPZmZzZXQ7CisgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA9
PSA1KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1OworICAgICAgICAgICAg
ICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbnRhaW5l
cicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdzaGlm
dGVyJyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAobGVmdE9mZnNl
dGogKyBqICogMTYgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBj
b250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAxNiArIGkgKiB0b3BGcmFjdGlv
bikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5sZWZ0ID0gKDUgKyBqICog
bGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLnRvcCA9
ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBjb250YWluZXIu
YXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVzdC5hcHBlbmRDaGlsZChj
b250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gc2V0dXBHcmlkOHg4KGxlZnRPZmZzZXQsIHRvcE9mZnNldCwgbGVmdEZyYWN0aW9uLCB0b3BG
cmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChpID09IDQpCisgICAgICAgICAgICAgICAgdG9wT2Zmc2V0ICs9IDU7CisgICAg
ICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSA0KQorICAg
ICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1OworICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAg
ICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbnRhaW5lcicpOworICAg
ICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdzaGlmdGVyOHg4Jyk7
CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAobGVmdE9mZnNldGogKyBq
ICogMjAgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBjb250YWlu
ZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAyMCArIGkgKiB0b3BGcmFjdGlvbikgKyAi
cHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5sZWZ0ID0gKDUgKyBqICogbGVmdEZy
YWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLnRvcCA9ICg1ICsg
aiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVzdC5hcHBlbmRDaGlsZChjb250YWlu
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0
dXBUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIFZlcnRpY2FsIHNoaWZ0czoKKyAgICAgICAgc2V0
dXBHcmlkMTB4MTAoMTAsIDEwLCAwLCAwLjEpCisgICAgICAgIC8vIEhvcml6b250YWwgc2hpZnRz
OgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgyMDAsIDEwLCAwLjEsIDApOworCisgICAgICAgIC8v
IEFuZCBpbiA4eDggKHdoZXJlIGV4YWN0bHkgMC41IGlzIG1vcmUgY29tbW9uKQorICAgICAgICBz
ZXR1cEdyaWQ4eDgoMTAsIDIwMCwgMCwgMC4xMjUpOworICAgICAgICBzZXR1cEdyaWQ4eDgoMjAw
LCAyMDAsIDAuMTI1LCAwKTsKKyAgICB9CisKKyAgICBzZXR1cFRlc3QoKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200311</attachid>
            <date>2013-05-02 06:29:06 -0700</date>
            <delta_ts>2013-05-07 03:41:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115304-20130502152817.patch</filename>
            <type>text/plain</type>
            <size>35912</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM0Y2RkZGJlOWY3Y2Qz
YmY3ZWMwNTNkNGY0ZTMzNTFlNzhmNWZhOS4uY2ZhMmYxZDM4NzVmMjg1YmRkN2Y4ZTE0NGQ5ZTQy
MzUzY2MyMTZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEzLTA1LTAyICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgorCisgICAgICAgIFJF
R1JFU1NJT04oU1VCUElYRUxfTEFZT1VUKSBDb21wb3NpdGVkIGxheWVycyBjYW4gY2F1c2Ugb25l
IHBpeGVsIHNoaWZ0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE1MzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWNjZWxlcmF0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBibG9ja3MgYXQgc3VicGl4ZWwgb2Zm
c2V0cyB0byBzaGlmdCBiZWNhdXNlCisgICAgICAgIGFjY3VtdWxhdGVkIHN1YnBpeGVsIG9mZnNl
dHMgYXJlIGxvc3QgYmV0d2VlbiBlYWNoIGxheWVycy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IGxheWVyIGJvdW5kcyBhcmUgbm93IGNhbGN1bGF0ZWQgaW4gTGF5b3V0VW5pdHMsIGFuZCB0aGVp
cgorICAgICAgICBzdWJwaXhlbCBvZmZzZXQgdXNlZCB0byBlbnN1cmUgY29ycmVjdCBwaXhlbCBz
bmFwcGluZyBvZiB0aGUgYWNjZWxlcmF0ZWQKKyAgICAgICAgbGF5ZXIgaXRzZWxmLCBhbmQgcGFz
c2VkIG9uIHRvIHRoZSBsYXlvdXQgb2YgaXRzIGNvbnRlbnQuCisKKyAgICAgICAgVGVzdDogZmFz
dC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLmh0bWwKKworICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyOjpwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyk6CisgICAgICAgICAg
ICBBdm9pZCB1c2luZyBMYXlvdXQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgSW50IHR5cGVzLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnN1YnBpeGVsQWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldFN1YnBpeGVsQWNjdW11bGF0aW9uKToKKyAgICAgICAg
KEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRQb2ludDo6ZnJhY3Rpb24pOgorICAgICAgICAo
TGF5b3V0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChSZW5kZXJMYXllcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlc2V0Q29udGVu
dHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudE9m
ZnNldEluQ29tcG9zdGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6Y29udGVudHNCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpiYWNrZ3JvdW5kQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
cGFpbnRJbnRvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpw
YWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29t
cG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNl
dENvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaDoKKyAgICAgICAgKFJlbmRlckxheWVyQmFja2luZyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmxvZ0xheWVySW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorCiAyMDEzLTA1LTAxICBFbnJpY2EgQ2Fz
dWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgdGV4dC1jb21iaW5lOiBob3Jpem9u
dGFsIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgZm9yIHNvbWUgZm9udHMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAppbmRleCA4
OWVlODU4ZTJhYTQwZDVkZTcwYzE3M2U5MWQ5MjM3MTk4NDE0MjMzLi5iNTRkY2E5N2NlMDU3MTgw
ZjE3YzRlMTVmODVjOThlNGMwZmYyMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6YnVpbGRPYmplY3RGbwogICAgICAgICAuc2V0Tm9kZUlkKGlkRm9yTm9kZShlcnJv
clN0cmluZywgbm9kZSkpCiAgICAgICAgIC5zZXRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKSkK
ICAgICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgp
KQotICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoYmFj
a2luZy0+Y29tcG9zaXRlZEJvdW5kcygpKSkKKyAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMo
YnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRl
ZEJvdW5kcygpKSkpCiAgICAgICAgIC5zZXRQYWludENvdW50KGJhY2tpbmctPmdyYXBoaWNzTGF5
ZXIoKS0+cmVwYWludENvdW50KCkpOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+c2hhZG93SG9z
dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcAppbmRleCBiMGVkYWNlM2U2NGFhZTdiYTgyYzUxMmUyZjUzMmRlN2JmNGJkNWFjLi45
ODRjYjc3ZjlhZTRmZjllY2Q4ZjU3NjNjZmQ2Y2E2ODQ5MzVhZDkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAtMzE1LDEz
ICszMTUsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogdm9pZCBHcmFwaGljc0xheWVyOjpwYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCiB7CiAg
ICAgaWYgKG1fY2xpZW50KSB7Ci0gICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gb2Zmc2V0RnJv
bVJlbmRlcmVyKCk7CisgICAgICAgIEludFNpemUgb2Zmc2V0ID0gb2Zmc2V0RnJvbVJlbmRlcmVy
KCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vZmZzZXQpOwogCi0gICAgICAgIExheW91
dFJlY3QgY2xpcFJlY3QoY2xpcCk7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QoY2xpcCk7CiAg
ICAgICAgIGNsaXBSZWN0Lm1vdmUob2Zmc2V0KTsKIAotICAgICAgICBtX2NsaWVudC0+cGFpbnRD
b250ZW50cyh0aGlzLCBjb250ZXh0LCBtX3BhaW50aW5nUGhhc2UsIHBpeGVsU25hcHBlZEludFJl
Y3QoY2xpcFJlY3QpKTsKKyAgICAgICAgbV9jbGllbnQtPnBhaW50Q29udGVudHModGhpcywgY29u
dGV4dCwgbV9wYWludGluZ1BoYXNlLCBjbGlwUmVjdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggOTc5Yzkz
ZTdlMWE3MDQ5NDdjZGI3ZTI0YzJjZDQ3OWRiMTczOTBjOS4uMmFlOWYwZDhiNmY3ZjllZjkyYjY3
NzZlYzIxMzNiMzY0M2YzMzFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtMjUyLDYgKzI1Miw5IEBAIHB1YmxpYzoKICAgICBJ
bnRTaXplIG9mZnNldEZyb21SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbVJl
bmRlcmVyOyB9CiAgICAgdm9pZCBzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgSW50U2l6ZSYs
IFNob3VsZFNldE5lZWRzRGlzcGxheSA9IFNldE5lZWRzRGlzcGxheSk7CiAKKyAgICBMYXlvdXRT
aXplIHN1YnBpeGVsQWNjdW11bGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdWJwaXhlbEFjY3Vt
dWxhdGlvbjsgfQorICAgIHZvaWQgc2V0U3VicGl4ZWxBY2N1bXVsYXRpb24oY29uc3QgTGF5b3V0
U2l6ZSYgc3VicGl4ZWxBY2N1bXVsYXRpb24pIHsgbV9zdWJwaXhlbEFjY3VtdWxhdGlvbiA9IHN1
YnBpeGVsQWNjdW11bGF0aW9uOyB9CisKICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIGxheWVy
ICh0aGUgbG9jYXRpb24gb2YgaXRzIHRvcC1sZWZ0IGNvcm5lciBpbiBpdHMgcGFyZW50KQogICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1f
cG9zaXRpb24gPSBwOyB9CkBAIC00OTgsNyArNTAxLDEwIEBAIHByb3RlY3RlZDoKICAgICAKICAg
ICAvLyBPZmZzZXQgZnJvbSB0aGUgb3duaW5nIHJlbmRlcmVyCiAgICAgSW50U2l6ZSBtX29mZnNl
dEZyb21SZW5kZXJlcjsKLSAgICAKKworICAgIC8vIEFjY3VtdWxhdGVkIHN1YnBpeGVsIGVycm9y
IHRvIGJlIHVzZWQgYnkgc3VicGl4ZWwgbGF5b3V0IG9mIHRoZSBjb250ZW50LgorICAgIExheW91
dFNpemUgbV9zdWJwaXhlbEFjY3VtdWxhdGlvbjsKKwogICAgIC8vIFBvc2l0aW9uIGlzIHJlbGF0
aXZlIHRvIHRoZSBwYXJlbnQgR3JhcGhpY3NMYXllcgogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlv
bjsKICAgICBGbG9hdFBvaW50M0QgbV9hbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCmluZGV4IDY0N2E2NTFiZWFmYjNjMDE2ZDgy
ODI5NjkwNzU2NTNhMWE2NDQzY2UuLjBhMTU4NGUxMDhmNjIzYzJkNjg0NmY1ODNlNjFkZjFlOGIx
ZTZiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91
dFBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9p
bnQuaApAQCAtOTAsNiArOTAsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTGF5b3V0UG9p
bnQobV95LCBtX3gpOwogICAgIH0KIAorICAgIExheW91dFBvaW50IGZyYWN0aW9uKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChtX3guZnJhY3Rpb24oKSwgbV95LmZy
YWN0aW9uKCkpOworICAgIH0KKwogI2lmIFBMQVRGT1JNKFFUKQogICAgIGV4cGxpY2l0IExheW91
dFBvaW50KGNvbnN0IFFQb2ludCYpOwogICAgIGV4cGxpY2l0IExheW91dFBvaW50KGNvbnN0IFFQ
b2ludEYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGNj
NmE5Yzk4OTZlNDM2ZDhiM2FkZjJhYWE0MzRiYjcwOTU3MTliN2YuLmRjZWMzYjhmZGM0YWQxNmI0
YmIxODZhMmJkMWViNTcwMWYyYWI4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMzcxNyw3ICszNzE3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkK
ICAgICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdDsKICAgICBjb252ZXJ0VG9MYXllckNvb3Jk
cyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7CiAKLSAgICBJbnRSZWN0
IHJvb3RSZWxhdGl2ZUJvdW5kczsKKyAgICBMYXlvdXRSZWN0IHJvb3RSZWxhdGl2ZUJvdW5kczsK
ICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAKICAgICBib29s
IGRpZFF1YW50aXplRm9udHMgPSB0cnVlOwpAQCAtNTMzOSwxNCArNTMzOSwxNCBAQCBJbnRSZWN0
IFJlbmRlckxheWVyOjphYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3QKICAgICByZXR1cm4gcGl4
ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0JveChyb290KCkpKTsKIH0KIAotSW50UmVjdCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3VsYXRlTGF5ZXJC
b3VuZHNGbGFncyBmbGFncykgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlv
dXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3Mp
IGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkpCi0gICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCB0byBkbyBhIGNoZWNrIGxpa2UgaGFzVmlzaWJsZU5v
bkNvbXBvc2l0aW5nRGVzY2VuZGFudExheWVycygpIChidWcgOTI1ODApLgogICAgIGlmICgoZmxh
Z3MgJiBFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMpICYmIHRoaXMgIT0gYW5jZXN0b3JMYXllciAm
JiAhaGFzVmlzaWJsZUNvbnRlbnQoKSAmJiAhaGFzVmlzaWJsZURlc2NlbmRhbnQoKSkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKIApA
QCAtNTM4Niw3ICs1Mzg2LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJC
b3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgICAg
IExheW91dFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgICAgICAgICAgY29udmVydFRvTGF5
ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgICAgICAgICAg
bG9jYWxDbGlwUmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQpOwotICAgICAgICAgICAgcmV0
dXJuIHBpeGVsU25hcHBlZEludFJlY3QobG9jYWxDbGlwUmVjdCk7CisgICAgICAgICAgICByZXR1
cm4gbG9jYWxDbGlwUmVjdDsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTM5Nyw3ICs1Mzk3LDcg
QEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVy
TGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKIAogICAgIGlmIChSZW5kZXJMYXllciogcmVmbGVj
dGlvbiA9IHJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgIGlmICghcmVmbGVjdGlvbi0+aXND
b21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IHJl
ZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7
CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSByZWZsZWN0aW9uLT5j
YWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAg
ICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgIH0KICAgICB9
CkBAIC01NDEzLDcgKzU0MTMsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXll
ckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29ucwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRl
ckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgaWYg
KGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlzQ29t
cG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBjaGlsZFVuaW9uQm91bmRzID0g
Y3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7
CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXIt
PmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAg
ICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTU0MjQsNyArNTQyNCw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6
OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBj
b25zCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewogICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7CiAg
ICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFj
dXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGNoaWxk
VW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgMCwgZGVz
Y2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3Vu
ZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZs
YWdzKTsKICAgICAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0ZShjaGlsZFVuaW9uQm91bmRz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTQzNSw3ICs1NDM1LDcgQEAgSW50UmVj
dCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFu
Y2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6
ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBub3JtYWxGbG93
TGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERl
c2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAg
ICBJbnRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0
aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY3Vy
QWJzQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2Nl
bmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY3VyQWJzQm91
bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTQ2Miw3ICs1NDYyLDcgQEAgSW50
UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIq
IGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0
b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgIHVuaW9uQm91bmRzLm1vdmVCeShhbmNl
c3RvclJlbE9mZnNldCk7CiAgICAgCi0gICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QodW5p
b25Cb3VuZHMpOworICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0KIAogdm9pZCBSZW5kZXJMYXll
cjo6Y2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVU
b0NsZWFyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA5MjVhYjAw
MTNkNDZmMmVjMDJhNjk0Mjc4YzMxZmY1ODFkYWMyMzIxLi4zMTBhYzc5MmI0NjkxMDgwYzZlNGI4
ZTM1NjBlYWY5MzcwNTkzOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aApAQCAtNzAxLDcgKzcwMSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ2FuIHBhc3Mg
b2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgSW50UmVjdCBjYWxjdWxhdGVMYXllckJvdW5k
cyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9m
ZnNldEZyb21Sb290ID0gMCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxj
dWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNhbGN1bGF0ZUxh
eWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRQ
b2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzID0gRGVm
YXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MpIGNvbnN0OwogICAgIAogICAgIC8vIFdBUk5J
Tkc6IFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG9mZnNldCBmb3IgdGhlIHBhcmVudCBhcyB0aGlz
IGlzIHdoYXQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMgZXhwZWN0cy4KICAgICBMYXlvdXRQb2ludCBj
b21wdXRlT2Zmc2V0RnJvbVJvb3QoYm9vbCYgaGFzTGF5ZXJPZmZzZXQpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAwZjQz
NDE0Mjk3ZGMzYWVhYTk0OTIyZWE1OTZjZjMxNzE0ZGU4OTdmLi5jYzZhNDViMDM2M2I3MGViOWNj
Y2I3MmVmZDA3ZmY5YTcyZDJmZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjpzaG91bGRDbGlwQ29tcG9zaXRlZEJvdW5kcygpIGNvbnN0CiAKIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKCkKIHsKLSAgICBJbnRSZWN0
IGxheWVyQm91bmRzID0gY29tcG9zaXRvcigpLT5jYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKG1f
b3duaW5nTGF5ZXIsIG1fb3duaW5nTGF5ZXIpOworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMg
PSBjb21wb3NpdG9yKCktPmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMobV9vd25pbmdMYXllciwg
bV9vd25pbmdMYXllcik7CiAKICAgICAvLyBDbGlwIHRvIHRoZSBzaXplIG9mIHRoZSBkb2N1bWVu
dCBvciBlbmNsb3Npbmcgb3ZlcmZsb3ctc2Nyb2xsIGxheWVyLgogICAgIC8vIElmIHRoaXMgb3Ig
YW4gYW5jZXN0b3IgaXMgdHJhbnNmb3JtZWQsIHdlIGNhbid0IGN1cnJlbnRseSBjb21wdXRlIHRo
ZSBjb3JyZWN0IHJlY3QgdG8gaW50ZXJzZWN0IHdpdGguCkBAIC00NDgsNyArNDQ4LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogICAgICAgICBt
X293bmluZ0xheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGRlbHRhKTsKICAg
ICAgICAgY2xpcHBpbmdCb3VuZHMubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKIAotICAg
ICAgICBsYXllckJvdW5kcy5pbnRlcnNlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwcGluZ0Jv
dW5kcykpOworICAgICAgICBsYXllckJvdW5kcy5pbnRlcnNlY3QoY2xpcHBpbmdCb3VuZHMpOwog
ICAgICAgICBtX2JvdW5kc0NvbnN0cmFpbmVkQnlDbGlwcGluZyA9IHRydWU7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fYm91bmRzQ29uc3RyYWluZWRCeUNsaXBwaW5nID0gZmFsc2U7CkBAIC00NzEs
NyArNDcxLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUFmdGVyV2lkZ2V0UmVz
aXplKCkKICAgICBpZiAocmVuZGVyZXIoKS0+aXNSZW5kZXJQYXJ0KCkpIHsKICAgICAgICAgaWYg
KFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3NpdG9yID0gUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcih0b1JlbmRlclBhcnQocmVuZGVyZXIoKSkp
KSB7CiAgICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0RpZENoYW5nZVNpemUo
KTsKLSAgICAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRp
b24oY29udGVudHNCb3goKS5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGlubmVyQ29tcG9zaXRv
ci0+ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRpb24oZmxvb3JlZEludFBvaW50KGNvbnRlbnRzQm94
KCkubG9jYXRpb24oKSkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNjQ3LDEyICs2NDcsMTgg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgp
CiAgICAgICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMgPSBwaXhlbFNuYXBwZWRJbnRSZWN0
KGNvbXBBbmNlc3Rvci0+YmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCkpOwogICAgIH0KIAot
ICAgIEludFJlY3QgbG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3Qo
Y29tcG9zaXRlZEJvdW5kcygpKTsKLQotICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0Jv
dW5kcyhsb2NhbENvbXBvc2l0aW5nQm91bmRzKTsKLSAgICBJbnRQb2ludCBkZWx0YTsKLSAgICBt
X293bmluZ0xheWVyLT5jb252ZXJ0VG9QaXhlbFNuYXBwZWRMYXllckNvb3Jkcyhjb21wQW5jZXN0
b3IsIGRlbHRhKTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMgPSBjb21w
b3NpdGVkQm91bmRzKCk7CisgICAgTGF5b3V0UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRz
KGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOworICAgIExheW91dFBvaW50IGRlbHRhOworICAgIG1f
b3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOwog
ICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5KGRlbHRhKTsKKyAgICAvLyBXZSBt
dXN0IG1vdmUgdGhlIGJvdW5kcyBieSB0aGUgc3VicGl4ZWwgcGFydCBvZiBkZWx0YSwKKyAgICAv
LyBzbyB0aGF0IHRoZXkgY2FuIGJlIHBpeGVsIHNuYXBwZWQgdG8gYWN0dWFsIHBpeGVscy4KKyAg
ICBsb2NhbENvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShkZWx0YS5mcmFjdGlvbigpKTsKKworICAg
IEludFBvaW50IHBpeGVsRGVsdGEgPSBmbG9vcmVkSW50UG9pbnQoZGVsdGEpOworICAgIEludFJl
Y3QgbG9jYWxQaXhlbENvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsb2Nh
bENvbXBvc2l0aW5nQm91bmRzKTsKKyAgICBJbnRSZWN0IHJlbGF0aXZlUGl4ZWxDb21wb3NpdGlu
Z0JvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3QocmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyk7
CiAKICAgICBJbnRQb2ludCBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb247CiAgICAgaWYgKGNv
bXBBbmNlc3RvciAmJiBjb21wQW5jZXN0b3ItPmJhY2tpbmcoKS0+aGFzQ2xpcHBpbmdMYXllcigp
KSB7CkBAIC02ODMsMjUgKzY4OSwyNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
R3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXIt
PnNldFNpemUocGFyZW50Q2xpcFJlY3Quc2l6ZSgpKTsKIAogICAgICAgICAvLyBiYWNrZ3JvdW5k
UmVjdCBpcyByZWxhdGl2ZSB0byBjb21wQW5jZXN0b3IsIHNvIHN1YnRyYWN0IGRlbHRhWC9kZWx0
YVkgdG8gZ2V0IGJhY2sgdG8gbG9jYWwgY29vcmRzLgotICAgICAgICBtX2FuY2VzdG9yQ2xpcHBp
bmdMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkg
LSBkZWx0YSk7CisgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRPZmZzZXRGcm9t
UmVuZGVyZXIocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIHBpeGVsRGVsdGEpOwogCiAgICAg
ICAgIC8vIFRoZSBwcmltYXJ5IGxheWVyIGlzIHRoZW4gcGFyZW50ZWQgaW4sIGFuZCBwb3NpdGlv
bmVkIHJlbGF0aXZlIHRvIHRoaXMgY2xpcHBpbmcgbGF5ZXIuCiAgICAgICAgIGdyYXBoaWNzTGF5
ZXJQYXJlbnRMb2NhdGlvbiA9IHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCk7CiAgICAgfQogCi0g
ICAgRmxvYXRTaXplIGNvbnRlbnRzU2l6ZSA9IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuc2l6
ZSgpOworICAgIEZsb2F0U2l6ZSBjb250ZW50c1NpemUgPSByZWxhdGl2ZVBpeGVsQ29tcG9zaXRp
bmdCb3VuZHMuc2l6ZSgpOwogICAgIAogICAgIGlmIChtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXll
cikgewogICAgICAgICBtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci0+c2V0UHJlc2VydmVzM0Qo
cHJlc2VydmVzM0QpOwotICAgICAgICBtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBn
cmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKKyAgICAgICAgbV9jb250ZW50c0NvbnRhaW5t
ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocmVsYXRpdmVQaXhlbENvbXBvc2l0aW5n
Qm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAg
ICAgLy8gVXNlIHRoZSBzYW1lIHNpemUgYXMgbV9ncmFwaGljc0xheWVyIHNvIHRyYW5zZm9ybXMg
YmVoYXZlIGNvcnJlY3RseS4KICAgICAgICAgbV9jb250ZW50c0NvbnRhaW5tZW50TGF5ZXItPnNl
dFNpemUoY29udGVudHNTaXplKTsKLSAgICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9u
ID0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpOworICAgICAgICBncmFwaGlj
c0xheWVyUGFyZW50TG9jYXRpb24gPSByZWxhdGl2ZVBpeGVsQ29tcG9zaXRpbmdCb3VuZHMubG9j
YXRpb24oKTsKICAgICB9CiAKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQocmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXll
clBhcmVudExvY2F0aW9uKSk7Ci0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRPZmZzZXRGcm9tUmVu
ZGVyZXIodG9JbnRTaXplKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwotICAg
IAorICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZVBp
eGVsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2Nh
dGlvbikpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKHRvSW50
U2l6ZShsb2NhbFBpeGVsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOworICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0U3VicGl4ZWxBY2N1bXVsYXRpb24odG9MYXlvdXRTaXplKGRlbHRhLmZy
YWN0aW9uKCkpKTsKKwogICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5z
aXplKCk7CiAgICAgaWYgKG9sZFNpemUgIT0gY29udGVudHNTaXplKSB7CiAgICAgICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0U2l6ZShjb250ZW50c1NpemUpOwpAQCAtNzIxLDcgKzcyOCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQogICAg
IEludFJlY3QgY2xpcHBpbmdCb3g7CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNsaXBMYXllciA9
IGNsaXBwaW5nTGF5ZXIoKSkgewogICAgICAgICBjbGlwcGluZ0JveCA9IGNsaXBCb3godG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSkpOwotICAgICAgICBjbGlwTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9j
YXRpb24oKSkpOworICAgICAgICBjbGlwTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2xp
cHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsUGl4ZWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlv
bigpKSk7CiAgICAgICAgIGNsaXBMYXllci0+c2V0U2l6ZShjbGlwcGluZ0JveC5zaXplKCkpOwog
ICAgICAgICBjbGlwTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcih0b0ludFNpemUoY2xpcHBp
bmdCb3gubG9jYXRpb24oKSkpOwogICAgIH0KQEAgLTczOSw3ICs3NDYsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAgICAgICAgY29u
c3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+cGl4ZWxTbmFw
cGVkQm9yZGVyQm94UmVjdCgpOwogCiAgICAgICAgIC8vIEdldCBsYXlvdXQgYm91bmRzIGluIHRo
ZSBjb29yZHMgb2YgY29tcEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3Vu
ZHMuCi0gICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGRlbHRhLCBib3JkZXJC
b3guc2l6ZSgpKTsKKyAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyhwaXhlbERlbHRhLCBib3Jk
ZXJCb3guc2l6ZSgpKTsKIAogICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB0aGF0IGRlcGVu
ZCBvbiBsYXllciBkaW1lbnNpb25zCiAgICAgICAgIEZsb2F0UG9pbnQzRCB0cmFuc2Zvcm1Pcmln
aW4gPSBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGJvcmRlckJveCk7CkBAIC05NDksNyArOTU2LDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUludGVybmFsSGllcmFyY2h5KCkKIAog
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlc2V0Q29udGVudHNSZWN0KCkKIHsKLSAgICBJbnRS
ZWN0IHJlY3QgPSBjb250ZW50c0JveCgpOworICAgIEludFJlY3QgcmVjdCA9IHBpeGVsU25hcHBl
ZEludFJlY3QoY29udGVudHNCb3goKSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50
c1JlY3QocmVjdCk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RpbGVTaXplKElu
dFNpemUoKSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RpbGVQaGFzZShJbnRQ
b2ludCgpKTsKQEAgLTE3NzAsMjQgKzE3NzcsMjQgQEAgRmxvYXRQb2ludCBSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gK
IH0KIAogLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgdG9wLWxlZnQgb2YgdGhpcyBjb21w
b3NpdGluZyBsYXllciBhdCB3aGljaCB0aGUgcmVuZGVyZXIncyBjb250ZW50cyBhcmUgcGFpbnRl
ZC4KLUludFNpemUgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5n
TGF5ZXIoKSBjb25zdAorTGF5b3V0U2l6ZSBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRPZmZz
ZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFNpemUoLW1fY29t
cG9zaXRlZEJvdW5kcy54KCksIC1tX2NvbXBvc2l0ZWRCb3VuZHMueSgpKTsKKyAgICByZXR1cm4g
TGF5b3V0U2l6ZSgtbV9jb21wb3NpdGVkQm91bmRzLngoKSwgLW1fY29tcG9zaXRlZEJvdW5kcy55
KCkpOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudHNCb3goKSBjb25z
dAorTGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRzQm94KCkgY29uc3QKIHsK
ICAgICBpZiAoIXJlbmRlcmVyKCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGNvbnRlbnRzUmVj
dDsKKyAgICBMYXlvdXRSZWN0IGNvbnRlbnRzUmVjdDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
aWYgKHJlbmRlcmVyKCktPmlzVmlkZW8oKSkgewogICAgICAgICBSZW5kZXJWaWRlbyogdmlkZW9S
ZW5kZXJlciA9IHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSk7CiAgICAgICAgIGNvbnRlbnRzUmVj
dCA9IHZpZGVvUmVuZGVyZXItPnZpZGVvQm94KCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAg
ICAgY29udGVudHNSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdCh0b1JlbmRlckJveChyZW5kZXJl
cigpKS0+Y29udGVudEJveFJlY3QoKSk7CisgICAgICAgIGNvbnRlbnRzUmVjdCA9IHRvUmVuZGVy
Qm94KHJlbmRlcmVyKCkpLT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgY29udGVudHNSZWN0Lm1v
dmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkpOwogICAgIHJldHVybiBjb250ZW50
c1JlY3Q7CkBAIC0xODE1LDkgKzE4MjIsOSBAQCBJbnRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6
YmFja2dyb3VuZEJveCgpIGNvbnN0CiAgICAgaWYgKCFyZW5kZXJlcigpLT5pc0JveCgpKQogICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBwaXhlbFNuYXBwZWRCYWNrZ3Jv
dW5kQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChiYWNrZ3JvdW5kUmVjdEZvckJveCh0b1JlbmRl
ckJveChyZW5kZXJlcigpKSkpOwotICAgIHBpeGVsU25hcHBlZEJhY2tncm91bmRCb3gubW92ZShj
b250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIHBpeGVsU25hcHBl
ZEJhY2tncm91bmRCb3g7CisgICAgTGF5b3V0UmVjdCBiYWNrZ3JvdW5kQm94ID0gYmFja2dyb3Vu
ZFJlY3RGb3JCb3godG9SZW5kZXJCb3gocmVuZGVyZXIoKSkpOworICAgIGJhY2tncm91bmRCb3gu
bW92ZShjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSk7CisgICAgcmV0dXJuIHBpeGVs
U25hcHBlZEludFJlY3QoYmFja2dyb3VuZEJveCk7CiB9CiAKIEdyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyQmFja2luZzo6cGFyZW50Rm9yU3VibGF5ZXJzKCkgY29uc3QKQEAgLTE5NjMsNyArMTk3
MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25zdCBHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgICAgIHBhaW50RmxhZ3MgfD0gUmVu
ZGVyTGF5ZXI6OlBhaW50TGF5ZXJQYWludGluZ1NraXBSb290QmFja2dyb3VuZDsKICAgICAKICAg
ICAvLyBGSVhNRTogR3JhcGhpY3NMYXllcnMgbmVlZCBhIHdheSB0byBzcGxpdCBmb3IgUmVuZGVy
UmVnaW9ucy4KLSAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZv
KG1fb3duaW5nTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCkpOworICAgIExheW91dFNpemUgc3ViUGl4ZWxBY2N1bXVsYXRpb24gPSBncmFwaGljc0xheWVy
LT5zdWJwaXhlbEFjY3VtdWxhdGlvbigpOworICAgIFJlbmRlckxheWVyOjpMYXllclBhaW50aW5n
SW5mbyBwYWludGluZ0luZm8obV9vd25pbmdMYXllciwgcGFpbnREaXJ0eVJlY3QsIHBhaW50QmVo
YXZpb3IsIHN1YlBpeGVsQWNjdW11bGF0aW9uKTsKICAgICBtX293bmluZ0xheWVyLT5wYWludExh
eWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAogICAgIGlm
IChtX293bmluZ0xheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSkKQEAgLTIw
MDQsNyArMjAxMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgIC8vIFRoZSBk
aXJ0eVJlY3QgaXMgaW4gdGhlIGNvb3JkcyBvZiB0aGUgcGFpbnRpbmcgcm9vdC4KICAgICAgICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSBjbGlwOwogICAgICAgICBpZiAoIShwYWludGluZ1BoYXNlICYg
R3JhcGhpY3NMYXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpCi0gICAgICAgICAgICBkaXJ0eVJl
Y3QuaW50ZXJzZWN0KGNvbXBvc2l0ZWRCb3VuZHMoKSk7CisgICAgICAgICAgICBkaXJ0eVJlY3Qu
aW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QoY29tcG9zaXRlZEJvdW5kcygpKSk7CiAKICAgICAg
ICAgLy8gV2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgcm9vdCBhcyBmb3IgaGl0IHRlc3RpbmcsIGJl
Y2F1c2UgYm90aCBtZXRob2RzIGNhbiBjb21wdXRlIGFuZCBjYWNoZSBjbGlwUmVjdHMuCiAgICAg
ICAgIHBhaW50SW50b0xheWVyKGdyYXBoaWNzTGF5ZXIsICZjb250ZXh0LCBkaXJ0eVJlY3QsIFBh
aW50QmVoYXZpb3JOb3JtYWwsIHBhaW50aW5nUGhhc2UpOwpAQCAtMjI1NiwxMiArMjI2NCwxMiBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgbV9ncmFw
aGljc0xheWVyLT5yZXN1bWVBbmltYXRpb25zKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3Np
dGVkQm91bmRzOwogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29tcG9zaXRlZEJv
dW5kcyhjb25zdCBJbnRSZWN0JiBib3VuZHMpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0
Q29tcG9zaXRlZEJvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpCiB7CiAgICAgbV9jb21w
b3NpdGVkQm91bmRzID0gYm91bmRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCmluZGV4IDZjNGM4N2FkMTg3MzZjZWE3NzJmZWUxNTFjNDkxMjc3
M2VjMjFhZTYuLjU3NTBiZTgwYWIxMTRmNzBiZGMxNTFiZjJjN2Q4NjQwN2QxYTIxMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE0MSw4
ICsxNDEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGlt
ZSA9IDApOwogICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCi0gICAgSW50UmVjdCBjb21w
b3NpdGVkQm91bmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0
IEludFJlY3QmKTsKKyAgICBMYXlvdXRSZWN0IGNvbXBvc2l0ZWRCb3VuZHMoKSBjb25zdDsKKyAg
ICB2b2lkIHNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQg
dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOwogICAgIAogICAgIHZvaWQgdXBkYXRlQWZ0ZXJXaWRn
ZXRSZXNpemUoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHZlcmlmeU5vdFBhaW50aW5nKCk7CiAjZW5kaWYKIAotICAgIEludFJlY3QgY29udGVudHNCb3go
KSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNvbnRlbnRzQm94KCkgY29uc3Q7CiAgICAgSW50UmVj
dCBiYWNrZ3JvdW5kQm94KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRm9yIGluZm9ybWF0aXZlIHB1
cnBvc2VzIG9ubHkuCkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKIAogICAgIEdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlIHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsK
ICAgICAKLSAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0
OworICAgIExheW91dFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7
CiAgICAgLy8gUmVzdWx0IGlzIHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgogICAgIEZsb2F0
UG9pbnQzRCBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkg
Y29uc3Q7CiAgICAgLy8gUmVzdWx0IGlzIHBlcnNwZWN0aXZlIG9yaWdpbiBpbiBwaXhlbHMuCkBA
IC0yOTcsNyArMjk3LDcgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fc2Nyb2xsTGF5ZXJJ
RDsKIAotICAgIEludFJlY3QgbV9jb21wb3NpdGVkQm91bmRzOworICAgIExheW91dFJlY3QgbV9j
b21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91bmRz
OyAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXplcm8gdG8gbWFrZSB0cmFuc2Zvcm0tb3Jp
Z2luIHdvcmsKICAgICBib29sIG1fYm91bmRzQ29uc3RyYWluZWRCeUNsaXBwaW5nOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRl
eCBhM2E0OTExYzNhOTUxMDY2MzliZDY0ZDU3NjZhNDIyYTU0NTYyYzI3Li5jNGE3ZjUwMDkzNzIz
MWNlNDdhYTFhOTc5ZTM5NTIwNzA4ZWU4ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNjE4LDcgKzYxOCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsb2dMYXllckluZm8oY29uc3QgUmVuZGVyTGF5ZXIq
IGxheWVyLCBpbnQgZGVwdGgpCiAgICAgICAgIG1fc2Vjb25kYXJ5QmFja2luZ1N0b3JlQnl0ZXMg
Kz0gYmFja2luZy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKTsKICAgICB9CiAKLSAgICBM
T0coQ29tcG9zaXRpbmcsICIlKnAgJWR4JWQgJS4yZktCICVzKCVzKSAlc1xuIiwgMTIgKyBkZXB0
aCAqIDIsIGxheWVyLCBiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkud2lkdGgoKSwgYmFja2lu
Zy0+Y29tcG9zaXRlZEJvdW5kcygpLmhlaWdodCgpLAorICAgIExPRyhDb21wb3NpdGluZywgIiUq
cCAlZHglZCAlLjJmS0IgJXMoJXMpICVzXG4iLCAxMiArIGRlcHRoICogMiwgbGF5ZXIsIGJhY2tp
bmctPmNvbXBvc2l0ZWRCb3VuZHMoKS53aWR0aCgpLnJvdW5kKCksIGJhY2tpbmctPmNvbXBvc2l0
ZWRCb3VuZHMoKS5oZWlnaHQoKS5yb3VuZCgpLAogICAgICAgICBiYWNraW5nLT5iYWNraW5nU3Rv
cmVNZW1vcnlFc3RpbWF0ZSgpIC8gMTAyNCwKICAgICAgICAgYmFja2luZy0+Z3JhcGhpY3NMYXll
cigpLT5jb250ZW50c09wYXF1ZSgpID8gIm9wYXF1ZSAiIDogIiIsCiAgICAgICAgIGxvZ1JlYXNv
bnNGb3JDb21wb3NpdGluZyhsYXllciksIGxheWVyLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CkBA
IC03NzMsMTAgKzc3MywxMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVwYWludElu
Q29tcG9zaXRlZEFuY2VzdG9yKFJlbmRlckxheWVyKiBsYXllciwgY29ucwogCiAvLyBUaGUgYm91
bmRzIG9mIHRoZSBHcmFwaGljc0xheWVyIGNyZWF0ZWQgZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIg
aXMgdGhlIHVuaW9uIG9mIHRoZSBib3VuZHMgb2YgYWxsIHRoZSBkZXNjZW5kYW50CiAvLyBSZW5k
ZXJMYXllcnMgdGhhdCBhcmUgcmVuZGVyZWQgYnkgdGhlIGNvbXBvc2l0ZWQgUmVuZGVyTGF5ZXIu
Ci1JbnRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5k
cyhjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rvckxh
eWVyKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNv
bXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICBpZiAoIWNhbkJlQ29tcG9zaXRlZChsYXll
cikpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAgICAgcmV0dXJuIGxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyhhbmNlc3RvckxheWVy
LCAwLCBSZW5kZXJMYXllcjo6RGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgfCBSZW5k
ZXJMYXllcjo6RXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzIHwgUmVuZGVyTGF5ZXI6OkRvbnRDb25z
dHJhaW5Gb3JNYXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGEzNWU1YzI3YWMwZWVkYTliZmZjMjU1Y2FjNGQyZWQx
ZTBmYzQ0NTQuLjVmMjY1NWVmZjVkMjBhNzExYzQxMzI1Yjg4YjFjYzFkMTdiM2E5MTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAg
LTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBib3VuZGlu
ZyBib3ggcmVxdWlyZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVyIGFuZCBpdHMgY2hpbGRlcm4sIHJl
bGF0aXZlIHRvIGFuY2VzdG9yTGF5ZXIuCiAgICAgLy8gSWYgbGF5ZXJCb3VuZGluZ0JveCBpcyBu
b3QgMCwgb24gcmV0dXJuIGl0IGNvbnRhaW5zIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBsYXll
ciBvbmx5LgotICAgIEludFJlY3QgY2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjb25zdCBSZW5k
ZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdDsKKyAgICBM
YXlvdXRSZWN0IGNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqLCBj
b25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3Q7CiAKICAgICAvLyBSZXBhaW50
IHRoZSBhcHByb3ByaWF0ZSBsYXllcnMgd2hlbiB0aGUgZ2l2ZW4gUmVuZGVyTGF5ZXIgc3RhcnRz
IG9yIHN0b3BzIGJlaW5nIGNvbXBvc2l0ZWQuCiAgICAgdm9pZCByZXBhaW50T25Db21wb3NpdGlu
Z0NoYW5nZShSZW5kZXJMYXllciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCmluZGV4IGIzNjllMTIzMzM0NzVjYjM5MmVkMmQ4Y2UwMDg2ZjM3OTI1
NzEwMmUuLmU2Y2Q0OTcxMzk3NGEzOTNkNmQyMDI2YmUyM2FkNDVhYzgyNmM1OGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTg5LDYgKzg5
LDEyIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEludFBv
aW50JiBwKQogICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwgIiwiIDw8IHAueSgpIDw8
ICIpIjsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
TGF5b3V0UmVjdCYgcikKK3sKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaW50ZWQg
YXMgZmxvYXRzLiBLZWVwaW5nIHRoZW0gaW50cyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwZXJ2aW91
cyB0ZXN0IGV4cGVjdGF0aW9ucy4KKyAgICByZXR1cm4gdHMgPDwgcGl4ZWxTbmFwcGVkSW50UmVj
dChyKTsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
TGF5b3V0UG9pbnQmIHApCiB7CiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwcmludGVk
IGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGVydmlv
dXMgdGVzdCBleHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuaAppbmRleCAzYTgzODQ5ZDUxNTIxMTRmYTAwOGNlYWQxM2NhZTgyMDZhMjg0MTZj
Li4zOTA2MWEwZmZlN2I3MzZiNjU3NTI5MmQzOTc0MGM0YTRiMTQ5ZGQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xh
c3MgRnJhbWU7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBMYXlvdXRQ
b2ludDsKK2NsYXNzIExheW91dFJlY3Q7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBUZXh0
U3RyZWFtOwogCkBAIC03MSw2ICs3Miw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIFJlbmRlckFzVGV4CiBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwogVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOwogVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IExheW91dFJlY3QmKTsKIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
OWRlMzQ1OWJhZTdmM2RkYjdiODZjYzRhMmQ2ZmQxMjkxOGZkNDI5Zi4uZDYwNzZkZWM1MjE1NDA0
YWNhM2VmNzgyYjYyYjI0ZWVjZWM4Y2YxYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA1
LTAyICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgorCisg
ICAgICAgIFJFR1JFU1NJT04oU1VCUElYRUxfTEFZT1VUKSBDb21wb3NpdGVkIGxheWVycyBjYW4g
Y2F1c2Ugb25lIHBpeGVsIHNoaWZ0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE1MzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXll
cnMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvc3ViLXBp
eGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLmh0bWw6IEFkZGVkLgorCiAyMDEzLTA1LTAxICBSeXVhbiBD
aG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEVGTCBn
YXJkZW5pbmcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4
ZWwtY29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc3Vi
LXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy1leHBlY3RlZC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBjMzFmZjVjYTUxNTM2NDllMjI4MzhmYzA4YTRhZDEzZWQyNTJiOTkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1s
YXllcnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorICAgICN0ZXN0IHsgCisgICAgICAgIG1hcmdpbjogNXB4OworICAgIH0KKyAgICAuY29u
dGFpbmVyIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBvcGFjaXR5OiAw
Ljk1OworICAgIH0KKyAgICAuc2hpZnRlciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CisgICAgICAgIHdpZHRoOiAxMi41cHg7
CisgICAgICAgIGhlaWdodDogMTIuNXB4OworICAgIH0KKyAgICAuc2hpZnRlcjh4OCB7CisgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7
CisgICAgICAgIHdpZHRoOiAxNi41cHg7CisgICAgICAgIGhlaWdodDogMTYuNXB4OworICAgIH0K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9dGVzdD4KKzwvZGl2PgorPHNjcmlw
dD4KKyAgICBmdW5jdGlvbiBzZXR1cEdyaWQxMHgxMChsZWZ0T2Zmc2V0LCB0b3BPZmZzZXQsIGxl
ZnRGcmFjdGlvbiwgdG9wRnJhY3Rpb24pCisgICAgeworICAgICAgICB2YXIgdGVzdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTA7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gNSkKKyAgICAgICAgICAgICAgICB0b3BP
ZmZzZXQgKz0gNTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxlZnRPZmZzZXQ7Cisg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaiA9PSA1KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1OworICAg
ICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywg
J2NvbnRhaW5lcicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdjbGFz
cycsICdzaGlmdGVyJyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAo
bGVmdE9mZnNldGogKyBqICogMTYgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAxNiArIGkgKiB0
b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5sZWZ0ID0g
KDUgKyBqICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0
eWxlLnRvcCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBj
b250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVzdC5hcHBl
bmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc2V0dXBHcmlkOHg4KGxlZnRPZmZzZXQsIHRvcE9mZnNldCwgbGVmdEZyYWN0
aW9uLCB0b3BGcmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChpID09IDQpCisgICAgICAgICAgICAgICAgdG9wT2Zmc2V0ICs9
IDU7CisgICAgICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zmc2V0OworICAgICAgICAg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA9
PSA0KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1OworICAgICAgICAgICAg
ICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2NvbnRhaW5l
cicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdzaGlm
dGVyOHg4Jyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAobGVmdE9m
ZnNldGogKyBqICogMjAgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAg
ICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAyMCArIGkgKiB0b3BGcmFj
dGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5sZWZ0ID0gKDUgKyBq
ICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLnRv
cCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBjb250YWlu
ZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVzdC5hcHBlbmRDaGls
ZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2V0dXBUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIFZlcnRpY2FsIHNoaWZ0czoKKyAg
ICAgICAgc2V0dXBHcmlkMTB4MTAoMTAsIDEwLCAwLCAwLjEpCisgICAgICAgIC8vIEhvcml6b250
YWwgc2hpZnRzOgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgyMDAsIDEwLCAwLjEsIDApOworCisg
ICAgICAgIC8vIEFuZCBpbiA4eDggKHdoZXJlIGV4YWN0bHkgMC41IGlzIG1vcmUgY29tbW9uKQor
ICAgICAgICBzZXR1cEdyaWQ4eDgoMTAsIDIwMCwgMCwgMC4xMjUpOworICAgICAgICBzZXR1cEdy
aWQ4eDgoMjAwLCAyMDAsIDAuMTI1LCAwKTsKKyAgICB9CisKKyAgICBzZXR1cFRlc3QoKTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVk
LWxheWVycy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBv
c2l0ZWQtbGF5ZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgyMWI1YzE0ZDUyMjM2ZjMzYTM2ZjIxNjI2
NjY2MWVmZmYwOWNiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI3Rlc3QgeyAKKyAgICAgICAgbWFyZ2luOiA1cHg7
CisgICAgfQorICAgICN0ZXN0LmNvbXBvc2l0ZSA+IC5jb250YWluZXIgeworICAgICAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAgICAgb3BhY2l0eTogMC45NTsKKyAg
ICB9CisgICAgLmNvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB9
CisgICAgLnNoaWZ0ZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3aWR0aDogMTIuNXB4OworICAgICAgICBo
ZWlnaHQ6IDEyLjVweDsKKyAgICB9CisgICAgLnNoaWZ0ZXI4eDggeworICAgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3
aWR0aDogMTYuNXB4OworICAgICAgICBoZWlnaHQ6IDE2LjVweDsKKyAgICB9Cis8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPXRlc3QgY2xhc3M9Y29tcG9zaXRlPgorPC9kaXY+Cis8
c2NyaXB0PgorICAgIGZ1bmN0aW9uIHNldHVwR3JpZDEweDEwKGxlZnRPZmZzZXQsIHRvcE9mZnNl
dCwgbGVmdEZyYWN0aW9uLCB0b3BGcmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA9PSA1KQorICAgICAgICAgICAgICAg
IHRvcE9mZnNldCArPSA1OworICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXRqID0gbGVmdE9mZnNl
dDsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7IGorKykgeworICAgICAgICAg
ICAgICAgIGlmIChqID09IDUpCisgICAgICAgICAgICAgICAgICAgIGxlZnRPZmZzZXRqICs9IDU7
CisgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgICAgICAgICAgICAgIHZhciBzaGlmdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xh
c3MnLCAnY29udGFpbmVyJyk7CisgICAgICAgICAgICAgICAgc2hpZnRlci5zZXRBdHRyaWJ1dGUo
J2NsYXNzJywgJ3NoaWZ0ZXInKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVm
dCA9IChsZWZ0T2Zmc2V0aiArIGogKiAxNiArIGkgKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAodG9wT2Zmc2V0ICsgaSAqIDE2ICsg
aSAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLmxl
ZnQgPSAoNSArIGogKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIHNoaWZ0
ZXIuc3R5bGUudG9wID0gKDUgKyBqICogdG9wRnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzaGlmdGVyKTsKKyAgICAgICAgICAgICAgICB0ZXN0
LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzZXR1cEdyaWQ4eDgobGVmdE9mZnNldCwgdG9wT2Zmc2V0LCBsZWZ0
RnJhY3Rpb24sIHRvcEZyYWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7
IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gNCkKKyAgICAgICAgICAgICAgICB0b3BPZmZz
ZXQgKz0gNTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxlZnRPZmZzZXQ7CisgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICAgICAgICAgIGlm
IChqID09IDQpCisgICAgICAgICAgICAgICAgICAgIGxlZnRPZmZzZXRqICs9IDU7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICAgICAgICAgIHZhciBzaGlmdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnY29u
dGFpbmVyJyk7CisgICAgICAgICAgICAgICAgc2hpZnRlci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywg
J3NoaWZ0ZXI4eDgnKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IChs
ZWZ0T2Zmc2V0aiArIGogKiAyMCArIGkgKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAodG9wT2Zmc2V0ICsgaSAqIDIwICsgaSAqIHRv
cEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLmxlZnQgPSAo
NSArIGogKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5
bGUudG9wID0gKDUgKyBqICogdG9wRnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZChzaGlmdGVyKTsKKyAgICAgICAgICAgICAgICB0ZXN0LmFwcGVu
ZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBzZXR1cFRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVmVydGljYWwgc2hpZnRz
OgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgxMCwgMTAsIDAsIDAuMSkKKyAgICAgICAgLy8gSG9y
aXpvbnRhbCBzaGlmdHM6CisgICAgICAgIHNldHVwR3JpZDEweDEwKDIwMCwgMTAsIDAuMSwgMCk7
CisKKyAgICAgICAgLy8gQW5kIGluIDh4OCAod2hlcmUgZXhhY3RseSAwLjUgaXMgbW9yZSBjb21t
b24pCisgICAgICAgIHNldHVwR3JpZDh4OCgxMCwgMjAwLCAwLCAwLjEyNSk7CisgICAgICAgIHNl
dHVwR3JpZDh4OCgyMDAsIDIwMCwgMC4xMjUsIDApOworICAgIH0KKworICAgIHNldHVwVGVzdCgp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200888</attachid>
            <date>2013-05-07 03:41:56 -0700</date>
            <delta_ts>2013-06-07 04:57:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115304-20130507124101.patch</filename>
            <type>text/plain</type>
            <size>36602</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ5NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM1YzE5NTY5N2JhZjVk
YzU0NmM3NjgwMWNmY2M4ZjM3MTUwOTYzMy4uMjY3MWMwYjkwN2VkZTkwZjhlODFjOWU4YzRkN2Ux
YmE0MzVkMjNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA1LTA3ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgorCisgICAgICAgIFJF
R1JFU1NJT04oU1VCUElYRUxfTEFZT1VUKSBDb21wb3NpdGVkIGxheWVycyBjYW4gY2F1c2Ugb25l
IHBpeGVsIHNoaWZ0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE1MzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWNjZWxlcmF0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBibG9ja3MgYXQgc3VicGl4ZWwgb2Zm
c2V0cyB0byBzaGlmdCBiZWNhdXNlCisgICAgICAgIGFjY3VtdWxhdGVkIHN1YnBpeGVsIG9mZnNl
dHMgYXJlIGxvc3QgYmV0d2VlbiBlYWNoIGxheWVycy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IGxheWVyIGJvdW5kcyBhcmUgbm93IGNhbGN1bGF0ZWQgaW4gTGF5b3V0VW5pdHMsIGFuZCB0aGVp
cgorICAgICAgICBzdWJwaXhlbCBvZmZzZXQgdXNlZCB0byBlbnN1cmUgY29ycmVjdCBwaXhlbCBz
bmFwcGluZyBvZiB0aGUgYWNjZWxlcmF0ZWQKKyAgICAgICAgbGF5ZXIgaXRzZWxmLCBhbmQgcGFz
c2VkIG9uIHRvIHRoZSBsYXlvdXQgb2YgaXRzIGNvbnRlbnQuCisKKyAgICAgICAgVGVzdDogZmFz
dC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLmh0bWwKKworICAgICAgICAq
IFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVp
bGRPYmplY3RGb3JMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpwYWludEdyYXBoaWNz
TGF5ZXJDb250ZW50cyk6CisgICAgICAgICAgICBBdm9pZCB1c2luZyBMYXlvdXQgdHlwZXMgd2hl
biB0aGUgaW5wdXQgaXMgSW50IHR5cGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnN1YnBpeGVs
QWNjdW11bGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldFN1YnBp
eGVsQWNjdW11bGF0aW9uKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRQ
b2ludDo6ZnJhY3Rpb24pOgorICAgICAgICAoTGF5b3V0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVMYXllckJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAg
ICAgIChSZW5kZXJMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBv
c2l0ZWRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVBZnRlcldpZGdldFJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnJlc2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29udGVudHNCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpiYWNrZ3JvdW5kQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbXBvc2l0ZWRCb3VuZHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaDoKKyAgICAgICAgKFJlbmRlckxheWVyQmFj
a2luZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxvZ0xheWVySW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0
ZWRCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5o
OgorCiAyMDEzLTA1LTA3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZA
aW50ZWwuY29tPgogCiAgICAgICAgIEhhc2hUcmFpdHM8UmVmUHRyPFA+ID46OlBlZWtUeXBlIHNo
b3VsZCBiZSByYXcgcG9pbnRlciBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IDQ4MGRiY2VmZmI4ODMwMmY0YWU0ZmYyZDYzYjNkODg0Y2ZkNDY5NzcuLmIxNzBm
NmIwOGU5M2VkZDBjODQ3YTI5NjAxNDQ2ZGJmYjFkZWY5YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC0xMTE5LDYgKzExMTksNyBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks2Q0dSZWN0
CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTlG
bG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRT
aXplRQorX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfMTBMYXlvdXRSZWN0RQogX19aTjdX
ZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFDb3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENhY2hl
MjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhRWkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IDg5ZWU4NThlMmFhNDBkNWRlNzBjMTczZTkx
ZDkyMzcxOTg0MTQyMzMuLmI1NGRjYTk3Y2UwNTcxODBmMTdjNGUxNWY4NWM5OGU0YzBmZjIzOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJl
ZUFnZW50LmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Okxh
eWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvCiAg
ICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3RyaW5nLCBub2RlKSkKICAgICAgICAg
LnNldEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJl
ci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpKQogICAgICAgICAuc2V0TWVtb3J5KGJhY2tp
bmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkpCi0gICAgICAgIC5zZXRDb21wb3NpdGVk
Qm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkp
KQorICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkpKSkKICAgICAgICAgLnNl
dFBhaW50Q291bnQoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5yZXBhaW50Q291bnQoKSk7CiAK
ICAgICBpZiAobm9kZSAmJiBub2RlLT5zaGFkb3dIb3N0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGM3OGI1YmViMjY4
YzE4ZDJmYmVlNGZmMGVhY2Y4MDcxNDNhY2JmMDcuLmI2NGE1NjJmNDgwOWFlNWM3MTUyMDYzYjk0
OWZjYjkxYjA0MWE1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC0zMTUsMTMgKzMxNSwxMyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB2b2lkIEdyYXBo
aWNzTGF5ZXI6OnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKIHsKICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAg
ICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBvZmZzZXRGcm9tUmVuZGVyZXIoKTsKKyAgICAgICAgSW50
U2l6ZSBvZmZzZXQgPSBvZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICAgICAgY29udGV4dC50cmFu
c2xhdGUoLW9mZnNldCk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChjbGlwKTsKKyAg
ICAgICAgSW50UmVjdCBjbGlwUmVjdChjbGlwKTsKICAgICAgICAgY2xpcFJlY3QubW92ZShvZmZz
ZXQpOwogCi0gICAgICAgIG1fY2xpZW50LT5wYWludENvbnRlbnRzKHRoaXMsIGNvbnRleHQsIG1f
cGFpbnRpbmdQaGFzZSwgcGl4ZWxTbmFwcGVkSW50UmVjdChjbGlwUmVjdCkpOworICAgICAgICBt
X2NsaWVudC0+cGFpbnRDb250ZW50cyh0aGlzLCBjb250ZXh0LCBtX3BhaW50aW5nUGhhc2UsIGNs
aXBSZWN0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCAxMzExZmI2ZWJjN2Q4NGUxYTgyMTFkMWI3NDg5NmJl
MGI0NGU1NTE1Li45N2M4NDY0MTNlMTVjMjExNzNmOTUzZGI1NmJmNmQyOGVhODYwMDEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBA
IC0yNDgsNiArMjQ4LDkgQEAgcHVibGljOgogICAgIEludFNpemUgb2Zmc2V0RnJvbVJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tUmVuZGVyZXI7IH0KICAgICB2b2lkIHNldE9m
ZnNldEZyb21SZW5kZXJlcihjb25zdCBJbnRTaXplJiwgU2hvdWxkU2V0TmVlZHNEaXNwbGF5ID0g
U2V0TmVlZHNEaXNwbGF5KTsKIAorICAgIExheW91dFNpemUgc3VicGl4ZWxBY2N1bXVsYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N1YnBpeGVsQWNjdW11bGF0aW9uOyB9CisgICAgdm9pZCBzZXRT
dWJwaXhlbEFjY3VtdWxhdGlvbihjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbEFjY3VtdWxhdGlv
bikgeyBtX3N1YnBpeGVsQWNjdW11bGF0aW9uID0gc3VicGl4ZWxBY2N1bXVsYXRpb247IH0KKwog
ICAgIC8vIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgKHRoZSBsb2NhdGlvbiBvZiBpdHMgdG9w
LWxlZnQgY29ybmVyIGluIGl0cyBwYXJlbnQpCiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wb3NpdGlvbiA9IHA7IH0KQEAgLTQ5NCw3
ICs0OTcsMTAgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIC8vIE9mZnNldCBmcm9tIHRoZSBvd25p
bmcgcmVuZGVyZXIKICAgICBJbnRTaXplIG1fb2Zmc2V0RnJvbVJlbmRlcmVyOwotICAgIAorCisg
ICAgLy8gQWNjdW11bGF0ZWQgc3VicGl4ZWwgZXJyb3IgdG8gYmUgdXNlZCBieSBzdWJwaXhlbCBs
YXlvdXQgb2YgdGhlIGNvbnRlbnQuCisgICAgTGF5b3V0U2l6ZSBtX3N1YnBpeGVsQWNjdW11bGF0
aW9uOworCiAgICAgLy8gUG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBHcmFwaGlj
c0xheWVyCiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQzRCBtX2Fu
Y2hvclBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TGF5b3V0UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBv
aW50LmgKaW5kZXggNjQ3YTY1MWJlYWZiM2MwMTZkODI4Mjk2OTA3NTY1M2ExYTY0NDNjZS4uMGEx
NTg0ZTEwOGY2MjNjMmQ2ODQ2ZjU4M2U2MWRmMWU4YjFlNmJkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UG9pbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCkBAIC05MCw2ICs5MCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBMYXlvdXRQb2ludChtX3ksIG1feCk7CiAgICAgfQogCisg
ICAgTGF5b3V0UG9pbnQgZnJhY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIExh
eW91dFBvaW50KG1feC5mcmFjdGlvbigpLCBtX3kuZnJhY3Rpb24oKSk7CisgICAgfQorCiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgZXhwbGljaXQgTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50Jik7CiAg
ICAgZXhwbGljaXQgTGF5b3V0UG9pbnQoY29uc3QgUVBvaW50RiYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYzg2ZjdiYjI1MjljMjRkOWIzMjNkZDZkOTdl
YTRiOGJiOGVmNmMzNi4uZWI2ZmM4ZjhkNGNiZWZlYjM2MWE1NWI2Mzc5MWE4MzAyNTEzMmMwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zNzE3LDcgKzM3
MTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgIExheW91dFBvaW50IG9mZnNldEZy
b21Sb290OwogICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIs
IG9mZnNldEZyb21Sb290KTsKIAotICAgIEludFJlY3Qgcm9vdFJlbGF0aXZlQm91bmRzOworICAg
IExheW91dFJlY3Qgcm9vdFJlbGF0aXZlQm91bmRzOwogICAgIGJvb2wgcm9vdFJlbGF0aXZlQm91
bmRzQ29tcHV0ZWQgPSBmYWxzZTsKIAogICAgIGJvb2wgZGlkUXVhbnRpemVGb250cyA9IHRydWU7
CkBAIC01MzM5LDE0ICs1MzM5LDE0IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmFic29sdXRlQm91
bmRpbmdCb3goKSBjb25zdAogICAgIHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5n
Qm94KHJvb3QoKSkpOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJv
dW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQq
IG9mZnNldEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAor
TGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVy
TGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwg
Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKIHsKICAgICBpZiAoIWlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGltcHJvdmVk
IHRvIGRvIGEgY2hlY2sgbGlrZSBoYXNWaXNpYmxlTm9uQ29tcG9zaXRpbmdEZXNjZW5kYW50TGF5
ZXJzKCkgKGJ1ZyA5MjU4MCkuCiAgICAgaWYgKChmbGFncyAmIEV4Y2x1ZGVIaWRkZW5EZXNjZW5k
YW50cykgJiYgdGhpcyAhPSBhbmNlc3RvckxheWVyICYmICFoYXNWaXNpYmxlQ29udGVudCgpICYm
ICFoYXNWaXNpYmxlRGVzY2VuZGFudCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogCkBAIC01Mzg2LDcgKzUzODYsNyBAQCBJbnRS
ZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciog
YW5jZXN0b3JMYXllciwgY29ucwogICAgICAgICAgICAgTGF5b3V0UG9pbnQgYW5jZXN0b3JSZWxP
ZmZzZXQ7CiAgICAgICAgICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBh
bmNlc3RvclJlbE9mZnNldCk7CiAgICAgICAgICAgICBsb2NhbENsaXBSZWN0Lm1vdmVCeShhbmNl
c3RvclJlbE9mZnNldCk7Ci0gICAgICAgICAgICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdChs
b2NhbENsaXBSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBsb2NhbENsaXBSZWN0OwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01Mzk3LDcgKzUzOTcsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29u
cwogCiAgICAgaWYgKFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0gcmVmbGVjdGlvbkxheWVyKCkp
IHsKICAgICAgICAgaWYgKCFyZWZsZWN0aW9uLT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAg
ICAgSW50UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gcmVmbGVjdGlvbi0+Y2FsY3VsYXRlTGF5ZXJC
b3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
Y2hpbGRVbmlvbkJvdW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMs
IDAsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0ZShjaGls
ZFVuaW9uQm91bmRzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU0MTMsNyArNTQxMyw3IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBjb25zCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlz
dFNpemU7ICsraSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9y
ZGVyTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRl
ZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJC
b3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRS
ZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhp
cywgMCwgZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0
ZShjaGlsZFVuaW9uQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTQyNCw3
ICs1NDI0LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vy
TGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIElu
Y2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICAgICAgICAgIEludFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5j
YWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAg
ICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAgIHVu
aW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC01NDM1LDcgKzU0MzUsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVM
YXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29ucwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBjdXJMYXllciA9IG5vcm1hbEZsb3dMaXN0LT5hdChpKTsKICAgICAgICAgICAg
IGlmIChmbGFncyAmIEluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5p
c0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3QgY3VyQWJzQm91bmRzID0g
Y3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7
CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjdXJBYnNCb3VuZHMgPSBjdXJMYXllci0+Y2Fs
Y3VsYXRlTGF5ZXJCb3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAg
ICAgICB1bmlvbkJvdW5kcy51bml0ZShjdXJBYnNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC01NDYyLDcgKzU0NjIsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxh
dGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29ucwogICAg
ICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBhbmNlc3RvclJlbE9mZnNl
dCk7CiAgICAgdW5pb25Cb3VuZHMubW92ZUJ5KGFuY2VzdG9yUmVsT2Zmc2V0KTsKICAgICAKLSAg
ICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdCh1bmlvbkJvdW5kcyk7CisgICAgcmV0dXJuIHVu
aW9uQm91bmRzOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjbGVhckNsaXBSZWN0c0luY2x1ZGlu
Z0Rlc2NlbmRhbnRzKENsaXBSZWN0c1R5cGUgdHlwZVRvQ2xlYXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCmluZGV4IDkyNWFiMDAxM2Q0NmYyZWMwMmE2OTQyNzhjMzFmZjU4
MWRhYzIzMjEuLjMxMGFjNzkyYjQ2OTEwODBjNmU0YjhlMzU2MGVhZjkzNzA1OTM5ZWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC03MDEsNyArNzAxLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKICAgICAvLyBDYW4gcGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4K
LSAgICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBDYWxjdWxh
dGVMYXllckJvdW5kc0ZsYWdzID0gRGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MpIGNv
bnN0OworICAgIExheW91dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCA9IDAs
IENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNG
bGFncykgY29uc3Q7CiAgICAgCiAgICAgLy8gV0FSTklORzogVGhpcyBtZXRob2QgcmV0dXJucyB0
aGUgb2Zmc2V0IGZvciB0aGUgcGFyZW50IGFzIHRoaXMgaXMgd2hhdCB1cGRhdGVMYXllclBvc2l0
aW9ucyBleHBlY3RzLgogICAgIExheW91dFBvaW50IGNvbXB1dGVPZmZzZXRGcm9tUm9vdChib29s
JiBoYXNMYXllck9mZnNldCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDFkZWZiNTJiMzRhYTgzOWE5NDMzZmZiNDAwM2Yx
MTU0MWY5MDFlODkuLmFiOTkxYTcwZmY2YjVmZGNhNGIyODI0ZGNkNzEwMjE0YzU3MDMyODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC00MjYsNyArNDI2LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnNob3VsZENsaXBDb21w
b3NpdGVkQm91bmRzKCkgY29uc3QKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNv
bXBvc2l0ZWRCb3VuZHMoKQogewotICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBjb21wb3NpdG9y
KCktPmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMobV9vd25pbmdMYXllciwgbV9vd25pbmdMYXll
cik7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0b3IoKS0+Y2FsY3VsYXRl
Q29tcG9zaXRlZEJvdW5kcyhtX293bmluZ0xheWVyLCBtX293bmluZ0xheWVyKTsKIAogICAgIC8v
IENsaXAgdG8gdGhlIHNpemUgb2YgdGhlIGRvY3VtZW50IG9yIGVuY2xvc2luZyBvdmVyZmxvdy1z
Y3JvbGwgbGF5ZXIuCiAgICAgLy8gSWYgdGhpcyBvciBhbiBhbmNlc3RvciBpcyB0cmFuc2Zvcm1l
ZCwgd2UgY2FuJ3QgY3VycmVudGx5IGNvbXB1dGUgdGhlIGNvcnJlY3QgcmVjdCB0byBpbnRlcnNl
Y3Qgd2l0aC4KQEAgLTQ0OCw3ICs0NDgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlQ29tcG9zaXRlZEJvdW5kcygpCiAgICAgICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xh
eWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwogICAgICAgICBjbGlwcGluZ0JvdW5kcy5tb3Zl
KC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogCi0gICAgICAgIGxheWVyQm91bmRzLmludGVyc2Vj
dChwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBwaW5nQm91bmRzKSk7CisgICAgICAgIGxheWVyQm91
bmRzLmludGVyc2VjdChjbGlwcGluZ0JvdW5kcyk7CiAgICAgICAgIG1fYm91bmRzQ29uc3RyYWlu
ZWRCeUNsaXBwaW5nID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgbV9ib3VuZHNDb25zdHJh
aW5lZEJ5Q2xpcHBpbmcgPSBmYWxzZTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKQogICAgIGlmIChyZW5kZXJlcigp
LT5pc1JlbmRlclBhcnQoKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBp
bm5lckNvbXBvc2l0b3IgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHNDb21w
b3NpdG9yKHRvUmVuZGVyUGFydChyZW5kZXJlcigpKSkpIHsKICAgICAgICAgICAgIGlubmVyQ29t
cG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlU2l6ZSgpOwotICAgICAgICAgICAgaW5uZXJDb21w
b3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VMb2NhdGlvbihjb250ZW50c0JveCgpLmxvY2F0aW9u
KCkpOworICAgICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VMb2Nh
dGlvbihmbG9vcmVkSW50UG9pbnQoY29udGVudHNCb3goKS5sb2NhdGlvbigpKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC02NDcsMTIgKzY0NywxOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAgICAgICAgYW5jZXN0b3JDb21wb3Np
dGluZ0JvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3QoY29tcEFuY2VzdG9yLT5iYWNraW5nKCkt
PmNvbXBvc2l0ZWRCb3VuZHMoKSk7CiAgICAgfQogCi0gICAgSW50UmVjdCBsb2NhbENvbXBvc2l0
aW5nQm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb21wb3NpdGVkQm91bmRzKCkpOwotCi0g
ICAgSW50UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3Vu
ZHMpOwotICAgIEludFBvaW50IGRlbHRhOwotICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb1Bp
eGVsU25hcHBlZExheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOworICAgIExheW91dFJl
Y3QgbG9jYWxDb21wb3NpdGluZ0JvdW5kcyA9IGNvbXBvc2l0ZWRCb3VuZHMoKTsKKyAgICBMYXlv
dXRSZWN0IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMobG9jYWxDb21wb3NpdGluZ0JvdW5kcyk7
CisgICAgTGF5b3V0UG9pbnQgZGVsdGE7CisgICAgbV9vd25pbmdMYXllci0+Y29udmVydFRvTGF5
ZXJDb29yZHMoY29tcEFuY2VzdG9yLCBkZWx0YSk7CiAgICAgcmVsYXRpdmVDb21wb3NpdGluZ0Jv
dW5kcy5tb3ZlQnkoZGVsdGEpOworICAgIC8vIFdlIG11c3QgbW92ZSB0aGUgYm91bmRzIGJ5IHRo
ZSBzdWJwaXhlbCBwYXJ0IG9mIGRlbHRhLAorICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYmUgcGl4
ZWwgc25hcHBlZCB0byBhY3R1YWwgcGl4ZWxzLgorICAgIGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMu
bW92ZUJ5KGRlbHRhLmZyYWN0aW9uKCkpOworCisgICAgSW50UG9pbnQgcGl4ZWxEZWx0YSA9IGZs
b29yZWRJbnRQb2ludChkZWx0YSk7CisgICAgSW50UmVjdCBsb2NhbFBpeGVsQ29tcG9zaXRpbmdC
b3VuZHMgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMpOworICAg
IEludFJlY3QgcmVsYXRpdmVQaXhlbENvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxTbmFwcGVkSW50
UmVjdChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKTsKIAogICAgIEludFBvaW50IGdyYXBoaWNz
TGF5ZXJQYXJlbnRMb2NhdGlvbjsKICAgICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rv
ci0+YmFja2luZygpLT5oYXNDbGlwcGluZ0xheWVyKCkpIHsKQEAgLTY4MywyNSArNjg5LDI2IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyR2VvbWV0cnkoKQog
ICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0U2l6ZShwYXJlbnRDbGlwUmVjdC5z
aXplKCkpOwogCiAgICAgICAgIC8vIGJhY2tncm91bmRSZWN0IGlzIHJlbGF0aXZlIHRvIGNvbXBB
bmNlc3Rvciwgc28gc3VidHJhY3QgZGVsdGFYL2RlbHRhWSB0byBnZXQgYmFjayB0byBsb2NhbCBj
b29yZHMuCi0gICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRPZmZzZXRGcm9tUmVu
ZGVyZXIocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIGRlbHRhKTsKKyAgICAgICAgbV9hbmNl
c3RvckNsaXBwaW5nTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihwYXJlbnRDbGlwUmVjdC5s
b2NhdGlvbigpIC0gcGl4ZWxEZWx0YSk7CiAKICAgICAgICAgLy8gVGhlIHByaW1hcnkgbGF5ZXIg
aXMgdGhlbiBwYXJlbnRlZCBpbiwgYW5kIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gdGhpcyBjbGlw
cGluZyBsYXllci4KICAgICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uID0gcGFyZW50
Q2xpcFJlY3QubG9jYXRpb24oKTsKICAgICB9CiAKLSAgICBGbG9hdFNpemUgY29udGVudHNTaXpl
ID0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5zaXplKCk7CisgICAgRmxvYXRTaXplIGNvbnRl
bnRzU2l6ZSA9IHJlbGF0aXZlUGl4ZWxDb21wb3NpdGluZ0JvdW5kcy5zaXplKCk7CiAgICAgCiAg
ICAgaWYgKG1fY29udGVudHNDb250YWlubWVudExheWVyKSB7CiAgICAgICAgIG1fY29udGVudHND
b250YWlubWVudExheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7Ci0gICAgICAgIG1f
Y29udGVudHNDb250YWlubWVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJlbGF0aXZl
Q29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlv
bikpOworICAgICAgICBtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci0+c2V0UG9zaXRpb24oRmxv
YXRQb2ludChyZWxhdGl2ZVBpeGVsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBo
aWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwogICAgICAgICAvLyBVc2UgdGhlIHNhbWUgc2l6ZSBh
cyBtX2dyYXBoaWNzTGF5ZXIgc28gdHJhbnNmb3JtcyBiZWhhdmUgY29ycmVjdGx5LgogICAgICAg
ICBtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci0+c2V0U2l6ZShjb250ZW50c1NpemUpOwotICAg
ICAgICBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91
bmRzLmxvY2F0aW9uKCk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbiA9IHJl
bGF0aXZlUGl4ZWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpOwogICAgIH0KIAotICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZUNvbXBvc2l0aW5n
Qm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKLSAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcih0b0ludFNpemUobG9jYWxDb21w
b3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpKSk7Ci0gICAgCisgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KHJlbGF0aXZlUGl4ZWxDb21wb3NpdGluZ0JvdW5kcy5sb2Nh
dGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uKSk7CisgICAgbV9ncmFwaGljc0xh
eWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIodG9JbnRTaXplKGxvY2FsUGl4ZWxDb21wb3NpdGlu
Z0JvdW5kcy5sb2NhdGlvbigpKSk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRTdWJwaXhlbEFj
Y3VtdWxhdGlvbih0b0xheW91dFNpemUoZGVsdGEuZnJhY3Rpb24oKSkpOworCiAgICAgRmxvYXRT
aXplIG9sZFNpemUgPSBtX2dyYXBoaWNzTGF5ZXItPnNpemUoKTsKICAgICBpZiAob2xkU2l6ZSAh
PSBjb250ZW50c1NpemUpIHsKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRTaXplKGNvbnRl
bnRzU2l6ZSk7CkBAIC03MjEsNyArNzI4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSgpCiAgICAgSW50UmVjdCBjbGlwcGluZ0JveDsKICAg
ICBpZiAoR3JhcGhpY3NMYXllciogY2xpcExheWVyID0gY2xpcHBpbmdMYXllcigpKSB7CiAgICAg
ICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7Ci0gICAg
ICAgIGNsaXBMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjbGlwcGluZ0JveC5sb2NhdGlv
bigpIC0gbG9jYWxDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpKSk7CisgICAgICAgIGNsaXBM
YXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChjbGlwcGluZ0JveC5sb2NhdGlvbigpIC0gbG9j
YWxQaXhlbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICAgICAgY2xpcExheWVy
LT5zZXRTaXplKGNsaXBwaW5nQm94LnNpemUoKSk7CiAgICAgICAgIGNsaXBMYXllci0+c2V0T2Zm
c2V0RnJvbVJlbmRlcmVyKHRvSW50U2l6ZShjbGlwcGluZ0JveC5sb2NhdGlvbigpKSk7CiAgICAg
fQpAQCAtNzM5LDcgKzc0Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0xheWVyR2VvbWV0cnkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCk7CiAKICAg
ICAgICAgLy8gR2V0IGxheW91dCBib3VuZHMgaW4gdGhlIGNvb3JkcyBvZiBjb21wQW5jZXN0b3Ig
dG8gbWF0Y2ggcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy4KLSAgICAgICAgSW50UmVjdCBsYXll
ckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkpOworICAgICAgICBJbnRS
ZWN0IGxheWVyQm91bmRzKHBpeGVsRGVsdGEsIGJvcmRlckJveC5zaXplKCkpOwogCiAgICAgICAg
IC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxheWVyIGRpbWVuc2lvbnMKICAg
ICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1Pcmln
aW4oYm9yZGVyQm94KTsKQEAgLTk0OSw3ICs5NTYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
cmVzZXRDb250ZW50c1JlY3QoKQogewotICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRzQm94KCk7
CisgICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c0JveCgpKTsK
ICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzUmVjdChyZWN0KTsKICAgICBtX2dyYXBo
aWNzTGF5ZXItPnNldENvbnRlbnRzVGlsZVNpemUoSW50U2l6ZSgpKTsKICAgICBtX2dyYXBoaWNz
TGF5ZXItPnNldENvbnRlbnRzVGlsZVBoYXNlKEludFBvaW50KCkpOwpAQCAtMTc3MCwyNCArMTc3
NywyNCBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBlcnNwZWN0aXZl
T3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveAogfQogCiAvLyBSZXR1cm4gdGhlIG9mZnNl
dCBmcm9tIHRoZSB0b3AtbGVmdCBvZiB0aGlzIGNvbXBvc2l0aW5nIGxheWVyIGF0IHdoaWNoIHRo
ZSByZW5kZXJlcidzIGNvbnRlbnRzIGFyZSBwYWludGVkLgotSW50U2l6ZSBSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0CitMYXlvdXRTaXpl
IFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gSW50U2l6ZSgtbV9jb21wb3NpdGVkQm91bmRzLngoKSwgLW1fY29t
cG9zaXRlZEJvdW5kcy55KCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKC1tX2NvbXBvc2l0ZWRC
b3VuZHMueCgpLCAtbV9jb21wb3NpdGVkQm91bmRzLnkoKSk7CiB9CiAKLUludFJlY3QgUmVuZGVy
TGF5ZXJCYWNraW5nOjpjb250ZW50c0JveCgpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVy
QmFja2luZzo6Y29udGVudHNCb3goKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKS0+aXNC
b3goKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAotICAgIEludFJlY3QgY29udGVudHNSZWN0OworICAgIExheW91dFJlY3QgY29udGVu
dHNSZWN0OwogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAocmVuZGVyZXIoKS0+aXNWaWRlbygp
KSB7CiAgICAgICAgIFJlbmRlclZpZGVvKiB2aWRlb1JlbmRlcmVyID0gdG9SZW5kZXJWaWRlbyhy
ZW5kZXJlcigpKTsKICAgICAgICAgY29udGVudHNSZWN0ID0gdmlkZW9SZW5kZXJlci0+dmlkZW9C
b3goKTsKICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICBjb250ZW50c1JlY3QgPSBwaXhlbFNu
YXBwZWRJbnRSZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jb250ZW50Qm94UmVjdCgpKTsK
KyAgICAgICAgY29udGVudHNSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRC
b3hSZWN0KCk7CiAKICAgICBjb250ZW50c1JlY3QubW92ZShjb250ZW50T2Zmc2V0SW5Db21wb3N0
aW5nTGF5ZXIoKSk7CiAgICAgcmV0dXJuIGNvbnRlbnRzUmVjdDsKQEAgLTE4MTUsOSArMTgyMiw5
IEBAIEludFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpiYWNrZ3JvdW5kQm94KCkgY29uc3QKICAg
ICBpZiAoIXJlbmRlcmVyKCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAK
LSAgICBJbnRSZWN0IHBpeGVsU25hcHBlZEJhY2tncm91bmRCb3ggPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGJhY2tncm91bmRSZWN0Rm9yQm94KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKSk7Ci0gICAg
cGl4ZWxTbmFwcGVkQmFja2dyb3VuZEJveC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdM
YXllcigpKTsKLSAgICByZXR1cm4gcGl4ZWxTbmFwcGVkQmFja2dyb3VuZEJveDsKKyAgICBMYXlv
dXRSZWN0IGJhY2tncm91bmRCb3ggPSBiYWNrZ3JvdW5kUmVjdEZvckJveCh0b1JlbmRlckJveChy
ZW5kZXJlcigpKSk7CisgICAgYmFja2dyb3VuZEJveC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBv
c3RpbmdMYXllcigpKTsKKyAgICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdChiYWNrZ3JvdW5k
Qm94KTsKIH0KIAogR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJCYWNraW5nOjpwYXJlbnRGb3JT
dWJsYXllcnMoKSBjb25zdApAQCAtMTk2Myw3ICsxOTcwLDggQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IEdyYXAKICAgICAgICAgcGFpbnRGbGFncyB8PSBSZW5kZXJMYXllcjo6UGFpbnRMYXllclBhaW50
aW5nU2tpcFJvb3RCYWNrZ3JvdW5kOwogICAgIAogICAgIC8vIEZJWE1FOiBHcmFwaGljc0xheWVy
cyBuZWVkIGEgd2F5IHRvIHNwbGl0IGZvciBSZW5kZXJSZWdpb25zLgotICAgIFJlbmRlckxheWVy
OjpMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8obV9vd25pbmdMYXllciwgcGFpbnREaXJ0
eVJlY3QsIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSk7CisgICAgTGF5b3V0U2l6ZSBzdWJQ
aXhlbEFjY3VtdWxhdGlvbiA9IGdyYXBoaWNzTGF5ZXItPnN1YnBpeGVsQWNjdW11bGF0aW9uKCk7
CisgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyhtX293bmlu
Z0xheWVyLCBwYWludERpcnR5UmVjdCwgcGFpbnRCZWhhdmlvciwgc3ViUGl4ZWxBY2N1bXVsYXRp
b24pOwogICAgIG1fb3duaW5nTGF5ZXItPnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmNvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycygpKQpAQCAtMjAwNCw3ICsyMDEyLDcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllciwgR3JhcGgKICAgICAgICAgLy8gVGhlIGRpcnR5UmVjdCBpcyBpbiB0aGUgY29vcmRz
IG9mIHRoZSBwYWludGluZyByb290LgogICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGNsaXA7
CiAgICAgICAgIGlmICghKHBhaW50aW5nUGhhc2UgJiBHcmFwaGljc0xheWVyUGFpbnRPdmVyZmxv
d0NvbnRlbnRzKSkKLSAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoY29tcG9zaXRlZEJv
dW5kcygpKTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVj
dChjb21wb3NpdGVkQm91bmRzKCkpKTsKIAogICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSB0aGUg
c2FtZSByb290IGFzIGZvciBoaXQgdGVzdGluZywgYmVjYXVzZSBib3RoIG1ldGhvZHMgY2FuIGNv
bXB1dGUgYW5kIGNhY2hlIGNsaXBSZWN0cy4KICAgICAgICAgcGFpbnRJbnRvTGF5ZXIoZ3JhcGhp
Y3NMYXllciwgJmNvbnRleHQsIGRpcnR5UmVjdCwgUGFpbnRCZWhhdmlvck5vcm1hbCwgcGFpbnRp
bmdQaGFzZSk7CkBAIC0yMjQwLDEyICsyMjQ4LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBtX2dyYXBoaWNzTGF5ZXItPnJlc3VtZUFuaW1hdGlv
bnMoKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0ZWRCb3VuZHMo
KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0ZWRCb3VuZHMo
KSBjb25zdAogewogICAgIHJldHVybiBtX2NvbXBvc2l0ZWRCb3VuZHM7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IEludFJlY3QmIGJvdW5k
cykKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IExh
eW91dFJlY3QmIGJvdW5kcykKIHsKICAgICBtX2NvbXBvc2l0ZWRCb3VuZHMgPSBib3VuZHM7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKaW5kZXgg
NmM0Yzg3YWQxODczNmNlYTc3MmZlZTE1MWM0OTEyNzczZWMyMWFlNi4uNTc1MGJlODBhYjExNGY3
MGJkYzE1MWJmMmM3ZDg2NDA3ZDFhMjExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuaApAQCAtMTQxLDggKzE0MSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lID0gMCk7CiAgICAgdm9pZCByZXN1bWVB
bmltYXRpb25zKCk7CiAKLSAgICBJbnRSZWN0IGNvbXBvc2l0ZWRCb3VuZHMoKSBjb25zdDsKLSAg
ICB2b2lkIHNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgSW50UmVjdCYpOworICAgIExheW91dFJl
Y3QgY29tcG9zaXRlZEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcG9zaXRlZEJvdW5k
cyhjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7
CiAgICAgCiAgICAgdm9pZCB1cGRhdGVBZnRlcldpZGdldFJlc2l6ZSgpOwpAQCAtMTc1LDcgKzE3
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmVyaWZ5Tm90UGFpbnRpbmcoKTsKICNl
bmRpZgogCi0gICAgSW50UmVjdCBjb250ZW50c0JveCgpIGNvbnN0OworICAgIExheW91dFJlY3Qg
Y29udGVudHNCb3goKSBjb25zdDsKICAgICBJbnRSZWN0IGJhY2tncm91bmRCb3goKSBjb25zdDsK
ICAgICAKICAgICAvLyBGb3IgaW5mb3JtYXRpdmUgcHVycG9zZXMgb25seS4KQEAgLTIyOSw3ICsy
MjksNyBAQCBwcml2YXRlOgogCiAgICAgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFpbnRp
bmdQaGFzZUZvclByaW1hcnlMYXllcigpIGNvbnN0OwogICAgIAotICAgIEludFNpemUgY29udGVu
dE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBjb250ZW50
T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMgdHJhbnNm
b3JtIG9yaWdpbiBpbiBwaXhlbHMuCiAgICAgRmxvYXRQb2ludDNEIGNvbXB1dGVUcmFuc2Zvcm1P
cmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMg
cGVyc3BlY3RpdmUgb3JpZ2luIGluIHBpeGVscy4KQEAgLTI5Nyw3ICsyOTcsNyBAQCBwcml2YXRl
OgogCiAgICAgdWludDY0X3QgbV9zY3JvbGxMYXllcklEOwogCi0gICAgSW50UmVjdCBtX2NvbXBv
c2l0ZWRCb3VuZHM7CisgICAgTGF5b3V0UmVjdCBtX2NvbXBvc2l0ZWRCb3VuZHM7CiAKICAgICBi
b29sIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHM7IC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFk
ZSBub24temVybyB0byBtYWtlIHRyYW5zZm9ybS1vcmlnaW4gd29yawogICAgIGJvb2wgbV9ib3Vu
ZHNDb25zdHJhaW5lZEJ5Q2xpcHBpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDUwOWI1OTFlNjg3ODZiYjk2MDJlMmJm
YmVhNDlhNDYxOGIxOGU3N2QuLjFjYzkyYjI2OTYyZTdhNDZhMGZjMjk0OGVhYmUxZmYwMWM5YmI4
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCkBAIC02MTgsNyArNjE4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmxvZ0xheWVySW5mbyhjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGludCBkZXB0aCkKICAgICAg
ICAgbV9zZWNvbmRhcnlCYWNraW5nU3RvcmVCeXRlcyArPSBiYWNraW5nLT5iYWNraW5nU3RvcmVN
ZW1vcnlFc3RpbWF0ZSgpOwogICAgIH0KIAotICAgIExPRyhDb21wb3NpdGluZywgIiUqcCAlZHgl
ZCAlLjJmS0IgJXMoJXMpICVzXG4iLCAxMiArIGRlcHRoICogMiwgbGF5ZXIsIGJhY2tpbmctPmNv
bXBvc2l0ZWRCb3VuZHMoKS53aWR0aCgpLCBiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkuaGVp
Z2h0KCksCisgICAgTE9HKENvbXBvc2l0aW5nLCAiJSpwICVkeCVkICUuMmZLQiAlcyglcykgJXNc
biIsIDEyICsgZGVwdGggKiAyLCBsYXllciwgYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpLndp
ZHRoKCkucm91bmQoKSwgYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpLmhlaWdodCgpLnJvdW5k
KCksCiAgICAgICAgIGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgLyAxMDI0
LAogICAgICAgICBiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPmNvbnRlbnRzT3BhcXVlKCkgPyAi
b3BhcXVlICIgOiAiIiwKICAgICAgICAgbG9nUmVhc29uc0ZvckNvbXBvc2l0aW5nKGxheWVyKSwg
bGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTc3MywxMCArNzczLDEwIEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXBhaW50SW5Db21wb3NpdGVkQW5jZXN0b3IoUmVuZGVy
TGF5ZXIqIGxheWVyLCBjb25zCiAKIC8vIFRoZSBib3VuZHMgb2YgdGhlIEdyYXBoaWNzTGF5ZXIg
Y3JlYXRlZCBmb3IgYSBjb21wb3NpdGluZyBsYXllciBpcyB0aGUgdW5pb24gb2YgdGhlIGJvdW5k
cyBvZiBhbGwgdGhlIGRlc2NlbmRhbnQKIC8vIFJlbmRlckxheWVycyB0aGF0IGFyZSByZW5kZXJl
ZCBieSB0aGUgY29tcG9zaXRlZCBSZW5kZXJMYXllci4KLUludFJlY3QgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
ciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CitMYXlvdXRSZWN0IFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjb25zdCBSZW5k
ZXJMYXllciogbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAog
ewogICAgIGlmICghY2FuQmVDb21wb3NpdGVkKGxheWVyKSkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKICAgICByZXR1cm4gbGF5ZXItPmNh
bGN1bGF0ZUxheWVyQm91bmRzKGFuY2VzdG9yTGF5ZXIsIDAsIFJlbmRlckxheWVyOjpEZWZhdWx0
Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyB8IFJlbmRlckxheWVyOjpFeGNsdWRlSGlkZGVuRGVz
Y2VuZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0cmFpbkZvck1hc2spOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXgg
YTM1ZTVjMjdhYzBlZWRhOWJmZmMyNTVjYWM0ZDJlZDFlMGZjNDQ1NC4uNWYyNjU1ZWZmNWQyMGE3
MTFjNDEzMjViODhiMWNjMWQxN2IzYTkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXF1aXJlZCBmb3IgY29tcG9z
aXRpbmcgbGF5ZXIgYW5kIGl0cyBjaGlsZGVybiwgcmVsYXRpdmUgdG8gYW5jZXN0b3JMYXllci4K
ICAgICAvLyBJZiBsYXllckJvdW5kaW5nQm94IGlzIG5vdCAwLCBvbiByZXR1cm4gaXQgY29udGFp
bnMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIGxheWVyIG9ubHkuCi0gICAgSW50UmVjdCBjYWxj
dWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiwgY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0OworICAgIExheW91dFJlY3QgY2FsY3VsYXRlQ29tcG9z
aXRlZEJvdW5kcyhjb25zdCBSZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rv
ckxheWVyKSBjb25zdDsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGFwcHJvcHJpYXRlIGxheWVycyB3
aGVuIHRoZSBnaXZlbiBSZW5kZXJMYXllciBzdGFydHMgb3Igc3RvcHMgYmVpbmcgY29tcG9zaXRl
ZC4KICAgICB2b2lkIHJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKFJlbmRlckxheWVyKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggMGEz
MmE5NzhmODk3OGVkMDk2ZWVkMmE1Zjg5MTljNDY1NDdiOWQxYy4uYjg3NjdmZTc3YmNmNWM5Yjlh
NmIyZjRjYjE5OTJlNzMyMjI0YjgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtODksNiArODksMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UG9pbnQmIHApCiAgICAgcmV0dXJuIHRzIDw8
ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwogfQogCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMYXlvdXRSZWN0JiByKQoreworICAgIC8v
IEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBp
bnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgorICAg
IHJldHVybiB0cyA8PCBwaXhlbFNuYXBwZWRJbnRSZWN0KHIpOworfQorCiBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMYXlvdXRQb2ludCYgcCkKIHsKICAgICAv
LyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaW50ZWQgYXMgZmxvYXRzLiBLZWVwaW5nIHRoZW0g
aW50cyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwZXJ2aW91cyB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IDNhODM4NDlk
NTE1MjExNGZhMDA4Y2VhZDEzY2FlODIwNmEyODQxNmMuLjM5MDYxYTBmZmU3YjczNmI2NTc1Mjky
ZDM5NzQwYzRhNGIxNDlkZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFBvaW50
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0UmVjdDsK
IGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFRleHRTdHJlYW07CiAKQEAgLTcxLDYgKzcyLDcg
QEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlck9iamVjdCYgbywgUmVuZGVyQXNUZXgKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIGNvbnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBJbnRSZWN0Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBMYXlvdXRQb2ludCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgTGF5b3V0UmVjdCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgRmxvYXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgRmxvYXRTaXplJik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4OWU3YmNlNjE2YjdlNWJkMjUzNWZiODlh
NmIzYzUyMjU4ZTA1NzdiLi4xZmJiYzA2ZTJhYjM4YzA3OGVhOGE0YjEwZjU3ZDk2NDIzZDA2Zjcz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDUtMDIgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihTVUJQSVhF
TF9MQVlPVVQpIENvbXBvc2l0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBvbmUgcGl4ZWwgc2hpZnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc3Vi
LXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy1leHBlY3RlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMuaHRt
bDogQWRkZWQuCisKIDIwMTMtMDUtMDYgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5j
b20+CiAKICAgICAgICAgSGVhcC11c2UtYWZ0ZXItZnJlZSBpbiBXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpkZWxldGVMaW5lCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9z
dWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy1leHBlY3RlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBjMzFmZjVjYTUxNTM2NDllMjI4MzhmYzA4YTRhZDEzZWQyNTJiOTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9z
aXRlZC1sYXllcnMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbD4KKzxoZWFk
PgorPHN0eWxlPgorICAgICN0ZXN0IHsgCisgICAgICAgIG1hcmdpbjogNXB4OworICAgIH0KKyAg
ICAuY29udGFpbmVyIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBvcGFj
aXR5OiAwLjk1OworICAgIH0KKyAgICAuc2hpZnRlciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CisgICAgICAgIHdpZHRoOiAx
Mi41cHg7CisgICAgICAgIGhlaWdodDogMTIuNXB4OworICAgIH0KKyAgICAuc2hpZnRlcjh4OCB7
CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
YmxhY2s7CisgICAgICAgIHdpZHRoOiAxNi41cHg7CisgICAgICAgIGhlaWdodDogMTYuNXB4Owor
ICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9dGVzdD4KKzwvZGl2Pgor
PHNjcmlwdD4KKyAgICBmdW5jdGlvbiBzZXR1cEdyaWQxMHgxMChsZWZ0T2Zmc2V0LCB0b3BPZmZz
ZXQsIGxlZnRGcmFjdGlvbiwgdG9wRnJhY3Rpb24pCisgICAgeworICAgICAgICB2YXIgdGVzdCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gNSkKKyAgICAgICAgICAgICAg
ICB0b3BPZmZzZXQgKz0gNTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxlZnRPZmZz
ZXQ7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaiA9PSA1KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1
OworICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2Ns
YXNzJywgJ2NvbnRhaW5lcicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRl
KCdjbGFzcycsICdzaGlmdGVyJyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxl
ZnQgPSAobGVmdE9mZnNldGogKyBqICogMTYgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAg
ICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAxNiAr
IGkgKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5s
ZWZ0ID0gKDUgKyBqICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlm
dGVyLnN0eWxlLnRvcCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVz
dC5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0dXBHcmlkOHg4KGxlZnRPZmZzZXQsIHRvcE9mZnNldCwgbGVm
dEZyYWN0aW9uLCB0b3BGcmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID09IDQpCisgICAgICAgICAgICAgICAgdG9wT2Zm
c2V0ICs9IDU7CisgICAgICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zmc2V0OworICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaiA9PSA0KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1OworICAgICAg
ICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2Nv
bnRhaW5lcicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdjbGFzcycs
ICdzaGlmdGVyOHg4Jyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAo
bGVmdE9mZnNldGogKyBqICogMjAgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAg
ICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAyMCArIGkgKiB0
b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5sZWZ0ID0g
KDUgKyBqICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0
eWxlLnRvcCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBj
b250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVzdC5hcHBl
bmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc2V0dXBUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIFZlcnRpY2FsIHNoaWZ0
czoKKyAgICAgICAgc2V0dXBHcmlkMTB4MTAoMTAsIDEwLCAwLCAwLjEpCisgICAgICAgIC8vIEhv
cml6b250YWwgc2hpZnRzOgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgyMDAsIDEwLCAwLjEsIDAp
OworCisgICAgICAgIC8vIEFuZCBpbiA4eDggKHdoZXJlIGV4YWN0bHkgMC41IGlzIG1vcmUgY29t
bW9uKQorICAgICAgICBzZXR1cEdyaWQ4eDgoMTAsIDIwMCwgMCwgMC4xMjUpOworICAgICAgICBz
ZXR1cEdyaWQ4eDgoMjAwLCAyMDAsIDAuMTI1LCAwKTsKKyAgICB9CisKKyAgICBzZXR1cFRlc3Qo
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21w
b3NpdGVkLWxheWVycy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVs
LWNvbXBvc2l0ZWQtbGF5ZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgyMWI1YzE0ZDUyMjM2ZjMzYTM2
ZjIxNjI2NjY2MWVmZmYwOWNiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
c3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy5odG1sCkBAIC0wLDAgKzEsOTUg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI3Rlc3QgeyAKKyAgICAgICAgbWFyZ2lu
OiA1cHg7CisgICAgfQorICAgICN0ZXN0LmNvbXBvc2l0ZSA+IC5jb250YWluZXIgeworICAgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAgICAgb3BhY2l0eTogMC45
NTsKKyAgICB9CisgICAgLmNvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB9CisgICAgLnNoaWZ0ZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3aWR0aDogMTIuNXB4OworICAg
ICAgICBoZWlnaHQ6IDEyLjVweDsKKyAgICB9CisgICAgLnNoaWZ0ZXI4eDggeworICAgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOworICAg
ICAgICB3aWR0aDogMTYuNXB4OworICAgICAgICBoZWlnaHQ6IDE2LjVweDsKKyAgICB9Cis8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPXRlc3QgY2xhc3M9Y29tcG9zaXRlPgorPC9k
aXY+Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHNldHVwR3JpZDEweDEwKGxlZnRPZmZzZXQsIHRv
cE9mZnNldCwgbGVmdEZyYWN0aW9uLCB0b3BGcmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0
ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA9PSA1KQorICAgICAgICAg
ICAgICAgIHRvcE9mZnNldCArPSA1OworICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXRqID0gbGVm
dE9mZnNldDsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7IGorKykgeworICAg
ICAgICAgICAgICAgIGlmIChqID09IDUpCisgICAgICAgICAgICAgICAgICAgIGxlZnRPZmZzZXRq
ICs9IDU7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIHZhciBzaGlmdGVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0
ZSgnY2xhc3MnLCAnY29udGFpbmVyJyk7CisgICAgICAgICAgICAgICAgc2hpZnRlci5zZXRBdHRy
aWJ1dGUoJ2NsYXNzJywgJ3NoaWZ0ZXInKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5
bGUubGVmdCA9IChsZWZ0T2Zmc2V0aiArIGogKiAxNiArIGkgKiBsZWZ0RnJhY3Rpb24pICsgInB4
IgorICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAodG9wT2Zmc2V0ICsgaSAq
IDE2ICsgaSAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0
eWxlLmxlZnQgPSAoNSArIGogKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAg
IHNoaWZ0ZXIuc3R5bGUudG9wID0gKDUgKyBqICogdG9wRnJhY3Rpb24pICsgInB4IgorICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzaGlmdGVyKTsKKyAgICAgICAgICAgICAg
ICB0ZXN0LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXR1cEdyaWQ4eDgobGVmdE9mZnNldCwgdG9wT2Zmc2V0
LCBsZWZ0RnJhY3Rpb24sIHRvcEZyYWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gNCkKKyAgICAgICAgICAgICAgICB0
b3BPZmZzZXQgKz0gNTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxlZnRPZmZzZXQ7
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICAgICAg
ICAgIGlmIChqID09IDQpCisgICAgICAgICAgICAgICAgICAgIGxlZnRPZmZzZXRqICs9IDU7Cisg
ICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICAgICAgICAgIHZhciBzaGlmdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnY2xhc3Mn
LCAnY29udGFpbmVyJyk7CisgICAgICAgICAgICAgICAgc2hpZnRlci5zZXRBdHRyaWJ1dGUoJ2Ns
YXNzJywgJ3NoaWZ0ZXI4eDgnKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVm
dCA9IChsZWZ0T2Zmc2V0aiArIGogKiAyMCArIGkgKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAodG9wT2Zmc2V0ICsgaSAqIDIwICsg
aSAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnN0eWxlLmxl
ZnQgPSAoNSArIGogKiBsZWZ0RnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIHNoaWZ0
ZXIuc3R5bGUudG9wID0gKDUgKyBqICogdG9wRnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzaGlmdGVyKTsKKyAgICAgICAgICAgICAgICB0ZXN0
LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzZXR1cFRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVmVydGljYWwg
c2hpZnRzOgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgxMCwgMTAsIDAsIDAuMSkKKyAgICAgICAg
Ly8gSG9yaXpvbnRhbCBzaGlmdHM6CisgICAgICAgIHNldHVwR3JpZDEweDEwKDIwMCwgMTAsIDAu
MSwgMCk7CisKKyAgICAgICAgLy8gQW5kIGluIDh4OCAod2hlcmUgZXhhY3RseSAwLjUgaXMgbW9y
ZSBjb21tb24pCisgICAgICAgIHNldHVwR3JpZDh4OCgxMCwgMjAwLCAwLCAwLjEyNSk7CisgICAg
ICAgIHNldHVwR3JpZDh4OCgyMDAsIDIwMCwgMC4xMjUsIDApOworICAgIH0KKworICAgIHNldHVw
VGVzdCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204023</attachid>
            <date>2013-06-07 04:57:13 -0700</date>
            <delta_ts>2013-08-13 08:49:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115304-20130607135539.patch</filename>
            <type>text/plain</type>
            <size>33867</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE5ODM0MzQ4N2U5ZjNj
MWFmM2Y5MGYwYzkwNzdkZTc1ZGVlYTBiNC4uNWY5MWI2M2QyMzc1ODY0MWZkYWU4NzJkNzI2NmEw
MDNkMTljNmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTA2LTA3ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgorCisgICAgICAgIFJF
R1JFU1NJT04oU1VCUElYRUxfTEFZT1VUKSBDb21wb3NpdGVkIGxheWVycyBjYW4gY2F1c2Ugb25l
IHBpeGVsIHNoaWZ0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE1MzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWNjZWxlcmF0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBibG9ja3MgYXQgc3VicGl4ZWwgb2Zm
c2V0cyB0byBzaGlmdCBiZWNhdXNlCisgICAgICAgIGFjY3VtdWxhdGVkIHN1YnBpeGVsIG9mZnNl
dHMgYXJlIGxvc3QgYmV0d2VlbiBlYWNoIGxheWVycy4KKworICAgICAgICBUbyBzb2x2ZSB0aGlz
IGxheWVyIGJvdW5kcyBhcmUgbm93IGNhbGN1bGF0ZWQgaW4gTGF5b3V0VW5pdHMsIGFuZCB0aGVp
cgorICAgICAgICBzdWJwaXhlbCBvZmZzZXQgc2F2ZWQgc28gaXQgY2FuIGJlIHVzZWQgdG8gZW5z
dXJlIGNvcnJlY3QgcGl4ZWwtc25hcHBpbmcKKyAgICAgICAgZHVyaW5nIHBhaW50aW5nLgorCisg
ICAgICAgIFRlc3Q6IGZhc3Qvc3ViLXBpeGVsL3N1Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy5o
dG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0xheW91dFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRQb2ludDo6ZnJh
Y3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUxheWVyQm91bmRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUFmdGVyV2lkZ2V0UmVzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NM
YXllckdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVz
ZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpj
b250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpjb250ZW50c0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmJhY2tncm91bmRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjpjb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6c2V0Q29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsb2dMYXllcklu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGVD
b21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuaDoKKwogMjAxMy0wNi0wNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEZyYW1lIGZsYXR0ZW5pbmc6IGNyYXNoIHdoZW4gY2hpbGQgaWZyYW1lIGlzIHJl
bW92ZWQgZHVyaW5nIGJlZm9yZWxvYWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGNlYmMyZGMw
ZjBkMDYyMTdhNTFlNTYzYjQzM2U4MmEzMzllOTMxYjQuLmI3ODdmNjhiMjVjMGE1MmZmY2Y0ZTU3
NmFlNGM0NTBiMjdiNTFlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMTMwLDYgKzExMzAs
NyBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks2Q0dSZWN0CiBfX1pON1dlYkNvcmU5Rmxv
YXRSZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSSzZDR1Np
emUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRTaXplRQorX19aTjdXZWJDb3Jl
OUZsb2F0UmVjdEMxRVJLTlNfMTBMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEz
Zm9udERhdGFDb3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRh
Q291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuY3BwCmluZGV4IDg5ZWU4NThlMmFhNDBkNWRlNzBjMTczZTkxZDkyMzcxOTg0MTQyMzMuLmI1
NGRjYTk3Y2UwNTcxODBmMTdjNGUxNWY4NWM5OGU0YzBmZjIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApAQCAtMTgw
LDcgKzE4MCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXI+IElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvCiAgICAgICAgIC5zZXROb2RlSWQo
aWRGb3JOb2RlKGVycm9yU3RyaW5nLCBub2RlKSkKICAgICAgICAgLnNldEJvdW5kcyhidWlsZE9i
amVjdEZvckludFJlY3QoZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QoKSkpKQogICAgICAgICAuc2V0TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1l
bW9yeUVzdGltYXRlKCkpCi0gICAgICAgIC5zZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0
Rm9ySW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkpKQorICAgICAgICAuc2V0Q29t
cG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoZW5jbG9zaW5nSW50UmVjdChiYWNr
aW5nLT5jb21wb3NpdGVkQm91bmRzKCkpKSkKICAgICAgICAgLnNldFBhaW50Q291bnQoYmFja2lu
Zy0+Z3JhcGhpY3NMYXllcigpLT5yZXBhaW50Q291bnQoKSk7CiAKICAgICBpZiAobm9kZSAmJiBu
b2RlLT5zaGFkb3dIb3N0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9MYXlvdXRQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TGF5b3V0UG9pbnQuaAppbmRleCA2NDdhNjUxYmVhZmIzYzAxNmQ4MjgyOTY5MDc1NjUzYTFhNjQ0
M2NlLi4wYTE1ODRlMTA4ZjYyM2MyZDY4NDZmNTgzZTYxZGYxZThiMWU2YmRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRQb2ludC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFBvaW50LmgKQEAgLTkwLDYgKzkw
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExheW91dFBvaW50KG1feSwgbV94KTsKICAg
ICB9CiAKKyAgICBMYXlvdXRQb2ludCBmcmFjdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gTGF5b3V0UG9pbnQobV94LmZyYWN0aW9uKCksIG1feS5mcmFjdGlvbigpKTsKKyAgICB9
CisKICNpZiBQTEFURk9STShRVCkKICAgICBleHBsaWNpdCBMYXlvdXRQb2ludChjb25zdCBRUG9p
bnQmKTsKICAgICBleHBsaWNpdCBMYXlvdXRQb2ludChjb25zdCBRUG9pbnRGJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAxZTFiMjgxNzhmOTBlOGU3MDg1
YjBmYTJiZWVhMzJhY2NhMTgwOGQ4Li5jMjgxZWMwMTNjODk1YTU2YmFlZmI4YTgyYTU4YzMxNjFk
M2NlNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM3
MjgsNyArMzcyOCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRp
emF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYm9vbCYKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIEludFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9v
bCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCitib29sIFJlbmRlckxheWVyOjpzZXR1cENs
aXBQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IHBhaW50aW5nSW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBMYXlvdXRS
ZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVk
KQogewogICAgIGlmICghcmVuZGVyZXIoKS0+aGFzQ2xpcFBhdGgoKSB8fCBjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM3NzEsNyArMzc3MSw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mCiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci1QYXNzT3duUHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBSZW5kZXJMYXllcjo6c2V0
dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTGF5ZXJQYWludGluZ0luZm8mIHBh
aW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MsIGNvbnN0IExheW91dFBvaW50
JiBvZmZzZXRGcm9tUm9vdCwgSW50UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzLCBib29sJiByb290
UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkKK1Bhc3NPd25QdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJI
ZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRG
bGFncywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBMYXlvdXRSZWN0JiByb290
UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKQogewogICAg
IGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMzg2Miw3ICszODYyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICBMYXlv
dXRQb2ludCBvZmZzZXRGcm9tUm9vdDsKICAgICBjb252ZXJ0VG9MYXllckNvb3JkcyhwYWludGlu
Z0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCk7CiAKLSAgICBJbnRSZWN0IHJvb3RSZWxh
dGl2ZUJvdW5kczsKKyAgICBMYXlvdXRSZWN0IHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICBib29s
IHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9yIG92ZXJm
bG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQpAQCAtNTQxMiwxNCAr
NTQxMiwxNCBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjphYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29u
c3QKICAgICByZXR1cm4gcGl4ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0JveChyb290KCkpKTsK
IH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9v
dCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKK0xheW91dFJlY3QgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rv
ckxheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIENhbGN1bGF0ZUxheWVy
Qm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVy
KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCB0byBkbyBhIGNoZWNr
IGxpa2UgaGFzVmlzaWJsZU5vbkNvbXBvc2l0aW5nRGVzY2VuZGFudExheWVycygpIChidWcgOTI1
ODApLgogICAgIGlmICgoZmxhZ3MgJiBFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMpICYmIHRoaXMg
IT0gYW5jZXN0b3JMYXllciAmJiAhaGFzVmlzaWJsZUNvbnRlbnQoKSAmJiAhaGFzVmlzaWJsZURl
c2NlbmRhbnQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKIAogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKIApAQCAtNTQ1OSw3ICs1NDU5LDcgQEAgSW50UmVjdCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIs
IGNvbnMKICAgICAgICAgICAgIExheW91dFBvaW50IGFuY2VzdG9yUmVsT2Zmc2V0OwogICAgICAg
ICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZz
ZXQpOwogICAgICAgICAgICAgbG9jYWxDbGlwUmVjdC5tb3ZlQnkoYW5jZXN0b3JSZWxPZmZzZXQp
OwotICAgICAgICAgICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QobG9jYWxDbGlwUmVjdCk7
CisgICAgICAgICAgICByZXR1cm4gbG9jYWxDbGlwUmVjdDsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNTQ3MCw3ICs1NDcwLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJC
b3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKIAogICAgIGlmIChS
ZW5kZXJMYXllciogcmVmbGVjdGlvbiA9IHJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgIGlm
ICghcmVmbGVjdGlvbi0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgY2hp
bGRVbmlvbkJvdW5kcyA9IHJlZmxlY3Rpb24tPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAs
IGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3Vu
ZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50
RmxhZ3MpOwogICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC01NDg2LDcgKzU0ODYsNyBAQCBJbnRSZWN0IFJlbmRlckxh
eWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgY29ucwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsK
ICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkp
OwogICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8
fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBj
aGlsZFVuaW9uQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAs
IGRlc2NlbmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9u
Qm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIDAsIGRlc2NlbmRh
bnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJv
dW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU0OTcsNyArNTQ5Nyw3IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBjb25zCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlz
dFNpemU7ICsraSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gcG9zWk9y
ZGVyTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRl
ZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJC
b3VuZHModGhpcywgMCwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRS
ZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhp
cywgMCwgZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0
ZShjaGlsZFVuaW9uQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTUwOCw3
ICs1NTA4LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vy
TGF5ZXIgPSBub3JtYWxGbG93TGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBJ
bmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkp
IHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxj
dWxhdGVMYXllckJvdW5kcyh0aGlzLCAwLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAg
ICAgIExheW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91
bmRzKHRoaXMsIDAsIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3Vu
ZHMudW5pdGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTUz
NSw3ICs1NTM1LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMo
Y29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnMKICAgICAgICAgY29udmVydFRv
TGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgYW5jZXN0b3JSZWxPZmZzZXQpOwogICAgIHVuaW9u
Qm91bmRzLm1vdmVCeShhbmNlc3RvclJlbE9mZnNldCk7CiAgICAgCi0gICAgcmV0dXJuIHBpeGVs
U25hcHBlZEludFJlY3QodW5pb25Cb3VuZHMpOworICAgIHJldHVybiB1bmlvbkJvdW5kczsKIH0K
IAogdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhD
bGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAppbmRleCA5ZGRlMDI3ZTI2YjY3NzdlNmQ1MTA2NjhmYWI1YjlkNGU5YTI5MDgwLi4wN2M3
NDg4ODFhODM1Y2RkOGFiMDViOGE3YTM3ZjcwYWYxMTJiNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNzA1LDcgKzcwNSw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAgICAgLy8gQ2FuIHBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgSW50UmVjdCBj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29u
c3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gMCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNG
bGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rvckxh
eWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSAwLCBDYWxjdWxhdGVMYXll
ckJvdW5kc0ZsYWdzID0gRGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MpIGNvbnN0Owog
ICAgIAogICAgIC8vIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG9mZnNldCBmb3Ig
dGhlIHBhcmVudCBhcyB0aGlzIGlzIHdoYXQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMgZXhwZWN0cy4K
ICAgICBMYXlvdXRQb2ludCBjb21wdXRlT2Zmc2V0RnJvbVJvb3QoYm9vbCYgaGFzTGF5ZXJPZmZz
ZXQpIGNvbnN0OwpAQCAtOTQwLDkgKzk0MCw5IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIGJv
b2wgc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYg
ZGlkUXVhbnRpemVGb250cyk7Ci0gICAgYm9vbCBzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZy
b21Sb290LCBJbnRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJv
dW5kc0NvbXB1dGVkKTsKKyAgICBib29sIHNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJv
b3QsIExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91
bmRzQ29tcHV0ZWQpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBQYXNzT3duUHRyPEZp
bHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0Kiwg
TGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiBv
ZmZzZXRGcm9tUm9vdCwgSW50UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzLCBib29sJiByb290UmVs
YXRpdmVCb3VuZHNDb21wdXRlZCk7CisgICAgUGFzc093blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJl
ckhlbHBlcj4gc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCosIExheWVyUGFpbnRpbmdJbmZv
JiwgUGFpbnRMYXllckZsYWdzLCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIExh
eW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29t
cHV0ZWQpOwogICAgIEdyYXBoaWNzQ29udGV4dCogYXBwbHlGaWx0ZXJzKEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyKiwgR3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENvbnRleHQsIExheWVyUGFp
bnRpbmdJbmZvJiwgTGF5ZXJGcmFnbWVudHMmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDgwN2ZkOGYxMWY3NTM1
MThjM2M5NDJjMWEyNDJmYzA3MjJkMzFjYjkuLmMwZmYzMzE1NDZiODQ0ZTY3MzAzMDAzZDhhYmE1
NjYxMDJiZGRlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCkBAIC00MjUsNyArNDI1LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
OnNob3VsZENsaXBDb21wb3NpdGVkQm91bmRzKCkgY29uc3QKIAogdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQogewotICAgIEludFJlY3QgbGF5ZXJCb3Vu
ZHMgPSBjb21wb3NpdG9yKCktPmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3VuZHMobV9vd25pbmdMYXll
ciwgbV9vd25pbmdMYXllcik7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0
b3IoKS0+Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhtX293bmluZ0xheWVyLCBtX293bmluZ0xh
eWVyKTsKIAogICAgIC8vIENsaXAgdG8gdGhlIHNpemUgb2YgdGhlIGRvY3VtZW50IG9yIGVuY2xv
c2luZyBvdmVyZmxvdy1zY3JvbGwgbGF5ZXIuCiAgICAgLy8gSWYgdGhpcyBvciBhbiBhbmNlc3Rv
ciBpcyB0cmFuc2Zvcm1lZCwgd2UgY2FuJ3QgY3VycmVudGx5IGNvbXB1dGUgdGhlIGNvcnJlY3Qg
cmVjdCB0byBpbnRlcnNlY3Qgd2l0aC4KQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpCiAgICAgICAgIG1fb3duaW5nTGF5
ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwogICAgICAgICBjbGlw
cGluZ0JvdW5kcy5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOwogCi0gICAgICAgIGxheWVy
Qm91bmRzLmludGVyc2VjdChwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBwaW5nQm91bmRzKSk7Cisg
ICAgICAgIGxheWVyQm91bmRzLmludGVyc2VjdChjbGlwcGluZ0JvdW5kcyk7CiAgICAgICAgIG1f
Ym91bmRzQ29uc3RyYWluZWRCeUNsaXBwaW5nID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9ib3VuZHNDb25zdHJhaW5lZEJ5Q2xpcHBpbmcgPSBmYWxzZTsKQEAgLTQ3MCw3ICs0NzAsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKQogICAg
IGlmIChyZW5kZXJlcigpLT5pc1JlbmRlclBhcnQoKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5
ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZy
YW1lQ29udGVudHNDb21wb3NpdG9yKHRvUmVuZGVyUGFydChyZW5kZXJlcigpKSkpIHsKICAgICAg
ICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlU2l6ZSgpOwotICAgICAg
ICAgICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VMb2NhdGlvbihjb250ZW50
c0JveCgpLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT5mcmFtZVZp
ZXdEaWRDaGFuZ2VMb2NhdGlvbihmbG9vcmVkSW50UG9pbnQoY29udGVudHNCb3goKS5sb2NhdGlv
bigpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02NDYsMTEgKzY0NiwxNiBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKICAgICAgICAg
YW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kcyA9IHBpeGVsU25hcHBlZEludFJlY3QoY29tcEFuY2Vz
dG9yLT5iYWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMoKSk7CiAgICAgfQogCi0gICAgSW50UmVj
dCBsb2NhbENvbXBvc2l0aW5nQm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb21wb3NpdGVk
Qm91bmRzKCkpOworICAgIExheW91dFJlY3QgbG9jYWxSYXdDb21wb3NpdGluZ0JvdW5kcyA9IGNv
bXBvc2l0ZWRCb3VuZHMoKTsKKyAgICBMYXlvdXRQb2ludCByYXdEZWx0YTsKKyAgICBtX293bmlu
Z0xheWVyLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhjb21wQW5jZXN0b3IsIHJhd0RlbHRhKTsKKyAg
ICBJbnRQb2ludCBkZWx0YSA9IGZsb29yZWRJbnRQb2ludChyYXdEZWx0YSk7CisgICAgbV9zdWJw
aXhlbEFjY3VtdWxhdGlvbiA9IHRvTGF5b3V0U2l6ZShyYXdEZWx0YS5mcmFjdGlvbigpKTsKKyAg
ICAvLyBNb3ZlIHRoZSBib3VuZHMgYnkgdGhlIHN1YnBpeGVsIGFjY3VtdWxhdGlvbiBzbyB0aGF0
IGl0IHBpeGVsLXNuYXBzIHJlbGF0aXZlIHRvIGFic29sdXRlIHBpeGVscyBpbnN0ZWFkIG9mIGxv
Y2FsIGNvb3JkaW5hdGVzLgorICAgIGxvY2FsUmF3Q29tcG9zaXRpbmdCb3VuZHMubW92ZShtX3N1
YnBpeGVsQWNjdW11bGF0aW9uKTsKIAorICAgIEludFJlY3QgbG9jYWxDb21wb3NpdGluZ0JvdW5k
cyA9IHBpeGVsU25hcHBlZEludFJlY3QobG9jYWxSYXdDb21wb3NpdGluZ0JvdW5kcyk7CiAgICAg
SW50UmVjdCByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMp
OwotICAgIEludFBvaW50IGRlbHRhOwotICAgIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb1BpeGVs
U25hcHBlZExheWVyQ29vcmRzKGNvbXBBbmNlc3RvciwgZGVsdGEpOwogICAgIHJlbGF0aXZlQ29t
cG9zaXRpbmdCb3VuZHMubW92ZUJ5KGRlbHRhKTsKIAogICAgIEludFBvaW50IGdyYXBoaWNzTGF5
ZXJQYXJlbnRMb2NhdGlvbjsKQEAgLTcwMCw3ICs3MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21ldHJ5KCkKIAogICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0
aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICBtX2dyYXBoaWNzTGF5
ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcih0b0ludFNpemUobG9jYWxDb21wb3NpdGluZ0JvdW5k
cy5sb2NhdGlvbigpKSk7Ci0gICAgCisKICAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fZ3JhcGhp
Y3NMYXllci0+c2l6ZSgpOwogICAgIGlmIChvbGRTaXplICE9IGNvbnRlbnRzU2l6ZSkgewogICAg
ICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUoY29udGVudHNTaXplKTsKQEAgLTczOCw3ICs3
NDMsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdlb21l
dHJ5KCkKICAgICAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5k
ZXJlcigpKS0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpOwogCiAgICAgICAgIC8vIEdldCBs
YXlvdXQgYm91bmRzIGluIHRoZSBjb29yZHMgb2YgY29tcEFuY2VzdG9yIHRvIG1hdGNoIHJlbGF0
aXZlQ29tcG9zaXRpbmdCb3VuZHMuCi0gICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRS
ZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgSW50UmVjdCBsYXllckJvdW5k
cyhkZWx0YSwgYm9yZGVyQm94LnNpemUoKSk7CiAKICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRp
ZXMgdGhhdCBkZXBlbmQgb24gbGF5ZXIgZGltZW5zaW9ucwogICAgICAgICBGbG9hdFBvaW50M0Qg
dHJhbnNmb3JtT3JpZ2luID0gY29tcHV0ZVRyYW5zZm9ybU9yaWdpbihib3JkZXJCb3gpOwpAQCAt
OTUzLDcgKzk1OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhp
ZXJhcmNoeSgpCiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXNldENvbnRlbnRzUmVjdCgp
CiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNCb3goKTsKKyAgICBJbnRSZWN0IHJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzQm94KCkpOwogICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNSZWN0KHJlY3QpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVu
dHNUaWxlU2l6ZShJbnRTaXplKCkpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNU
aWxlUGhhc2UoSW50UG9pbnQoKSk7CkBAIC0xNzc4LDI0ICsxNzgzLDI0IEBAIEZsb2F0UG9pbnQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGVyc3BlY3RpdmVPcmlnaW4oY29uc3QgSW50UmVj
dCYgYm9yZGVyQm94CiB9CiAKIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIHRvcC1sZWZ0
IG9mIHRoaXMgY29tcG9zaXRpbmcgbGF5ZXIgYXQgd2hpY2ggdGhlIHJlbmRlcmVyJ3MgY29udGVu
dHMgYXJlIHBhaW50ZWQuCi1JbnRTaXplIFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudE9mZnNl
dEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBJ
bnRTaXplKC1tX2NvbXBvc2l0ZWRCb3VuZHMueCgpLCAtbV9jb21wb3NpdGVkQm91bmRzLnkoKSk7
CisgICAgcmV0dXJuIExheW91dFNpemUoLW1fY29tcG9zaXRlZEJvdW5kcy54KCksIC1tX2NvbXBv
c2l0ZWRCb3VuZHMueSgpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRl
bnRzQm94KCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250ZW50c0Jv
eCgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgSW50UmVj
dCBjb250ZW50c1JlY3Q7CisgICAgTGF5b3V0UmVjdCBjb250ZW50c1JlY3Q7CiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKICAgICAgICAgUmVuZGVy
VmlkZW8qIHZpZGVvUmVuZGVyZXIgPSB0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpOwogICAgICAg
ICBjb250ZW50c1JlY3QgPSB2aWRlb1JlbmRlcmVyLT52aWRlb0JveCgpOwogICAgIH0gZWxzZQog
I2VuZGlmCi0gICAgICAgIGNvbnRlbnRzUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QodG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCkpOworICAgICAgICBjb250ZW50c1Jl
Y3QgPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVudEJveFJlY3QoKTsKIAogICAgIGNv
bnRlbnRzUmVjdC5tb3ZlKGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpKTsKICAgICBy
ZXR1cm4gY29udGVudHNSZWN0OwpAQCAtMTgyMyw5ICsxODI4LDkgQEAgSW50UmVjdCBSZW5kZXJM
YXllckJhY2tpbmc6OmJhY2tncm91bmRCb3goKSBjb25zdAogICAgIGlmICghcmVuZGVyZXIoKS0+
aXNCb3goKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgcGl4ZWxT
bmFwcGVkQmFja2dyb3VuZEJveCA9IHBpeGVsU25hcHBlZEludFJlY3QoYmFja2dyb3VuZFJlY3RG
b3JCb3godG9SZW5kZXJCb3gocmVuZGVyZXIoKSkpKTsKLSAgICBwaXhlbFNuYXBwZWRCYWNrZ3Jv
dW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkpOwotICAgIHJldHVy
biBwaXhlbFNuYXBwZWRCYWNrZ3JvdW5kQm94OworICAgIExheW91dFJlY3QgYmFja2dyb3VuZEJv
eCA9IGJhY2tncm91bmRSZWN0Rm9yQm94KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpKTsKKyAgICBi
YWNrZ3JvdW5kQm94Lm1vdmUoY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkpOworICAg
IHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGJhY2tncm91bmRCb3gpOwogfQogCiBHcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllckJhY2tpbmc6OnBhcmVudEZvclN1YmxheWVycygpIGNvbnN0CkBA
IC0xOTcxLDcgKzE5NzYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5
ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBwYWlu
dEZsYWdzIHw9IFJlbmRlckxheWVyOjpQYWludExheWVyUGFpbnRpbmdTa2lwUm9vdEJhY2tncm91
bmQ7CiAgICAgCiAgICAgLy8gRklYTUU6IEdyYXBoaWNzTGF5ZXJzIG5lZWQgYSB3YXkgdG8gc3Bs
aXQgZm9yIFJlbmRlclJlZ2lvbnMuCi0gICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZv
IHBhaW50aW5nSW5mbyhtX293bmluZ0xheWVyLCBwYWludERpcnR5UmVjdCwgcGFpbnRCZWhhdmlv
ciwgTGF5b3V0U2l6ZSgpKTsKKyAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFp
bnRpbmdJbmZvKG1fb3duaW5nTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCBt
X3N1YnBpeGVsQWNjdW11bGF0aW9uKTsKICAgICBtX293bmluZ0xheWVyLT5wYWludExheWVyQ29u
dGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAogICAgIGlmIChtX293
bmluZ0xheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSkKQEAgLTIwMTQsNyAr
MjAxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgIC8vIFRoZSBkaXJ0eVJl
Y3QgaXMgaW4gdGhlIGNvb3JkcyBvZiB0aGUgcGFpbnRpbmcgcm9vdC4KICAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QgPSBjbGlwOwogICAgICAgICBpZiAoIShwYWludGluZ1BoYXNlICYgR3JhcGhp
Y3NMYXllclBhaW50T3ZlcmZsb3dDb250ZW50cykpCi0gICAgICAgICAgICBkaXJ0eVJlY3QuaW50
ZXJzZWN0KGNvbXBvc2l0ZWRCb3VuZHMoKSk7CisgICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJz
ZWN0KGVuY2xvc2luZ0ludFJlY3QoY29tcG9zaXRlZEJvdW5kcygpKSk7CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgcm9vdCBhcyBmb3IgaGl0IHRlc3RpbmcsIGJlY2F1c2Ug
Ym90aCBtZXRob2RzIGNhbiBjb21wdXRlIGFuZCBjYWNoZSBjbGlwUmVjdHMuCiAgICAgICAgIHBh
aW50SW50b0xheWVyKGdyYXBoaWNzTGF5ZXIsICZjb250ZXh0LCBkaXJ0eVJlY3QsIFBhaW50QmVo
YXZpb3JOb3JtYWwsIHBhaW50aW5nUGhhc2UpOwpAQCAtMjI0NywxMiArMjI1MiwxMiBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgbV9ncmFwaGljc0xh
eWVyLT5yZXN1bWVBbmltYXRpb25zKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb21wb3NpdGVkQm91bmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGVkQm91
bmRzOwogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29tcG9zaXRlZEJvdW5kcyhj
b25zdCBJbnRSZWN0JiBib3VuZHMpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29tcG9z
aXRlZEJvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpCiB7CiAgICAgbV9jb21wb3NpdGVk
Qm91bmRzID0gYm91bmRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oCmluZGV4IDZjNGM4N2FkMTg3MzZjZWE3NzJmZWUxNTFjNDkxMjc3M2VjMjFh
ZTYuLjU2OTNkODg1ODRiNzlmZTVkZjgwMWUwZmNhYzkwZWQ1NGQyMjFlNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE0MSw4ICsxNDEs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSA9IDAp
OwogICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwogCi0gICAgSW50UmVjdCBjb21wb3NpdGVk
Qm91bmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IEludFJl
Y3QmKTsKKyAgICBMYXlvdXRSZWN0IGNvbXBvc2l0ZWRCb3VuZHMoKSBjb25zdDsKKyAgICB2b2lk
IHNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRlZEJvdW5kcygpOwogICAgIAogICAgIHZvaWQgdXBkYXRlQWZ0ZXJXaWRnZXRSZXNp
emUoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZlcmlm
eU5vdFBhaW50aW5nKCk7CiAjZW5kaWYKIAotICAgIEludFJlY3QgY29udGVudHNCb3goKSBjb25z
dDsKKyAgICBMYXlvdXRSZWN0IGNvbnRlbnRzQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBiYWNr
Z3JvdW5kQm94KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRm9yIGluZm9ybWF0aXZlIHB1cnBvc2Vz
IG9ubHkuCkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKIAogICAgIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlIHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAK
LSAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OworICAg
IExheW91dFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAg
Ly8gUmVzdWx0IGlzIHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgogICAgIEZsb2F0UG9pbnQz
RCBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7
CiAgICAgLy8gUmVzdWx0IGlzIHBlcnNwZWN0aXZlIG9yaWdpbiBpbiBwaXhlbHMuCkBAIC0yOTcs
NyArMjk3LDggQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fc2Nyb2xsTGF5ZXJJRDsKIAot
ICAgIEludFJlY3QgbV9jb21wb3NpdGVkQm91bmRzOworICAgIExheW91dFJlY3QgbV9jb21wb3Np
dGVkQm91bmRzOworICAgIExheW91dFNpemUgbV9zdWJwaXhlbEFjY3VtdWxhdGlvbjsgLy8gVGhl
IGFjY3VtdWxhdGVkIHN1YnBpeGVsIG9mZnNldCBvZiB0aGUgY29tcG9zaXRlZEJvdW5kcyBjb21w
YXJlZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcy4KIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJ
bmZsYXRlZEJvdW5kczsgLy8gYm91bmRzIGhhZCB0byBiZSBtYWRlIG5vbi16ZXJvIHRvIG1ha2Ug
dHJhbnNmb3JtLW9yaWdpbiB3b3JrCiAgICAgYm9vbCBtX2JvdW5kc0NvbnN0cmFpbmVkQnlDbGlw
cGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKaW5kZXggNWRjOTM3ZTkwMDUwOTQ5ZjZlYWY1YTVhZGRhN2FhODBiZDMyMjE4NC4u
ZWY2ZWFjMzUyYTI5NGZkYWU0ZDg2YTg4YTYyNmYzNjhkYjBlODcxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTYyNSw3
ICs2MjUsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bG9nTGF5ZXJJbmZvKGNvbnN0
IFJlbmRlckxheWVyKiBsYXllciwgaW50IGRlcHRoKQogCiAgICAgU3RyaW5nQnVpbGRlciBsb2dT
dHJpbmc7CiAgICAgbG9nU3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJSpwICVkeCVkICUu
MmZLQiIsIDEyICsgZGVwdGggKiAyLCBsYXllciwKLSAgICAgICAgYmFja2luZy0+Y29tcG9zaXRl
ZEJvdW5kcygpLndpZHRoKCksIGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKS5oZWlnaHQoKSwK
KyAgICAgICAgYmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpLndpZHRoKCkucm91bmQoKSwgYmFj
a2luZy0+Y29tcG9zaXRlZEJvdW5kcygpLmhlaWdodCgpLnJvdW5kKCksCiAgICAgICAgIGJhY2tp
bmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgLyAxMDI0KSk7CiAgICAgCiAgICAgbG9n
U3RyaW5nLmFwcGVuZCgiICgiKTsKQEAgLTgwMSwxMCArODAxLDEwIEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXBhaW50SW5Db21wb3NpdGVkQW5jZXN0b3IoUmVuZGVyTGF5ZXIqIGxh
eWVyLCBjb25zCiAKIC8vIFRoZSBib3VuZHMgb2YgdGhlIEdyYXBoaWNzTGF5ZXIgY3JlYXRlZCBm
b3IgYSBjb21wb3NpdGluZyBsYXllciBpcyB0aGUgdW5pb24gb2YgdGhlIGJvdW5kcyBvZiBhbGwg
dGhlIGRlc2NlbmRhbnQKIC8vIFJlbmRlckxheWVycyB0aGF0IGFyZSByZW5kZXJlZCBieSB0aGUg
Y29tcG9zaXRlZCBSZW5kZXJMYXllci4KLUludFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
YWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjb25zdCBSZW5kZXJMYXllciog
bGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIGlm
ICghY2FuQmVDb21wb3NpdGVkKGxheWVyKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKICAgICByZXR1cm4gbGF5ZXItPmNhbGN1bGF0ZUxh
eWVyQm91bmRzKGFuY2VzdG9yTGF5ZXIsIDAsIFJlbmRlckxheWVyOjpEZWZhdWx0Q2FsY3VsYXRl
TGF5ZXJCb3VuZHNGbGFncyB8IFJlbmRlckxheWVyOjpFeGNsdWRlSGlkZGVuRGVzY2VuZGFudHMg
fCBSZW5kZXJMYXllcjo6RG9udENvbnN0cmFpbkZvck1hc2spOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggMzM3NGQ3YTY4
NDQ3MTI3ZTcxZWMxZDMwNjlmNWQ0ODNhZmEzNDhmNy4uYjBlYTE3ZDJmZWFiYjFjYWRjMzVjNzdm
ODY1YzA0ZDZhYzdkM2U1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICAvLyBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXF1aXJlZCBmb3IgY29tcG9zaXRpbmcgbGF5
ZXIgYW5kIGl0cyBjaGlsZGVybiwgcmVsYXRpdmUgdG8gYW5jZXN0b3JMYXllci4KICAgICAvLyBJ
ZiBsYXllckJvdW5kaW5nQm94IGlzIG5vdCAwLCBvbiByZXR1cm4gaXQgY29udGFpbnMgdGhlIGJv
dW5kaW5nIGJveCBvZiB0aGlzIGxheWVyIG9ubHkuCi0gICAgSW50UmVjdCBjYWxjdWxhdGVDb21w
b3NpdGVkQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIpIGNvbnN0OworICAgIExheW91dFJlY3QgY2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5k
cyhjb25zdCBSZW5kZXJMYXllciosIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBj
b25zdDsKIAogICAgIC8vIFJlcGFpbnQgdGhlIGFwcHJvcHJpYXRlIGxheWVycyB3aGVuIHRoZSBn
aXZlbiBSZW5kZXJMYXllciBzdGFydHMgb3Igc3RvcHMgYmVpbmcgY29tcG9zaXRlZC4KICAgICB2
b2lkIHJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKFJlbmRlckxheWVyKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZmJiODA3YzQzZDA3
OTNlMTcwNTk0YzQ1YzRiZDlkMGRmZWYyZWViMS4uZmEwOGIzYTEzMzVhYWU0ZTMyMTUwYzc1MzRl
MDhkMjg5Y2UwNmI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcApAQCAtODgsNiArODgsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgSW50UG9pbnQmIHApCiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBw
LngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMYXlvdXRSZWN0JiByKQoreworICAgIC8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBpbnRzIGZvciBj
b25zaXN0ZW5jeSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgorICAgIHJldHVybiB0
cyA8PCBwaXhlbFNuYXBwZWRJbnRSZWN0KHIpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMYXlvdXRQb2ludCYgcCkKIHsKICAgICAvLyBGSVhNRTog
VGhlc2Ugc2hvdWxkIGJlIHByaW50ZWQgYXMgZmxvYXRzLiBLZWVwaW5nIHRoZW0gaW50cyBmb3Ig
Y29uc2lzdGVuY3kgd2l0aCBwZXJ2aW91cyB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCmluZGV4IDNhODM4NDlkNTE1MjExNGZh
MDA4Y2VhZDEzY2FlODIwNmEyODQxNmMuLjM5MDYxYTBmZmU3YjczNmI2NTc1MjkyZDM5NzQwYzRh
NGIxNDlkZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
aApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFBvaW50OwogY2xhc3Mg
SW50UmVjdDsKIGNsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIFJl
bmRlck9iamVjdDsKIGNsYXNzIFRleHRTdHJlYW07CiAKQEAgLTcxLDYgKzcyLDcgQEAgc3RhdGlj
IHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgbywgUmVuZGVyQXNUZXgKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNv
bnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBJbnRSZWN0Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBM
YXlvdXRQb2ludCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
TGF5b3V0UmVjdCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
RmxvYXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
RmxvYXRTaXplJik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2Zjc5ZjYzNTZkMjA0ODNhMzQxNTE0OGRkZTcyNDhmNzBj
ZWI5YjM4Li5iOGU1MjQyZjIzMmNhOTVjNWVlZTM2YjQ2YThkNzU3NmI2ZmJkOWZiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTMtMDYtMDcgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFu
LmplbnNlbkBkaWdpYS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihTVUJQSVhFTF9MQVlPVVQp
IENvbXBvc2l0ZWQgbGF5ZXJzIGNhbiBjYXVzZSBvbmUgcGl4ZWwgc2hpZnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMDQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL3N1
Yi1waXhlbC1jb21wb3NpdGVkLWxheWVycy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMuaHRtbDogQWRkZWQu
CisKIDIwMTMtMDYtMDcgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGcmFtZSBmbGF0dGVuaW5nOiBjcmFzaCB3aGVuIGNoaWxkIGlmcmFtZSBpcyByZW1vdmVkIGR1
cmluZyBiZWZvcmVsb2FkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwv
c3ViLXBpeGVsLWNvbXBvc2l0ZWQtbGF5ZXJzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYzMxZmY1Y2E1MTUzNjQ5ZTIyODM4ZmMwOGE0YWQxM2VkMjUyYjk5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc3ViLXBpeGVsLWNvbXBv
c2l0ZWQtbGF5ZXJzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzdHlsZT4KKyAgICAjdGVzdCB7IAorICAgICAgICBtYXJnaW46IDVweDsKKyAgICB9Cisg
ICAgLmNvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgb3Bh
Y2l0eTogMC45NTsKKyAgICB9CisgICAgLnNoaWZ0ZXIgeworICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOworICAgICAgICB3aWR0aDog
MTIuNXB4OworICAgICAgICBoZWlnaHQ6IDEyLjVweDsKKyAgICB9CisgICAgLnNoaWZ0ZXI4eDgg
eworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6
IGJsYWNrOworICAgICAgICB3aWR0aDogMTYuNXB4OworICAgICAgICBoZWlnaHQ6IDE2LjVweDsK
KyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPXRlc3Q+Cis8L2Rpdj4K
KzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gc2V0dXBHcmlkMTB4MTAobGVmdE9mZnNldCwgdG9wT2Zm
c2V0LCBsZWZ0RnJhY3Rpb24sIHRvcEZyYWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3Qg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID09IDUpCisgICAgICAgICAgICAg
ICAgdG9wT2Zmc2V0ICs9IDU7CisgICAgICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zm
c2V0OworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxMDsgaisrKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGogPT0gNSkKKyAgICAgICAgICAgICAgICAgICAgbGVmdE9mZnNldGogKz0g
NTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgICAgICAgICAgICAgdmFyIHNoaWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdj
bGFzcycsICdjb250YWluZXInKTsKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnNldEF0dHJpYnV0
ZSgnY2xhc3MnLCAnc2hpZnRlcicpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5s
ZWZ0ID0gKGxlZnRPZmZzZXRqICsgaiAqIDE2ICsgaSAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisg
ICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICh0b3BPZmZzZXQgKyBpICogMTYg
KyBpICogdG9wRnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5bGUu
bGVmdCA9ICg1ICsgaiAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hp
ZnRlci5zdHlsZS50b3AgPSAoNSArIGogKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAg
ICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNoaWZ0ZXIpOworICAgICAgICAgICAgICAgIHRl
c3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIHNldHVwR3JpZDh4OChsZWZ0T2Zmc2V0LCB0b3BPZmZzZXQsIGxl
ZnRGcmFjdGlvbiwgdG9wRnJhY3Rpb24pCisgICAgeworICAgICAgICB2YXIgdGVzdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ODsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA9PSA0KQorICAgICAgICAgICAgICAgIHRvcE9m
ZnNldCArPSA1OworICAgICAgICAgICAgdmFyIGxlZnRPZmZzZXRqID0gbGVmdE9mZnNldDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7CisgICAgICAgICAgICAgICAg
aWYgKGogPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgbGVmdE9mZnNldGogKz0gNTsKKyAgICAg
ICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgICAgICAgICAgdmFyIHNoaWZ0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdj
b250YWluZXInKTsKKyAgICAgICAgICAgICAgICBzaGlmdGVyLnNldEF0dHJpYnV0ZSgnY2xhc3Mn
LCAnc2hpZnRlcjh4OCcpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0g
KGxlZnRPZmZzZXRqICsgaiAqIDIwICsgaSAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisgICAgICAg
ICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICh0b3BPZmZzZXQgKyBpICogMjAgKyBpICog
dG9wRnJhY3Rpb24pICsgInB4IgorICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc3R5bGUubGVmdCA9
ICg1ICsgaiAqIGxlZnRGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5z
dHlsZS50b3AgPSAoNSArIGogKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAg
Y29udGFpbmVyLmFwcGVuZENoaWxkKHNoaWZ0ZXIpOworICAgICAgICAgICAgICAgIHRlc3QuYXBw
ZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNldHVwVGVzdCgpCisgICAgeworICAgICAgICAvLyBWZXJ0aWNhbCBzaGlm
dHM6CisgICAgICAgIHNldHVwR3JpZDEweDEwKDEwLCAxMCwgMCwgMC4xKQorICAgICAgICAvLyBI
b3Jpem9udGFsIHNoaWZ0czoKKyAgICAgICAgc2V0dXBHcmlkMTB4MTAoMjAwLCAxMCwgMC4xLCAw
KTsKKworICAgICAgICAvLyBBbmQgaW4gOHg4ICh3aGVyZSBleGFjdGx5IDAuNSBpcyBtb3JlIGNv
bW1vbikKKyAgICAgICAgc2V0dXBHcmlkOHg4KDEwLCAyMDAsIDAsIDAuMTI1KTsKKyAgICAgICAg
c2V0dXBHcmlkOHg4KDIwMCwgMjAwLCAwLjEyNSwgMCk7CisgICAgfQorCisgICAgc2V0dXBUZXN0
KCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29t
cG9zaXRlZC1sYXllcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3N1Yi1waXhl
bC1jb21wb3NpdGVkLWxheWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MjFiNWMxNGQ1MjIzNmYzM2Ez
NmYyMTYyNjY2NjFlZmZmMDljYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3N1Yi1waXhlbC9zdWItcGl4ZWwtY29tcG9zaXRlZC1sYXllcnMuaHRtbApAQCAtMCwwICsxLDk1
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgICN0ZXN0IHsgCisgICAgICAgIG1hcmdp
bjogNXB4OworICAgIH0KKyAgICAjdGVzdC5jb21wb3NpdGUgPiAuY29udGFpbmVyIHsKKyAgICAg
ICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CisgICAgICAgIG9wYWNpdHk6IDAu
OTU7CisgICAgfQorICAgIC5jb250YWluZXIgeworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgfQorICAgIC5zaGlmdGVyIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICAgICAgd2lkdGg6IDEyLjVweDsKKyAg
ICAgICAgaGVpZ2h0OiAxMi41cHg7CisgICAgfQorICAgIC5zaGlmdGVyOHg4IHsKKyAgICAgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAg
ICAgICAgd2lkdGg6IDE2LjVweDsKKyAgICAgICAgaGVpZ2h0OiAxNi41cHg7CisgICAgfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD10ZXN0IGNsYXNzPWNvbXBvc2l0ZT4KKzwv
ZGl2PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBzZXR1cEdyaWQxMHgxMChsZWZ0T2Zmc2V0LCB0
b3BPZmZzZXQsIGxlZnRGcmFjdGlvbiwgdG9wRnJhY3Rpb24pCisgICAgeworICAgICAgICB2YXIg
dGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gNSkKKyAgICAgICAg
ICAgICAgICB0b3BPZmZzZXQgKz0gNTsKKyAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0aiA9IGxl
ZnRPZmZzZXQ7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaiA9PSA1KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0
aiArPSA1OworICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1
dGUoJ2NsYXNzJywgJ2NvbnRhaW5lcicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0
cmlidXRlKCdjbGFzcycsICdzaGlmdGVyJyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0
eWxlLmxlZnQgPSAobGVmdE9mZnNldGogKyBqICogMTYgKyBpICogbGVmdEZyYWN0aW9uKSArICJw
eCIKKyAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkg
KiAxNiArIGkgKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5z
dHlsZS5sZWZ0ID0gKDUgKyBqICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAg
ICBzaGlmdGVyLnN0eWxlLnRvcCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAg
ICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAg
ICAgdGVzdC5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0dXBHcmlkOHg4KGxlZnRPZmZzZXQsIHRvcE9mZnNl
dCwgbGVmdEZyYWN0aW9uLCB0b3BGcmFjdGlvbikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID09IDQpCisgICAgICAgICAgICAgICAg
dG9wT2Zmc2V0ICs9IDU7CisgICAgICAgICAgICB2YXIgbGVmdE9mZnNldGogPSBsZWZ0T2Zmc2V0
OworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaiA9PSA0KQorICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0aiArPSA1Owor
ICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgICAgICAgICB2YXIgc2hpZnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2NsYXNz
JywgJ2NvbnRhaW5lcicpOworICAgICAgICAgICAgICAgIHNoaWZ0ZXIuc2V0QXR0cmlidXRlKCdj
bGFzcycsICdzaGlmdGVyOHg4Jyk7CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxl
ZnQgPSAobGVmdE9mZnNldGogKyBqICogMjAgKyBpICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAg
ICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gKHRvcE9mZnNldCArIGkgKiAyMCAr
IGkgKiB0b3BGcmFjdGlvbikgKyAicHgiCisgICAgICAgICAgICAgICAgc2hpZnRlci5zdHlsZS5s
ZWZ0ID0gKDUgKyBqICogbGVmdEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAgICAgICBzaGlm
dGVyLnN0eWxlLnRvcCA9ICg1ICsgaiAqIHRvcEZyYWN0aW9uKSArICJweCIKKyAgICAgICAgICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2hpZnRlcik7CisgICAgICAgICAgICAgICAgdGVz
dC5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0dXBUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIFZlcnRpY2Fs
IHNoaWZ0czoKKyAgICAgICAgc2V0dXBHcmlkMTB4MTAoMTAsIDEwLCAwLCAwLjEpCisgICAgICAg
IC8vIEhvcml6b250YWwgc2hpZnRzOgorICAgICAgICBzZXR1cEdyaWQxMHgxMCgyMDAsIDEwLCAw
LjEsIDApOworCisgICAgICAgIC8vIEFuZCBpbiA4eDggKHdoZXJlIGV4YWN0bHkgMC41IGlzIG1v
cmUgY29tbW9uKQorICAgICAgICBzZXR1cEdyaWQ4eDgoMTAsIDIwMCwgMCwgMC4xMjUpOworICAg
ICAgICBzZXR1cEdyaWQ4eDgoMjAwLCAyMDAsIDAuMTI1LCAwKTsKKyAgICB9CisKKyAgICBzZXR1
cFRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>
<flag name="review"
          id="225528"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>