<?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>12833</bug_id>
          
          <creation_ts>2007-02-20 15:49:32 -0800</creation_ts>
          <short_desc>REGRESSION: Selecting text in 6.6MB txt file is sluggish as of the Feb 19th nightly</short_desc>
          <delta_ts>2011-03-07 13:09:23 -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>Text</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://dscoder.com/test.txt</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Smith">catfish.man</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>ap</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>KwhiteRight</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>22463</commentid>
    <comment_count>0</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-02-20 15:49:32 -0800</bug_when>
    <thetext>The impression I&apos;m getting is that the speed is directly related to how far down the document the selection is. Try scrolling to the bottom to see it more clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22464</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-02-20 16:00:53 -0800</bug_when>
    <thetext>Wondering if r19734 changed anything in this regard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22465</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-02-20 16:26:43 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Wondering if r19734 changed anything in this regard.
&gt; 

Apparently it didn&apos;t.

One thing that my be slowing things down is that if the document is loaded in multiple chunks, then it turns into multiple text nodes. The parser could be taught how to append to a text node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22436</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-02-20 23:43:30 -0800</bug_when>
    <thetext>A lot of time seems to be spent iterating over inline boxes trying to find the one containing a given offset, e.g. in RenderText::inlineBox().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20991</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-02-27 19:35:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/5028159&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19896</commentid>
    <comment_count>5</comment_count>
      <attachid>13540</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-08 04:37:45 -0800</bug_when>
    <thetext>Created attachment 13540
improve selection performance

This patch improved time it takes to do SelectionController::setSelection() at the end of http://dscoder.com/test.txt from 200ms range to around 20ms. Unfortunately it is still more sluggish than Tiger WebKit but at least it is sort-of usable (selection is quite a bit faster in release build than debug build too).

Basic idea is to do way less line box traversing than before. It is also possible that some of the stuff editing code is doing during selections is actually unnecessary, I can&apos;t really tell. This patch doesn&apos;t change anything in that respect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19902</commentid>
    <comment_count>6</comment_count>
      <attachid>13540</attachid>
    <who name="">mitz</who>
    <bug_when>2007-03-08 05:16:59 -0800</bug_when>
    <thetext>Comment on attachment 13540
improve selection performance

textBoxesCoverAllPositions() doesn&apos;t necessarily give the right answer for renderers containing reversed text (it may return false when the text boxes do in fact cover all positions). I didn&apos;t check how the answer is used so I don&apos;t know whether it&apos;s okay to return true in this case or whether the question is really &quot;do the text boxes cover all positions in logical order?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19917</commentid>
    <comment_count>7</comment_count>
      <attachid>13540</attachid>
    <who name="">mitz</who>
    <bug_when>2007-03-08 11:25:03 -0800</bug_when>
    <thetext>Comment on attachment 13540
improve selection performance

+                textOffset &gt; 0 &amp;&amp; textOffset &lt;= textRenderer-&gt;lastTextBox()-&gt;start() + textRenderer-&gt;lastTextBox()-&gt;end())

Are you sure start() + end() is correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19921</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-08 12:11:33 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 13540 [edit])
&gt; textBoxesCoverAllPositions() doesn&apos;t necessarily give the right answer for
&gt; renderers containing reversed text (it may return false when the text boxes do
&gt; in fact cover all positions). I didn&apos;t check how the answer is used so I don&apos;t
&gt; know whether it&apos;s okay to return true in this case or whether the question is
&gt; really &quot;do the text boxes cover all positions in logical order?&quot;
&gt; 

Correct, it doesn&apos;t optimize reversed text case. Doing that would also require also changes in the caller. Maybe adding a FIXME is enough...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19922</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-08 12:12:18 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 13540 [edit])
&gt; +                textOffset &gt; 0 &amp;&amp; textOffset &lt;=
&gt; textRenderer-&gt;lastTextBox()-&gt;start() + textRenderer-&gt;lastTextBox()-&gt;end())
&gt; 
&gt; Are you sure start() + end() is correct?
&gt; 

Ooops. Good catch.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19926</commentid>
    <comment_count>10</comment_count>
      <attachid>13540</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-08 13:12:58 -0800</bug_when>
    <thetext>Comment on attachment 13540
improve selection performance

clearing review flag, i&apos;m updating the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19763</commentid>
    <comment_count>11</comment_count>
      <attachid>13560</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-09 09:15:30 -0800</bug_when>
    <thetext>Created attachment 13560
updated patch

- rename textBoxesCoverAllPositions() to textBoxesCoverAllPositionsInOrder()
- use textBoxesCoverAllPositionsInOrder() optimization in more places
- faster VisiblePosition construction
- fix issue pointed out by Mitz
- cleanups</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19765</commentid>
    <comment_count>12</comment_count>
      <attachid>13560</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-09 09:24:46 -0800</bug_when>
    <thetext>Comment on attachment 13560
updated patch

+                    return currentPos;
+                else
+                    continue;

We normally don&apos;t do &quot;else after return&quot;.

-    DeprecatedString string;
+    String string;

String has pathologically slow behavior when you resize it that DeprecatedString does not; it does a realloc every time you make it bigger. Instead you should probably use a Vector&lt;UChar&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19727</commentid>
    <comment_count>13</comment_count>
      <attachid>13560</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2007-03-09 16:18:38 -0800</bug_when>
    <thetext>Comment on attachment 13560
updated patch

From VisiblePosition::init():

     // When not at a line wrap, make sure to end up with DOWNSTREAM affinity.
-    if (m_affinity == UPSTREAM &amp;&amp; (isNull() || inSameLine(VisiblePosition(position, DOWNSTREAM), *this)))
-        m_affinity = DOWNSTREAM;
+    if (m_affinity == UPSTREAM) {
+        VisiblePosition downstream(*this);
+        downstream.m_affinity = DOWNSTREAM;
+        if (isNull() || inSameLine(downstream, *this))
+            m_affinity = DOWNSTREAM;
+    }

There&apos;s a FIXME in canonicalPosition about how it will eventually need to take in the affinity and use it to find the canonical position to fix a bug (9535).  At that time we&apos;ll have to remove the above optimization. I&apos;d add a note and mention the bug number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19396</commentid>
    <comment_count>14</comment_count>
      <attachid>13599</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-12 11:33:55 -0700</bug_when>
    <thetext>Created attachment 13599
Divide large text blocks (&gt;64kB) over multiple text nodes

Instead of trying to make editing code efficient (which would be nice, but is bit risky at this point) the problem can be more or less completely hidden by dividing large text blocks over multiple text nodes. Shorter linebox lists are faster to search.

Dividing is done for both text and html documents. Firefox seems to be dividing large text nodes too (in html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19402</commentid>
    <comment_count>15</comment_count>
      <attachid>13599</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-12 13:01:01 -0700</bug_when>
    <thetext>Comment on attachment 13599
Divide large text blocks (&gt;64kB) over multiple text nodes

Discussed with Antti over IRC - according to his testing, this doesn&apos;t properly handle decomposed characters that happen to be on the boundary. I believe this needs to be corrected first.

See a test case at &lt;http://nypop.com/~ap/webkit/large-text.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19366</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-12 14:09:24 -0700</bug_when>
    <thetext>r=me with changes discussed in detail over IRC (using CharacterBreakIterator::textBreakPreceding, adding a layout test), assuming all tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19259</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2007-03-12 17:14:15 -0700</bug_when>
    <thetext>Per Alexey&apos;s comments commited as r20127, with layout test for composed characters. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363526</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-07 13:09:23 -0800</bug_when>
    <thetext>This has regressed again - I&apos;ve filed bug 55898 for that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13540</attachid>
            <date>2007-03-08 04:37:45 -0800</date>
            <delta_ts>2007-03-09 09:15:30 -0800</delta_ts>
            <desc>improve selection performance</desc>
            <filename>12833.patch</filename>
            <type>text/plain</type>
            <size>21045</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDA0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDctMDMtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODMzCisgICAgICAgIFJFR1JF
U1NJT046IFNlbGVjdGluZyB0ZXh0IGluIDYuNk1CIHR4dCBmaWxlIGlzIHNsdWdnaXNoIGFzIG9m
IHRoZSBGZWIgMTl0aCBuaWdodGx5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MDI4MTU5Pgor
ICAgICAgICAKKyAgICAgICAgT3B0aW1pemUgc2VsZWN0aW9ucyBmb3IgbGFyZ2UgdGV4dCBub2Rl
cyB3aXRoIG1hbnkgbGluZSBib3hlcy4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
UG9zaXRpb246OmRvd25zdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmluUmVu
ZGVyZWRUZXh0KToKKyAgICAgICAgICAgIEltcGxlbWVudCBzaG9ydGN1dCBjb2RlcGF0aCB1c2lu
ZyBSZW5kZXJUZXh0Ojp0ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9ucygpIHRoYXQgYXZvaWRzIAor
ICAgICAgICAgICAgdHJhdmVyc2luZyBsaW5lIGJveGVzLgorICAgICAgICAqIGVkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6bmV4dEJvdW5kYXJ5KToKKyAgICAgICAgICAgIFVzZSBT
dHJpbmcgaW5zdGVhZCBvZiBEZXByYWNhdGVkU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNv
bnZlcnNpb25zIHRvIGFzY2lpCisgICAgICAgICAgICBhbmQgYmFjay4KKyAgICAgICAgKFdlYkNv
cmU6OmluU2FtZUxpbmUpOgorICAgICAgICAgICAgT3B0aW1pemUgZm9yIGNhc2Ugd2hlcmUgYm90
aCBwb3NpdGlvbnMgYXJlIGluc2lkZSBzYW1lIHRleHQgbm9kZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnJvb3QpOgorICAgICAgICAgICAgTWFrZSByb290KCkg
aW5saW5lZAorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQpOgorICAgICAgICAg
ICAgUmVvcmRlciB0ZXN0cyB0byBmYWlsIGZhc3RlcgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OnBhaW50TGluZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6aGl0VGVzdExpbmVzKToKKyAgICAgICAgICAg
IERvbid0IGNhbGwgcm9vdCgpIHJlcGVhdGVkbHkgdW5uZWNlc3NhcmlseQorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJl
bmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6ZXh0cmFjdFRleHRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YXR0YWNoVGV4dEJveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpyZW1vdmVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OmNyZWF0ZUlubGluZUJveCk6CisgICAgICAgICAgICBLZWVwIGRpcnR5IGJp
dCBmb3IgdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnMoKSBpbiBzeW5jCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgICAgIEF2b2lkIGNvbnN0
dWN0aW5nIHVudXNlZCBlbXB0eSBJbnRSZWN0cworICAgICAgICAoV2ViQ29yZTo6dGV4dEJveEZv
ck9mZnNldE9yTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjppbmxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6aW5TYW1lTGluZSk6CisgICAgICAgICAg
ICBOZXcgbWV0aG9kIGZvciB0ZXN0aW5nIGlmIHR3byBwb3NpdGlvbnMgaW5zaWRlIHRoZSBzYW1l
IHRleHQgbm9kZSBhcmUgaW4gc2FtZQorICAgICAgICAgICAgbGluZS4gQXZvaWQgZG91YmxlLXRy
YXZlcnNpbmcgbGluZSBib3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnRleHRC
b3hlc0NvdmVyQWxsUG9zaXRpb25zKToKKyAgICAgICAgICAgIFRlc3QgaWYgbGluZSBib3hlcyBj
b3ZlciBhbGwgZWRpdGluZyBwb3NpdGlvbnMgd2l0aG91dCBpbnRlcnJ1cHRpb25zLiBUaGlzCisg
ICAgICAgICAgICBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Lmg6CisKIDIwMDctMDMtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSC4KSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9u
IDE5OTYyKQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDEsNiArMzQxLDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAKICAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5v
ZGUoKTsKICAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlclRleHQqPihyZW5kZXJlcik7CisKKyAgICAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIt
PnRleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zKCkgJiYgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJv
eCgpICYmCisgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA+IDAgJiYgdGV4dE9mZnNldCA8PSB0
ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCktPnN0YXJ0KCkgKyB0ZXh0UmVuZGVyZXItPmxhc3RU
ZXh0Qm94KCktPmVuZCgpKQorICAgICAgICAgICAgICAgIC8vIG5vIGhvbGVzIGluIHRleHQgYm94
ZXMsIHRha2UgYSBzaG9ydGN1dCBhbmQgYXZvaWQgdHJhdmVyc2luZworICAgICAgICAgICAgICAg
IHJldHVybiBjdXJyZW50UG9zOworCiAgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGJv
eCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4
dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPiBib3gtPnN0YXJ0KCkg
JiYgdGV4dE9mZnNldCA8PSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFBvczsKQEAgLTQwNyw4ICs0MTMsMTMgQEAgUG9zaXRpb24g
UG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7Ci0K
ICAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQqPihyZW5kZXJlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0ZXh0UmVu
ZGVyZXItPnRleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zKCkgJiYgdGV4dFJlbmRlcmVyLT5sYXN0
VGV4dEJveCgpICYmCisgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA8PSB0ZXh0UmVuZGVyZXIt
Pmxhc3RUZXh0Qm94KCktPmVuZCgpKQorICAgICAgICAgICAgICAgIC8vIG5vIGhvbGVzIGluIHRl
eHQgYm94ZXMsIHRha2UgYSBzaG9ydGN1dCBhbmQgYXZvaWQgdHJhdmVyc2luZworICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOworICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsg
Ym94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZz
ZXQgPj0gYm94LT5zdGFydCgpICYmIHRleHRPZmZzZXQgPD0gYm94LT5lbmQoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CkBAIC00NzgsNiArNDg5LDEyIEBAIGJvb2wg
UG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4ocmVuZGVyZXIpOworICAgIAorICAgIGlmICh0ZXh0UmVuZGVyZXItPnRleHRCb3hlc0Nv
dmVyQWxsUG9zaXRpb25zKCkgJiYgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpICYmIG9mZnNl
dCgpID49IDAgJiYKKyAgICAgICAgKG9mZnNldCgpIDwgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJv
eCgpLT5tX3N0YXJ0IHx8IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKS0+Y29udGFpbnNDYXJl
dE9mZnNldChvZmZzZXQoKSkpKQorICAgICAgICAvLyBubyBob2xlcyBpbiB0ZXh0IGJveGVzLCB0
YWtlIGEgc2hvcnRjdXQgYW5kIGF2b2lkIHRyYXZlcnNpbmcKKyAgICAgICAgcmV0dXJuIG9mZnNl
dCgpID09IDAgfHwgb2Zmc2V0KCkgPT0gdGV4dFJlbmRlcmVyLT5uZXh0T2Zmc2V0KHRleHRSZW5k
ZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KCkpKTsKKyAgICAKICAgICBmb3IgKElubGluZVRl
eHRCb3ggKmJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIGlmIChvZmZzZXQoKSA8IGJveC0+bV9zdGFydCAm
JiAhdGV4dFJlbmRlcmVyLT5jb250YWluc1JldmVyc2VkVGV4dCgpKSB7CiAgICAgICAgICAgICAv
LyBUaGUgb2Zmc2V0IHdlJ3JlIGxvb2tpbmcgZm9yIGlzIGJlZm9yZSB0aGlzIG5vZGUKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDE5OTYyKQorKysgV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogICAgICAgICAKICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHN0
cmluZzsKKyAgICBTdHJpbmcgc3RyaW5nOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIGJv
b2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0
eSgpICE9IFRTTk9ORTsKICAgICB3aGlsZSAoIWl0LmF0RW5kKCkgJiYgaXQubGVuZ3RoKCkgPiAw
KSB7CkBAIC03OCw4ICs3OCw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3Vu
ZGFyeSgKICAgICAgICAgLy8gVHJlYXQgYnVsbGV0cyB1c2VkIGluIHRoZSB0ZXh0IHNlY3VyaXR5
IG1vZGUgYXMgcmVndWxhciBjaGFyYWN0ZXJzIHdoZW4gbG9va2luZyBmb3IgYm91bmRhcmllcwog
ICAgICAgICBpZiAoaW5UZXh0U2VjdXJpdHlNb2RlKQogICAgICAgICAgICAgaXRlcmF0b3JTdHJp
bmcgPSBpdGVyYXRvclN0cmluZy5pbXBsKCktPnNlY3VyZSgneCcpOwotICAgICAgICBzdHJpbmcu
cHJlcGVuZChpdGVyYXRvclN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBuZXh0
ID0gc2VhcmNoRnVuY3Rpb24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0cmluZy51
bmljb2RlKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmcuaW5zZXJ0KGl0ZXJh
dG9yU3RyaW5nLCAwKTsKKyAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFy
YWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIGlmIChuZXh0ICE9IDApCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaXQuYWR2YW5jZSgpOwpAQCAtOTMsMTEgKzkzLDggQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogICAgICAgICAvLyBNYWtl
IGEgY2hlY2sgdG8gc2VlIGlmIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgYmVmb3JlIG9yIGFmdGVy
IHRoZSByZXBsYWNlZCBlbGVtZW50CiAgICAgICAgIC8vIGJ5IHBlcmZvcm1pbmcgYW4gYWRkaXRp
b25hbCBjaGVjayB3aXRoIGEgbW9kaWZpZWQgc3RyaW5nIHdoaWNoIHVzZXMgYW4gIlgiIAogICAg
ICAgICAvLyBjaGFyYWN0ZXIgdG8gc3RhbmQgaW4gZm9yIHRoZSByZXBsYWNlZCBlbGVtZW50Lgot
ICAgICAgICBEZXByZWNhdGVkQ2hhciBjaGFyc1syXTsKLSAgICAgICAgY2hhcnNbMF0gPSAnWCc7
Ci0gICAgICAgIGNoYXJzWzFdID0gJyAnOwotICAgICAgICBzdHJpbmcucHJlcGVuZChjaGFycywg
Mik7Ci0gICAgICAgIHVuc2lnbmVkIHBhc3RJbWFnZSA9IHNlYXJjaEZ1bmN0aW9uKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5nLmxlbmd0aCgp
KTsKKyAgICAgICAgc3RyaW5nLmluc2VydCgiWCAiLCAwKTsKKyAgICAgICAgdW5zaWduZWQgcGFz
dEltYWdlID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZShpdC5yYW5nZSgpKTsKICAgICAgICAg
aWYgKHBhc3RJbWFnZSA9PSAwKQogICAgICAgICAgICAgcG9zID0gUG9zaXRpb24ocmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHJhbmdlLT5zdGFydE9mZnNldChleGNlcHRpb24pKTsK
QEAgLTE0Myw3ICsxNDAsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShj
b25zCiAgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwog
ICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBl
Yyk7CiAgICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBSVU5GSU5ERVIpOwot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nOworICAgIFN0cmluZyBzdHJpbmc7CiAgICAgdW5z
aWduZWQgbmV4dCA9IDA7CiAgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5ub2Rl
KCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIHdoaWxlICghaXQuYXRF
bmQoKSAmJiBpdC5sZW5ndGgoKSA+IDApIHsKQEAgLTE1Myw4ICsxNTAsOCBAQCBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgICAgIC8vIFRyZWF0IGJ1bGxldHMg
dXNlZCBpbiB0aGUgdGV4dCBzZWN1cml0eSBtb2RlIGFzIHJlZ3VsYXIgY2hhcmFjdGVycyB3aGVu
IGxvb2tpbmcgZm9yIGJvdW5kYXJpZXMKICAgICAgICAgaWYgKGluVGV4dFNlY3VyaXR5TW9kZSkK
ICAgICAgICAgICAgIGl0ZXJhdG9yU3RyaW5nID0gaXRlcmF0b3JTdHJpbmcuaW1wbCgpLT5zZWN1
cmUoJ3gnKTsKLSAgICAgICAgc3RyaW5nLmFwcGVuZChpdGVyYXRvclN0cmluZy5kZXByZWNhdGVk
U3RyaW5nKCkpOwotICAgICAgICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KHN0cmluZy51bmljb2RlKCkpLCBzdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICBzdHJpbmcuYXBwZW5kKGl0ZXJhdG9yU3RyaW5nKTsKKyAgICAgICAgbmV4dCA9IHNlYXJj
aEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAg
IGlmIChuZXh0ICE9IHN0cmluZy5sZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBpdC5hZHZhbmNlKCk7CkBAIC0xNjgsMTEgKzE2NSw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gbmV4dEJvdW5kYXJ5KGNvbnMKICAgICAgICAgLy8gTWFrZSBhIGNoZWNrIHRvIHNlZSBpZiB0
aGUgcG9zaXRpb24gc2hvdWxkIGJlIGJlZm9yZSBvciBhZnRlciB0aGUgcmVwbGFjZWQgZWxlbWVu
dAogICAgICAgICAvLyBieSBwZXJmb3JtaW5nIGFuIGFkZGl0aW9uYWwgY2hlY2sgd2l0aCBhIG1v
ZGlmaWVkIHN0cmluZyB3aGljaCB1c2VzIGFuICJYIiAKICAgICAgICAgLy8gY2hhcmFjdGVyIHRv
IHN0YW5kIGluIGZvciB0aGUgcmVwbGFjZWQgZWxlbWVudC4KLSAgICAgICAgRGVwcmVjYXRlZENo
YXIgY2hhcnNbMl07Ci0gICAgICAgIGNoYXJzWzBdID0gJyAnOwotICAgICAgICBjaGFyc1sxXSA9
ICdYJzsKLSAgICAgICAgc3RyaW5nLmFwcGVuZChjaGFycywgMik7Ci0gICAgICAgIHVuc2lnbmVk
IHBhc3RJbWFnZSA9IHNlYXJjaEZ1bmN0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nLmFw
cGVuZCgiIFgiKTsKKyAgICAgICAgdW5zaWduZWQgcGFzdEltYWdlID0gc2VhcmNoRnVuY3Rpb24o
c3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgUmVmUHRyPFJh
bmdlPiByYW5nZShpdC5yYW5nZSgpKTsKICAgICAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAgICAg
ICAgIGlmIChuZXh0ICE9IHBhc3RJbWFnZSkKQEAgLTM3OCw3ICszNzIsMTUgQEAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mTGluZShjb25zdCBWaXNpYmxlUAogCiBib29sIGluU2FtZUxpbmUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIpCiB7Ci0gICAgcmV0
dXJuIGEuaXNOb3ROdWxsKCkgJiYgc3RhcnRPZkxpbmUoYSkgPT0gc3RhcnRPZkxpbmUoYik7Cisg
ICAgaWYgKGEuaXNOdWxsKCkgfHwgYi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIFJlbmRlck9iamVjdCogYXIgPSBhLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5y
ZW5kZXJlcigpOworICAgIGlmIChhciAmJiBhciA9PSBiLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yZW5kZXJlcigpICYmIGFyLT5pc1RleHQoKSkKKyAgICAgICAgLy8gZmFzdGVyIHRlc3QgaWYg
Ym90aCBwb3NpdGlvbnMgYXJlIGluIHRoZSBzYW1lIHRleHQgbm9kZQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGFyKS0+aW5TYW1lTGluZShhLCBiKTsKKyAgICAKKyAg
ICByZXR1cm4gc3RhcnRPZkxpbmUoYSkgPT0gc3RhcnRPZkxpbmUoYik7CiB9CiAKIGJvb2wgaXNT
dGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAJKHJldmlzaW9uIDE5OTYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDEzICsxNjksNiBAQCBib29sIElubGluZUJveDo6
aXNDaGlsZE9mUGFyZW50KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJvb3RJbmxpbmVCb3gq
IElubGluZUJveDo6cm9vdCgpCi17IAotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAgcmV0dXJu
IG1fcGFyZW50LT5yb290KCk7IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSb290SW5saW5lQm94
Kj4odGhpcyk7Ci19Ci0KIGJvb2wgSW5saW5lQm94OjpuZXh0T25MaW5lRXhpc3RzKCkgY29uc3QK
IHsKICAgICBpZiAoIXBhcmVudCgpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9u
IDE5OTYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw3ICsxNDIsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0NoaWxkT2ZQYXJlbnQo
KTsKIAotICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QoKTsKKyAgICBSb290SW5saW5lQm94KiByb290
KCkgY29uc3QKKyAgICB7IAorICAgICAgICBjb25zdCBJbmxpbmVCb3gqIHAgPSB0aGlzOyAKKyAg
ICAgICAgd2hpbGUgKHAtPm1fcGFyZW50KQorICAgICAgICAgICAgcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SW5saW5lQm94Kj4ocC0+bV9wYXJlbnQpOyAKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Um9vdElubGluZUJveCo+KGNvbnN0X2Nhc3Q8SW5saW5lQm94Kj4ocCkpOworICAgIH0K
ICAgICAKICAgICB2b2lkIHNldFdpZHRoKGludCB3KSB7IG1fd2lkdGggPSB3OyB9CiAgICAgaW50
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE5OTYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCwxOSArODQ0LDE5IEBAIGludCBJ
bmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQKIAogYm9vbCBJbmxpbmVUZXh0Qm94
Ojpjb250YWluc0NhcmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgLy8gT2Zmc2V0
cyBiZWZvcmUgdGhlIGJveCBhcmUgbmV2ZXIgImluIi4KLSAgICBpZiAob2Zmc2V0IDwgbV9zdGFy
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaW50IHBhc3RFbmQgPSBtX3N0YXJ0ICsg
bV9sZW47CiAKLSAgICAvLyBPZmZzZXRzIGluc2lkZSB0aGUgYm94IChub3QgYXQgZWl0aGVyIGVk
Z2UpIGFyZSBhbHdheXMgImluIi4KLSAgICBpZiAob2Zmc2V0IDwgcGFzdEVuZCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KICAgICAvLyBPZmZzZXRzIG91dHNpZGUgdGhlIGJveCBhcmUgYWx3YXlz
ICJvdXQiLgogICAgIGlmIChvZmZzZXQgPiBwYXN0RW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgLy8gT2Zmc2V0cyBiZWZvcmUgdGhlIGJveCBhcmUgbmV2ZXIgImluIi4KKyAg
ICBpZiAob2Zmc2V0IDwgbV9zdGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAKKyAgICAK
KyAgICAvLyBPZmZzZXRzIGluc2lkZSB0aGUgYm94IChub3QgYXQgZWl0aGVyIGVkZ2UpIGFyZSBh
bHdheXMgImluIi4KKyAgICBpZiAob2Zmc2V0IDwgcGFzdEVuZCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAvLyBPZmZzZXRzIGF0IHRoZSBlbmQgYXJlICJvdXQiIGZvciBsaW5lIGJyZWFr
cyAodGhleSBhcmUgb24gdGhlIG5leHQgbGluZSkuCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMTk5NjIpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDI1ICszNzEs
MjYgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludExpbmVzKFBhaW50SW5mbyYgcAogICAgIFJlbmRl
clZpZXcqIHYgPSB2aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0
KCkuaXNFbXB0eSgpOwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJv
eCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dEZsb3dCb3goKSkgeworICAgICAgICBSb290SW5s
aW5lQm94KiBjdXJyUm9vdCA9IGN1cnItPnJvb3QoKTsKICAgICAgICAgaWYgKHVzZVByaW50UmVj
dCkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBmZWVibGUgZWZmb3J0IHRvIGF2
b2lkIHNwbGl0dGluZyBhIGxpbmUgYWNyb3NzIHR3byBwYWdlcy4KICAgICAgICAgICAgIC8vIEl0
IGlzIHV0dGVybHkgaW5hZGVxdWF0ZSwgYW5kIHRoaXMgc2hvdWxkIG5vdCBiZSBkb25lIGF0IHBh
aW50IHRpbWUgYXQgYWxsLgogICAgICAgICAgICAgLy8gVGhlIHdob2xlIHdheSBvYmplY3RzIGJy
ZWFrIGFjcm9zcyBwYWdlcyBuZWVkcyB0byBiZSByZWRvbmUuCiAgICAgICAgICAgICAvLyBUcnkg
dG8gYXZvaWQgc3BsaXR0aW5nIGEgbGluZSB2ZXJ0aWNhbGx5LCBidXQgb25seSBpZiBpdCdzIGxl
c3MgdGhhbiB0aGUgaGVpZ2h0CiAgICAgICAgICAgICAvLyBvZiB0aGUgZW50aXJlIHBhZ2UuCi0g
ICAgICAgICAgICBpZiAoY3Vyci0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpIC0gY3Vyci0+cm9v
dCgpLT50b3BPdmVyZmxvdygpIDw9IHYtPnByaW50UmVjdCgpLmhlaWdodCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpID4gdi0+cHJp
bnRSZWN0KCkuYm90dG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsgY3Vyci0+
cm9vdCgpLT50b3BPdmVyZmxvdygpIDwgdi0+dHJ1bmNhdGVkQXQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHYtPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGN1cnItPnJvb3QoKS0+dG9wT3Zl
cmZsb3coKSwgdGhpcyk7CisgICAgICAgICAgICBpZiAoY3VyclJvb3QtPmJvdHRvbU92ZXJmbG93
KCkgLSBjdXJyUm9vdC0+dG9wT3ZlcmZsb3coKSA8PSB2LT5wcmludFJlY3QoKS5oZWlnaHQoKSkg
eworICAgICAgICAgICAgICAgIGlmICh0eSArIGN1cnJSb290LT5ib3R0b21PdmVyZmxvdygpID4g
di0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsg
Y3VyclJvb3QtPnRvcE92ZXJmbG93KCkgPCB2LT50cnVuY2F0ZWRBdCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY3VyclJvb3QtPnRvcE92ZXJm
bG93KCksIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8g
dHJ1bmNhdGUsIGRvbid0IHBhaW50LgotICAgICAgICAgICAgICAgICAgICBpZiAodHkgKyBjdXJy
LT5yb290KCktPnRvcE92ZXJmbG93KCkgPj0gdi0+dHJ1bmNhdGVkQXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5ICsgY3VyclJvb3QtPnRvcE92ZXJmbG93KCkgPj0gdi0+dHJ1bmNhdGVk
QXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGludCB0b3AgPSBtaW4oY3Vyci0+
cm9vdCgpLT50b3BPdmVyZmxvdygpLCBjdXJyLT5yb290KCktPnNlbGVjdGlvblRvcCgpKSAtIG1h
eGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IGN1cnIt
PnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSArIG1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNl
KTsKKyAgICAgICAgaW50IHRvcCA9IG1pbihjdXJyUm9vdC0+dG9wT3ZlcmZsb3coKSwgY3VyclJv
b3QtPnNlbGVjdGlvblRvcCgpKSAtIG1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKKyAg
ICAgICAgaW50IGJvdHRvbSA9IGN1cnJSb290LT5ib3R0b21PdmVyZmxvdygpICsgbWF4aW1hbE91
dGxpbmVTaXplKGluZm8ucGhhc2UpOwogICAgICAgICBoID0gYm90dG9tIC0gdG9wOwogICAgICAg
ICB5UG9zID0gdHkgKyB0b3A7CiAgICAgICAgIGlmICh5UG9zIDwgaW5mby5yZWN0LmJvdHRvbSgp
ICYmIHlQb3MgKyBoID4gaW5mby5yZWN0LnkoKSkKQEAgLTQzMCw3ICs0MzEsOCBAQCBib29sIFJl
bmRlckZsb3c6OmhpdFRlc3RMaW5lcyhjb25zdCBIaXRUCiAgICAgLy8gdGhlbSBmdXJ0aGVyLiAg
Tm90ZSB0aGF0IGJveGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwgc28gd2UgY2FuJ3QgbWFrZSBhbnkg
YXNzdW1wdGlvbnMKICAgICAvLyBiYXNlZCBvZmYgcG9zaXRpb25zIG9mIG91ciBmaXJzdCBsaW5l
IGJveCBvciBvdXIgbGFzdCBsaW5lIGJveC4KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIg
PSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkZsb3dCb3goKSkgewotICAg
ICAgICBpZiAoeSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSAmJiB5IDwgdHkg
KyBjdXJyLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkpIHsKKyAgICAgICAgUm9vdElubGluZUJv
eCogY3VyclJvb3QgPSBjdXJyLT5yb290KCk7CisgICAgICAgIGlmICh5ID49IHR5ICsgY3VyclJv
b3QtPnRvcE92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3VyclJvb3QtPmJvdHRvbU92ZXJmbG93KCkp
IHsKICAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCB4LCB5LCB0eCwgdHkpOwogICAgICAgICAgICAgaWYgKGluc2lkZSkgewogICAgICAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkg
LSB0eSkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE5OTYyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDYgKzY0LDggQEAgUmVuZGVyVGV4dDo6UmVuZGVyVGV4dChOb2RlKiBub2RlLCBQYXNzUgogICAg
ICAsIG1fbGluZXNEaXJ0eShmYWxzZSkKICAgICAgLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0KGZh
bHNlKQogICAgICAsIG1faXNBbGxBU0NJSShtX3RleHQgPyBjaGFyYWN0ZXJzQXJlQWxsQVNDSUko
bV90ZXh0LmdldCgpKSA6IHRydWUpCisgICAgICwgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9u
c0RpcnR5KHRydWUpCisgICAgICwgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9ucyhmYWxzZSkK
ICAgICAgLCBtX21vbm9zcGFjZUNoYXJhY3RlcldpZHRoKDApCiB7CiAgICAgc2V0UmVuZGVyVGV4
dCgpOwpAQCAtMTI2LDYgKzEyOCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6ZXh0cmFjdFRleHRCb3go
SW5saW5lVGUKICAgICBib3gtPnNldFByZXZpb3VzTGluZUJveCgwKTsKICAgICBmb3IgKElubGlu
ZVJ1bkJveCogY3VyciA9IGJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCiAg
ICAgICAgIGN1cnItPnNldEV4dHJhY3RlZCgpOworICAgIG1fdGV4dEJveGVzQ292ZXJBbGxQb3Np
dGlvbnNEaXJ0eSA9IHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YXR0YWNoVGV4dEJveChJ
bmxpbmVUZXh0Qm94KiBib3gpCkBAIC0xNDEsNiArMTQ0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojph
dHRhY2hUZXh0Qm94KElubGluZVRleAogICAgICAgICBsYXN0ID0gY3VycjsKICAgICB9CiAgICAg
bV9sYXN0VGV4dEJveCA9IGxhc3Q7CisgICAgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0Rp
cnR5ID0gdHJ1ZTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjpyZW1vdmVUZXh0Qm94KElubGluZVRl
eHRCb3gqIGJveCkKQEAgLTE1Myw2ICsxNTcsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnJlbW92ZVRl
eHRCb3goSW5saW5lVGV4CiAgICAgICAgIGJveC0+bmV4dFRleHRCb3goKS0+c2V0UHJldmlvdXNM
aW5lQm94KGJveC0+cHJldlRleHRCb3goKSk7CiAgICAgaWYgKGJveC0+cHJldlRleHRCb3goKSkK
ICAgICAgICAgYm94LT5wcmV2VGV4dEJveCgpLT5zZXROZXh0TGluZUJveChib3gtPm5leHRUZXh0
Qm94KCkpOworICAgIG1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNEaXJ0eSA9IHRydWU7CiB9
CiAKIHZvaWQgUmVuZGVyVGV4dDo6ZGVsZXRlVGV4dEJveGVzKCkKQEAgLTk2Niw2ICs5NzEsNyBA
QCBJbmxpbmVCb3gqIFJlbmRlclRleHQ6OmNyZWF0ZUlubGluZUJveChiCiAgICAgICAgIHRleHRC
b3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94KTsKICAgICAgICAgbV9sYXN0VGV4
dEJveCA9IHRleHRCb3g7CiAgICAgfQorICAgIG1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNE
aXJ0eSA9IHRydWU7CiAgICAgcmV0dXJuIHRleHRCb3g7CiB9CiAKQEAgLTEwNjYsNyArMTA3Miw4
IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdCgpCiAgICAgICAgIHJldHVybiBy
ZWN0OwogCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxl
Y3Rpb25SZWN0KDAsIDAsIHN0YXJ0UG9zLCBlbmRQb3MpKTsKKyAgICAgICAgaWYgKChpbnQpYm94
LT5zdGFydCgpIDwgZW5kUG9zICYmIChpbnQpYm94LT5zdGFydCgpICsgKGludClib3gtPmxlbigp
ID49IHN0YXJ0UG9zKQorICAgICAgICAgICAgcmVjdC51bml0ZShib3gtPnNlbGVjdGlvblJlY3Qo
MCwgMCwgc3RhcnRQb3MsIGVuZFBvcykpOwogCiAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpCiAg
ICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsKQEAgLTExNDcsMjIgKzExNTQs
NzMgQEAgaW50IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1cnJlbnQpIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSW5saW5lVGV4dEJveCogdGV4dEJveEZvck9m
ZnNldE9yTnVsbChJbmxpbmVUZXh0Qm94KiBib3gsIGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZp
bml0eSwgSW5saW5lVGV4dEJveCogZmFsbGJhY2spCit7CisgICAgaWYgKGJveC0+Y29udGFpbnND
YXJldE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGlmIChhdExpbmVXcmFwKGJveCwgb2Zmc2V0
KSAmJiBhZmZpbml0eSA9PSBET1dOU1RSRUFNKQorICAgICAgICAgICAgcmV0dXJuIGJveC0+bmV4
dFRleHRCb3goKTsKKyAgICAgICAgcmV0dXJuIGJveDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8
IGJveC0+bV9zdGFydCkKKyAgICAgICAgLy8gVGhlIG9mZnNldCB3ZSdyZSBsb29raW5nIGZvciBp
cyBiZWZvcmUgdGhpcyBub2RlCisgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhlIG9mZnNldCBtdXN0
IGJlIGluIGNvbnRlbnQgdGhhdCBpcworICAgICAgICAvLyBub3QgcmVuZGVyZWQuCisgICAgICAg
IHJldHVybiBib3gtPnByZXZUZXh0Qm94KCkgPyBib3gtPnByZXZUZXh0Qm94KCkgOiBmYWxsYmFj
azsKKyAgICByZXR1cm4gMDsKK30KKwogSW5saW5lQm94KiBSZW5kZXJUZXh0OjppbmxpbmVCb3go
aW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogeworICAgIGZvciAoSW5saW5lVGV4dEJv
eCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQor
ICAgICAgICBpZiAoSW5saW5lVGV4dEJveCogcmVzID0gdGV4dEJveEZvck9mZnNldE9yTnVsbChi
b3gsIG9mZnNldCwgYWZmaW5pdHksIGZpcnN0VGV4dEJveCgpKSkKKyAgICAgICAgICAgIHJldHVy
biByZXM7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgUmVuZGVyVGV4dDo6aW5TYW1lTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikgY29uc3QK
K3sKKyAgICBBU1NFUlQoYS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKSA9PSB0
aGlzICYmIGIuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCkgID09IHRoaXMpOwor
ICAgIAorICAgIGludCBvZmZzZXRBID0gYS5kZWVwRXF1aXZhbGVudCgpLm9mZnNldCgpOworICAg
IGludCBvZmZzZXRCID0gYi5kZWVwRXF1aXZhbGVudCgpLm9mZnNldCgpOworICAgIElubGluZVRl
eHRCb3gqIGJveEEgPSAwOworICAgIElubGluZVRleHRCb3gqIGJveEIgPSAwOwogICAgIGZvciAo
SW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0
VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmIChib3gtPmNvbnRhaW5zQ2FyZXRPZmZzZXQob2Zmc2V0
KSkgewotICAgICAgICAgICAgaWYgKGF0TGluZVdyYXAoYm94LCBvZmZzZXQpICYmIGFmZmluaXR5
ID09IERPV05TVFJFQU0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+bmV4dFRleHRCb3go
KTsKLSAgICAgICAgICAgIHJldHVybiBib3g7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNl
dCA8IGJveC0+bV9zdGFydCkKLSAgICAgICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2lu
ZyBmb3IgaXMgYmVmb3JlIHRoaXMgbm9kZQotICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGUg
b2Zmc2V0IG11c3QgYmUgaW4gY29udGVudCB0aGF0IGlzCi0gICAgICAgICAgICAvLyBub3QgcmVu
ZGVyZWQuCi0gICAgICAgICAgICByZXR1cm4gYm94LT5wcmV2VGV4dEJveCgpID8gYm94LT5wcmV2
VGV4dEJveCgpIDogZmlyc3RUZXh0Qm94KCk7CisgICAgICAgIGlmICghYm94QSkKKyAgICAgICAg
ICAgIGJveEEgPSB0ZXh0Qm94Rm9yT2Zmc2V0T3JOdWxsKGJveCwgb2Zmc2V0QSwgYS5hZmZpbml0
eSgpLCBmaXJzdFRleHRCb3goKSk7CisgICAgICAgIGlmICghYm94QikKKyAgICAgICAgICAgIGJv
eEIgPSB0ZXh0Qm94Rm9yT2Zmc2V0T3JOdWxsKGJveCwgb2Zmc2V0QiwgYi5hZmZpbml0eSgpLCBm
aXJzdFRleHRCb3goKSk7CisgICAgICAgIGlmIChib3hBICYmIGJveEIpCisgICAgICAgICAgICBi
cmVhazsKICAgICB9CisgICAgaWYgKGJveEEgPT0gYm94QikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKCFib3hBIHx8ICFib3hCKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGJveEEtPnJvb3QoKSA9PSBib3hCLT5yb290KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgcmV0dXJuIDA7CisvLyBzZWUg
aWYgdGV4dCBib3hlcyBmb3JtIGFuIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2Ugb2YgcG9zaXRpb25z
LiAKKy8vIHRoaXMgYWxsb3dzIHNvbWUgb3B0aW1pemF0aW9ucyBlbHNld2hlcmUuCitib29sIFJl
bmRlclRleHQ6OnRleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdGV4
dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNEaXJ0eSkKKyAgICAgICAgcmV0dXJuIG1fdGV4dEJveGVz
Q292ZXJBbGxQb3NpdGlvbnM7CisgICAgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9ucyA9IHRy
dWU7CisgICAgdW5zaWduZWQgcG9zID0gMDsKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9
IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAg
ICBpZiAoYm94LT5zdGFydCgpID09IHBvcykKKyAgICAgICAgICAgIHBvcyA9IGJveC0+c3RhcnQo
KSArIGJveC0+bGVuKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90ZXh0Qm94ZXND
b3ZlckFsbFBvc2l0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0RpcnR5ID0gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnM7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE5OTYyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
NiArMTI0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250YWluc1JldmVyc2VkVGV4dDsgfQogCiAgICAgSW5saW5lVGV4dEJv
eCogZmluZE5leHRJbmxpbmVUZXh0Qm94KGludCBvZmZzZXQsIGludCYgcG9zKSBjb25zdDsKKyAg
ICAKKyAgICBib29sIGluU2FtZUxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGIpIGNvbnN0OworICAgIAorICAgIGJvb2wgdGV4dEJveGVzQ292ZXJB
bGxQb3NpdGlvbnMoKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0VGV4dEludGVybmFsKFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4pOwpAQCAtMTY0LDYgKzE2OCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvciByZW1vdmVkKS4KICAgICBib29sIG1fY29udGFp
bnNSZXZlcnNlZFRleHQgOiAxOwogICAgIGJvb2wgbV9pc0FsbEFTQ0lJIDogMTsKKyAgICBib29s
IG1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX3RleHRC
b3hlc0NvdmVyQWxsUG9zaXRpb25zIDogMTsKIAogICAgIGludCBtX21vbm9zcGFjZUNoYXJhY3Rl
cldpZHRoOwogfTsK
</data>
<flag name="review"
          id="5363"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13560</attachid>
            <date>2007-03-09 09:15:30 -0800</date>
            <delta_ts>2007-03-12 11:33:55 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>12833-5.patch</filename>
            <type>text/plain</type>
            <size>23122</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDA5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDctMDMtMDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODMzCisgICAgICAgIFJFR1JF
U1NJT046IFNlbGVjdGluZyB0ZXh0IGluIDYuNk1CIHR4dCBmaWxlIGlzIHNsdWdnaXNoIGFzIG9m
IHRoZSBGZWIgMTl0aCBuaWdodGx5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MDI4MTU5Pgor
ICAgICAgICAKKyAgICAgICAgT3B0aW1pemUgc29tZSBlZGl0aW5nIGZ1bmN0aW9ucyBmb3IgbGFy
Z2UgdGV4dCBub2RlcyB3aXRoIG1hbnkgbGluZSBib3hlcy4KKyAgICAgICAgCisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpyZW5kZXJlZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b246OmluUmVuZGVyZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc1JlbmRl
cmVkQ2hhcmFjdGVyKToKKyAgICAgICAgICAgIEltcGxlbWVudCBzaG9ydGN1dCBjb2RlcGF0aHMg
dXNpbmcgUmVuZGVyVGV4dDo6dGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyKCkgdGhh
dCBhdm9pZCAKKyAgICAgICAgICAgIHRyYXZlcnNpbmcgbGluZSBib3hlcy4KKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb246OmluaXQpOgorICAgICAgICAgICAgVXNlIGNvcHkgY29uc3RydWN0b3IgdG8gbWFrZSB0
aGUgdGVtcG9yYXJ5IFZpc2libGVQb3NpdGlvbiwgYXZvaWRpbmcgZXhwZW5zaXZlbHkgcmVkb2lu
ZyAKKyAgICAgICAgICAgIGNhbm9uaWNhbFBvc2l0aW9uKCkuCisgICAgICAgICogZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dEJvdW5kYXJ5KToKKyAgICAgICAgICAgIFVzZSBTdHJpbmcg
aW5zdGVhZCBvZiBEZXByYWNhdGVkU3RyaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnZlcnNp
b25zIHRvIGFzY2lpIGFuZCBiYWNrLgorICAgICAgICAoV2ViQ29yZTo6aW5TYW1lTGluZSk6Cisg
ICAgICAgICAgICBPcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSBib3RoIHBvc2l0aW9ucyBhcmUgaW5z
aWRlIHNhbWUgdGV4dCBub2RlIGJ5IGF2b2lkaW5nIGRvdWJsZSB0cmF2ZXJzYWwKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnJvb3QpOgorICAgICAgICAgICAgSW5s
aW5lIHJvb3QoKQorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3c6OnBhaW50TGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvdzo6aGl0VGVzdExpbmVzKToKKyAgICAgICAgICAgIERvbid0IGNhbGwgcm9vdCgpIHJl
cGVhdGVkbHkgdW5uZWNlc3NhcmlseQorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6ZXh0cmFjdFRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6YXR0YWNoVGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpyZW1vdmVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNyZWF0ZUlu
bGluZUJveCk6CisgICAgICAgICAgICBLZWVwIGRpcnR5IGJpdCBmb3IgdGV4dEJveGVzQ292ZXJB
bGxQb3NpdGlvbnNJbk9yZGVyKCkgaW4gc3luYworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgICAgICBBdm9pZCBjb25zdHJ1Y3RpbmcgdW51c2Vk
IGVtcHR5IEludFJlY3RzCisgICAgICAgIChXZWJDb3JlOjp0ZXh0Qm94Rm9yT2Zmc2V0T3JOdWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmlubGluZUJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0OjppblNhbWVMaW5lOgorICAgICAgICAgICAgQWRkIG1ldGhvZCBm
b3IgY2hlY2tpbmcgaWYgcG9zaXRpb25zIGFyZSBpbiBzYW1lIGxpbmUgd2l0aGluIHRleHQgbm9k
ZQorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dGV4dEJveGVzQ292ZXJBbGxQb3NpdGlv
bnNJbk9yZGVyKToKKyAgICAgICAgICAgIEFkZCBtZXRob2QgZm9yIHRlc3RpbmcgaWYgdGV4dCBi
b3hlcyBjb3ZlciBhbGwgZWRpdGluZyBwb3NpdGlvbnMgd2l0aG91dCAKKyAgICAgICAgICAgIGlu
dGVycnVwdGlvbnMuIFRoaXMgYWxsb3dzIG9wdGltaXphdGlvbnMuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuaDoKKwogMjAwNy0wMy0wOSAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZp
c2lvbiAxOTk2MikKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDggKzE5OSwxNSBAQCBpbnQgUG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KCkgY29uc3QK
ICAgICBpZiAoIW5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG9mZnNldCgpOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICBpbnQgcmVzdWx0ID0gMDsKICAgICBSZW5kZXJUZXh0
ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG5vZGUoKS0+cmVuZGVy
ZXIoKSk7CisgICAgaWYgKHRleHRSZW5kZXJlci0+dGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJ
bk9yZGVyKCkgJiYgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpKSB7CisgICAgICAgIC8vIG5v
IGhvbGVzIGluIHRleHQgYm94ZXMsIHRha2UgYSBzaG9ydGN1dCBhbmQgYXZvaWQgdHJhdmVyc2lu
ZworICAgICAgICBpZiAob2Zmc2V0KCkgPj0gMCAmJiBvZmZzZXQoKSA8PSB0ZXh0UmVuZGVyZXIt
Pmxhc3RUZXh0Qm94KCktPm1fc3RhcnQgKyB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCktPm1f
bGVuKQorICAgICAgICAgICAgcmV0dXJuIG9mZnNldCgpOworICAgICAgICByZXR1cm4gb2Zmc2V0
KCkgPj0gMCA/IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKS0+bV9zdGFydCArIHRleHRSZW5k
ZXJlci0+bGFzdFRleHRCb3goKS0+bV9sZW4gOiAwOworICAgIH0KKworICAgIGludCByZXN1bHQg
PSAwOwogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRl
eHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgaW50IHN0
YXJ0ID0gYm94LT5tX3N0YXJ0OwogICAgICAgICBpbnQgZW5kID0gYm94LT5tX3N0YXJ0ICsgYm94
LT5tX2xlbjsKQEAgLTM0MSw2ICszNDgsMTYgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFt
KCkgY29uc3QKIAogICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpOwogICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgaWYg
KHRleHRSZW5kZXJlci0+dGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBubyBob2xlcyBpbiB0ZXh0IGJveGVzLCB0YWtlIGEgc2hvcnRjdXQg
YW5kIGF2b2lkIHRyYXZlcnNpbmcKKyAgICAgICAgICAgICAgICBpZiAodGV4dFJlbmRlcmVyLT5s
YXN0VGV4dEJveCgpICYmIHRleHRPZmZzZXQgPiAwCisgICAgICAgICAgICAgICAgICAgICYmIHRl
eHRPZmZzZXQgPD0gdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpLT5zdGFydCgpICsgdGV4dFJl
bmRlcmVyLT5sYXN0VGV4dEJveCgpLT5sZW4oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94
KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXh0T2Zmc2V0ID4gYm94LT5zdGFy
dCgpICYmIHRleHRPZmZzZXQgPD0gYm94LT5zdGFydCgpICsgYm94LT5sZW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CkBAIC00MDksNiArNDI2LDE1IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgIHVuc2lnbmVkIHRl
eHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKTsKIAogICAgICAgICAgICAg
UmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRl
cmVyKTsKKworICAgICAgICAgICAgaWYgKHRleHRSZW5kZXJlci0+dGV4dEJveGVzQ292ZXJBbGxQ
b3NpdGlvbnNJbk9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBubyBob2xlcyBpbiB0ZXh0
IGJveGVzLCB0YWtlIGEgc2hvcnRjdXQgYW5kIGF2b2lkIHRyYXZlcnNpbmcKKyAgICAgICAgICAg
ICAgICBpZiAodGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpICYmIHRleHRPZmZzZXQgPD0gdGV4
dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpLT5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRQb3M7CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
ciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGV4dE9m
ZnNldCA+PSBib3gtPnN0YXJ0KCkgJiYgdGV4dE9mZnNldCA8PSBib3gtPmVuZCgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKQEAgLTQ3OCw2ICs1MDQsMTMgQEAgYm9v
bCBQb3NpdGlvbjo6aW5SZW5kZXJlZFRleHQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgUmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCAqPihyZW5kZXJlcik7CisgICAgCisgICAgaWYgKHRleHRSZW5kZXJlci0+dGV4dEJveGVz
Q292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyKCkpCisgICAgICAgICAvLyBubyBob2xlcyBpbiB0ZXh0
IGJveGVzLCB0YWtlIGEgc2hvcnRjdXQgYW5kIGF2b2lkIHRyYXZlcnNpbmcKKyAgICAgICAgcmV0
dXJuIHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKSAmJiBvZmZzZXQoKSA+PSAwCisgICAgICAg
ICAgICAmJiAob2Zmc2V0KCkgPCB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCktPm1fc3RhcnQg
fHwgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpLT5jb250YWluc0NhcmV0T2Zmc2V0KG9mZnNl
dCgpKSkKKyAgICAgICAgICAgICYmIChvZmZzZXQoKSA9PSAwIHx8IG9mZnNldCgpID09IHRleHRS
ZW5kZXJlci0+bmV4dE9mZnNldCh0ZXh0UmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCgp
KSkpOworICAgIAogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5m
aXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAg
aWYgKG9mZnNldCgpIDwgYm94LT5tX3N0YXJ0ICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2
ZXJzZWRUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2luZyBm
b3IgaXMgYmVmb3JlIHRoaXMgbm9kZQpAQCAtNTAxLDggKzUzNCwxNCBAQCBib29sIFBvc2l0aW9u
Ojppc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uCiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9
IG5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVyKTsKKyAgICAKKyAgICBpZiAodGV4dFJlbmRlcmVyLT50
ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0luT3JkZXIoKSkKKyAgICAgICAgLy8gbm8gaG9sZXMg
aW4gdGV4dCBib3hlcywgdGFrZSBhIHNob3J0Y3V0IGFuZCBhdm9pZCB0cmF2ZXJzaW5nCisgICAg
ICAgIHJldHVybiB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCkgJiYgb2Zmc2V0KCkgPj0gMCAK
KyAgICAgICAgICAgICYmIG9mZnNldCgpIDwgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpLT5t
X3N0YXJ0ICsgdGV4dFJlbmRlcmVyLT5sYXN0VGV4dEJveCgpLT5tX2xlbjsKKwogICAgIGZvciAo
SW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgaWYgKG9mZnNldCgpIDwgYm94LT5t
X3N0YXJ0ICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2luZyBmb3IgaXMgYmVmb3JlIHRoaXMgbm9k
ZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE5OTYyKQor
KysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDggKzU3LDEyIEBAIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjppbml0KGNvbnN0IFBvc2l0aW8K
ICAgICBtX2RlZXBQb3NpdGlvbiA9IGNhbm9uaWNhbFBvc2l0aW9uKHBvc2l0aW9uKTsKICAgICAK
ICAgICAvLyBXaGVuIG5vdCBhdCBhIGxpbmUgd3JhcCwgbWFrZSBzdXJlIHRvIGVuZCB1cCB3aXRo
IERPV05TVFJFQU0gYWZmaW5pdHkuCi0gICAgaWYgKG1fYWZmaW5pdHkgPT0gVVBTVFJFQU0gJiYg
KGlzTnVsbCgpIHx8IGluU2FtZUxpbmUoVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uLCBET1dOU1RS
RUFNKSwgKnRoaXMpKSkKLSAgICAgICAgbV9hZmZpbml0eSA9IERPV05TVFJFQU07CisgICAgaWYg
KG1fYWZmaW5pdHkgPT0gVVBTVFJFQU0pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGRvd25z
dHJlYW0oKnRoaXMpOworICAgICAgICBkb3duc3RyZWFtLm1fYWZmaW5pdHkgPSBET1dOU1RSRUFN
OworICAgICAgICBpZiAoaXNOdWxsKCkgfHwgaW5TYW1lTGluZShkb3duc3RyZWFtLCAqdGhpcykp
CisgICAgICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNUUkVBTTsKKyAgICB9CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Om5leHQoYm9vbCBzdGF5SW5FZGl0YWJsZUNvbnRl
bnQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiAxOTk2
MikKKysrIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjksNyArNjksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAgICAgCiAgICAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7Ci0gICAgRGVw
cmVjYXRlZFN0cmluZyBzdHJpbmc7CisgICAgU3RyaW5nIHN0cmluZzsKICAgICB1bnNpZ25lZCBu
ZXh0ID0gMDsKICAgICBib29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBz
dGFydC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgd2hpbGUgKCFpdC5hdEVuZCgpICYm
IGl0Lmxlbmd0aCgpID4gMCkgewpAQCAtNzgsOCArNzgsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzQm91bmRhcnkoCiAgICAgICAgIC8vIFRyZWF0IGJ1bGxldHMgdXNlZCBpbiB0
aGUgdGV4dCBzZWN1cml0eSBtb2RlIGFzIHJlZ3VsYXIgY2hhcmFjdGVycyB3aGVuIGxvb2tpbmcg
Zm9yIGJvdW5kYXJpZXMKICAgICAgICAgaWYgKGluVGV4dFNlY3VyaXR5TW9kZSkKICAgICAgICAg
ICAgIGl0ZXJhdG9yU3RyaW5nID0gaXRlcmF0b3JTdHJpbmcuaW1wbCgpLT5zZWN1cmUoJ3gnKTsK
LSAgICAgICAgc3RyaW5nLnByZXBlbmQoaXRlcmF0b3JTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygp
KTsKLSAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgc3Ry
aW5nLmluc2VydChpdGVyYXRvclN0cmluZywgMCk7CisgICAgICAgIG5leHQgPSBzZWFyY2hGdW5j
dGlvbihzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBpZiAo
bmV4dCAhPSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKQEAg
LTkzLDExICs5Myw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgK
ICAgICAgICAgLy8gTWFrZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgcG9zaXRpb24gc2hvdWxkIGJl
IGJlZm9yZSBvciBhZnRlciB0aGUgcmVwbGFjZWQgZWxlbWVudAogICAgICAgICAvLyBieSBwZXJm
b3JtaW5nIGFuIGFkZGl0aW9uYWwgY2hlY2sgd2l0aCBhIG1vZGlmaWVkIHN0cmluZyB3aGljaCB1
c2VzIGFuICJYIiAKICAgICAgICAgLy8gY2hhcmFjdGVyIHRvIHN0YW5kIGluIGZvciB0aGUgcmVw
bGFjZWQgZWxlbWVudC4KLSAgICAgICAgRGVwcmVjYXRlZENoYXIgY2hhcnNbMl07Ci0gICAgICAg
IGNoYXJzWzBdID0gJ1gnOwotICAgICAgICBjaGFyc1sxXSA9ICcgJzsKLSAgICAgICAgc3RyaW5n
LnByZXBlbmQoY2hhcnMsIDIpOwotICAgICAgICB1bnNpZ25lZCBwYXN0SW1hZ2UgPSBzZWFyY2hG
dW5jdGlvbihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyaW5nLnVuaWNvZGUoKSks
IHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZy5pbnNlcnQoIlggIiwgMCk7CisgICAg
ICAgIHVuc2lnbmVkIHBhc3RJbWFnZSA9IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJz
KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UoaXQucmFu
Z2UoKSk7CiAgICAgICAgIGlmIChwYXN0SW1hZ2UgPT0gMCkKICAgICAgICAgICAgIHBvcyA9IFBv
c2l0aW9uKHJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCByYW5nZS0+c3RhcnRPZmZz
ZXQoZXhjZXB0aW9uKSk7CkBAIC0xNDMsNyArMTQwLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBuZXh0Qm91bmRhcnkoY29ucwogICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMo
Ym91bmRhcnksIGVjKTsKICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBz
dGFydC5vZmZzZXQoKSwgZWMpOwogICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQo
KSwgUlVORklOREVSKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZzsKKyAgICBTdHJpbmcg
c3RyaW5nOwogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlN
b2RlID0gc3RhcnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5u
b2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAg
ICB3aGlsZSAoIWl0LmF0RW5kKCkgJiYgaXQubGVuZ3RoKCkgPiAwKSB7CkBAIC0xNTMsOCArMTUw
LDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29ucwogICAgICAgICAv
LyBUcmVhdCBidWxsZXRzIHVzZWQgaW4gdGhlIHRleHQgc2VjdXJpdHkgbW9kZSBhcyByZWd1bGFy
IGNoYXJhY3RlcnMgd2hlbiBsb29raW5nIGZvciBib3VuZGFyaWVzCiAgICAgICAgIGlmIChpblRl
eHRTZWN1cml0eU1vZGUpCiAgICAgICAgICAgICBpdGVyYXRvclN0cmluZyA9IGl0ZXJhdG9yU3Ry
aW5nLmltcGwoKS0+c2VjdXJlKCd4Jyk7Ci0gICAgICAgIHN0cmluZy5hcHBlbmQoaXRlcmF0b3JT
dHJpbmcuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9u
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nLmFwcGVuZChpdGVyYXRvclN0cmluZyk7CisgICAg
ICAgIG5leHQgPSBzZWFyY2hGdW5jdGlvbihzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCkpOwogICAgICAgICBpZiAobmV4dCAhPSBzdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgaXQuYWR2YW5jZSgpOwpAQCAtMTY4LDExICsxNjUsOCBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgICAgIC8vIE1ha2UgYSBj
aGVjayB0byBzZWUgaWYgdGhlIHBvc2l0aW9uIHNob3VsZCBiZSBiZWZvcmUgb3IgYWZ0ZXIgdGhl
IHJlcGxhY2VkIGVsZW1lbnQKICAgICAgICAgLy8gYnkgcGVyZm9ybWluZyBhbiBhZGRpdGlvbmFs
IGNoZWNrIHdpdGggYSBtb2RpZmllZCBzdHJpbmcgd2hpY2ggdXNlcyBhbiAiWCIgCiAgICAgICAg
IC8vIGNoYXJhY3RlciB0byBzdGFuZCBpbiBmb3IgdGhlIHJlcGxhY2VkIGVsZW1lbnQuCi0gICAg
ICAgIERlcHJlY2F0ZWRDaGFyIGNoYXJzWzJdOwotICAgICAgICBjaGFyc1swXSA9ICcgJzsKLSAg
ICAgICAgY2hhcnNbMV0gPSAnWCc7Ci0gICAgICAgIHN0cmluZy5hcHBlbmQoY2hhcnMsIDIpOwot
ICAgICAgICB1bnNpZ25lZCBwYXN0SW1hZ2UgPSBzZWFyY2hGdW5jdGlvbihyZWludGVycHJldF9j
YXN0PGNvbnN0IFVDaGFyKj4oc3RyaW5nLnVuaWNvZGUoKSksIHN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgICAgIHN0cmluZy5hcHBlbmQoIiBYIik7CisgICAgICAgIHVuc2lnbmVkIHBhc3RJbWFnZSA9
IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CiAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UoaXQucmFuZ2UoKSk7CiAgICAgICAgIGludCBleGNl
cHRpb24gPSAwOwogICAgICAgICBpZiAobmV4dCAhPSBwYXN0SW1hZ2UpCkBAIC0zNzgsNyArMzcy
LDE1IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVAKIAogYm9vbCBp
blNhbWVMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZiKQogewotICAgIHJldHVybiBhLmlzTm90TnVsbCgpICYmIHN0YXJ0T2ZMaW5lKGEpID09IHN0
YXJ0T2ZMaW5lKGIpOworICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIGFyID0gYS5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoYXIgJiYgYXIgPT0gYi5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBhci0+aXNUZXh0KCkpCisgICAgICAgIC8v
IGZhc3RlciB0ZXN0IGlmIGJvdGggcG9zaXRpb25zIGFyZSBpbiB0aGUgc2FtZSB0ZXh0IG5vZGUK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihhciktPmluU2FtZUxpbmUo
YSwgYik7CisgICAgCisgICAgcmV0dXJuIHN0YXJ0T2ZMaW5lKGEpID09IHN0YXJ0T2ZMaW5lKGIp
OwogfQogCiBib29sIGlzU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxOTk2MikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMyArMTY5LDYgQEAg
Ym9vbCBJbmxpbmVCb3g6OmlzQ2hpbGRPZlBhcmVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1Sb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJvb3QoKQoteyAKLSAgICBpZiAobV9wYXJlbnQp
Ci0gICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9vdCgpOyAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Um9vdElubGluZUJveCo+KHRoaXMpOwotfQotCiBib29sIElubGluZUJveDo6bmV4dE9uTGlu
ZUV4aXN0cygpIGNvbnN0CiB7CiAgICAgaWYgKCFwYXJlbnQoKSkKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCShyZXZpc2lvbiAxOTk2MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNDaGlsZE9mUGFyZW50KCk7CiAKLSAgICBSb290SW5saW5lQm94KiByb290KCk7CisgICAgUm9v
dElubGluZUJveCogcm9vdCgpIGNvbnN0CisgICAgeyAKKyAgICAgICAgY29uc3QgSW5saW5lQm94
KiBwID0gdGhpczsgCisgICAgICAgIHdoaWxlIChwLT5tX3BhcmVudCkKKyAgICAgICAgICAgIHAg
PSByZWludGVycHJldF9jYXN0PElubGluZUJveCo+KHAtPm1fcGFyZW50KTsgCisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFJvb3RJbmxpbmVCb3gqPihjb25zdF9jYXN0PElubGluZUJv
eCo+KHApKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRXaWR0aChpbnQgdykgeyBtX3dpZHRo
ID0gdzsgfQogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAxOTk2MikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsMjUgKzM3MSwyNiBA
QCB2b2lkIFJlbmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZvJiBwCiAgICAgUmVuZGVyVmll
dyogdiA9IHZpZXcoKTsKICAgICBib29sIHVzZVByaW50UmVjdCA9ICF2LT5wcmludFJlY3QoKS5p
c0VtcHR5KCk7CiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Rmxvd0JveCgpKSB7CisgICAgICAgIFJvb3RJbmxpbmVC
b3gqIGN1cnJSb290ID0gY3Vyci0+cm9vdCgpOwogICAgICAgICBpZiAodXNlUHJpbnRSZWN0KSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGZlZWJsZSBlZmZvcnQgdG8gYXZvaWQg
c3BsaXR0aW5nIGEgbGluZSBhY3Jvc3MgdHdvIHBhZ2VzLgogICAgICAgICAgICAgLy8gSXQgaXMg
dXR0ZXJseSBpbmFkZXF1YXRlLCBhbmQgdGhpcyBzaG91bGQgbm90IGJlIGRvbmUgYXQgcGFpbnQg
dGltZSBhdCBhbGwuCiAgICAgICAgICAgICAvLyBUaGUgd2hvbGUgd2F5IG9iamVjdHMgYnJlYWsg
YWNyb3NzIHBhZ2VzIG5lZWRzIHRvIGJlIHJlZG9uZS4KICAgICAgICAgICAgIC8vIFRyeSB0byBh
dm9pZCBzcGxpdHRpbmcgYSBsaW5lIHZlcnRpY2FsbHksIGJ1dCBvbmx5IGlmIGl0J3MgbGVzcyB0
aGFuIHRoZSBoZWlnaHQKICAgICAgICAgICAgIC8vIG9mIHRoZSBlbnRpcmUgcGFnZS4KLSAgICAg
ICAgICAgIGlmIChjdXJyLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkgLSBjdXJyLT5yb290KCkt
PnRvcE92ZXJmbG93KCkgPD0gdi0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodHkgKyBjdXJyLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkgPiB2LT5wcmludFJl
Y3QoKS5ib3R0b20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodHkgKyBjdXJyLT5yb290
KCktPnRvcE92ZXJmbG93KCkgPCB2LT50cnVuY2F0ZWRBdCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY3Vyci0+cm9vdCgpLT50b3BPdmVyZmxv
dygpLCB0aGlzKTsKKyAgICAgICAgICAgIGlmIChjdXJyUm9vdC0+Ym90dG9tT3ZlcmZsb3coKSAt
IGN1cnJSb290LT50b3BPdmVyZmxvdygpIDw9IHYtPnByaW50UmVjdCgpLmhlaWdodCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHR5ICsgY3VyclJvb3QtPmJvdHRvbU92ZXJmbG93KCkgPiB2LT5w
cmludFJlY3QoKS5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHkgKyBjdXJy
Um9vdC0+dG9wT3ZlcmZsb3coKSA8IHYtPnRydW5jYXRlZEF0KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjdXJyUm9vdC0+dG9wT3ZlcmZsb3co
KSwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byB0cnVu
Y2F0ZSwgZG9uJ3QgcGFpbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eSArIGN1cnItPnJv
b3QoKS0+dG9wT3ZlcmZsb3coKSA+PSB2LT50cnVuY2F0ZWRBdCgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAodHkgKyBjdXJyUm9vdC0+dG9wT3ZlcmZsb3coKSA+PSB2LT50cnVuY2F0ZWRBdCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaW50IHRvcCA9IG1pbihjdXJyLT5yb290
KCktPnRvcE92ZXJmbG93KCksIGN1cnItPnJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpIC0gbWF4aW1h
bE91dGxpbmVTaXplKGluZm8ucGhhc2UpOwotICAgICAgICBpbnQgYm90dG9tID0gY3Vyci0+cm9v
dCgpLT5ib3R0b21PdmVyZmxvdygpICsgbWF4aW1hbE91dGxpbmVTaXplKGluZm8ucGhhc2UpOwor
ICAgICAgICBpbnQgdG9wID0gbWluKGN1cnJSb290LT50b3BPdmVyZmxvdygpLCBjdXJyUm9vdC0+
c2VsZWN0aW9uVG9wKCkpIC0gbWF4aW1hbE91dGxpbmVTaXplKGluZm8ucGhhc2UpOworICAgICAg
ICBpbnQgYm90dG9tID0gY3VyclJvb3QtPmJvdHRvbU92ZXJmbG93KCkgKyBtYXhpbWFsT3V0bGlu
ZVNpemUoaW5mby5waGFzZSk7CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQ
b3MgPSB0eSArIHRvcDsKICAgICAgICAgaWYgKHlQb3MgPCBpbmZvLnJlY3QuYm90dG9tKCkgJiYg
eVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQpAQCAtNDMwLDcgKzQzMSw4IEBAIGJvb2wgUmVuZGVy
Rmxvdzo6aGl0VGVzdExpbmVzKGNvbnN0IEhpdFQKICAgICAvLyB0aGVtIGZ1cnRoZXIuICBOb3Rl
IHRoYXQgYm94ZXMgY2FuIGVhc2lseSBvdmVybGFwLCBzbyB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1
bXB0aW9ucwogICAgIC8vIGJhc2VkIG9mZiBwb3NpdGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94
IG9yIG91ciBsYXN0IGxpbmUgYm94LgogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxh
c3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2Rmxvd0JveCgpKSB7Ci0gICAgICAg
IGlmICh5ID49IHR5ICsgY3Vyci0+cm9vdCgpLT50b3BPdmVyZmxvdygpICYmIHkgPCB0eSArIGN1
cnItPnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSkgeworICAgICAgICBSb290SW5saW5lQm94KiBj
dXJyUm9vdCA9IGN1cnItPnJvb3QoKTsKKyAgICAgICAgaWYgKHkgPj0gdHkgKyBjdXJyUm9vdC0+
dG9wT3ZlcmZsb3coKSAmJiB5IDwgdHkgKyBjdXJyUm9vdC0+Ym90dG9tT3ZlcmZsb3coKSkgewog
ICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAgICAgICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5
KSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTk5NjIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsOCBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSCiAgICAgICwg
bV9saW5lc0RpcnR5KGZhbHNlKQogICAgICAsIG1fY29udGFpbnNSZXZlcnNlZFRleHQoZmFsc2Up
CiAgICAgICwgbV9pc0FsbEFTQ0lJKG1fdGV4dCA/IGNoYXJhY3RlcnNBcmVBbGxBU0NJSShtX3Rl
eHQuZ2V0KCkpIDogdHJ1ZSkKKyAgICAgLCBtX3RleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zSW5P
cmRlckRpcnR5KHRydWUpCisgICAgICwgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0luT3Jk
ZXIoZmFsc2UpCiAgICAgICwgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNl
dFJlbmRlclRleHQoKTsKQEAgLTEyNiw2ICsxMjgsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmV4dHJh
Y3RUZXh0Qm94KElubGluZVRlCiAgICAgYm94LT5zZXRQcmV2aW91c0xpbmVCb3goMCk7CiAgICAg
Zm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBib3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGlu
ZUJveCgpKQogICAgICAgICBjdXJyLT5zZXRFeHRyYWN0ZWQoKTsKKyAgICBtX3RleHRCb3hlc0Nv
dmVyQWxsUG9zaXRpb25zSW5PcmRlckRpcnR5ID0gdHJ1ZTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0
OjphdHRhY2hUZXh0Qm94KElubGluZVRleHRCb3gqIGJveCkKQEAgLTE0MSw2ICsxNDQsNyBAQCB2
b2lkIFJlbmRlclRleHQ6OmF0dGFjaFRleHRCb3goSW5saW5lVGV4CiAgICAgICAgIGxhc3QgPSBj
dXJyOwogICAgIH0KICAgICBtX2xhc3RUZXh0Qm94ID0gbGFzdDsKKyAgICBtX3RleHRCb3hlc0Nv
dmVyQWxsUG9zaXRpb25zSW5PcmRlckRpcnR5ID0gdHJ1ZTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0
OjpyZW1vdmVUZXh0Qm94KElubGluZVRleHRCb3gqIGJveCkKQEAgLTE1Myw2ICsxNTcsNyBAQCB2
b2lkIFJlbmRlclRleHQ6OnJlbW92ZVRleHRCb3goSW5saW5lVGV4CiAgICAgICAgIGJveC0+bmV4
dFRleHRCb3goKS0+c2V0UHJldmlvdXNMaW5lQm94KGJveC0+cHJldlRleHRCb3goKSk7CiAgICAg
aWYgKGJveC0+cHJldlRleHRCb3goKSkKICAgICAgICAgYm94LT5wcmV2VGV4dEJveCgpLT5zZXRO
ZXh0TGluZUJveChib3gtPm5leHRUZXh0Qm94KCkpOworICAgIG1fdGV4dEJveGVzQ292ZXJBbGxQ
b3NpdGlvbnNJbk9yZGVyRGlydHkgPSB0cnVlOwogfQogCiB2b2lkIFJlbmRlclRleHQ6OmRlbGV0
ZVRleHRCb3hlcygpCkBAIC05NjYsNiArOTcxLDcgQEAgSW5saW5lQm94KiBSZW5kZXJUZXh0Ojpj
cmVhdGVJbmxpbmVCb3goYgogICAgICAgICB0ZXh0Qm94LT5zZXRQcmV2aW91c0xpbmVCb3gobV9s
YXN0VGV4dEJveCk7CiAgICAgICAgIG1fbGFzdFRleHRCb3ggPSB0ZXh0Qm94OwogICAgIH0KKyAg
ICBtX3RleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zSW5PcmRlckRpcnR5ID0gdHJ1ZTsKICAgICBy
ZXR1cm4gdGV4dEJveDsKIH0KIApAQCAtMTA2Niw3ICsxMDcyLDggQEAgSW50UmVjdCBSZW5kZXJU
ZXh0OjpzZWxlY3Rpb25SZWN0KCkKICAgICAgICAgcmV0dXJuIHJlY3Q7CiAKICAgICBmb3IgKElu
bGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRl
eHRCb3goKSkKLSAgICAgICAgcmVjdC51bml0ZShib3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgc3Rh
cnRQb3MsIGVuZFBvcykpOworICAgICAgICBpZiAoYm94LT5tX3N0YXJ0IDwgZW5kUG9zICYmIGJv
eC0+bV9zdGFydCArIGJveC0+bV9sZW4gPj0gc3RhcnRQb3MpCisgICAgICAgICAgICByZWN0LnVu
aXRlKGJveC0+c2VsZWN0aW9uUmVjdCgwLCAwLCBzdGFydFBvcywgZW5kUG9zKSk7CiAKICAgICBp
ZiAoY2ItPmhhc0NvbHVtbnMoKSkKICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJl
Y3QpOwpAQCAtMTE0NywyMiArMTE1NCw3NCBAQCBpbnQgUmVuZGVyVGV4dDo6bmV4dE9mZnNldChp
bnQgY3VycmVudCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBJbmxp
bmVUZXh0Qm94KiB0ZXh0Qm94Rm9yT2Zmc2V0T3JOdWxsKElubGluZVRleHRCb3gqIGJveCwgaW50
IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBJbmxpbmVUZXh0Qm94KiBmYWxsYmFjaykgewor
ICAgIGlmIChvZmZzZXQgPD0gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbiAmJiBib3gtPmNvbnRh
aW5zQ2FyZXRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBpZiAoYXRMaW5lV3JhcChib3gsIG9m
ZnNldCkgJiYgYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSkKKyAgICAgICAgICAgIHJldHVybiBib3gt
Pm5leHRUZXh0Qm94KCk7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfQorICAgIGlmIChvZmZz
ZXQgPCBib3gtPm1fc3RhcnQpCisgICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2luZyBm
b3IgaXMgYmVmb3JlIHRoaXMgbm9kZQorICAgICAgICAvLyB0aGlzIG1lYW5zIHRoZSBvZmZzZXQg
bXVzdCBiZSBpbiBjb250ZW50IHRoYXQgaXMKKyAgICAgICAgLy8gbm90IHJlbmRlcmVkLgorICAg
ICAgICByZXR1cm4gYm94LT5wcmV2VGV4dEJveCgpID8gYm94LT5wcmV2VGV4dEJveCgpIDogZmFs
bGJhY2s7CisgICAgcmV0dXJuIDA7Cit9CisKIElubGluZUJveCogUmVuZGVyVGV4dDo6aW5saW5l
Qm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKKyAgICBmb3IgKElubGluZVRl
eHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3go
KSkKKyAgICAgICAgaWYgKElubGluZVRleHRCb3gqIHJlcyA9IHRleHRCb3hGb3JPZmZzZXRPck51
bGwoYm94LCBvZmZzZXQsIGFmZmluaXR5LCBmaXJzdFRleHRCb3goKSkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzOworICAgIHJldHVybiAwOworfQorCitib29sIFJlbmRlclRleHQ6OmluU2FtZUxp
bmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGEuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCkg
PT0gdGhpcyAmJiBiLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpICA9PSB0aGlz
KTsKKyAgICAKKyAgICBpbnQgb2Zmc2V0QSA9IGEuZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXQoKTsK
KyAgICBpbnQgb2Zmc2V0QiA9IGIuZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXQoKTsKKyAgICBJbmxp
bmVUZXh0Qm94KiBib3hBID0gMDsKKyAgICBJbmxpbmVUZXh0Qm94KiBib3hCID0gMDsKICAgICBm
b3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+
bmV4dFRleHRCb3goKSkgewotICAgICAgICBpZiAoYm94LT5jb250YWluc0NhcmV0T2Zmc2V0KG9m
ZnNldCkpIHsKLSAgICAgICAgICAgIGlmIChhdExpbmVXcmFwKGJveCwgb2Zmc2V0KSAmJiBhZmZp
bml0eSA9PSBET1dOU1RSRUFNKQotICAgICAgICAgICAgICAgIHJldHVybiBib3gtPm5leHRUZXh0
Qm94KCk7Ci0gICAgICAgICAgICByZXR1cm4gYm94OwotICAgICAgICB9Ci0gICAgICAgIGlmIChv
ZmZzZXQgPCBib3gtPm1fc3RhcnQpCi0gICAgICAgICAgICAvLyBUaGUgb2Zmc2V0IHdlJ3JlIGxv
b2tpbmcgZm9yIGlzIGJlZm9yZSB0aGlzIG5vZGUKLSAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMg
dGhlIG9mZnNldCBtdXN0IGJlIGluIGNvbnRlbnQgdGhhdCBpcwotICAgICAgICAgICAgLy8gbm90
IHJlbmRlcmVkLgotICAgICAgICAgICAgcmV0dXJuIGJveC0+cHJldlRleHRCb3goKSA/IGJveC0+
cHJldlRleHRCb3goKSA6IGZpcnN0VGV4dEJveCgpOworICAgICAgICBpZiAoIWJveEEpCisgICAg
ICAgICAgICBib3hBID0gdGV4dEJveEZvck9mZnNldE9yTnVsbChib3gsIG9mZnNldEEsIGEuYWZm
aW5pdHkoKSwgZmlyc3RUZXh0Qm94KCkpOworICAgICAgICBpZiAoIWJveEIpCisgICAgICAgICAg
ICBib3hCID0gdGV4dEJveEZvck9mZnNldE9yTnVsbChib3gsIG9mZnNldEIsIGIuYWZmaW5pdHko
KSwgZmlyc3RUZXh0Qm94KCkpOworICAgICAgICBpZiAoYm94QSAmJiBib3hCKQorICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQorICAgIGlmIChib3hBID09IGJveEIpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmICghYm94QSB8fCAhYm94QikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChib3hBLT5yb290KCkgPT0gYm94Qi0+cm9vdCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICByZXR1cm4gMDsKKy8vIHNlZSBpZiB0
ZXh0IGJveGVzIGZvcm0gYW4gdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBvZiBwb3NpdGlvbnMuIAor
Ly8gdGhpcyBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zIGVsc2V3aGVyZS4KK2Jvb2wgUmVuZGVy
VGV4dDo6dGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyKCkKK3sKKyAgICAvLyBGSVhN
RTogdGhpcyBkb2VzIG5vdCB3b3JrIHdpdGggcmV2ZXJzZWQgdGV4dC4ganVzdCBtZWFucyB0aGF0
IG9wdGltaXphdGlvbgorICAgIC8vIGlzIG5vdCBlbmFibGVkIGluIHNvbWUgY2FzZXMgd2hlcmUg
aXQgY291bGQKKyAgICBpZiAoIW1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyRGly
dHkpCisgICAgICAgIHJldHVybiBtX3RleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zSW5PcmRlcjsK
KyAgICBtX3RleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zSW5PcmRlciA9IHRydWU7CisgICAgdW5z
aWduZWQgcG9zID0gMDsKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJv
eCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBpZiAoYm94LT5z
dGFydCgpID09IHBvcykKKyAgICAgICAgICAgIHBvcyA9IGJveC0+c3RhcnQoKSArIGJveC0+bGVu
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0
aW9uc0luT3JkZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIG1fdGV4dEJveGVzQ292ZXJBbGxQb3NpdGlvbnNJbk9yZGVyRGlydHkgPSBmYWxzZTsK
KyAgICByZXR1cm4gbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0luT3JkZXI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9u
IDE5OTYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsNiArMTI0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zUmV2ZXJzZWRU
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1JldmVyc2VkVGV4dDsgfQogCiAgICAgSW5s
aW5lVGV4dEJveCogZmluZE5leHRJbmxpbmVUZXh0Qm94KGludCBvZmZzZXQsIGludCYgcG9zKSBj
b25zdDsKKyAgICAKKyAgICBib29sIGluU2FtZUxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7IAorICAKKyAgICBib29sIHRleHRCb3hlc0Nv
dmVyQWxsUG9zaXRpb25zSW5PcmRlcigpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRUZXh0
SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7CkBAIC0xNjQsNiArMTY4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHJlbW92ZWQpLgogICAgIGJv
b2wgbV9jb250YWluc1JldmVyc2VkVGV4dCA6IDE7CiAgICAgYm9vbCBtX2lzQWxsQVNDSUkgOiAx
OworICAgIGJvb2wgbV90ZXh0Qm94ZXNDb3ZlckFsbFBvc2l0aW9uc0luT3JkZXJEaXJ0eSA6IDE7
CisgICAgYm9vbCBtX3RleHRCb3hlc0NvdmVyQWxsUG9zaXRpb25zSW5PcmRlciA6IDE7CiAKICAg
ICBpbnQgbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13599</attachid>
            <date>2007-03-12 11:33:55 -0700</date>
            <delta_ts>2007-03-12 13:01:01 -0700</delta_ts>
            <desc>Divide large text blocks (&gt;64kB) over multiple text nodes</desc>
            <filename>12833-split-text.patch</filename>
            <type>text/plain</type>
            <size>4090</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDExNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDctMDMtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgzMworICAgICAgICBS
RUdSRVNTSU9OOiBTZWxlY3RpbmcgdGV4dCBpbiA2LjZNQiB0eHQgZmlsZSBpcyBzbHVnZ2lzaCBh
cyBvZiB0aGUgRmViIDE5dGggbmlnaHRseQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTAyODE1
OT4KKyAgICAgICAgCisgICAgICAgIERpdmlkZSBsYXJnZSB0ZXh0IGJsb2NrcyAoPjY0a0IpIG92
ZXIgbXVsdGlwbGUgdGV4dCBub2Rlcy4gVGhpcyBsaW1pdHMgbGluZWJveCBzZWFyY2hlcyB0bwor
ICAgICAgICBhIG1hbmFnZWFibGUgc3Vic2V0LgorICAgICAgICAKKyAgICAgICAgKiBkb20vVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQpOgor
ICAgICAgICAqIGRvbS9UZXh0Lmg6CisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OnBhcnNlVG9rZW4pOgorICAgICAgICAqIGxvYWRl
ci9UZXh0RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRva2VuaXplcjo6d3Jp
dGUpOgorCiAyMDA3LTAzLTEyICBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+CiAKICAg
ICAgICAgRml4IHRoZSBRdCBidWlsZC4gSSBzdGlsbCBnZXQgY3Jhc2hlcyB0aG91Z2ggOi8KSW5k
ZXg6IFdlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQu
Y3BwCShyZXZpc2lvbiAyMDEwNikKKysrIFdlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTYsNiArMTk2LDE4IEBAIFN0cmluZyBUZXh0Ojp0b1N0cmluZygpIGNvbnN0CiAg
ICAgcmV0dXJuIG5vZGVWYWx1ZSgpOwogfQogCitQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OmNyZWF0
ZVdpdGhMZW5ndGhMaW1pdChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2ln
bmVkJiBjaGFyc0xlZnQsIHVuc2lnbmVkIG1heENoYXJzKQoreworICAgIGlmIChjaGFyc0xlZnQg
PT0gdGV4dC5sZW5ndGgoKSAmJiBjaGFyc0xlZnQgPD0gbWF4Q2hhcnMpIHsKKyAgICAgICAgY2hh
cnNMZWZ0ID0gMDsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0KGRvYywgdGV4dCk7CisgICAgfSAK
KyAgICBTdHJpbmcgbm9kZVRleHQ7CisgICAgbm9kZVRleHQgPSB0ZXh0LnN1YnN0cmluZyh0ZXh0
Lmxlbmd0aCgpIC0gY2hhcnNMZWZ0LCBtYXhDaGFycyk7CisgICAgY2hhcnNMZWZ0IC09IG5vZGVU
ZXh0Lmxlbmd0aCgpOworICAgIHJldHVybiBuZXcgVGV4dChkb2MsIG5vZGVUZXh0KTsKK30KKwog
I2lmbmRlZiBOREVCVUcKIHZvaWQgVGV4dDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZmVy
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2RvbS9UZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5oCShyZXZpc2lvbiAyMDEwNikKKysrIFdlYkNv
cmUvZG9tL1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUg
IkNoYXJhY3RlckRhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY29uc3QgdW5z
aWduZWQgY1RleHROb2RlTGVuZ3RoTGltaXQgPSAxIDw8IDE2OwogCiBjbGFzcyBUZXh0IDogcHVi
bGljIENoYXJhY3RlckRhdGEKIHsKQEAgLTU2LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKTsKIAogICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dD4gY3Jl
YXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQmIGNo
YXJzTGVmdCwgdW5zaWduZWQgbWF4Q2hhcnMgPSBjVGV4dE5vZGVMZW5ndGhMaW1pdCk7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1
ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlz
aW9uIDIwMTA2KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsNiArMTk1LDE3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6cGFyc2VU
b2tlbigKICAgICAgICAgaWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50LT5sb2Nh
bE5hbWUoKSAhPSBzdHlsZVRhZyAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSAhPSB0aXRsZVRhZyAm
JiAKICAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHNjcmlwdFRhZyAmJiAhdC0+
dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKICAgICAgICAgICAgIGhhdmVDb250ZW50
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxOb2RlPiBuOworICAgICAgICBTdHJp
bmcgdGV4dCA9IHQtPnRleHQuZ2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGNoYXJzTGVmdCA9IHRl
eHQubGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChjaGFyc0xlZnQpIHsKKyAgICAgICAgICAgIC8v
IHNwbGl0IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5vZGVzIG9mIG1hbmFnZWFibGUgc2l6ZQor
ICAgICAgICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChkb2N1bWVudCwgdGV4
dCwgY2hhcnNMZWZ0KTsKKyAgICAgICAgICAgIGlmICghaW5zZXJ0Tm9kZShuLmdldCgpLCB0LT5m
bGF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbjsKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gbiA9IGdldE5vZGUodCk7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL1RleHREb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwMTA2KQorKysgV2ViQ29yZS9sb2FkZXIv
VGV4dERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDkgKzEyNywxMiBAQCBib29s
IFRleHRUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlCiAgICAgfSAKICAgICAKICAgICBT
dHJpbmcgc3RyaW5nID0gU3RyaW5nKG1fYnVmZmVyLCBtX2Rlc3QgLSBtX2J1ZmZlcik7Ci0gICAg
Ci0gICAgUmVmUHRyPFRleHQ+IHRleHQgPSBtX2RvYy0+Y3JlYXRlVGV4dE5vZGUoc3RyaW5nKTsK
LSAgICBtX3ByZUVsZW1lbnQtPmFwcGVuZENoaWxkKHRleHQsIGVjKTsKKyAgICB1bnNpZ25lZCBj
aGFyc0xlZnQgPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgd2hpbGUgKGNoYXJzTGVmdCkgeworICAg
ICAgICAvLyBzcGxpdCBsYXJnZSB0ZXh0IHRvIG5vZGVzIG9mIG1hbmFnZWFibGUgc2l6ZQorICAg
ICAgICBSZWZQdHI8VGV4dD4gdGV4dCA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChtX2Rv
Yywgc3RyaW5nLCBjaGFyc0xlZnQpOworICAgICAgICBtX3ByZUVsZW1lbnQtPmFwcGVuZENoaWxk
KHRleHQsIGVjKTsKKyAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="review"
          id="5397"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>