<?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>23496</bug_id>
          
          <creation_ts>2009-01-22 23:56:26 -0800</creation_ts>
          <short_desc>execCommand(&apos;bold&apos;) will remove &lt;b style=&apos;font-style:italic&apos;&gt;, it should probably replace it with &lt;span style=&apos;font-style:italic&apos;</short_desc>
          <delta_ts>2009-07-27 11:46:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>20215</blocked>
    
    <blocked>22810</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106710</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-22 23:56:26 -0800</bug_when>
    <thetext>execCommand(&apos;bold&apos;) will remove &lt;b foo=&apos;bar&apos;&gt;, it should probably replace it with &lt;span foo=&apos;bar&apos;&gt;.

I&apos;m not sure what the proper behavior here is.

Our current (epic fail!) behavior is:

Test to make sure we do not remove extra styling hidden on html styling elements (b, i, s, etc.) when removing those elements.

On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.


FAIL one underline command converted &lt;u style=&apos;font-weight: bold&apos;&gt;test&lt;/u&gt; to &lt;u style=&quot;font-weight: bold; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: none;&quot;&gt;test&lt;/span&gt;&lt;/u&gt;, expected &lt;b&gt;test&lt;/b&gt;
FAIL one bold command converted &lt;b style=&apos;text-decoration: underline&apos;&gt;test&lt;/b&gt; to test, expected &lt;u&gt;test&lt;/u&gt;
FAIL one strikethrough command converted &lt;s style=&apos;text-decoration: underline; font-weight: bold&apos;&gt;test&lt;/s&gt; to &lt;s style=&quot;font-weight: bold; &quot;&gt;test&lt;/s&gt;, expected &lt;b&gt;&lt;u&gt;test&lt;/u&gt;&lt;/b&gt;
FAIL one bold command converted &lt;b style=&apos;text-decoration: overline&apos;&gt;test&lt;/b&gt; to test, expected &lt;span style=&apos;text-decoration: overline&apos;&gt;test&lt;/span&gt;
FAIL one underline command converted &lt;u foo=&apos;bar&apos;&gt;test&lt;/u&gt; to &lt;u foo=&quot;bar&quot; style=&quot;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;text-decoration: none;&quot;&gt;test&lt;/span&gt;&lt;/u&gt;, expected &lt;span foo=&apos;bar&apos;&gt;test&lt;/span&gt;
PASS successfullyParsed is true

TEST COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106711</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-22 23:59:59 -0800</bug_when>
    <thetext>Firefox did slightly better:

Test to make sure we do not remove extra styling hidden on html styling elements (b, i, s, etc.) when removing those elements.

On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
FAIL one underline command converted &lt;u style=&apos;font-weight: bold&apos;&gt;test&lt;/u&gt; to &lt;span style=&quot;font-weight: bold;&quot;&gt;test&lt;/span&gt;, expected &lt;b&gt;test&lt;/b&gt;
FAIL one bold command converted &lt;b style=&apos;text-decoration: underline&apos;&gt;test&lt;/b&gt; to &lt;span style=&quot;text-decoration: underline;&quot;&gt;test&lt;/span&gt;, expected &lt;u&gt;test&lt;/u&gt;
FAIL one strikethrough command converted &lt;s style=&apos;text-decoration: underline; font-weight: bold&apos;&gt;test&lt;/s&gt; to &lt;s style=&quot;text-decoration: underline; font-weight: bold;&quot;&gt;test&lt;/s&gt;, expected &lt;b&gt;&lt;u&gt;test&lt;/u&gt;&lt;/b&gt;
PASS one bold command converted &lt;b style=&apos;text-decoration: overline&apos;&gt;test&lt;/b&gt; to &lt;span style=&quot;text-decoration: overline;&quot;&gt;test&lt;/span&gt;
FAIL one underline command converted &lt;u foo=&apos;bar&apos;&gt;test&lt;/u&gt; to test, expected &lt;span foo=&quot;bar&quot;&gt;test&lt;/span&gt;
PASS successfullyParsed is true

TEST COMPLETE

At least their styling looks correct after the commands, even if the resulting html doesn&apos;t look exactly as expected.  FF also fails to maintain foo=&quot;bar&quot;, which I&apos;m not sure if we care about our not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106713</commentid>
    <comment_count>2</comment_count>
      <attachid>26959</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 00:13:30 -0800</bug_when>
    <thetext>Created attachment 26959
javascript portion of the test case in question (drop in editing/execCommands to use)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106730</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 02:15:31 -0800</bug_when>
    <thetext>I&apos;ve written a skeleton patch to fix this, which I&apos;m about to attach.  I think I may need some advice from Justin as to how best write my proposed replaceNodeWithSpanPreservingAttributesAndChildren method, since I don&apos;t think editing has had to deal with &quot;attribute transfer&quot; between nodes before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106731</commentid>
    <comment_count>4</comment_count>
      <attachid>26966</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 02:16:36 -0800</bug_when>
    <thetext>Created attachment 26966
First pass, incomplete fix

 WebCore/css/CSSStyleDeclaration.h     |    1 +
 WebCore/dom/NamedAttrMap.h            |    1 +
 WebCore/editing/ApplyStyleCommand.cpp |   75 +++++++++++++++++++-------------
 WebCore/editing/ApplyStyleCommand.h   |    3 +-
 4 files changed, 47 insertions(+), 33 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106732</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 02:18:19 -0800</bug_when>
    <thetext>I might just turn replaceImplicitlyStyledElementWithSpanAndRemoveIfWithoutAttributes into replaceImplictlyStyledElementWithSpan, or even replaceHTMLStyleNodeWithSpan (to be more like the old naming, and more concise), of course that would mean that we would end up converting &lt;b&gt; to &lt;span&gt; every time before we ended up removing it, and that seems a bit wasteful.   Maybe others will have better suggestions of how to divide the logic (or name these fancy new methods) once I get a working patch together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106750</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-23 07:51:17 -0800</bug_when>
    <thetext>Sigh.  This is why I stopped writing patches @ 2AM.  I can definitely make this cleaner.  I still will likely need some thoughts from Justin as to how I should do any &quot;replaceWithSpan&quot; logic in a proper &quot;undoable editing&quot; way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108225</commentid>
    <comment_count>7</comment_count>
      <attachid>27306</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-03 17:51:57 -0800</bug_when>
    <thetext>Created attachment 27306
Fix and test case

 LayoutTests/ChangeLog                              |   14 +++
 .../convert-style-elements-to-spans-expected.txt   |   14 +++
 .../convert-style-elements-to-spans.html           |   13 +++
 .../resources/convert-style-elements-to-spans.js   |   47 +++++++++++
 WebCore/ChangeLog                                  |   40 +++++++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |    8 ++
 WebCore/css/CSSStyleDeclaration.h                  |    1 +
 WebCore/dom/NamedAttrMap.h                         |    2 +
 WebCore/editing/ApplyStyleCommand.cpp              |   70 ++++++++++------
 WebCore/editing/ApplyStyleCommand.h                |    4 +-
 WebCore/editing/CompositeEditCommand.cpp           |    6 ++
 WebCore/editing/CompositeEditCommand.h             |    1 +
 .../RemoveNodePreservingChildrenCommand.cpp        |    3 +-
 WebCore/editing/ReplaceNodeWithSpanCommand.cpp     |   87 ++++++++++++++++++++
 WebCore/editing/ReplaceNodeWithSpanCommand.h       |   60 ++++++++++++++
 15 files changed, 341 insertions(+), 29 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108227</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-03 17:54:07 -0800</bug_when>
    <thetext>The double-bold case is still not fixed.  It&apos;s not made worse either by this change, but I may yet have the stamina for one more round of debugging for that case.

I post this w/ that one case broken, as I require Justin&apos;s comment about whether or not I wrote ReplaceNodeWithSpanCommand correctly or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108282</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-04 09:50:21 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; The double-bold case is still not fixed.  It&apos;s not made worse either by this
&gt; change, but I may yet have the stamina for one more round of debugging for that
&gt; case.

I realized last night why the double-bold case is broken.

void ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes(HTMLElement*&amp; elem)

is supposed to update the &quot;elem&quot; pointer so that the caller knows what the element has turned into, and can continue processing it.  When I updated that function to use an editing command (so i would be undoable), I lost that functionality.  I&apos;m not quite sure how I should get it back yet.

I could add a ::spanElement() accessor on the command, but I don&apos;t think that will work well in the undo case, not sure.  Starting to seem like I&apos;ll need to test undo of this command too.  I&apos;d still be very interested in Justin&apos;s comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108327</commentid>
    <comment_count>10</comment_count>
      <attachid>27325</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-04 14:29:46 -0800</bug_when>
    <thetext>Created attachment 27325
Improved fix and improved test case, ready for final review

 LayoutTests/ChangeLog                              |   14 ++
 .../convert-style-elements-to-spans-expected.txt   |   20 +++
 .../convert-style-elements-to-spans.html           |   13 ++
 .../resources/convert-style-elements-to-spans.js   |  125 ++++++++++++++++++++
 WebCore/ChangeLog                                  |   40 ++++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |    8 ++
 WebCore/css/CSSStyleDeclaration.h                  |    1 +
 WebCore/dom/NamedAttrMap.h                         |    2 +
 WebCore/editing/ApplyStyleCommand.cpp              |   73 ++++++++----
 WebCore/editing/ApplyStyleCommand.h                |    4 +-
 WebCore/editing/CompositeEditCommand.cpp           |   12 ++
 WebCore/editing/CompositeEditCommand.h             |    2 +
 .../RemoveNodePreservingChildrenCommand.cpp        |    3 +-
 WebCore/editing/ReplaceNodeWithSpanCommand.cpp     |   87 ++++++++++++++
 WebCore/editing/ReplaceNodeWithSpanCommand.h       |   62 ++++++++++
 15 files changed, 437 insertions(+), 29 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108339</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-04 14:56:19 -0800</bug_when>
    <thetext>Don&apos;t need to (In reply to comment #10)
&gt; Created an attachment (id=27325) [review]

Don&apos;t need to create your own EditCommand here.  They&apos;re generally reserved for the very lowest level operations like node removal or setting an attribute, or user initiated operations like paste, delete, etc. that need their own Undo item.  I&apos;d create CompositeEditCommand::replaceNodeWithSpan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108341</commentid>
    <comment_count>12</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-04 14:58:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Don&apos;t need to (In reply to comment #10)
&gt; &gt; Created an attachment (id=27325) [review] [review]
&gt; 
&gt; Don&apos;t need to create your own EditCommand here.  They&apos;re generally reserved for
&gt; the very lowest level operations like node removal or setting an attribute, or
&gt; user initiated operations like paste, delete, etc. that need their own Undo
&gt; item.  I&apos;d create CompositeEditCommand::replaceNodeWithSpan.

I see what you&apos;ve done...I&apos;d put everything inside the CompositeEditCommand::replaceNodeWithSpanPreservingChildrenAndAttributes that you created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108342</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-04 15:06:23 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; I see what you&apos;ve done...I&apos;d put everything inside the
&gt; CompositeEditCommand::replaceNodeWithSpanPreservingChildrenAndAttributes that
&gt; you created.

I&apos;m not currently using undo-able subcommands.  I could move to using such though... I guess I wasn&apos;t really excited about an additional malloc for every attribute move...  But maybe I&apos;ve overcomplicated things?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109264</commentid>
    <comment_count>14</comment_count>
      <attachid>27325</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-11 00:34:28 -0800</bug_when>
    <thetext>Comment on attachment 27325
Improved fix and improved test case, ready for final review

+    // Similar to isSpanWithoutAttributesOrUnstyleStyleSpan, but does not look for apple-style-span

Would capitalize the &apos;a&apos; in &apos;apple-style-span&apos;.  Missing period.

+        // FIXME: This should probably be re-written to lookup the tagname in a
+        // hash and match against an expected property/value pair

Missing period.

I would do all the work of replacing a node with a span inside replaceNodeWithSpanPreservingChildrenAndAttributes instead of creating your own EditCommand, but r=me as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124387</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 15:17:40 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       LayoutTests/ChangeLog
        A       LayoutTests/editing/execCommand/convert-style-elements-to-spans-expected.txt
        A       LayoutTests/editing/execCommand/convert-style-elements-to-spans.html
        A       LayoutTests/editing/execCommand/resources/convert-style-elements-to-spans.js
        M       WebCore/ChangeLog
        M       WebCore/WebCore.xcodeproj/project.pbxproj
        M       WebCore/css/CSSStyleDeclaration.h
        M       WebCore/dom/NamedAttrMap.h
        M       WebCore/editing/ApplyStyleCommand.cpp
        M       WebCore/editing/ApplyStyleCommand.h
        M       WebCore/editing/CompositeEditCommand.cpp
        M       WebCore/editing/CompositeEditCommand.h
        M       WebCore/editing/RemoveNodePreservingChildrenCommand.cpp
        A       WebCore/editing/ReplaceNodeWithSpanCommand.cpp
        A       WebCore/editing/ReplaceNodeWithSpanCommand.h
Committed r44435
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124393</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-04 15:45:45 -0700</bug_when>
    <thetext>Looks like this is missing Windows project file updates.  GTK may need updates as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124398</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 16:05:12 -0700</bug_when>
    <thetext>Makes a man want gyp. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134973</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-27 11:46:59 -0700</bug_when>
    <thetext>*** Bug 23370 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26959</attachid>
            <date>2009-01-23 00:13:30 -0800</date>
            <delta_ts>2009-01-23 00:13:30 -0800</delta_ts>
            <desc>javascript portion of the test case in question (drop in editing/execCommands to use)</desc>
            <filename>convert-style-elements-to-spans.js</filename>
            <type>application/x-javascript</type>
            <size>2107</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGVzY3JpcHRpb24oIlRlc3QgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCByZW1vdmUgZXh0cmEgc3R5
bGluZyBoaWRkZW4gb24gaHRtbCBzdHlsaW5nIGVsZW1lbnRzIChiLCBpLCBzLCBldGMuKSB3aGVu
IHJlbW92aW5nIHRob3NlIGVsZW1lbnRzLiIpCgp2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwp0ZXN0Q29udGFpbmVyLmNvbnRlbnRFZGl0YWJsZSA9IHRy
dWU7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CgpmdW5jdGlvbiB0
ZXN0U2luZ2xlVG9nZ2xlKHRvZ2dsZUNvbW1hbmQsIGluaXRpYWxDb250ZW50cywgZXhwZWN0ZWRD
b250ZW50cykKewogICAgdGVzdENvbnRhaW5lci5pbm5lckhUTUwgPSBpbml0aWFsQ29udGVudHM7
CiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4odGVzdENvbnRhaW5l
cik7CiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7
CiAgICBpZiAodGVzdENvbnRhaW5lci5pbm5lckhUTUwgPT09IGV4cGVjdGVkQ29udGVudHMpIHsK
ICAgICAgICB0ZXN0UGFzc2VkKCJvbmUgIiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmQgY29u
dmVydGVkICIgKyBpbml0aWFsQ29udGVudHMgKyAiIHRvICIgKyBleHBlY3RlZENvbnRlbnRzKTsK
ICAgIH0gZWxzZSB7CiAgICAgICAgdGVzdEZhaWxlZCgib25lICIgKyB0b2dnbGVDb21tYW5kICsg
IiBjb21tYW5kIGNvbnZlcnRlZCAiICsgaW5pdGlhbENvbnRlbnRzICsgIiB0byAiICsgdGVzdENv
bnRhaW5lci5pbm5lckhUTUwgKyAiLCBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50cyk7CiAg
ICB9Cn0KCmZ1bmN0aW9uIHRlc3REb3VibGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwgaW5pdGlhbENv
bnRlbnRzLCBleHBlY3RlZENvbnRlbnRzKQp7CiAgICB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9
IGluaXRpYWxDb250ZW50czsKICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGls
ZHJlbih0ZXN0Q29udGFpbmVyKTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKHRvZ2dsZUNvbW1h
bmQsIGZhbHNlLCBudWxsKTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKHRvZ2dsZUNvbW1hbmQs
IGZhbHNlLCBudWxsKTsKICAgIGlmICh0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9PT0gZXhwZWN0
ZWRDb250ZW50cykgewogICAgICAgIHRlc3RQYXNzZWQoInR3byAiICsgdG9nZ2xlQ29tbWFuZCAr
ICIgY29tbWFuZHMgY29udmVydGVkICIgKyBpbml0aWFsQ29udGVudHMgKyAiIHRvICIgKyBleHBl
Y3RlZENvbnRlbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGVzdEZhaWxlZCgidHdvICIgKyB0
b2dnbGVDb21tYW5kICsgIiBjb21tYW5kcyBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyAr
ICIgdG8gIiArIHRlc3RDb250YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVj
dGVkQ29udGVudHMpOwogICAgfQp9Cgp0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHUg
c3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz50ZXN0PC91PiIsICI8Yj50ZXN0PC9iPiIpOwp0ZXN0
U2luZ2xlVG9nZ2xlKCJib2xkIiwgIjxiIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZSc+dGVzdDwvYj4iLCAiPHU+dGVzdDwvdT4iKTsKdGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtldGhy
b3VnaCIsICI8cyBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGZvbnQtd2VpZ2h0
OiBib2xkJz50ZXN0PC9zPiIsICI8Yj48dT50ZXN0PC91PjwvYj4iKTsKCnRlc3RTaW5nbGVUb2dn
bGUoImJvbGQiLCAiPGIgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmUnPnRlc3Q8L2I+
IiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTtcIj50ZXN0PC9zcGFu
PiIpOwp0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHUgZm9vPSdiYXInPnRlc3Q8L3U+
IiwgIjxzcGFuIGZvbz1cImJhclwiPnRlc3Q8L3NwYW4+Iik7Cgpkb2N1bWVudC5ib2R5LnJlbW92
ZUNoaWxkKHRlc3RDb250YWluZXIpOwoKdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26966</attachid>
            <date>2009-01-23 02:16:36 -0800</date>
            <delta_ts>2009-02-04 14:30:03 -0800</delta_ts>
            <desc>First pass, incomplete fix</desc>
            <filename>First-pass-incomplete-fix.patch</filename>
            <type>text/plain</type>
            <size>9980</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YWNkNWIyMGMyYTQwOGRhM2U1ODQwODUzYTFmZGZiMTFjYTA3ODE2NgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oCmluZGV4IGU2ZmVkZTYuLmVmNGNjMjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0
aW9uLmgKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NU
ZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhbGVuZ3RoKCk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdCA9IDA7CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L05hbWVkQXR0ck1hcC5oIGIvV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgKaW5kZXggNjkzYTll
NS4uZTg3YTFiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgKKysrIGIv
V2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Owog
ICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CiAKICAgICAv
LyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1
dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhd
LmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBlY2EyOTk5
Li4xMWRiNDVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI3Myw3
ICsyNzMsNyBAQCBzdGF0aWMgYm9vbCBpc1Vuc3R5bGVkU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5v
ZGUpCiAKICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxFbGVtZW50Kj4obm9kZSk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGlu
ZVN0eWxlRGVjbCA9IGVsZW0tPmlubGluZVN0eWxlRGVjbCgpOwotICAgIHJldHVybiAoIWlubGlu
ZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApICYmIGVsZW0tPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CisgICAgcmV0
dXJuICghaW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKSAmJiBl
bGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOwog
fQogCiBzdGF0aWMgYm9vbCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3Bh
bihjb25zdCBOb2RlKiBub2RlKQpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyBib29sIGlzU3Bh
bldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiAK
ICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVt
ZW50Kj4obm9kZSk7CiAgICAgTmFtZWRBdHRyTWFwKiBhdHRyaWJ1dGVzID0gZWxlbS0+YXR0cmli
dXRlcyh0cnVlKTsgLy8gcmVhZG9ubHkKLSAgICBpZiAoYXR0cmlidXRlcy0+bGVuZ3RoKCkgPT0g
MCkKKyAgICBpZiAoYXR0cmlidXRlcy0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIHJldHVybiBpc1Vuc3R5bGVkU3R5bGVTcGFuKG5vZGUpOwpAQCAtNDQzLDcgKzQ0Myw3
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiAqc3R5bGUpCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJleW9uZEVuZChlbmRP
ZlBhcmFncmFwaCh2aXNpYmxlRW5kKS5uZXh0KCkpOwogICAgIHdoaWxlIChwYXJhZ3JhcGhTdGFy
dC5pc05vdE51bGwoKSAmJiBwYXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsKICAgICAgICAg
U3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCksIFN0eWxlQ2hhbmdlOjpzdHlsZU1vZGVGb3JQYXJzZU1vZGUoZG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCkpKTsKLSAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkubGVuZ3Ro
KCkgPiAwIHx8IG1fcmVtb3ZlT25seSkgeworICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5
bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKTsKICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdCbG9jayA9IG1vdmVQYXJhZ3Jh
cGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShwYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZh
bGVudCgpKTsKICAgICAgICAgICAgIGlmIChuZXdCbG9jaykKQEAgLTU4MSw3ICs1ODEsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uCiAgICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6
ZSkgKyAicHgiLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtZW50LmdldCgpLCBzdHlsZUF0dHIsIGlubGluZVN0eWxlRGVjbC0+Y3NzVGV4dCgpKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoaW5saW5lU3R5bGVEZWNsLT5sZW5ndGgoKSA9PSAwKSB7Cisg
ICAgICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVt
b3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIpOwogICAgICAgICAgICAg
Ly8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxl
U3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCiAgICAgICAgICAgICBpZiAoaXNVbnN0eWxlZFN0eWxl
U3BhbihlbGVtZW50LmdldCgpKSkKQEAgLTk1MiwzNiArOTUyLDQ3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1JhbmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsCiAKIC8vIFRoaXMgZnVuY3Rpb24gbWFwcyBmcm9tIHN0eWxpbmcgdGFncyB0byBD
U1Mgc3R5bGVzLiAgVXNlZCBmb3Iga25vd2luZyB3aGljaAogLy8gc3R5bGluZyB0YWdzIHNob3Vs
ZCBiZSByZW1vdmVkIHdoZW4gdG9nZ2xpbmcgc3R5bGVzLgotYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6aXNIVE1MU3R5bGVOb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRN
TEVsZW1lbnQqIGVsZW0pCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZXBsYWNlSW1wbGljaXRs
eVN0eWxlZEVsZW1lbnRXaXRoU3BhbkFuZFJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbSkKIHsKKyAgICBi
b29sIHJlcGxhY2VOb2RlV2l0aFNwYW4gPSBmYWxzZTsKKwogICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgZm9yIChD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgIXJlcGxhY2VOb2RlV2l0
aFNwYW4gJiYgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkg
ewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKICAgICAgICAgICAgIGlmIChl
bGVtLT5oYXNMb2NhbE5hbWUoYlRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgcmVwbGFjZU5vZGVXaXRoU3BhbiA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246CiAgICAgICAgICAg
ICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKHN1YlRhZykgfHwgZWxlbS0+aGFzTG9jYWxOYW1lKHN1
cFRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmVw
bGFjZU5vZGVXaXRoU3BhbiA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5h
bWUoaVRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
cmVwbGFjZU5vZGVXaXRoU3BhbiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBpZiAoIXJlcGxhY2VOb2RlV2l0
aFNwYW4pCisgICAgICAgIHJldHVybjsKIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
SFRNTFN0eWxlTm9kZShIVE1MRWxlbWVudCAqZWxlbSkKLXsKLSAgICAvLyBUaGlzIG5vZGUgY2Fu
IGJlIHJlbW92ZWQuCi0gICAgLy8gRURJVCBGSVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgdGhlIG5vZGUKLSAgICAvLyBoYXMgYXR0cmlidXRlcy4gQnV0IGhvdyBvZnRl
biBkbyBwZW9wbGUgYWRkIGF0dHJpYnV0ZXMgdG8gPEI+IHRhZ3M/IAotICAgIC8vIE5vdCBzbyBv
ZnRlbiBJIHRoaW5rLgotICAgIEFTU0VSVChlbGVtKTsKLSAgICByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVsZW0pOworICAgIGJvb2wgcmVtb3ZlTm9kZSA9IGZhbHNlOworCisgICAgLy8g
U2ltaWxhciB0byBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbgorICAg
IE5hbWVkQXR0ck1hcCogYXR0cmlidXRlcyA9IGVsZW0tPmF0dHJpYnV0ZXModHJ1ZSk7IC8vIHJl
YWRvbmx5CisgICAgaWYgKGF0dHJpYnV0ZXMtPmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlTm9k
ZSA9IHRydWU7CisgICAgZWxzZSBpZiAoYXR0cmlidXRlcy0+bGVuZ3RoKCkgPT0gMSAmJiBlbGVt
LT5oYXNBdHRyaWJ1dGUoInN0eWxlIikpIHsKKyAgICAgICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKKyAg
ICAgICAgaWYgKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZW1vdmVOb2RlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmVtb3Zl
Tm9kZSkKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKKyAgICBl
bHNlCisgICAgICAgIHJlcGxhY2VOb2RlV2l0aFNwYW5QcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENo
aWxkcmVuKGVsZW0pOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9u
dFN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwgSFRNTEVsZW1lbnQgKmVs
ZW0pCkBAIC0xMDUwLDcgKzEwNjEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVD
U1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbAogICAgIH0K
IAogICAgIC8vIE5vIG5lZWQgdG8gc2VyaWFsaXplIDxmb28gc3R5bGU9IiI+IGlmIHdlIGp1c3Qg
cmVtb3ZlZCB0aGUgbGFzdCBjc3MgcHJvcGVydHkKLSAgICBpZiAoZGVjbC0+bGVuZ3RoKCkgPT0g
MCkKKyAgICBpZiAoZGVjbC0+aXNFbXB0eSgpKQogICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRl
KGVsZW0sIHN0eWxlQXR0cik7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVu
c3R5bGVTdHlsZVNwYW4oZWxlbSkpCkBAIC0xMTMxLDcgKzExNDIsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSAqbm9kZSwgQ1NTTXV0YWJs
ZVN0eWxlRGVjbAogewogICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlmICghc3R5bGUgfHwgIXN0
eWxlLT5jc3NUZXh0KCkubGVuZ3RoKCkpCisgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Y3NzVGV4
dCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG5vZGUtPmlzVGV4dE5v
ZGUoKSkgewpAQCAtMTE0Niw3ICsxMTU3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUgKm5vZGUsIENTU011dGFibGVTdHlsZURlY2wKICAg
ICBIVE1MRWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KG5vZGUp
OwogICAgICAgICAKICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHlsZSwgUG9zaXRpb24o
ZWxlbWVudCwgMCksIFN0eWxlQ2hhbmdlOjpzdHlsZU1vZGVGb3JQYXJzZU1vZGUoZG9jdW1lbnQo
KS0+aW5Db21wYXRNb2RlKCkpKTsKLSAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5n
dGgoKSA+IDApIHsKKyAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSkgewog
ICAgICAgICBTdHJpbmcgY3NzVGV4dCA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CiAgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpkZWNsID0gZWxlbWVudC0+aW5saW5lU3R5bGVE
ZWNsKCk7CiAgICAgICAgIGlmIChkZWNsKQpAQCAtMTIzNCwxOCArMTI0NSwyMCBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPgogICAgIFBvc2l0aW9uIHMgPSBzdGFydDsKICAgICBQb3NpdGlvbiBl
ID0gZW5kOwogCi0gICAgTm9kZSAqbm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
ID0gc3RhcnQubm9kZSgpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIE5vZGUgKm5leHQg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYg
bm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpIHsKLSAgICAgICAgICAgIEhUTUxF
bGVtZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7Ci0gICAgICAg
ICAgICBOb2RlICpwcmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsK
LSAgICAgICAgICAgIE5vZGUgKm5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9k
ZSk7CisgICAgICAgICAgICBOb2RlKiBwcmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQ
b3N0T3JkZXIoKTsKKyAgICAgICAgICAgIE5vZGUqIG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHRO
b2RlKCk7CiAgICAgICAgICAgICBpZiAobV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhh
c1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOwotICAgICAgICAgICAgaWYg
KGlzSFRNTFN0eWxlTm9kZShzdHlsZS5nZXQoKSwgZWxlbSkpCi0gICAgICAgICAgICAgICAgcmVt
b3ZlSFRNTFN0eWxlTm9kZShlbGVtKTsKLSAgICAgICAgICAgIGVsc2UgeworCisgICAgICAgICAg
ICByZXBsYWNlSW1wbGljaXRseVN0eWxlZEVsZW1lbnRXaXRoU3BhbkFuZFJlbW92ZUlmV2l0aG91
dEF0dHJpYnV0ZXMoc3R5bGUuZ2V0KCksIGVsZW0pOworICAgICAgICAgICAgLy8gSWYgdGhlIG5v
ZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250YWluIHJl
bGV2YW50CisgICAgICAgICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVkIChlLmcu
IDxiIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+KQorICAgICAgICAgICAgaWYgKGVsZW0tPmlu
RG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxGb250U3R5bGUoc3R5bGUu
Z2V0KCksIGVsZW0pOwogICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5
bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwogICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0
eWxlLmdldCgpLCBlbGVtKTsKQEAgLTE1NjksNyArMTU4Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFkZElubGluZVN0eWxlSWZOZWVkZWQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
KnN0eWxlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUo
KS5sZW5ndGgoKSA+IDApIHsKKyAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgo
KSkgewogICAgICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVT
cGFuRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKICAgICAgICAgc3Vycm91bmRO
b2RlUmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIHN0eWxlRWxlbWVudC5yZWxl
YXNlKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgg
Yi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAppbmRleCBhNDIyMjVkLi43NTRi
ZGVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNjIsOCArNjIsNyBAQCBw
cml2YXRlOgogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KIAogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVycwot
ICAgIGJvb2wgaXNIVE1MU3R5bGVOb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRN
TEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxTdHlsZU5vZGUoSFRNTEVsZW1lbnQqKTsK
KyAgICB2b2lkIHJlcGxhY2VJbXBsaWNpdGx5U3R5bGVkRWxlbWVudFdpdGhTcGFuQW5kUmVtb3Zl
SWZXaXRob3V0QXR0cmlidXRlcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVt
ZW50Kik7CiAgICAgdm9pZCByZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5n
U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwogICAgIHZv
aWQgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVu
dCopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27306</attachid>
            <date>2009-02-03 17:51:57 -0800</date>
            <delta_ts>2009-02-04 14:29:54 -0800</delta_ts>
            <desc>Fix and test case</desc>
            <filename>Fix-and-test-case.patch</filename>
            <type>text/plain</type>
            <size>30765</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NDhjNmNhNWMxMTk3ZjdkNGQxNzNlNmEyYzZkMWNlMWYxN2EyZDE5OApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZiNGJmMjUu
LjEyMDBiMDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wMi0wMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdCB0byBtYWtlIHN1cmUgZXhlY0NvbW1hbmQoImJvbGQiKSBvbiA8YiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPnRlc3Q8L2I+CisgICAgICAgIG9ubHkg
cmVtb3ZlcyB0aGUgYm9sZCBhbmQgbm90IHRoZSB1bmRlcmxpbmUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NgorCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVs
ZW1lbnRzLXRvLXNwYW5zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1h
bmQvcmVzb3VyY2VzL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdFNpbmdsZVRvZ2dsZSk6CisgICAgICAgICh0ZXN0RG91YmxlVG9nZ2xlKToK
KwogMjAwOS0wMi0wMyAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvY29udmVydC1zdHls
ZS1lbGVtZW50cy10by1zcGFucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWNlN2FiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvY29udmVydC1zdHlsZS1lbGVtZW50cy10by1zcGFucy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNCBAQAorVGVzdCB0byBtYWtlIHN1cmUgd2UgZG8gbm90IHJlbW92ZSBl
eHRyYSBzdHlsaW5nIGhpZGRlbiBvbiBodG1sIHN0eWxpbmcgZWxlbWVudHMgKGIsIGksIHMsIGV0
Yy4pIHdoZW4gcmVtb3ZpbmcgdGhvc2UgZWxlbWVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29udmVydGVkIDxiIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZSI+dGVzdDwvYj4gdG8gPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lIj50ZXN0PC9zcGFuPgorUEFTUyBvbmUgaXRhbGljIGNvbW1hbmQg
Y29udmVydGVkIDxpIHN0eWxlPSJmb250LXdlaWdodDogYm9sZCI+dGVzdDwvaT4gdG8gPHNwYW4g
c3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIj50ZXN0PC9zcGFuPgorRkFJTCBvbmUgYm9sZCBjb21t
YW5kIGNvbnZlcnRlZCA8YiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPnRlc3Q8L2I+IHRvIDxz
cGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZCI+PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNw
YW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+dGVzdDwvc3Bhbj48L3NwYW4+LCBleHBl
Y3RlZCB0ZXN0CitQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29udmVydGVkIDxiIGZvbz0iYmFyIj50
ZXN0PC9iPiB0byA8c3BhbiBmb289ImJhciI+dGVzdDwvc3Bhbj4KK1BBU1Mgb25lIGJvbGQgY29t
bWFuZCBjb252ZXJ0ZWQgPGIgc3R5bGU9J2ludmFsaWQnPnRlc3Q8L2I+IHRvIHRlc3QKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMt
dG8tc3BhbnMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvY29udmVydC1z
dHlsZS1lbGVtZW50cy10by1zcGFucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEwNTk3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9yZXNvdXJjZXMvY29udmVydC1zdHlsZS1lbGVtZW50cy10by1z
cGFucy5qcyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcmVzb3VyY2VzL2NvbnZl
cnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2I1ODY3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvcmVzb3VyY2VzL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuanMK
QEAgLTAsMCArMSw0NyBAQAorZGVzY3JpcHRpb24oIlRlc3QgdG8gbWFrZSBzdXJlIHdlIGRvIG5v
dCByZW1vdmUgZXh0cmEgc3R5bGluZyBoaWRkZW4gb24gaHRtbCBzdHlsaW5nIGVsZW1lbnRzIChi
LCBpLCBzLCBldGMuKSB3aGVuIHJlbW92aW5nIHRob3NlIGVsZW1lbnRzLiIpCisKK3ZhciB0ZXN0
Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cit0ZXN0Q29udGFpbmVy
LmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RD
b250YWluZXIpOworCitmdW5jdGlvbiB0ZXN0U2luZ2xlVG9nZ2xlKHRvZ2dsZUNvbW1hbmQsIGlu
aXRpYWxDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykKK3sKKyAgICB0ZXN0Q29udGFpbmVyLmlu
bmVySFRNTCA9IGluaXRpYWxDb250ZW50czsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2Vs
ZWN0QWxsQ2hpbGRyZW4odGVzdENvbnRhaW5lcik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
dG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIGlmICh0ZXN0Q29udGFpbmVyLmlubmVy
SFRNTCA9PT0gZXhwZWN0ZWRDb250ZW50cykgeworICAgICAgICB0ZXN0UGFzc2VkKCJvbmUgIiAr
IHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmQgY29udmVydGVkICIgKyBpbml0aWFsQ29udGVudHMg
KyAiIHRvICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
RmFpbGVkKCJvbmUgIiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmQgY29udmVydGVkICIgKyBp
bml0aWFsQ29udGVudHMgKyAiIHRvICIgKyB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCArICIsIGV4
cGVjdGVkICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RE
b3VibGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRl
bnRzKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOwor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0Q29udGFpbmVy
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQodG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOwor
ICAgIGlmICh0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9PT0gZXhwZWN0ZWRDb250ZW50cykgewor
ICAgICAgICB0ZXN0UGFzc2VkKCJ0d28gIiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmRzIGNv
bnZlcnRlZCAiICsgaW5pdGlhbENvbnRlbnRzICsgIiB0byAiICsgZXhwZWN0ZWRDb250ZW50cyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgidHdvICIgKyB0b2dnbGVDb21tYW5k
ICsgIiBjb21tYW5kcyBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIHRl
c3RDb250YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0KK30KKworLy8gSXQgd291bGQgYmUgbmljZSB0byBleHBlY3QgYSA8dGFnPnRlc3Q8
L3RhZz4gcmVzdWx0IGZvciB0aGVzZSwgYnV0IHRoYXQncyB1bnJlYWxpc3RpYy4KKy8vIFRoZSBm
aXJzdCBwYXNzIHJlbW92ZXMgdGhlIGltcGxpZWQgc3R5bGluZyBjb252ZXJ0aW5nIHRoZSByZXN0
IHRvIDxzcGFuIHN0eWxlPSIuLi4iPgorLy8gdGhlIHNlY29uZCBwYXNzIGNhbm5vdCBiZSBleHBl
Y3RlZCB0byBjb252ZXJ0IGFuICJleGlzdGluZyIgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lIj4gaW50byA8dT4KK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAiPGIgc3R5
bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiPnRlc3Q8L2I+IiwgIjxzcGFuIHN0eWxl
PVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcIj50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmds
ZVRvZ2dsZSgiaXRhbGljIiwgIjxpIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj50ZXN0PC9p
PiIsICI8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkXCI+dGVzdDwvc3Bhbj4iKTsKKwor
Ly8gTWFrZSBzdXJlIHdlIGNvcnJlY3RseSByZW1vdmUgZG91YmxlLXN0eWxlZCB0YWdzCit0ZXN0
U2luZ2xlVG9nZ2xlKCJib2xkIiwgIjxiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj50ZXN0
PC9iPiIsICJ0ZXN0Iik7CisKKy8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZW1vdmUgZXh0cmEgc3R1
ZmYKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAiPGIgZm9vPVwiYmFyXCI+dGVzdDwvYj4iLCAi
PHNwYW4gZm9vPVwiYmFyXCI+dGVzdDwvc3Bhbj4iKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQi
LCAiPGIgc3R5bGU9J2ludmFsaWQnPnRlc3Q8L2I+IiwgInRlc3QiKTsgLy8gSXQncyBPSyB0byBy
ZW1vdmUgaW52YWxpZCBzdHlsZXMKKworZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0Q29u
dGFpbmVyKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI2M2RiMGUuLjYwMTYy
YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDMgQEAKKzIwMDktMDItMDMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2Ugc3VyZSBleGVjQ29tbWFuZCgiYm9sZCIpIG9uIDxiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZSI+dGVzdDwvYj4KKyAgICAgICAgb25seSByZW1vdmVzIHRoZSBib2xkIGFuZCBu
b3QgdGhlIHVuZGVybGluZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDk2CisKKyAgICAgICAgVGVzdDogZWRpdGluZy9leGVjQ29tbWFuZC9jb252
ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNFbXB0eSk6Cisg
ICAgICAgICogZG9tL05hbWVkQXR0ck1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRy
TWFwOjppc0VtcHR5KToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzVW5zdHlsZWRTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aW1wbGljaXRseVN0eWxlZEVs
ZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlUZXh0RGVj
b3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRk
SW5saW5lU3R5bGVJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5oOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VOb2RlV2l0aFNwYW5QcmVz
ZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpzd2FwSW5Ob2RlUHJlc2Vydmlu
Z0F0dHJpYnV0ZXNBbmRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQ6OmNyZWF0ZSk6CisKIDIwMDktMDItMDMgIEp1c3RpbiBHYXJjaWEgIDxq
dXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmFmOWI2
ZC4uMDcwNjA5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTI1MDcsNiArMjUwNyw4IEBACiAJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRt
YXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovOyB9OwogCQlB
OEE5MDlBQzBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBOTA5
QUEwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAq
LzsgfTsKIAkJQThBOTA5QUQwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBOTA5QUIwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuY3BwICovOyB9OworCQlBOEFCNkQ1NzBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBQjZENTUwRjM4QzhEOTAwN0RFMDgwIC8qIFJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmNwcCAqLzsgfTsKKwkJQThBQjZENTgwRjM4QzhEOTAwN0RFMDgwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEFCNkQ1NjBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuaCAqLzsgfTsKIAkJQThDNEE3RkQwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0
eWxlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE3RkUwOUQ1NjMy
NzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RUMwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVs
ZW1lbnQuY3BwICovOyB9OwogCQlBOEM0QTgwMDA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdFRTA5
RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgKi87IH07CkBAIC03MjQ4LDYgKzcyNTAsOCBAQAog
CQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE5MDlBQTBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOEFCNkQ1NTBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1h
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEFCNkQ1
NjBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUIwOUQ1NjMyNzAwMDNBQzhEIC8q
IFN0eWxlZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxl
ZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUMwOUQ1NjMy
NzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTM4MSw2ICsxMTM4NSw4IEBACiAJCQkJOTMzMDlEQjYwOTlFNjQ5MTAwNTZFNTgx
IC8qIFJlbW92ZU5vZGVDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQjcwOTlFNjQ5MTAwNTZFNTgx
IC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcCAqLywKIAkJCQk5MzMw
OURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQuaCAqLywKKwkJCQlBOEFCNkQ1NTBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQuY3BwICovLAorCQkJCUE4QUI2RDU2MEYzOEM4RDkwMDdERTA4MCAvKiBSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oICovLAogCQkJCTkzMzA5REJBMDk5RTY0OTEwMDU2RTU4
MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQkIwOTlFNjQ5
MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQkMw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNlbGVjdGlvbi5jcHAgKi8sCkBAIC0xNjcyNiw2ICsxNjczMiw3
IEBACiAJCQkJMUE1NjlEMjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJs
ZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThBQjZENTgwRjM4QzhEOTAwN0RFMDgwIC8q
IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NzA5LDYg
KzE4NzE2LDcgQEAKIAkJCQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFEMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNp
YmxlX3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjBFRkI3MEYzM0EwRTcwMDgxMkE5
MyAvKiBSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThBQjZE
NTcwRjM4QzhEOTAwN0RFMDgwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
IGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IGU2ZmVkZTYuLmVmNGNj
MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAorKysgYi9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KICAgICB2aXJ0dWFs
IFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CiAKICAgICBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5oIGIvV2ViQ29yZS9kb20v
TmFtZWRBdHRyTWFwLmgKaW5kZXggNjE2MjhlNC4uNmM1NTNjZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vTmFtZWRBdHRyTWFwLmgKKysrIGIvV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgKQEAg
LTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1l
ZEF0dHJNYXAmKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0
aCgpOyB9CisKICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCk7IH0KICAgICBBdHRyaWJ1dGUq
IGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCBmYmQ4ZmU0Li41MWY5OGI4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMg
Ym9vbCBpc1Vuc3R5bGVkU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiAKICAgICBjb25zdCBI
VE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlRGVjbCA9IGVsZW0t
PmlubGluZVN0eWxlRGVjbCgpOwotICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxp
bmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApICYmIGVsZW0tPmdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CisgICAgcmV0dXJuICghaW5saW5lU3R5bGVE
ZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUo
Y2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBp
c1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3Bhbihjb25zdCBOb2RlKiBub2Rl
KQpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBib29sIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVz
T3JVbnN0eWxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiAKICAgICBjb25zdCBIVE1MRWxl
bWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7CiAgICAg
TmFtZWRBdHRyTWFwKiBhdHRyaWJ1dGVzID0gZWxlbS0+YXR0cmlidXRlcyh0cnVlKTsgLy8gcmVh
ZG9ubHkKLSAgICBpZiAoYXR0cmlidXRlcy0+bGVuZ3RoKCkgPT0gMCkKKyAgICBpZiAoYXR0cmli
dXRlcy0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBpc1Vu
c3R5bGVkU3R5bGVTcGFuKG5vZGUpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJleW9uZEVuZChlbmRPZlBhcmFncmFwaCh2aXNpYmxl
RW5kKS5uZXh0KCkpOwogICAgIHdoaWxlIChwYXJhZ3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBw
YXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsKICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVD
aGFuZ2Uoc3R5bGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBp
ZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSA+IDAgfHwgbV9yZW1vdmVPbmx5KSB7
CisgICAgICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpIHx8IG1fcmVtb3Zl
T25seSkgewogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrID0gZW5jbG9zaW5nQmxvY2so
cGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwogICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5ld0Jsb2NrID0gbW92ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVj
ZXNzYXJ5KHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICAgICAgaWYg
KG5ld0Jsb2NrKQpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24KICAg
ICAgICAgICAgIGlubGluZVN0eWxlRGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6
ZSwgU3RyaW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKSArICJweCIsIGZhbHNlLCBmYWxzZSk7
CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwg
aW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpbmxp
bmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgaWYgKGlubGluZVN0eWxlRGVj
bC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQu
Z2V0KCksIHN0eWxlQXR0cik7CiAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUg
aXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4/ICBOZWVkIGEgdGVzdC4K
ICAgICAgICAgICAgIGlmIChpc1Vuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQuZ2V0KCkpKQpAQCAt
OTM1LDExICs5MzUsMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvUmFuZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWwKIAogLy8gVGhpcyBmdW5j
dGlvbiBtYXBzIGZyb20gc3R5bGluZyB0YWdzIHRvIENTUyBzdHlsZXMuICBVc2VkIGZvciBrbm93
aW5nIHdoaWNoCiAvLyBzdHlsaW5nIHRhZ3Mgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0b2dnbGlu
ZyBzdHlsZXMuCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc0hUTUxTdHlsZU5vZGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbSkKK2Jvb2wgQXBw
bHlTdHlsZUNvbW1hbmQ6OmltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hl
bkFwcGx5aW5nU3R5bGUoSFRNTEVsZW1lbnQqIGVsZW0sIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSkKIHsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBzd2l0Y2ggKCgqaXQpLmlkKCkpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJv
cGVydHkmIHByb3BlcnR5ID0gKml0OworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJv
YmFibHkgYmUgcmUtd3JpdHRlbiB0byBsb29rdXAgdGhlIHRhZ25hbWUgaW4gYQorICAgICAgICAv
LyBoYXNoIGFuZCBtYXRjaCBhZ2FpbnN0IGFuIGV4cGVjdGVkIHByb3BlcnR5L3ZhbHVlIHBhaXIK
KyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250V2VpZ2h0OgogICAgICAgICAgICAgLy8gSUUgaW5zZXJ0cyAic3Ryb25nIiB0YWdzIGZv
ciBleGVjQ29tbWFuZCgiYm9sZCIpLCBzbyB3ZSByZW1vdmUgdGhlbSwgZXZlbiB0aG91Z2ggdGhl
eSdyZSBub3Qgc3RyaWN0bHkgcHJlc2VudGF0aW9uYWwKICAgICAgICAgICAgIGlmIChlbGVtLT5o
YXNMb2NhbE5hbWUoYlRhZykgfHwgZWxlbS0+aGFzTG9jYWxOYW1lKHN0cm9uZ1RhZykpCkBAIC05
NTMsMjAgKzk1NiwzMSBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc0hUTUxTdHlsZU5vZGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRQogICAgICAgICAgICAgLy8g
SUUgaW5zZXJ0cyAiZW0iIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJpdGFsaWMiKSwgc28gd2UgcmVt
b3ZlIHRoZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0cmljdGx5IHByZXNlbnRhdGlvbmFs
CiAgICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKGlUYWcpIHx8IGVsZW0tPmhhc0xv
Y2FsTmFtZShlbVRhZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTFN0eWxlTm9kZShIVE1MRWxlbWVudCAqZWxl
bSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRo
b3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComIGVsZW0pCiB7Ci0gICAgLy8gVGhpcyBub2RlIGNh
biBiZSByZW1vdmVkLgotICAgIC8vIEVESVQgRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHRoZSBub2RlCi0gICAgLy8gaGFzIGF0dHJpYnV0ZXMuIEJ1dCBob3cgb2Z0
ZW4gZG8gcGVvcGxlIGFkZCBhdHRyaWJ1dGVzIHRvIDxCPiB0YWdzPyAKLSAgICAvLyBOb3Qgc28g
b2Z0ZW4gSSB0aGluay4KLSAgICBBU1NFUlQoZWxlbSk7Ci0gICAgcmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbihlbGVtKTsKKyAgICBib29sIHJlbW92ZU5vZGUgPSBmYWxzZTsKKworICAgIC8v
IFNpbWlsYXIgdG8gaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4sIGJ1
dCBkb2VzIG5vdCBsb29rIGZvciBhcHBsZS1zdHlsZS1zcGFuCisgICAgTmFtZWRBdHRyTWFwKiBh
dHRyaWJ1dGVzID0gZWxlbS0+YXR0cmlidXRlcyh0cnVlKTsgLy8gcmVhZG9ubHkKKyAgICBpZiAo
IWF0dHJpYnV0ZXMgfHwgYXR0cmlidXRlcy0+aXNFbXB0eSgpKQorICAgICAgICByZW1vdmVOb2Rl
ID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChhdHRyaWJ1dGVzLT5sZW5ndGgoKSA9PSAxICYmIGVsZW0t
Pmhhc0F0dHJpYnV0ZShzdHlsZUF0dHIpKSB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgZWxlbWVu
dCBldmVuIGlmIGl0IGhhcyBqdXN0IHN0eWxlPScnICh0aGlzIG1pZ2h0IGJlIHJlZHVuZGFudGx5
IGNoZWNrZWQgbGF0ZXIgdG9vKQorICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
aW5saW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7CisgICAgICAgIGlmICgh
aW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmVtb3ZlTm9kZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlbW92ZU5vZGUpCisgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisgICAgZWxzZQorICAgICAg
ICByZXBsYWNlTm9kZVdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhlbGVt
KTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQpAQCAtMTAz
NSw3ICsxMDQ5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWwKICAgICB9CiAKICAgICAvLyBO
byBuZWVkIHRvIHNlcmlhbGl6ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJlbW92ZWQgdGhl
IGxhc3QgY3NzIHByb3BlcnR5Ci0gICAgaWYgKGRlY2wtPmxlbmd0aCgpID09IDApCisgICAgaWYg
KGRlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCBzdHls
ZUF0dHIpOwogCiAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVT
cGFuKGVsZW0pKQpAQCAtMTExNiw3ICsxMTMwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUgKm5vZGUsIENTU011dGFibGVTdHlsZURlY2wK
IHsKICAgICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+Y3NzVGV4
dCgpLmxlbmd0aCgpKQorICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmNzc1RleHQoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKQEAg
LTExMzEsNyArMTE0NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERlY29y
YXRpb25TdHlsZShOb2RlICpub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsCiAgICAgSFRNTEVsZW1l
bnQgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihub2RlKTsKICAgICAgICAg
CiAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIFBvc2l0aW9uKGVsZW1lbnQsIDAp
KTsKLSAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSA+IDApIHsKKyAgICBp
ZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgY3Nz
VGV4dCA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CiAgICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uICpkZWNsID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgICAgIGlm
IChkZWNsKQpAQCAtMTIxOSwxOCArMTIzMywyMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPgog
ICAgIFBvc2l0aW9uIHMgPSBzdGFydDsKICAgICBQb3NpdGlvbiBlID0gZW5kOwogCi0gICAgTm9k
ZSAqbm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gc3RhcnQubm9kZSgpOwog
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIE5vZGUgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZUZ1bGx5U2VsZWN0ZWQo
bm9kZSwgc3RhcnQsIGVuZCkpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50ICplbGVtID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7Ci0gICAgICAgICAgICBOb2RlICpwcmV2ID0g
ZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsKLSAgICAgICAgICAgIE5vZGUg
Km5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBIVE1MRWxlbWVu
dCogZWxlbSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBO
b2RlKiBwcmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsKKyAgICAg
ICAgICAgIE5vZGUqIG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgICAg
ICBpZiAobV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhhc1RhZ05hbWUobV9zdHlsZWRJ
bmxpbmVFbGVtZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKGVsZW0pOwotICAgICAgICAgICAgaWYgKGlzSFRNTFN0eWxlTm9kZShz
dHlsZS5nZXQoKSwgZWxlbSkpCi0gICAgICAgICAgICAgICAgcmVtb3ZlSFRNTFN0eWxlTm9kZShl
bGVtKTsKLSAgICAgICAgICAgIGVsc2UgeworCisgICAgICAgICAgICBpZiAoaW1wbGljaXRseVN0
eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShlbGVtLCBzdHlsZS5n
ZXQoKSkpCisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRB
dHRyaWJ1dGVzKGVsZW0pOworCisgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVy
dGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKKyAgICAg
ICAgICAgIC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2Zv
bnQtd2VpZ2h0OiBib2xkJz4pCisgICAgICAgICAgICBpZiAoZWxlbS0+aW5Eb2N1bWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgcmVtb3ZlSFRNTEZvbnRTdHlsZShzdHlsZS5nZXQoKSwgZWxlbSk7
CiAgICAgICAgICAgICAgICAgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShzdHlsZS5nZXQo
KSwgZWxlbSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUuZ2V0KCksIGVs
ZW0pOwpAQCAtMTU1NCw3ICsxNTcyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5s
aW5lU3R5bGVJZk5lZWRlZChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpID4g
MCkgeworICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAg
IFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRv
Y3VtZW50KCkpOwogICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIs
IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3R5bGVFbGVtZW50LnJlbGVhc2UoKSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaCBiL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCmluZGV4IGE0MjIyNWQuLjc0ZmU2MDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS5nZXQoKTsgfQogCiAgICAgLy8gc3R5bGUtcmVtb3ZhbCBoZWxwZXJzCi0gICAgYm9vbCBpc0hU
TUxTdHlsZU5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwot
ICAgIHZvaWQgcmVtb3ZlSFRNTFN0eWxlTm9kZShIVE1MRWxlbWVudCopOworICAgIGJvb2wgaW1w
bGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1M
RWxlbWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCByZXBsYWNl
V2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqJik7CiAgICAg
dm9pZCByZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRN
TEVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlQ1NT
U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMWY2MjI0NC4uYTFkM2FlMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01MCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVt
b3ZlTm9kZUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
Q29tbWFuZC5oIgorI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgiCiAjaW5j
bHVkZSAiUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTIxMSw2ICsyMTIsMTEgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NSZWZQdHI8
Tm9kZT4gbm9kZSkKICAgICBwcnVuZShwYXJlbnQucmVsZWFzZSgpKTsKIH0KIAordm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZU5vZGVXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFu
ZEF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQoreworICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpjcmVhdGUobm9kZSkpOworfQor
CiBzdGF0aWMgYm9vbCBoYXNBUmVuZGVyZWREZXNjZW5kYW50KE5vZGUqIG5vZGUpCiB7CiAgICAg
Tm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmgKaW5kZXggNmJiMTQyYi4uNzBiNjEwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmgKQEAgLTcxLDYgKzcxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVt
b3ZlTm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQdHI8
Tm9kZT4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHJlcGxhY2VOb2RlV2l0aFNwYW5Q
cmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIHZv
aWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPE5vZGU+KTsKICAgICB2
b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNzUmVmUHRyPE5vZGU+KTsKICAgICB2
b2lkIHBydW5lKFBhc3NSZWZQdHI8Tm9kZT4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKaW5kZXggOThmNDI4Mi4u
MTQ1MmY4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwCkBAIC0zMiw3ICszMiw4IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCi0gICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKSwgbV9ub2RlKG5vZGUpCisgICAg
OiBDb21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9ub2RlKG5v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yMWNhOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgiCisKKyNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CisKK1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpSZXBsYWNlTm9kZVdpdGhTcGFu
Q29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChub2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9ub2RlKG5vZGUpCit7CisgICAgQVNTRVJUKG1f
bm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0Fu
ZENoaWxkcmVuKE5vZGUqIG5ld05vZGUsIE5vZGUqIG5vZGVUb1JlcGxhY2UpCit7CisgICAgQVNT
RVJUKG5vZGVUb1JlcGxhY2UtPmluRG9jdW1lbnQoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgTm9kZSogcGFyZW50Tm9kZSA9IG5vZGVUb1JlcGxhY2UtPnBhcmVudE5vZGUoKTsK
KyAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbm9kZVRvUmVwbGFjZSwgZWMp
OworICAgIEFTU0VSVCghZWMpOworCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGVUb1JlcGxh
Y2UtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgbmV3Tm9kZS0+YXBwZW5kQ2hpbGQoY2hpbGQsIGVjKTsKKyAgICAgICAgQVNTRVJU
KCFlYyk7CisgICAgfQorCisgICAgbmV3Tm9kZS0+YXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1dGVz
KCpub2RlVG9SZXBsYWNlLT5hdHRyaWJ1dGVzKCkpOworCisgICAgcGFyZW50Tm9kZS0+cmVtb3Zl
Q2hpbGQobm9kZVRvUmVwbGFjZSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit2b2lkIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KCkKK3sKKyAgICBpZiAoIW1fbm9kZS0+
aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3NwYW5FbGVtZW50KQor
ICAgICAgICBtX3NwYW5FbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQobV9ub2RlLT5kb2N1bWVu
dCgpLCBzcGFuVGFnKTsKKyAgICBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGls
ZHJlbihtX3NwYW5FbGVtZW50LmdldCgpLCBtX25vZGUuZ2V0KCkpOworfQorCit2b2lkIFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkoKQoreworICAgIGlmICghbV9zcGFuRWxl
bWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgc3dhcEluTm9kZVByZXNl
cnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4obV9ub2RlLmdldCgpLCBtX3NwYW5FbGVtZW50Lmdl
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggYi9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45MGYyZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVwbGFjZU5v
ZGVXaXRoU3BhbkNvbW1hbmRfaAorI2RlZmluZSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZF9o
CisKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisvLyBNb3JlIGFjY3VyYXRlbHksIHRoaXMgaXMg
UmVwbGFjZU5vZGVXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXNDb21tYW5k
CitjbGFzcyBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0
Q29tbWFuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKG5vZGUpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1Jl
ZlB0cjxOb2RlPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOworICAgIHZpcnR1YWwg
dm9pZCBkb1VuYXBwbHkoKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRy
PEhUTUxFbGVtZW50PiBtX3NwYW5FbGVtZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27325</attachid>
            <date>2009-02-04 14:29:46 -0800</date>
            <delta_ts>2009-02-11 00:34:28 -0800</delta_ts>
            <desc>Improved fix and improved test case, ready for final review</desc>
            <filename>Improved-fix-and-improved-test-case-ready-for-final-review.patch</filename>
            <type>text/plain</type>
            <size>35181</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MjMyNzhhMGYwZjUzZDIyZjIxMTI1ZTM1NmI5NzU3M2ViMTc2OTFjNQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUzY2MwZWIu
LjAzMDU1OGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wMi0wMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdCB0byBtYWtlIHN1cmUgZXhlY0NvbW1hbmQoImJvbGQiKSBvbiA8YiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPnRlc3Q8L2I+CisgICAgICAgIG9ubHkg
cmVtb3ZlcyB0aGUgYm9sZCBhbmQgbm90IHRoZSB1bmRlcmxpbmUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ5NgorCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVs
ZW1lbnRzLXRvLXNwYW5zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1h
bmQvcmVzb3VyY2VzL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdFNpbmdsZVRvZ2dsZSk6CisgICAgICAgICh0ZXN0RG91YmxlVG9nZ2xlKToK
KwogMjAwOS0wMi0wNCAgSmVyZW15IE1vc2tvdmljaCAgPGplcmVteUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvY29udmVydC1zdHlsZS1lbGVtZW50cy10by1zcGFucy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2NvbnZlcnQtc3R5bGUt
ZWxlbWVudHMtdG8tc3BhbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRlNmRmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCByZW1vdmUgZXh0
cmEgc3R5bGluZyBoaWRkZW4gb24gaHRtbCBzdHlsaW5nIGVsZW1lbnRzIChiLCBpLCBzLCBldGMu
KSB3aGVuIHJlbW92aW5nIHRob3NlIGVsZW1lbnRzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBvbmUgYm9sZCBjb21tYW5kIGNvbnZlcnRlZCA8YiBzdHlsZT0idGV4dC1k
ZWNvcmF0aW9uOiB1bmRlcmxpbmUiPnRlc3Q8L2I+IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZSI+dGVzdDwvc3Bhbj4KK1BBU1Mgb25lIGl0YWxpYyBjb21tYW5kIGNv
bnZlcnRlZCA8aSBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPnRlc3Q8L2k+IHRvIDxzcGFuIHN0
eWxlPSJmb250LXdlaWdodDogYm9sZCI+dGVzdDwvc3Bhbj4KK1BBU1Mgb25lIGJvbGQgY29tbWFu
ZCBjb252ZXJ0ZWQgPGIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIj50ZXN0PC9iPiB0byB0ZXN0
CitQQVNTIG9uZSBib2xkIGNvbW1hbmQgY29udmVydGVkIDxiIGZvbz0iYmFyIj50ZXN0PC9iPiB0
byA8c3BhbiBmb289ImJhciI+dGVzdDwvc3Bhbj4KK1BBU1Mgb25lIGJvbGQgY29tbWFuZCBjb252
ZXJ0ZWQgPGIgc3R5bGU9J2ludmFsaWQnPnRlc3Q8L2I+IHRvIHRlc3QKK1BBU1MgYm9sZCBmb2xs
b3dlZCBieSB1bmRvLCBjb3JyZWN0bHkgcmV0dXJuIHRvIDxiIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZSI+dGVzdDwvYj4KK1BBU1MgaXRhbGljIGZvbGxvd2VkIGJ5IHVuZG8sIGNv
cnJlY3RseSByZXR1cm4gdG8gPGkgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIj50ZXN0PC9pPgor
UEFTUyBib2xkIGZvbGxvd2VkIGJ5IHVuZG8gY29udmVydGVkIDxiIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZSI+dGVzdDwvYj4gdG8gPGIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lIiBmb289ImJhciI+dGVzdDwvYj4KK1BBU1MgYm9sZCBmb2xsb3dlZCBieSB1bmRv
IGNvbnZlcnRlZCA8YiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPnRlc3Q8L2I+
IHRvIAorUEFTUyBib2xkIGZvbGxvd2VkIGJ5IHVuZG8gY29udmVydGVkIDxiIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZSI+dGVzdDwvYj4gdG8gPHNwYW4+Zm9vYmFyPC9zcGFuPgor
UEFTUyBib2xkIGZvbGxvd2VkIGJ5IHVuZG8gY29udmVydGVkIDxiIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZSI+dGVzdDwvYj4gdG8gPGIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lIj5mb29iYXI8L2I+CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmh0bWwgYi9MYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDU5NzY5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9jb252ZXJ0LXN0eWxlLWVsZW1l
bnRzLXRvLXNwYW5zLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29udmVydC1zdHls
ZS1lbGVtZW50cy10by1zcGFucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcmVzb3VyY2Vz
L2NvbnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuanMgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL3Jlc291cmNlcy9jb252ZXJ0LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTlhNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3Jlc291cmNlcy9jb252ZXJ0
LXN0eWxlLWVsZW1lbnRzLXRvLXNwYW5zLmpzCkBAIC0wLDAgKzEsMTI1IEBACitkZXNjcmlwdGlv
bigiVGVzdCB0byBtYWtlIHN1cmUgd2UgZG8gbm90IHJlbW92ZSBleHRyYSBzdHlsaW5nIGhpZGRl
biBvbiBodG1sIHN0eWxpbmcgZWxlbWVudHMgKGIsIGksIHMsIGV0Yy4pIHdoZW4gcmVtb3Zpbmcg
dGhvc2UgZWxlbWVudHMuIikKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKK3Rlc3RDb250YWluZXIuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK2Z1bmN0aW9uIHRlc3RT
aW5nbGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRl
bnRzKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOwor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0Q29udGFpbmVy
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7
CisgICAgaWYgKHRlc3RDb250YWluZXIuaW5uZXJIVE1MID09PSBleHBlY3RlZENvbnRlbnRzKSB7
CisgICAgICAgIHRlc3RQYXNzZWQoIm9uZSAiICsgdG9nZ2xlQ29tbWFuZCArICIgY29tbWFuZCBj
b252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9uZSAiICsgdG9nZ2xlQ29tbWFu
ZCArICIgY29tbWFuZCBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIHRl
c3RDb250YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdERvdWJsZVRvZ2dsZSh0b2dnbGVDb21tYW5kLCBp
bml0aWFsQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpCit7CisgICAgdGVzdENvbnRhaW5lci5p
bm5lckhUTUwgPSBpbml0aWFsQ29udGVudHM7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNl
bGVjdEFsbENoaWxkcmVuKHRlc3RDb250YWluZXIpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KHRvZ2dsZUNvbW1hbmQsIGZhbHNlLCBudWxsKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0
b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7CisgICAgaWYgKHRlc3RDb250YWluZXIuaW5uZXJI
VE1MID09PSBleHBlY3RlZENvbnRlbnRzKSB7CisgICAgICAgIHRlc3RQYXNzZWQoInR3byAiICsg
dG9nZ2xlQ29tbWFuZCArICIgY29tbWFuZHMgY29udmVydGVkICIgKyBpbml0aWFsQ29udGVudHMg
KyAiIHRvICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
RmFpbGVkKCJ0d28gIiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmRzIGNvbnZlcnRlZCAiICsg
aW5pdGlhbENvbnRlbnRzICsgIiB0byAiICsgdGVzdENvbnRhaW5lci5pbm5lckhUTUwgKyAiLCBl
eHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50cyk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0
Q29tbWFuZEFuZFVuZG8oY29tbWFuZCwgY29udGVudHMpCit7CisgICAgdGVzdENvbnRhaW5lci5p
bm5lckhUTUwgPSBjb250ZW50czsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxs
Q2hpbGRyZW4odGVzdENvbnRhaW5lcik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFu
ZCwgZmFsc2UsIG51bGwpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJ1bmRvIiwgZmFsc2Us
IG51bGwpOworICAgIGlmICh0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9PT0gY29udGVudHMpIHsK
KyAgICAgICAgdGVzdFBhc3NlZChjb21tYW5kICsgIiBmb2xsb3dlZCBieSB1bmRvLCBjb3JyZWN0
bHkgcmV0dXJuIHRvICIgKyBjb250ZW50cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZh
aWxlZChjb21tYW5kICsgIiBmb2xsb3dlZCBieSB1bmRvIGNvbnZlcnRlZCAiICsgY29udGVudHMg
KyAiIHRvICIgKyB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCk7CisgICAgfQorfQorCitmdW5jdGlv
biB0ZXN0Q29tbWFuZEFuZFVuZG9XaXRoSW50ZXJtZWRpYXRlRnVuY3Rpb24oY29tbWFuZCwgaW5p
dGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRlbnRzLCBpbnRlcm1lZGlhdGVGdW5jdGlvbikKK3sK
KyAgICB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9IGluaXRpYWxDb250ZW50czsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4odGVzdENvbnRhaW5lcik7CisgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIGludGVybWVk
aWF0ZUZ1bmN0aW9uKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInVuZG8iLCBmYWxzZSwg
bnVsbCk7CisgICAgaWYgKHRlc3RDb250YWluZXIuaW5uZXJIVE1MID09PSBleHBlY3RlZENvbnRl
bnRzKSB7CisgICAgICAgIHRlc3RQYXNzZWQoY29tbWFuZCArICIgZm9sbG93ZWQgYnkgdW5kbyBj
b252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoY29tbWFuZCArICIgZm9sbG93ZWQg
YnkgdW5kbyBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIHRlc3RDb250
YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudHMpOworICAg
IH0KK30KKworLy8gSXQgd291bGQgYmUgbmljZSB0byBleHBlY3QgYSA8dGFnPnRlc3Q8L3RhZz4g
cmVzdWx0IGZvciB0aGVzZSwgYnV0IHRoYXQncyB1bnJlYWxpc3RpYy4KKy8vIFRoZSBmaXJzdCBw
YXNzIHJlbW92ZXMgdGhlIGltcGxpZWQgc3R5bGluZyBjb252ZXJ0aW5nIHRoZSByZXN0IHRvIDxz
cGFuIHN0eWxlPSIuLi4iPgorLy8gdGhlIHNlY29uZCBwYXNzIGNhbm5vdCBiZSBleHBlY3RlZCB0
byBjb252ZXJ0IGFuICJleGlzdGluZyIgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lIj4gaW50byA8dT4KK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAiPGIgc3R5bGU9XCJ0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiPnRlc3Q8L2I+IiwgIjxzcGFuIHN0eWxlPVwidGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcIj50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmdsZVRvZ2ds
ZSgiaXRhbGljIiwgIjxpIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj50ZXN0PC9pPiIsICI8
c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkXCI+dGVzdDwvc3Bhbj4iKTsKKworLy8gTWFr
ZSBzdXJlIHdlIGNvcnJlY3RseSByZW1vdmUgZG91YmxlLXN0eWxlZCB0YWdzCit0ZXN0U2luZ2xl
VG9nZ2xlKCJib2xkIiwgIjxiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj50ZXN0PC9iPiIs
ICJ0ZXN0Iik7CisKKy8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZW1vdmUgZXh0cmEgc3R1ZmYKK3Rl
c3RTaW5nbGVUb2dnbGUoImJvbGQiLCAiPGIgZm9vPVwiYmFyXCI+dGVzdDwvYj4iLCAiPHNwYW4g
Zm9vPVwiYmFyXCI+dGVzdDwvc3Bhbj4iKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCAiPGIg
c3R5bGU9J2ludmFsaWQnPnRlc3Q8L2I+IiwgInRlc3QiKTsgLy8gSXQncyBPSyB0byByZW1vdmUg
aW52YWxpZCBzdHlsZXMKKworLy8gRklYTUU6IFdlIGhhdmUgdG8gY2FsbCB1bmRvIGhlcmUgdG8g
cHJldmVudCBXZWJLaXQgZnJvbSB0cnlpbmcgdG8KKy8vIHVuZG8gYWxsIG9mIG91ciBwcmV2aW91
cyBjb21tYW5kcyBhdCBvbmNlLiAgV2UgaGF2ZSBubyB3YXkgdG8KKy8vICJjbGVhciB0aGUgdW5k
byBzdGFjayIgaW4gV2ViS2l0LgorZG9jdW1lbnQuZXhlY0NvbW1hbmQoInVuZG8iLCBmYWxzZSwg
bnVsbCk7CisvLyBUaGF0IGZpbGxlZCB0ZXN0Q29udGFpbmVyIHdpdGggbG90cyBvZiBqdW5rLCBi
dXQgaXQgd2lsbCBiZSBjbGVhcmVkCisvLyB3aGVuIHRlc3RDb21tYW5kQW5kVW5kbyBpcyBjYWxs
ZWQuCisKK3Rlc3RDb21tYW5kQW5kVW5kbygiYm9sZCIsICI8YiBzdHlsZT1cInRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lXCI+dGVzdDwvYj4iKTsKK3Rlc3RDb21tYW5kQW5kVW5kbygiaXRhbGlj
IiwgIjxpIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj50ZXN0PC9pPiIpOworCit0ZXN0Q29t
bWFuZEFuZFVuZG9XaXRoSW50ZXJtZWRpYXRlRnVuY3Rpb24oCisgICAgImJvbGQiLAorICAgICI8
YiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXCI+dGVzdDwvYj4iLAorICAgICI8
YiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXCIgZm9vPVwiYmFyXCI+dGVzdDwv
Yj4iLAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBDaGFuZ2UgdGhlIDxzcGFuPiBiZWZv
cmUgdW5kb2luZyBpdAorICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdENvbnRhaW5lci5m
aXJzdENoaWxkLnNldEF0dHJpYnV0ZSgiZm9vIiwgImJhciIpOworICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkV4Y2VwdGlvbiBjYXVnaHQ6ICIgKyBlKTsKKyAg
ICAgICAgfQorfSk7CisKK3Rlc3RDb21tYW5kQW5kVW5kb1dpdGhJbnRlcm1lZGlhdGVGdW5jdGlv
bigKKyAgICAiYm9sZCIsCisgICAgIjxiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmVcIj50ZXN0PC9iPiIsCisgICAgIiIsCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIHJl
bW92ZSB0aGUgc3BhbiwgdW5kbyBzaG91bGQgZmFpbAorICAgICAgICB0ZXN0Q29udGFpbmVyLnJl
bW92ZUNoaWxkKHRlc3RDb250YWluZXIuZmlyc3RDaGlsZCk7Cit9KTsKKwordGVzdENvbW1hbmRB
bmRVbmRvV2l0aEludGVybWVkaWF0ZUZ1bmN0aW9uKAorICAgICJib2xkIiwKKyAgICAiPGIgc3R5
bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiPnRlc3Q8L2I+IiwKKyAgICAiPHNwYW4+
Zm9vYmFyPC9zcGFuPiIsCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIHJlcGxhY2UgdGhl
IHNwYW4gd2l0aCBhIG5ldyBzcGFuLCB1bmRvIHNob3VsZCBmYWlsCisgICAgICAgIHRlc3RDb250
YWluZXIucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lci5maXJzdENoaWxkKTsKKyAgICAgICAgdGVz
dENvbnRhaW5lci5pbm5lckhUTUwgPSAiPHNwYW4+Zm9vYmFyPC9zcGFuPiI7Cit9KTsKKwordGVz
dENvbW1hbmRBbmRVbmRvV2l0aEludGVybWVkaWF0ZUZ1bmN0aW9uKAorICAgICJib2xkIiwKKyAg
ICAiPGIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiPnRlc3Q8L2I+IiwKKyAg
ICAiPGIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiPmZvb2JhcjwvYj4iLAor
ICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyByZXBsYWNlIHRoZSBzcGFuIGNvbnRlbnRzLCB1
bmRvIHNob3VsZCBzdWNjZWVkCisgICAgICAgIHRlc3RDb250YWluZXIuZmlyc3RDaGlsZC5pbm5l
ckhUTUwgPSAiZm9vYmFyIjsKK30pOworCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RD
b250YWluZXIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjJiYzI5OS4uNWUx
MDRmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MyBAQAorMjAwOS0wMi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TWFrZSBzdXJlIGV4ZWNDb21tYW5kKCJib2xkIikgb24gPGIgc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lIj50ZXN0PC9iPgorICAgICAgICBvbmx5IHJlbW92ZXMgdGhlIGJvbGQgYW5k
IG5vdCB0aGUgdW5kZXJsaW5lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0OTYKKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Nv
bnZlcnQtc3R5bGUtZWxlbWVudHMtdG8tc3BhbnMuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjppc0VtcHR5KToK
KyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0
dHJNYXA6OmlzRW1wdHkpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNVbnN0eWxlZFN0eWxlU3Bhbik6CisgICAgICAgIChXZWJD
b3JlOjppc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3Bhbik6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjppbXBsaWNpdGx5U3R5bGVk
RWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNT
U1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVRleHRE
ZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjph
ZGRJbmxpbmVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmg6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZU5vZGVXaXRoU3BhblBy
ZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZCk6
CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnN3YXBJbk5vZGVQcmVzZXJ2
aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZU5v
ZGVXaXRoU3BhbkNvbW1hbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKToKKwogMjAwOS0wMi0wNCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoVHJhY2VyOiBbUkVHUkVTU0lPTl0g
NTMgY3Jhc2hlcyBpbiBTYWZhcmkgYXQgY29tLmFwcGxlLldlYkNvcmU6IFdlYkNvcmU6OkxlZ2Fj
eVdlYkFyY2hpdmU6OmNyZWF0ZSArIDI3MDYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNGI4YTg4OC4uYWE5OWUzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI1MDgsNiArMjUwOCw4IEBACiAJCUE4OTk0MzI5
MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovOyB9OwogCQlBOEE5MDlBQzBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBOTA5QUEwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKIAkJQThBOTA5QUQwQ0JDRDZCNTAwMjlCODA3
IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBOTA5QUIwQ0JDRDZCNTAwMjlCODA3IC8q
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovOyB9OworCQlBOEFCNkQ1NzBG
MzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBQjZENTUwRjM4QzhEOTAw
N0RFMDgwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCAqLzsgfTsKKwkJQThBQjZE
NTgwRjM4QzhEOTAwN0RFMDgwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEFCNkQ1NjBGMzhDOEQ5
MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCAqLzsgfTsKIAkJQThDNEE3
RkQwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBT
dHlsZWRFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQThDNEE3RkUwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RUMwOUQ1
NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovOyB9OwogCQlBOEM0QTgwMDA5RDU2
MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgKi87IH07
CkBAIC03MjUwLDYgKzcyNTIsOCBAQAogCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFw
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE5MDlBQTBDQkNENkI1
MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAv
KiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEFCNkQ1NTBGMzhDOEQ5MDA3REUwODAgLyog
UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBOEFCNkQ1NjBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThD
NEE3RUIwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThDNEE3RUMwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyog
Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM4Myw2ICsxMTM4Nyw4IEBACiAJCQkJ
OTMzMDlEQjYwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmggKi8sCiAJCQkJ
OTMzMDlEQjcwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCAqLywKKwkJCQlBOEFCNkQ1NTBGMzhDOEQ5MDA3
REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwICovLAorCQkJCUE4QUI2RDU2
MEYzOEM4RDkwMDdERTA4MCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oICovLAogCQkJ
CTkzMzA5REJBMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Ki8sCiAJCQkJOTMzMDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmggKi8sCiAJCQkJOTMzMDlEQkMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNlbGVjdGlvbi5jcHAg
Ki8sCkBAIC0xNjczMCw2ICsxNjczNiw3IEBACiAJCQkJMUE1NjlEMjUwRDdFMkI4MjAwN0MzOTgz
IC8qIHJ1bnRpbWVfcm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAw
NTZFNTgxIC8qIHZpc2libGVfdW5pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTFBNTRGMEYz
OTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOEFCNkQ1ODBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTg3MTMsNiArMTg3MjAsNyBAQAogCQkJCTFBNTY5RDI0MEQ3
RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMz
MDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM2MEVGQjcwRjMzQTBFNzAwODEyQTkzIC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEFCNkQ1NzBGMzhDOEQ5MDA3REUwODAgLyogUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmggYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmgKaW5kZXggZTZmZWRlNi4uZWY0Y2MyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRp
b24uaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENzc1Rl
eHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFsZW5ndGgoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0ID0gMDsKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
TmFtZWRBdHRyTWFwLmggYi9XZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAppbmRleCA2MTYyOGU0
Li42YzU1M2NlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAorKysgYi9X
ZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBdHRyaWJ1dGVzKGNvbnN0IE5hbWVkQXR0ck1hcCYpOwogCiAgICAgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5zaXplKCk7IH0KKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKwogICAgIEF0dHJpYnV0ZSogYXR0
cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2lu
ZGV4XS5nZXQoKTsgfQogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFs
aWZpZWROYW1lJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmlu
ZGV4IGZiZDhmZTQuLjkyNzc1ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cApAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRpYyBib29sIGlzVW5zdHlsZWRTdHlsZVNwYW4oY29u
c3QgTm9kZSogbm9kZSkKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtID0gc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogaW5saW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgcmV0
dXJuICghaW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCkg
JiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmco
KTsKKyAgICByZXR1cm4gKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5bGVEZWNsLT5pc0Vt
cHR5KCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNz
U3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBib29sIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0
eWxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGlj
IGJvb2wgaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4oY29uc3QgTm9k
ZSogbm9kZSkKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtID0gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEVsZW1lbnQqPihub2RlKTsKICAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBl
bGVtLT5hdHRyaWJ1dGVzKHRydWUpOyAvLyByZWFkb25seQotICAgIGlmIChhdHRyaWJ1dGVzLT5s
ZW5ndGgoKSA9PSAwKQorICAgIGlmIChhdHRyaWJ1dGVzLT5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGlzVW5zdHlsZWRTdHlsZVNwYW4obm9kZSk7CkBAIC00
MjYsNyArNDI2LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkKICAgICBWaXNpYmxlUG9zaXRpb24gYmV5
b25kRW5kKGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpLm5leHQoKSk7CiAgICAgd2hpbGUgKHBh
cmFncmFwaFN0YXJ0LmlzTm90TnVsbCgpICYmIHBhcmFncmFwaFN0YXJ0ICE9IGJleW9uZEVuZCkg
ewogICAgICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHlsZSwgcGFyYWdyYXBoU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxl
bmd0aCgpID4gMCB8fCBtX3JlbW92ZU9ubHkpIHsKKyAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmNz
c1N0eWxlKCkubGVuZ3RoKCkgfHwgbV9yZW1vdmVPbmx5KSB7CiAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3QmxvY2sgPSBtb3ZlUGFy
YWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkocGFyYWdyYXBoU3RhcnQuZGVlcEVx
dWl2YWxlbnQoKSk7CiAgICAgICAgICAgICBpZiAobmV3QmxvY2spCkBAIC01NjQsNyArNTY0LDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbgogICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9u
dFNpemUpICsgInB4IiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZURlY2wtPmNzc1RleHQoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlubGluZVN0eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCkg
eworICAgICAgICBpZiAoaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5z
dHlsZVN0eWxlU3Bhbj8gIE5lZWQgYSB0ZXN0LgogICAgICAgICAgICAgaWYgKGlzVW5zdHlsZWRT
dHlsZVNwYW4oZWxlbWVudC5nZXQoKSkpCkBAIC05MzUsMTEgKzkzNSwxNCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9SYW5nZShDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bAogCiAvLyBUaGlzIGZ1bmN0aW9uIG1hcHMgZnJvbSBzdHlsaW5nIHRhZ3Mg
dG8gQ1NTIHN0eWxlcy4gIFVzZWQgZm9yIGtub3dpbmcgd2hpY2gKIC8vIHN0eWxpbmcgdGFncyBz
aG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRvZ2dsaW5nIHN0eWxlcy4KLWJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6OmlzSFRNTFN0eWxlTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IEhUTUxFbGVtZW50KiBlbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aW1wbGljaXRseVN0
eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1MRWxlbWVudCog
ZWxlbSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAg
ICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHN3aXRjaCAoKCppdCku
aWQoKSkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSByZS13cml0dGVuIHRvIGxvb2t1
cCB0aGUgdGFnbmFtZSBpbiBhCisgICAgICAgIC8vIGhhc2ggYW5kIG1hdGNoIGFnYWluc3QgYW4g
ZXhwZWN0ZWQgcHJvcGVydHkvdmFsdWUgcGFpcgorICAgICAgICBzd2l0Y2ggKHByb3BlcnR5Lmlk
KCkpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CiAgICAgICAgICAgICAv
LyBJRSBpbnNlcnRzICJzdHJvbmciIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJib2xkIiksIHNvIHdl
IHJlbW92ZSB0aGVtLCBldmVuIHRob3VnaCB0aGV5J3JlIG5vdCBzdHJpY3RseSBwcmVzZW50YXRp
b25hbAogICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShiVGFnKSB8fCBlbGVtLT5o
YXNMb2NhbE5hbWUoc3Ryb25nVGFnKSkKQEAgLTk1MywyMCArOTU2LDM0IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEhUTUxFCiAgICAgICAgICAgICAvLyBJRSBpbnNlcnRzICJlbSIgdGFncyBmb3IgZXhl
Y0NvbW1hbmQoIml0YWxpYyIpLCBzbyB3ZSByZW1vdmUgdGhlbSwgZXZlbiB0aG91Z2ggdGhleSdy
ZSBub3Qgc3RyaWN0bHkgcHJlc2VudGF0aW9uYWwKICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNM
b2NhbE5hbWUoaVRhZykgfHwgZWxlbS0+aGFzTG9jYWxOYW1lKGVtVGFnKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQot
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVI
VE1MU3R5bGVOb2RlKEhUTUxFbGVtZW50ICplbGVtKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYg
ZWxlbSkKIHsKLSAgICAvLyBUaGlzIG5vZGUgY2FuIGJlIHJlbW92ZWQuCi0gICAgLy8gRURJVCBG
SVhNRTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG5vZGUKLSAgICAv
LyBoYXMgYXR0cmlidXRlcy4gQnV0IGhvdyBvZnRlbiBkbyBwZW9wbGUgYWRkIGF0dHJpYnV0ZXMg
dG8gPEI+IHRhZ3M/IAotICAgIC8vIE5vdCBzbyBvZnRlbiBJIHRoaW5rLgotICAgIEFTU0VSVChl
bGVtKTsKLSAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworICAgIGJvb2wg
cmVtb3ZlTm9kZSA9IGZhbHNlOworCisgICAgLy8gU2ltaWxhciB0byBpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbiwgYnV0IGRvZXMgbm90IGxvb2sgZm9yIGFwcGxlLXN0
eWxlLXNwYW4KKyAgICBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtLT5hdHRyaWJ1dGVz
KHRydWUpOyAvLyByZWFkb25seQorICAgIGlmICghYXR0cmlidXRlcyB8fCBhdHRyaWJ1dGVzLT5p
c0VtcHR5KCkpCisgICAgICAgIHJlbW92ZU5vZGUgPSB0cnVlOworICAgIGVsc2UgaWYgKGF0dHJp
YnV0ZXMtPmxlbmd0aCgpID09IDEgJiYgZWxlbS0+aGFzQXR0cmlidXRlKHN0eWxlQXR0cikpIHsK
KyAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbGVtZW50IGV2ZW4gaWYgaXQgaGFzIGp1c3Qgc3R5bGU9
JycgKHRoaXMgbWlnaHQgYmUgcmVkdW5kYW50bHkgY2hlY2tlZCBsYXRlciB0b28pCisgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxp
bmVTdHlsZURlY2woKTsKKyAgICAgICAgaWYgKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5
bGVEZWNsLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZW1vdmVOb2RlID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAocmVtb3ZlTm9kZSkKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihlbGVtKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVt
ZW50ID0gcmVwbGFjZU5vZGVXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMo
ZWxlbSk7CisgICAgICAgIEFTU0VSVChuZXdTcGFuRWxlbWVudCAmJiBuZXdTcGFuRWxlbWVudC0+
aW5Eb2N1bWVudCgpKTsKKyAgICAgICAgZWxlbSA9IG5ld1NwYW5FbGVtZW50OworICAgIH0KIH0K
IAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQpAQCAtMTAzNSw3ICsx
MDUyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWwKICAgICB9CiAKICAgICAvLyBObyBuZWVk
IHRvIHNlcmlhbGl6ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJlbW92ZWQgdGhlIGxhc3Qg
Y3NzIHByb3BlcnR5Ci0gICAgaWYgKGRlY2wtPmxlbmd0aCgpID09IDApCisgICAgaWYgKGRlY2wt
PmlzRW1wdHkoKSkKICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCBzdHlsZUF0dHIp
OwogCiAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVs
ZW0pKQpAQCAtMTExNiw3ICsxMTMzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlU
ZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUgKm5vZGUsIENTU011dGFibGVTdHlsZURlY2wKIHsKICAg
ICBBU1NFUlQobm9kZSk7CiAKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+Y3NzVGV4dCgpLmxl
bmd0aCgpKQorICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmNzc1RleHQoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKQEAgLTExMzEs
NyArMTE0OCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5VGV4dERlY29yYXRpb25T
dHlsZShOb2RlICpub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsCiAgICAgSFRNTEVsZW1lbnQgKmVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihub2RlKTsKICAgICAgICAgCiAgICAg
U3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIFBvc2l0aW9uKGVsZW1lbnQsIDApKTsKLSAg
ICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSA+IDApIHsKKyAgICBpZiAoc3R5
bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgY3NzVGV4dCA9
IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CiAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uICpkZWNsID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgICAgIGlmIChkZWNs
KQpAQCAtMTIxOSwxOCArMTIzNiwyMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJ
bmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPgogICAgIFBv
c2l0aW9uIHMgPSBzdGFydDsKICAgICBQb3NpdGlvbiBlID0gZW5kOwogCi0gICAgTm9kZSAqbm9k
ZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gc3RhcnQubm9kZSgpOwogICAgIHdo
aWxlIChub2RlKSB7Ci0gICAgICAgIE5vZGUgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAg
ICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwg
c3RhcnQsIGVuZCkpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50ICplbGVtID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQgKj4obm9kZSk7Ci0gICAgICAgICAgICBOb2RlICpwcmV2ID0gZWxlbS0+
dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsKLSAgICAgICAgICAgIE5vZGUgKm5leHQg
PSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxl
bSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBOb2RlKiBw
cmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsKKyAgICAgICAgICAg
IE5vZGUqIG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgICAgICBpZiAo
bV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVF
bGVtZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVsZW0pOwotICAgICAgICAgICAgaWYgKGlzSFRNTFN0eWxlTm9kZShzdHlsZS5n
ZXQoKSwgZWxlbSkpCi0gICAgICAgICAgICAgICAgcmVtb3ZlSFRNTFN0eWxlTm9kZShlbGVtKTsK
LSAgICAgICAgICAgIGVsc2UgeworCisgICAgICAgICAgICBpZiAoaW1wbGljaXRseVN0eWxlZEVs
ZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShlbGVtLCBzdHlsZS5nZXQoKSkp
CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1
dGVzKGVsZW0pOworCisgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVydGVkIHRv
IGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKKyAgICAgICAgICAg
IC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2ZvbnQtd2Vp
Z2h0OiBib2xkJz4pCisgICAgICAgICAgICBpZiAoZWxlbS0+aW5Eb2N1bWVudCgpKSB7CiAgICAg
ICAgICAgICAgICAgcmVtb3ZlSFRNTEZvbnRTdHlsZShzdHlsZS5nZXQoKSwgZWxlbSk7CiAgICAg
ICAgICAgICAgICAgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShzdHlsZS5nZXQoKSwgZWxl
bSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwpA
QCAtMTU1NCw3ICsxNTc1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5
bGVJZk5lZWRlZChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpID4gMCkgewor
ICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIFJlZlB0
cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50
KCkpOwogICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxl
Q2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50
KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3R5bGVFbGVtZW50LnJlbGVhc2UoKSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaCBiL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5oCmluZGV4IGE0MjIyNWQuLjc0ZmU2MDUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5oCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQogCiAgICAgLy8gc3R5bGUtcmVtb3ZhbCBoZWxwZXJzCi0gICAgYm9vbCBpc0hUTUxTdHls
ZU5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwotICAgIHZv
aWQgcmVtb3ZlSFRNTFN0eWxlTm9kZShIVE1MRWxlbWVudCopOworICAgIGJvb2wgaW1wbGljaXRs
eVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1MRWxlbWVu
dCosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCByZXBsYWNlV2l0aFNw
YW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqJik7CiAgICAgdm9pZCBy
ZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1l
bnQqKTsKICAgICB2b2lkIHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlQ1NTU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMWY2MjI0NC4uYzYwNTkxNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAj
aW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9k
ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFu
ZC5oIgorI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgiCiAjaW5jbHVkZSAi
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTIxMSw2ICsyMTIsMTcgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKICAgICBwcnVuZShwYXJlbnQucmVsZWFzZSgpKTsKIH0KIAorSFRNTEVsZW1lbnQqIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlTm9kZVdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVu
QW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit7CisgICAgUmVmUHRyPFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1h
bmQ6OmNyZWF0ZShub2RlKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kKTsK
KyAgICAvLyBSZXR1cm5pbmcgYSByYXcgcG9pbnRlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhlIGNv
bW1hbmQgaXMgcmV0YWluZWQgYnkKKyAgICAvLyBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSAodGh1
cyByZXRhaW5pbmcgdGhlIHNwYW4pLCBhbmQgdGhlIHNwYW4gaXMgYWxzbworICAgIC8vIGluIHRo
ZSBET00gdHJlZSwgYW5kIHRodXMgYWxpdmUgd2hpZSBpdCBoYXMgYSBwYXJlbnQuCisgICAgQVNT
RVJUKGNvbW1hbmQtPnNwYW5FbGVtZW50KCktPmluRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIGNv
bW1hbmQtPnNwYW5FbGVtZW50KCk7Cit9CisKIHN0YXRpYyBib29sIGhhc0FSZW5kZXJlZERlc2Nl
bmRhbnQoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmggYi9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAppbmRleCA2YmIxNDJiLi4yOTdhZjZk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApAQCAtMzMsNiArMzMsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xh
c3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBUZXh0OwogCiBjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFu
ZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CkBAIC03MSw2ICs3Miw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShQ
YXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgSFRNTEVsZW1lbnQqIHJl
cGxhY2VOb2RlV2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKFBhc3NSZWZQ
dHI8Tm9kZT4pOwogICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVm
UHRyPE5vZGU+KTsKICAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNzUmVm
UHRyPE5vZGU+KTsKICAgICB2b2lkIHBydW5lKFBhc3NSZWZQdHI8Tm9kZT4pOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5j
cHAKaW5kZXggOThmNDI4Mi4uMTQ1MmY4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwCkBAIC0zMiw3ICszMiw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKSwg
bV9ub2RlKG5vZGUpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgp
KQorICAgICwgbV9ub2RlKG5vZGUpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWNhOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcApAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlcGxhY2VOb2RlV2l0aFNwYW5Db21t
YW5kLmgiCisKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpS
ZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9ub2RlKG5vZGUp
Cit7CisgICAgQVNTRVJUKG1fbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXBJbk5vZGVQcmVz
ZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKE5vZGUqIG5ld05vZGUsIE5vZGUqIG5vZGVUb1Jl
cGxhY2UpCit7CisgICAgQVNTRVJUKG5vZGVUb1JlcGxhY2UtPmluRG9jdW1lbnQoKSk7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgTm9kZSogcGFyZW50Tm9kZSA9IG5vZGVUb1JlcGxh
Y2UtPnBhcmVudE5vZGUoKTsKKyAgICBwYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwg
bm9kZVRvUmVwbGFjZSwgZWMpOworICAgIEFTU0VSVCghZWMpOworCisgICAgZm9yIChOb2RlKiBj
aGlsZCA9IG5vZGVUb1JlcGxhY2UtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgbmV3Tm9kZS0+YXBwZW5kQ2hpbGQoY2hpbGQsIGVj
KTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorCisgICAgbmV3Tm9kZS0+YXR0cmlidXRl
cygpLT5zZXRBdHRyaWJ1dGVzKCpub2RlVG9SZXBsYWNlLT5hdHRyaWJ1dGVzKCkpOworCisgICAg
cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobm9kZVRvUmVwbGFjZSwgZWMpOworICAgIEFTU0VSVCgh
ZWMpOworfQorCit2b2lkIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KCkKK3sK
KyAgICBpZiAoIW1fbm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCFtX3NwYW5FbGVtZW50KQorICAgICAgICBtX3NwYW5FbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1l
bnQobV9ub2RlLT5kb2N1bWVudCgpLCBzcGFuVGFnKTsKKyAgICBzd2FwSW5Ob2RlUHJlc2Vydmlu
Z0F0dHJpYnV0ZXNBbmRDaGlsZHJlbihtX3NwYW5FbGVtZW50LmdldCgpLCBtX25vZGUuZ2V0KCkp
OworfQorCit2b2lkIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkoKQorewor
ICAgIGlmICghbV9zcGFuRWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4obV9ub2RlLmdldCgp
LCBtX3NwYW5FbGVtZW50LmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggYi9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM3NWI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmRfaAorI2RlZmluZSBSZXBsYWNlTm9k
ZVdpdGhTcGFuQ29tbWFuZF9oCisKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxFbGVtZW50OworCisvLyBNb3JlIGFj
Y3VyYXRlbHksIHRoaXMgaXMgUmVwbGFjZU5vZGVXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFu
ZEF0dHJpYnV0ZXNDb21tYW5kCitjbGFzcyBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZCA6IHB1
YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kKG5vZGUpKTsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudCogc3BhbkVsZW1lbnQo
KSB7IHJldHVybiBtX3NwYW5FbGVtZW50LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZG9BcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKKworICAgIFJlZlB0
cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX3NwYW5FbGVtZW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQK
</data>
<flag name="review"
          id="13184"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
      

    </bug>

</bugzilla>