<?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>44560</bug_id>
          
          <creation_ts>2010-08-24 15:54:41 -0700</creation_ts>
          <short_desc>cannot remove text-decoration when style is added by u or s</short_desc>
          <delta_ts>2010-08-28 21:43:50 -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>All</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>
          <dependson>44622</dependson>
    
    <dependson>44646</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>268876</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-08-24 15:54:41 -0700</bug_when>
    <thetext>With the following markup:

&lt;u&gt;&lt;b&gt;one two three&lt;/b&gt;&lt;/u&gt;, select the word &apos;two&apos; and execCommand(&apos;underline&apos;).

EXPECTED: the word &apos;two&apos; is bold and NOT underlined
ACTUAL: the word &apos;two&apos; is bold AND underlined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268879</commentid>
    <comment_count>1</comment_count>
      <attachid>65338</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-08-24 15:58:22 -0700</bug_when>
    <thetext>Created attachment 65338
Test case

When running this test, the word &apos;and&apos; should be bold but not underlined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268881</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-24 16:01:29 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=65338) [details]
&gt; Test case
&gt; 
&gt; When running this test, the word &apos;and&apos; should be bold but not underlined.

I just found this bug in pushDownInlineStyleAroundNode while working on the bug 30836.  Will work on it ASAP.  Thanks for filing a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268906</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-24 17:02:31 -0700</bug_when>
    <thetext>Wait, this is a different bug.  We have never been able to push text-decoration down when text-decoration is added by u or s.  Notice that WebKit removes underline if your markup was:
&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;b&gt;one two three&lt;/b&gt;&lt;/span&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268915</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-08-24 17:21:33 -0700</bug_when>
    <thetext>This regression was introduced in http://trac.webkit.org/changeset/46373 where 
if (alteredProperty.cssText() != &quot;none&quot;)
was correctly changed to
if (!equalIgnoringCase(alteredProperty.value()-&gt;cssText(), &quot;none&quot;)) .

The original if statement was comparing the full css text (text-decoration: none) with none, whereas the second one compares only the value of the property.

The change that introduced this was http://trac.webkit.org/changeset/46286 with the intent of removing redundant text-decoration: none.
Unfortunately the attached example shows a case where it is necessary to add text-decoration:none to the &lt;u&gt; element, to allow all the children to have text-decoration:underline inline when needed.

The current version of AppleStyleCommand.cpp is very different from this one, so I need to figure out how to change it.
The code before ttp://trac.webkit.org/changeset/46286 was pushing the text decoration down successfully (see the attached test case for a meaningful example).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268938</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-24 17:55:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Unfortunately the attached example shows a case where it is necessary to add text-decoration:none to the &lt;u&gt; element, to allow all the children to have text-decoration:underline inline when needed.

The correct fix is to remove u element entirely.  I&apos;m working on a patch I speak.  Give me 1-2 days and will post a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268944</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-24 18:00:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Unfortunately the attached example shows a case where it is necessary to add text-decoration:none to the &lt;u&gt; element, to allow all the children to have text-decoration:underline inline when needed.
&gt; 
&gt; The correct fix is to remove u element entirely.  I&apos;m working on a patch I speak.  Give me 1-2 days and will post a patch.

Oh, I didn&apos;t you assigned yourself. I can post work-in-progress patch if you&apos;d like to take over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269079</commentid>
    <comment_count>7</comment_count>
      <attachid>65383</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 01:13:41 -0700</bug_when>
    <thetext>Created attachment 65383
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269090</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 01:27:48 -0700</bug_when>
    <thetext>Most of it is cleanup.  I&apos;m combining implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle, and removeHTMLBidiEmbeddingStyle into removeImplicitlyStyledElement so that I can add a feature to extract styles later.  This cleanup is ~60% of patch and should be isolated into a separate patch.

The actual fix is in extractInlineStyleToPushDown where I call removeImplicitlyStyledElement in two places.  We have to extract inline declaration first because we won&apos;t be able to remove the node otherwise when implicitly styled element has style attribute.  Assuming I separate the cleanup, this fix should be very simple and small.

The only test that fails with this patch is editing/style/typing-style-003.html and I suspect that we&apos;re getting a simpler markup because the result is visually identical.  I&apos;ll file a bug to convert it to a dump-as-markup / dump-as-text test first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269318</commentid>
    <comment_count>9</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-08-25 10:17:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Most of it is cleanup.  I&apos;m combining implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle, and removeHTMLBidiEmbeddingStyle into removeImplicitlyStyledElement so that I can add a feature to extract styles later.  This cleanup is ~60% of patch and should be isolated into a separate patch.
&gt; 
&gt; The actual fix is in extractInlineStyleToPushDown where I call removeImplicitlyStyledElement in two places.  We have to extract inline declaration first because we won&apos;t be able to remove the node otherwise when implicitly styled element has style attribute.  Assuming I separate the cleanup, this fix should be very simple and small.
&gt; 
&gt; The only test that fails with this patch is editing/style/typing-style-003.html and I suspect that we&apos;re getting a simpler markup because the result is visually identical.  I&apos;ll file a bug to convert it to a dump-as-markup / dump-as-text test first.

The patch looks good to me (other than the commented code left :-)). The markup generated is even better in my opinion. Do you think you can finish the cleanup and land it soon?
You could use that repro case I attached as starting point for the test to be added with the patch.
Also, I don&apos;t think you need to file a separate bug for the test that fails, it simply needs to be re-baselined since the generated markup is different.
Thanks for taking this on!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269332</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 10:35:49 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; The patch looks good to me (other than the commented code left :-)). The markup generated is even better in my opinion. Do you think you can finish the cleanup and land it soon?

Sure.  I&apos;ll file cleanup &amp; conversion bugs today so that someone can review those.  If those two bugs were to be resolved by Thursday, I should be able to fix the bug this week.

&gt; You could use that repro case I attached as starting point for the test to be added with the patch.

Yeah, I need a whole bunch of tests here.

&gt; Also, I don&apos;t think you need to file a separate bug for the test that fails, it simply needs to be re-baselined since the generated markup is different.

Right, but I&apos;d like to convert editing tests to dump-as-text / dump-as-markup slowly because they&apos;re much more readable and have single expected results for all platforms.

&gt; Thanks for taking this on!!

No problem.  After all, it seems like my regression so happy to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269589</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 16:32:57 -0700</bug_when>
    <thetext>I have filed bugs for test conversion and cleanup each with a corresponding patch. As soon as those two patches are landed, I&apos;ll post a patch for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270634</commentid>
    <comment_count>12</comment_count>
      <attachid>65745</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 11:46:00 -0700</bug_when>
    <thetext>Created attachment 65745
work in progress 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270698</commentid>
    <comment_count>13</comment_count>
      <attachid>65758</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 13:23:29 -0700</bug_when>
    <thetext>Created attachment 65758
fixes the bug by pushing down all implicitly styled elements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270701</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 13:24:39 -0700</bug_when>
    <thetext>Attachment 65758 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:16:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:17:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:20:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:21:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 9 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270705</commentid>
    <comment_count>15</comment_count>
      <attachid>65759</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 13:33:15 -0700</bug_when>
    <thetext>Created attachment 65759
fixed change logs and the expected result for push-down-implicit-styles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270719</commentid>
    <comment_count>16</comment_count>
      <attachid>65759</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-08-27 13:52:29 -0700</bug_when>
    <thetext>Comment on attachment 65759
fixed change logs and the expected result for push-down-implicit-styles

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 66198)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,37 @@
&gt; +2010-08-27  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        cannot remove text-decoration when style is added by u or s
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44560
&gt; +
&gt; +        The bug was caused by WebKit not pushing down implicitly added styles to descendent nodes.
&gt; +        Fixed the bug by pushing down all elements that implicitly add style.
&gt; +
&gt; +        extractInlineStyleToPushDown now calls removeImplicitlyStyledElement, which was modified to extract
&gt; +        the style implicitly added by the element to extractStyle.
&gt; +
&gt; +        This revealed a bug in applyInlineStyleToPushDown where applyInlineStyleIfNeeded could add
&gt; +        an implicitly styled element inside an element with a conflicting style, thereby overriding the style of the element.
&gt; +        Fixed this by extending the logic to honor the existing inline style declaration used in
&gt; +        the case of rewriting inline style declaration to all cases including the one calling addInlineStyleIfNeeded.
&gt; +
&gt; +        Also fixed a bug in removeInlineStyle where pushDownInlineStyleAroundNode was called on a text node
&gt; +        outside of selection if start was at the end of the text node.
&gt; +
&gt; +        Test: editing/style/push-down-implicit-styles.html
&gt; +
&gt; +        * editing/ApplyStyleCommand.cpp:
&gt; +        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Added extractedStyle, which receives
&gt; +        the style implicitly added by the element being removed.
&gt; +        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Calls removeImplicitlyStyledElement
&gt; +        to remove the implicitly styled element and extract the inline style added by the element.
&gt; +        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Fixed a bug that addInlineStyleIfNeeded
&gt; +        could override the inline style declaration style of the node.
&gt; +        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Uses extractInlineStyleToPushDown
&gt; +        (WebCore::ApplyStyleCommand::removeInlineStyle): See above.
&gt; +        * editing/ApplyStyleCommand.h: Prototype changes.
&gt; +
&gt;  2010-08-27  Yury Semikhatsky  &lt;yurys@chromium.org&gt;
&gt;  
&gt;          Reviewed by Pavel Feldman.
&gt; Index: WebCore/editing/ApplyStyleCommand.cpp
&gt; ===================================================================
&gt; --- WebCore/editing/ApplyStyleCommand.cpp	(revision 66189)
&gt; +++ WebCore/editing/ApplyStyleCommand.cpp	(working copy)
&gt; @@ -1197,15 +1197,17 @@ static const HTMLEquivalent HTMLEquivale
&gt;      { CSSPropertyDirection, false, CSSValueInvalid, 0, &amp;dirAttr, ShouldNotBePushedDown },
&gt;  };
&gt;  
&gt; -bool ApplyStyleCommand::removeImplicitlyStyledElement(CSSMutableStyleDeclaration* style, HTMLElement* element, InlineStyleRemovalMode mode)
&gt; +bool ApplyStyleCommand::removeImplicitlyStyledElement(CSSMutableStyleDeclaration* style, HTMLElement* element, InlineStyleRemovalMode mode, CSSMutableStyleDeclaration* extractedStyle)
&gt;  {
&gt; +    // Current implementation does not support stylePushedDown when mode == RemoveNone because of early exit.
&gt; +    ASSERT(!extractedStyle || mode != RemoveNone);
&gt;      bool removed = false;
&gt;      for (size_t i = 0; i &lt; sizeof(HTMLEquivalents) / sizeof(HTMLEquivalent); i++) {
&gt;          const HTMLEquivalent&amp; equivalent = HTMLEquivalents[i];
&gt;          ASSERT(equivalent.element || equivalent.attribute);
&gt; -        if (equivalent.element &amp;&amp; !element-&gt;hasTagName(*equivalent.element))
&gt; -            continue;
&gt; -        if (equivalent.attribute &amp;&amp; !element-&gt;hasAttribute(*equivalent.attribute))
&gt; +        if (extractedStyle &amp;&amp; equivalent.pushDownType == ShouldNotBePushedDown
&gt; +            || equivalent.element &amp;&amp; !element-&gt;hasTagName(*equivalent.element)
&gt; +            || equivalent.attribute &amp;&amp; !element-&gt;hasAttribute(*equivalent.attribute))
&gt;              continue;
&gt;  
&gt;          RefPtr&lt;CSSValue&gt; styleValue = style-&gt;getPropertyCSSValue(equivalent.propertyID);
&gt; @@ -1218,6 +1220,14 @@ bool ApplyStyleCommand::removeImplicitly
&gt;          else if (styleValue-&gt;cssText() == mapValue-&gt;cssText())
&gt;              continue; // If CSS value is primitive, then skip if they are equal.
&gt;  
&gt; +        if (extractedStyle) {
&gt; +            ASSERT(equivalent.pushDownType != ShouldNotBePushedDown);

I think the assert above is redundant.
&gt; +            if (equivalent.primitiveId == CSSValueInvalid)
&gt; +                extractedStyle-&gt;setProperty(equivalent.propertyID, element-&gt;getAttribute(*equivalent.attribute));
&gt; +            else
&gt; +                extractedStyle-&gt;setProperty(equivalent.propertyID, mapValue-&gt;cssText());
&gt; +        }
&gt; +
&gt;          if (mode == RemoveNone)
&gt;              return true;
&gt;  
&gt; @@ -1314,7 +1324,7 @@ HTMLElement* ApplyStyleCommand::highestA
&gt;      return result;
&gt;  }
&gt;  
&gt; -PassRefPtr&lt;CSSMutableStyleDeclaration&gt; ApplyStyleCommand::extractInlineStyleToPushDown(Node* node, bool isStyledElement, const Vector&lt;int&gt;&amp; properties)
&gt; +PassRefPtr&lt;CSSMutableStyleDeclaration&gt; ApplyStyleCommand::extractInlineStyleToPushDown(CSSMutableStyleDeclaration* styleToApply, Node* node, bool isStyledElement)
&gt;  {
&gt;      ASSERT(node);
&gt;      ASSERT(node-&gt;isElementNode());
&gt; @@ -1330,8 +1340,16 @@ PassRefPtr&lt;CSSMutableStyleDeclaration&gt; A
&gt;          return style.release();
&gt;      }
&gt;  
&gt; -    if (!style)
&gt; -        return 0;
&gt; +    if (!style) {
&gt; +        style = CSSMutableStyleDeclaration::create();
&gt; +        removeImplicitlyStyledElement(styleToApply, element, RemoveAttributesAndElements, style.get());
&gt; +        return style.release();
&gt; +    }
&gt; +
&gt; +    Vector&lt;int&gt; properties;
&gt; +    CSSMutableStyleDeclaration::const_iterator end = styleToApply-&gt;end();
&gt; +    for (CSSMutableStyleDeclaration::const_iterator it = styleToApply-&gt;begin(); it != end; ++it)
&gt; +        properties.append(it-&gt;id());
&gt;  
&gt;      style = style-&gt;copyPropertiesInSet(properties.data(), properties.size());
&gt;      for (size_t i = 0; i &lt; properties.size(); i++) {
&gt; @@ -1346,6 +1364,8 @@ PassRefPtr&lt;CSSMutableStyleDeclaration&gt; A
&gt;      if (isSpanWithoutAttributesOrUnstyleStyleSpan(element))
&gt;          removeNodePreservingChildren(element);
&gt;  
&gt; +    removeImplicitlyStyledElement(styleToApply, element, RemoveAttributesAndElements, style.get());
&gt; +
&gt;      return style.release();
&gt;  }
&gt;  
&gt; @@ -1356,15 +1376,14 @@ void ApplyStyleCommand::applyInlineStyle
&gt;      if (!style || !style-&gt;length() || !node-&gt;renderer())
&gt;          return;
&gt;  
&gt; -    // Since addInlineStyleIfNeeded can&apos;t add styles to block-flow render objects, add style attribute instead.
&gt; -    // FIXME: applyInlineStyleToRange should be used here instead.
&gt; -    if ((node-&gt;renderer()-&gt;isBlockFlow() || node-&gt;childNodeCount()) &amp;&amp; node-&gt;isHTMLElement()) {
&gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; newInlineStyle = style;
&gt; +    if (node-&gt;isHTMLElement()) {
&gt;          HTMLElement* element = static_cast&lt;HTMLElement*&gt;(node);
&gt;          CSSMutableStyleDeclaration* existingInlineStyle = element-&gt;inlineStyleDecl();
&gt;  
&gt;          // Avoid overriding existing styles of node
&gt;          if (existingInlineStyle) {
&gt; -            RefPtr&lt;CSSMutableStyleDeclaration&gt; newInlineStyle = existingInlineStyle-&gt;copy();
&gt; +            newInlineStyle = existingInlineStyle-&gt;copy();
&gt;              CSSMutableStyleDeclaration::const_iterator end = style-&gt;end();
&gt;              for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it) {
&gt;                  ExceptionCode ec;
&gt; @@ -1391,22 +1410,23 @@ void ApplyStyleCommand::applyInlineStyle
&gt;                      }
&gt;                  }
&gt;              }
&gt; +        }
&gt; +    }
&gt;  
&gt; -            setNodeAttribute(element, styleAttr, newInlineStyle-&gt;cssText());
&gt; -        } else
&gt; -            setNodeAttribute(element, styleAttr, style-&gt;cssText());
&gt; -
&gt; +    // Since addInlineStyleIfNeeded can&apos;t add styles to block-flow render objects, add style attribute instead.
&gt; +    // FIXME: applyInlineStyleToRange should be used here instead.
&gt; +    if ((node-&gt;renderer()-&gt;isBlockFlow() || node-&gt;childNodeCount()) &amp;&amp; node-&gt;isHTMLElement()) {
&gt; +        setNodeAttribute(static_cast&lt;HTMLElement*&gt;(node), styleAttr, newInlineStyle-&gt;cssText());
&gt;          return;
&gt;      }
&gt;  
&gt;      if (node-&gt;renderer()-&gt;isText() &amp;&amp; static_cast&lt;RenderText*&gt;(node-&gt;renderer())-&gt;isAllCollapsibleWhitespace())
&gt;          return;
&gt;  
&gt; -    // FIXME: addInlineStyleIfNeeded may override the style of node
&gt;      // We can&apos;t wrap node with the styled element here because new styled element will never be removed if we did.
&gt;      // If we modified the child pointer in pushDownInlineStyleAroundNode to point to new style element
&gt;      // then we fall into an infinite loop where we keep removing and adding styled element wrapping node.
&gt; -    addInlineStyleIfNeeded(style, node, node, DoNotAddStyledElement);
&gt; +    addInlineStyleIfNeeded(newInlineStyle.get(), node, node, DoNotAddStyledElement);
&gt;  }
&gt;  
&gt;  void ApplyStyleCommand::pushDownInlineStyleAroundNode(CSSMutableStyleDeclaration* style, Node* targetNode)
&gt; @@ -1415,11 +1435,6 @@ void ApplyStyleCommand::pushDownInlineSt
&gt;      if (!highestAncestor)
&gt;          return;
&gt;  
&gt; -    Vector&lt;int&gt; properties;
&gt; -    CSSMutableStyleDeclaration::const_iterator end = style-&gt;end();
&gt; -    for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it)
&gt; -        properties.append(it-&gt;id());
&gt; -
&gt;      // The outer loop is traversing the tree vertically from highestAncestor to targetNode
&gt;      Node* current = highestAncestor;
&gt;      while (current != targetNode) {
&gt; @@ -1431,7 +1446,7 @@ void ApplyStyleCommand::pushDownInlineSt
&gt;          RefPtr&lt;StyledElement&gt; styledElement;
&gt;          if (current-&gt;isStyledElement() &amp;&amp; m_styledInlineElement &amp;&amp; current-&gt;hasTagName(m_styledInlineElement-&gt;tagQName()))
&gt;              styledElement = static_cast&lt;StyledElement*&gt;(current);
&gt; -        RefPtr&lt;CSSMutableStyleDeclaration&gt; styleToPushDown = extractInlineStyleToPushDown(current, styledElement, properties);
&gt; +        RefPtr&lt;CSSMutableStyleDeclaration&gt; styleToPushDown = extractInlineStyleToPushDown(style, current, styledElement);
&gt;  
&gt;          // The inner loop will go through children on each level
&gt;          // FIXME: we should aggregate inline child elements together so that we don&apos;t wrap each child separately.
&gt; @@ -1483,6 +1498,12 @@ void ApplyStyleCommand::removeInlineStyl
&gt;      }
&gt;  
&gt;      Position pushDownStart = start.downstream();
&gt; +    // If the pushDownStart is at the end of a text node, then this node is not fully selected.
&gt; +    // Move it to the next deep quivalent position to avoid removing the style from this node.
&gt; +    // e.g. if pushDownStart was at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;, we want Position(&quot;world&quot;, 0) instead.
&gt; +    Node* pushDownStartContainer = pushDownStart.containerNode();
&gt; +    if (pushDownStartContainer &amp;&amp; pushDownStartContainer-&gt;isTextNode() &amp;&amp; pushDownStart.computeOffsetInContainerNode() == pushDownStartContainer-&gt;maxCharacterOffset())
I would split this over two lines to ease of reading.
&gt; +        pushDownStart = nextVisuallyDistinctCandidate(pushDownStart);
&gt;      Position pushDownEnd = end.upstream();
&gt;      pushDownInlineStyleAroundNode(style.get(), pushDownStart.node());
&gt;      pushDownInlineStyleAroundNode(style.get(), pushDownEnd.node());
&gt; Index: WebCore/editing/ApplyStyleCommand.h
&gt; ===================================================================
&gt; --- WebCore/editing/ApplyStyleCommand.h	(revision 66189)
&gt; +++ WebCore/editing/ApplyStyleCommand.h	(working copy)
&gt; @@ -73,11 +73,11 @@ private:
&gt;      // style-removal helpers
&gt;      bool removeInlineStyleFromElement(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElements);
&gt;      inline bool shouldRemoveInlineStyleFromElement(CSSMutableStyleDeclaration* style, HTMLElement* element) {return removeInlineStyleFromElement(style, element, RemoveNone);}
&gt; -    bool removeImplicitlyStyledElement(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode);
&gt; +    bool removeImplicitlyStyledElement(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode, CSSMutableStyleDeclaration* extractedStyle = 0);
&gt;      void replaceWithSpanOrRemoveIfWithoutAttributes(HTMLElement*&amp;);
&gt;      bool removeCSSStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElements);
&gt;      HTMLElement* highestAncestorWithConflictingInlineStyle(CSSMutableStyleDeclaration*, Node*);
&gt; -    PassRefPtr&lt;CSSMutableStyleDeclaration&gt; extractInlineStyleToPushDown(Node*, bool isStyledElement, const Vector&lt;int&gt;&amp;);
&gt; +    PassRefPtr&lt;CSSMutableStyleDeclaration&gt; extractInlineStyleToPushDown(CSSMutableStyleDeclaration*, Node*, bool isStyledElement);
&gt;      void applyInlineStyleToPushDown(Node*, CSSMutableStyleDeclaration *style);
&gt;      void pushDownInlineStyleAroundNode(CSSMutableStyleDeclaration*, Node*);
&gt;      void removeInlineStyle(PassRefPtr&lt;CSSMutableStyleDeclaration&gt;, const Position&amp; start, const Position&amp; end);
&gt; Index: LayoutTests/ChangeLog
&gt; ===================================================================
&gt; --- LayoutTests/ChangeLog	(revision 66198)
&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; @@ -1,3 +1,25 @@
&gt; +2010-08-27  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        cannot remove text-decoration when style is added by u or s
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44560
&gt; +
&gt; +        Added a test to ensure WebKit removes text-decorations added by u or s
&gt; +        and pushes down implicit styles properly into descendent nodes.
&gt; +
&gt; +        * editing/style/push-down-implicit-styles-expected.txt: Added.
&gt; +        * editing/style/push-down-implicit-styles.html: Added.
&gt; +        * editing/style/script-tests/push-down-implicit-styles.js: Added.
&gt; +        (testSingleToggle):
&gt; +        (selectAll):
&gt; +        (selectTest):
&gt; +        (selectSecondWord):
&gt; +        (selectLastTwoWords):
&gt; +        * editing/style/typing-style-003-expected.txt: Negation of inline
&gt; +        styles are now done by pushing down implicitly styled elements rather than
&gt; +        canceling them by inline style declarations.
&gt; +
&gt;  2010-08-27  Sheriff Bot  &lt;webkit.review.bot@gmail.com&gt;
&gt;  
&gt;          Unreviewed, rolling out r66188.
&gt; Index: LayoutTests/editing/style/push-down-implicit-styles-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/editing/style/push-down-implicit-styles-expected.txt	(revision 0)
&gt; +++ LayoutTests/editing/style/push-down-implicit-styles-expected.txt	(revision 0)
&gt; @@ -0,0 +1,30 @@
&gt; +Test to make sure we push down inline styles properly.
&gt; +
&gt; +On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; +
&gt; +
&gt; +PASS bold on first word of &lt;b&gt;&lt;div&gt;hello&lt;/div&gt; world&lt;/b&gt; yields &lt;div&gt;hello&lt;/div&gt;&lt;b&gt; world&lt;/b&gt;
&gt; +PASS bold on first word of &lt;b&gt;&lt;div&gt;hello&lt;/div&gt;world&lt;/b&gt; yields &lt;div&gt;hello&lt;/div&gt;&lt;b&gt;world&lt;/b&gt;
&gt; +PASS bold on first word of &lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;em&gt;world&lt;/em&gt;&lt;/b&gt; yields &lt;div&gt;hello&lt;/div&gt;&lt;em style=&quot;font-weight: bold; &quot;&gt;world&lt;/em&gt;
&gt; +PASS bold on second word of &lt;b&gt;hello &lt;div&gt;world&lt;/div&gt;&lt;/b&gt; yields &lt;b&gt;hello &lt;/b&gt;&lt;div&gt;world&lt;/div&gt;
&gt; +PASS bold on second word of &lt;b&gt;&lt;em&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;&lt;/b&gt; yields &lt;em style=&quot;font-weight: bold; &quot;&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;
&gt; +PASS bold on all of &lt;b&gt; &lt;div&gt;text&lt;/div&gt; &lt;/b&gt; yields  &lt;div&gt;text&lt;/div&gt; 
&gt; +PASS bold on all of &lt;b&gt;&lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;&lt;/b&gt; yields &lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;
&gt; +PASS bold on first word of &lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/b&gt; yields &lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: bold; &quot;&gt;world&lt;/div&gt;
&gt; +PASS bold on first word of &lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal;&quot;&gt;world&lt;/div&gt;webkit&lt;/b&gt; yields &lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal; &quot;&gt;world&lt;/div&gt;&lt;b&gt;webkit&lt;/b&gt;
&gt; +PASS bold on second word of &lt;b style=&quot;font-style: italic;&quot;&gt;hello world&lt;/b&gt; yields &lt;b style=&quot;font-style: italic;&quot;&gt;hello&lt;/b&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; world&lt;/span&gt;
&gt; +PASS underline on second word of &lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt; yields &lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;
&gt; +PASS underline on last two words of &lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt; yields &lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world&lt;/b&gt; webkit
&gt; +PASS underline on last two words of &lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt; yields &lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world webkit&lt;/b&gt;
&gt; +PASS underline on second word of &lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt; yields &lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/b&gt;
&gt; +PASS underline on second word of &lt;u&gt;&lt;b&gt;hello world&lt;/b&gt; webkit&lt;/u&gt; yields &lt;b&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;
&gt; +PASS underline on second word of &lt;u&gt;&lt;s&gt;hello world&lt;/s&gt;&lt;/u&gt; yields &lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;
&gt; +PASS underline on second word of &lt;u&gt;&lt;s&gt;hello world webkit&lt;/s&gt;&lt;/u&gt; yields &lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;u&gt; webkit&lt;/u&gt;&lt;/s&gt;
&gt; +PASS underline on second word of &lt;u&gt;&lt;s&gt;hello world&lt;/s&gt; webkit&lt;/u&gt; yields &lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;&lt;u&gt; webkit&lt;/u&gt;
&gt; +PASS underline on second word of &lt;u&gt;hello &lt;em&gt;&lt;code&gt;world webkit&lt;/code&gt;&lt;/em&gt; rocks&lt;/u&gt; yields &lt;u&gt;hello&lt;/u&gt; &lt;em&gt;&lt;code&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/code&gt;&lt;/em&gt;&lt;u&gt; rocks&lt;/u&gt;
&gt; +PASS strikeThrough on all of &lt;s style=&quot;color: blue;&quot;&gt;hello world&lt;/s&gt; yields &lt;span style=&quot;color: blue;&quot;&gt;hello world&lt;/span&gt;
&gt; +PASS strikeThrough on first word of &lt;s style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b&gt;world&lt;/b&gt; webkit&lt;/s&gt; yields &lt;span style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b style=&quot;text-decoration: line-through; &quot;&gt;world&lt;/b&gt;&lt;s&gt; webkit&lt;/s&gt;&lt;/span&gt;
&gt; +PASS successfullyParsed is true
&gt; +
&gt; +TEST COMPLETE
&gt; +
&gt; Index: LayoutTests/editing/style/push-down-implicit-styles.html
&gt; ===================================================================
&gt; --- LayoutTests/editing/style/push-down-implicit-styles.html	(revision 0)
&gt; +++ LayoutTests/editing/style/push-down-implicit-styles.html	(revision 0)
&gt; @@ -0,0 +1,13 @@
&gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
&gt; +&lt;html&gt;
&gt; +&lt;head&gt;
&gt; +&lt;link rel=&quot;stylesheet&quot; href=&quot;../../fast/js/resources/js-test-style.css&quot;&gt;
&gt; +&lt;script src=&quot;../../fast/js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
&gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt; +&lt;script src=&quot;script-tests/push-down-implicit-styles.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;script src=&quot;../../fast/js/resources/js-test-post.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/body&gt;
&gt; +&lt;/html&gt;
&gt; Index: LayoutTests/editing/style/typing-style-003-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/editing/style/typing-style-003-expected.txt	(revision 66189)
&gt; +++ LayoutTests/editing/style/typing-style-003-expected.txt	(working copy)
&gt; @@ -31,23 +31,23 @@ EDITING DELEGATE: shouldChangeSelectedDO
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 2 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 2 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 3 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 3 of #text &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 3 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document to 3 of #text &gt; I &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 2 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 1 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 2 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt; -EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 3 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 3 of #text &gt; SPAN &gt; SPAN &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt; +EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 2 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 3 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 3 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
&gt;  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
&gt;  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
&gt;  xxxxxxxxxxxxxxx
&gt; @@ -63,10 +63,10 @@ execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;x&lt;
&gt;  execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt;  execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt;  execBoldCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;x&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execItalicCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;xx&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;x&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execItalicCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;x&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;xx&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;xxx&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
I assume the result is visually equivalent. Correct?
&gt; Index: LayoutTests/editing/style/script-tests/push-down-implicit-styles.js
&gt; ===================================================================
&gt; --- LayoutTests/editing/style/script-tests/push-down-implicit-styles.js	(revision 0)
&gt; +++ LayoutTests/editing/style/script-tests/push-down-implicit-styles.js	(revision 0)
&gt; @@ -0,0 +1,76 @@
&gt; +description(&apos;Test to make sure we push down inline styles properly.&apos;);
&gt; +
&gt; +var testContainer = document.createElement(&quot;div&quot;);
&gt; +testContainer.contentEditable = true;
&gt; +document.body.appendChild(testContainer);
&gt; +
&gt; +function testSingleToggle(toggleCommand, selector, initialContents, expectedContents)
&gt; +{
&gt; +    testContainer.innerHTML = initialContents;
&gt; +    var selected = selector(testContainer);
&gt; +    document.execCommand(&apos;styleWithCSS&apos;, false, &apos;false&apos;);
&gt; +    document.execCommand(toggleCommand, false, null);
&gt; +    var action = toggleCommand + &apos; on &apos; + selected + &apos; of &apos; + initialContents + &quot; yields &quot; + testContainer.innerHTML;
&gt; +    if (testContainer.innerHTML == expectedContents)
&gt; +        testPassed(action);
&gt; +    else
&gt; +        testFailed(action + &quot;, expected &quot; + expectedContents);
&gt; +}
&gt; +
&gt; +function selectAll(container) {
&gt; +    window.getSelection().selectAllChildren(container);
&gt; +    return &apos;all&apos;;
&gt; +}
&gt; +
&gt; +function selectTest(container) {
&gt; +    window.getSelection().selectAllChildren(document.getElementById(&apos;test&apos;));
&gt; +    return &apos;test&apos;;
&gt; +}
&gt; +
&gt; +function selectFirstWord(container) {
&gt; +    window.getSelection().setPosition(container, 0);
&gt; +    window.getSelection().modify(&apos;extend&apos;, &apos;forward&apos;, &apos;word&apos;);
&gt; +    return &apos;first word&apos;;
&gt; +}
&gt; +
&gt; +function selectSecondWord(container) {
&gt; +    window.getSelection().setPosition(container, 0);
&gt; +    window.getSelection().modify(&apos;move&apos;, &apos;forward&apos;, &apos;word&apos;);
&gt; +    window.getSelection().modify(&apos;extend&apos;, &apos;forward&apos;, &apos;word&apos;);
&gt; +    return &apos;second word&apos;;
&gt; +}
&gt; +
&gt; +function selectLastTwoWords(container) {
&gt; +    window.getSelection().setPosition(container, container.childNodes.length);
&gt; +    window.getSelection().modify(&apos;extend&apos;, &apos;backward&apos;, &apos;word&apos;);
&gt; +    window.getSelection().modify(&apos;extend&apos;, &apos;backward&apos;, &apos;word&apos;);
&gt; +    return &apos;last two words&apos;;
&gt; +}
&gt; +
&gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt; world&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;b&gt; world&lt;/b&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;world&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;b&gt;world&lt;/b&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;em&gt;world&lt;/em&gt;&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;em style=&quot;font-weight: bold; &quot;&gt;world&lt;/em&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b&gt;hello &lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;b&gt;hello &lt;/b&gt;&lt;div&gt;world&lt;/div&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b&gt;&lt;em&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;em style=&quot;font-weight: bold; &quot;&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectAll, &apos;&lt;b&gt; &lt;div&gt;text&lt;/div&gt; &lt;/b&gt;&apos;, &apos; &lt;div&gt;text&lt;/div&gt; &apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectAll, &apos;&lt;b&gt;&lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;&lt;/b&gt;&apos;, &apos;&lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: bold; &quot;&gt;world&lt;/div&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal;&quot;&gt;world&lt;/div&gt;webkit&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal; &quot;&gt;world&lt;/div&gt;&lt;b&gt;webkit&lt;/b&gt;&apos;);
&gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b style=&quot;font-style: italic;&quot;&gt;hello world&lt;/b&gt;&apos;, &apos;&lt;b style=&quot;font-style: italic;&quot;&gt;hello&lt;/b&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; world&lt;/span&gt;&apos;);
&gt; +
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectLastTwoWords, &apos;&lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world&lt;/b&gt; webkit&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectLastTwoWords, &apos;&lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world webkit&lt;/b&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/b&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;b&gt;hello world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;b&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world&lt;/s&gt;&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world webkit&lt;/s&gt;&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;u&gt; webkit&lt;/u&gt;&lt;/s&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world&lt;/s&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;em&gt;&lt;code&gt;world webkit&lt;/code&gt;&lt;/em&gt; rocks&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;em&gt;&lt;code&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/code&gt;&lt;/em&gt;&lt;u&gt; rocks&lt;/u&gt;&apos;);
&gt; +
&gt; +testSingleToggle(&quot;strikeThrough&quot;, selectAll, &apos;&lt;s style=&quot;color: blue;&quot;&gt;hello world&lt;/s&gt;&apos;, &apos;&lt;span style=&quot;color: blue;&quot;&gt;hello world&lt;/span&gt;&apos;);
&gt; +testSingleToggle(&quot;strikeThrough&quot;, selectFirstWord, &apos;&lt;s style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b&gt;world&lt;/b&gt; webkit&lt;/s&gt;&apos;, &apos;&lt;span style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b style=&quot;text-decoration: line-through; &quot;&gt;world&lt;/b&gt;&lt;s&gt; webkit&lt;/s&gt;&lt;/span&gt;&apos;);
&gt; +
&gt; +document.body.removeChild(testContainer);
&gt; +
&gt; +var successfullyParsed = true;

The change looks good and there is a lot more testing now :-)!
My comments are just nit picks.
Thanks for working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270735</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 14:07:30 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; -bool ApplyStyleCommand::removeImplicitlyStyledElement(CSSMutableStyleDeclaration* style, HTMLElement* element, InlineStyleRemovalMode mode)
&gt; &gt; +bool ApplyStyleCommand::removeImplicitlyStyledElement(CSSMutableStyleDeclaration* style, HTMLElement* element, InlineStyleRemovalMode mode, CSSMutableStyleDeclaration* extractedStyle)
&gt; &gt;  {
&gt; &gt; +    // Current implementation does not support stylePushedDown when mode == RemoveNone because of early exit.
&gt; &gt; +    ASSERT(!extractedStyle || mode != RemoveNone);
&gt; &gt;      bool removed = false;
&gt; &gt;      for (size_t i = 0; i &lt; sizeof(HTMLEquivalents) / sizeof(HTMLEquivalent); i++) {
&gt; &gt;          const HTMLEquivalent&amp; equivalent = HTMLEquivalents[i];
&gt; &gt;          ASSERT(equivalent.element || equivalent.attribute);
&gt; &gt; -        if (equivalent.element &amp;&amp; !element-&gt;hasTagName(*equivalent.element))
&gt; &gt; -            continue;
&gt; &gt; -        if (equivalent.attribute &amp;&amp; !element-&gt;hasAttribute(*equivalent.attribute))
&gt; &gt; +        if (extractedStyle &amp;&amp; equivalent.pushDownType == ShouldNotBePushedDown
&gt; &gt; +            || equivalent.element &amp;&amp; !element-&gt;hasTagName(*equivalent.element)
&gt; &gt; +            || equivalent.attribute &amp;&amp; !element-&gt;hasAttribute(*equivalent.attribute))
&gt; &gt;              continue;
&gt; &gt;  
&gt; &gt;          RefPtr&lt;CSSValue&gt; styleValue = style-&gt;getPropertyCSSValue(equivalent.propertyID);
&gt; &gt; @@ -1218,6 +1220,14 @@ bool ApplyStyleCommand::removeImplicitly
&gt; &gt;          else if (styleValue-&gt;cssText() == mapValue-&gt;cssText())
&gt; &gt;              continue; // If CSS value is primitive, then skip if they are equal.
&gt; &gt;  
&gt; &gt; +        if (extractedStyle) {
&gt; &gt; +            ASSERT(equivalent.pushDownType != ShouldNotBePushedDown);
&gt; 
&gt; I think the assert above is redundant.

Ok, I wanted to signify the fact above continue is required for this block because I was afraid that this condition wasn&apos;t clear from the content.  But I can remove if you think it&apos;s self-evident.

&gt; &gt;      Position pushDownStart = start.downstream();
&gt; &gt; +    // If the pushDownStart is at the end of a text node, then this node is not fully selected.
&gt; &gt; +    // Move it to the next deep quivalent position to avoid removing the style from this node.
&gt; &gt; +    // e.g. if pushDownStart was at Position(&quot;hello&quot;, 5) in &lt;b&gt;hello&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;, we want Position(&quot;world&quot;, 0) instead.
&gt; &gt; +    Node* pushDownStartContainer = pushDownStart.containerNode();
&gt; &gt; +    if (pushDownStartContainer &amp;&amp; pushDownStartContainer-&gt;isTextNode() &amp;&amp; pushDownStart.computeOffsetInContainerNode() == pushDownStartContainer-&gt;maxCharacterOffset())
&gt; I would split this over two lines to ease of reading.

Will do.

&gt; &gt;  xxxxxxxxxxxxxxx
&gt; &gt; @@ -63,10 +63,10 @@ execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;x&lt;
&gt; &gt;  execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt;  execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt;  execBoldCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;x&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execItalicCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;xx&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; -execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;x&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execItalicCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;x&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;xx&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; &gt; +execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;xxx&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
&gt; I assume the result is visually equivalent. Correct?

Yes.  Notice that the test result isn&apos;t unchanged until the line:
execBoldCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;

Here, we&apos;re removing the bold from the typing style.  We then type xxx, we should put that xxx outside of b so we have:
execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
instead of
execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;

Now, after typing xxx, we remove the italic from the typing style as well to get:
execItalicCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;
Typing xxx here gives:
execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;/b&gt;&lt;i&gt;&lt;b&gt;xxx&lt;/b&gt;xxx&lt;/i&gt;xxx&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;

which is visually identical to
execTypeCharacterCommand: xxx&lt;b&gt;xxx&lt;i&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;xxx&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: normal;&quot;&gt;xxx&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span id=&quot;test&quot;&gt;&lt;/span&gt;

IMHO, the new expected result looks nicer.

&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt; world&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;b&gt; world&lt;/b&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;world&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;b&gt;world&lt;/b&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;em&gt;world&lt;/em&gt;&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;em style=&quot;font-weight: bold; &quot;&gt;world&lt;/em&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b&gt;hello &lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;b&gt;hello &lt;/b&gt;&lt;div&gt;world&lt;/div&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b&gt;&lt;em&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;em style=&quot;font-weight: bold; &quot;&gt;hello&lt;/em&gt; &lt;div&gt;world&lt;/div&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectAll, &apos;&lt;b&gt; &lt;div&gt;text&lt;/div&gt; &lt;/b&gt;&apos;, &apos; &lt;div&gt;text&lt;/div&gt; &apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectAll, &apos;&lt;b&gt;&lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;&lt;/b&gt;&apos;, &apos;&lt;s&gt;&lt;div&gt;text&lt;/div&gt;&lt;/s&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: bold; &quot;&gt;world&lt;/div&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectFirstWord, &apos;&lt;b&gt;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal;&quot;&gt;world&lt;/div&gt;webkit&lt;/b&gt;&apos;, &apos;&lt;div&gt;hello&lt;/div&gt;&lt;div style=&quot;font-weight: normal; &quot;&gt;world&lt;/div&gt;&lt;b&gt;webkit&lt;/b&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;bold&quot;, selectSecondWord, &apos;&lt;b style=&quot;font-style: italic;&quot;&gt;hello world&lt;/b&gt;&apos;, &apos;&lt;b style=&quot;font-style: italic;&quot;&gt;hello&lt;/b&gt;&lt;span style=&quot;font-style: italic;&quot;&gt; world&lt;/span&gt;&apos;);
&gt; &gt; +
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectLastTwoWords, &apos;&lt;u&gt;hello &lt;b&gt;world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world&lt;/b&gt; webkit&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectLastTwoWords, &apos;&lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello &lt;/u&gt;&lt;b&gt;world webkit&lt;/b&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;b&gt;world webkit&lt;/b&gt;&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;b&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/b&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;b&gt;hello world&lt;/b&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;b&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/b&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world&lt;/s&gt;&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world webkit&lt;/s&gt;&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;u&gt; webkit&lt;/u&gt;&lt;/s&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;&lt;s&gt;hello world&lt;/s&gt; webkit&lt;/u&gt;&apos;, &apos;&lt;s&gt;&lt;u&gt;hello&lt;/u&gt; world&lt;/s&gt;&lt;u&gt; webkit&lt;/u&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;underline&quot;, selectSecondWord, &apos;&lt;u&gt;hello &lt;em&gt;&lt;code&gt;world webkit&lt;/code&gt;&lt;/em&gt; rocks&lt;/u&gt;&apos;, &apos;&lt;u&gt;hello&lt;/u&gt; &lt;em&gt;&lt;code&gt;world&lt;u&gt; webkit&lt;/u&gt;&lt;/code&gt;&lt;/em&gt;&lt;u&gt; rocks&lt;/u&gt;&apos;);
&gt; &gt; +
&gt; &gt; +testSingleToggle(&quot;strikeThrough&quot;, selectAll, &apos;&lt;s style=&quot;color: blue;&quot;&gt;hello world&lt;/s&gt;&apos;, &apos;&lt;span style=&quot;color: blue;&quot;&gt;hello world&lt;/span&gt;&apos;);
&gt; &gt; +testSingleToggle(&quot;strikeThrough&quot;, selectFirstWord, &apos;&lt;s style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b&gt;world&lt;/b&gt; webkit&lt;/s&gt;&apos;, &apos;&lt;span style=&quot;color: blue;&quot;&gt;&lt;div&gt;hello&lt;/div&gt; &lt;b style=&quot;text-decoration: line-through; &quot;&gt;world&lt;/b&gt;&lt;s&gt; webkit&lt;/s&gt;&lt;/span&gt;&apos;);
&gt; &gt; +
&gt; &gt; +document.body.removeChild(testContainer);
&gt; &gt; +
&gt; &gt; +var successfullyParsed = true;
&gt; 
&gt; The change looks good and there is a lot more testing now :-)!
&gt; My comments are just nit picks.
&gt; Thanks for working on this.

Thanks for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270738</commentid>
    <comment_count>18</comment_count>
      <attachid>65765</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 14:13:01 -0700</bug_when>
    <thetext>Created attachment 65765
fixed per enrica&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271114</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-28 21:43:50 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/66324.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65338</attachid>
            <date>2010-08-24 15:58:22 -0700</date>
            <delta_ts>2010-08-24 15:58:22 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>toggle-text-decorations-2.html</filename>
            <type>text/html</type>
            <size>414</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgo8aHRtbD4KPGhl
YWQ+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY29udGVudGVkaXRhYmxlPSd0cnVlJyBpZD0ndGVzdCc+
Cjx1PnVuZGVybGluZTxiPnVuZGVybGluZSBhbmQgYm9sZDwvYj51bmRlcmxpbmU8L3U+CjwvZGl2
Pgo8c2NyaXB0Pgp2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwp2YXIgbXlub2RlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKS5jaGlsZHJlbigwKS5jaGlsZHJlbigwKTsK
c2VsLnNldEJhc2VBbmRFeHRlbnQobXlub2RlLmZpcnN0Q2hpbGQsIDEwLCBteW5vZGUuZmlyc3RD
aGlsZCwgMTMpOwpkb2N1bWVudC5leGVjQ29tbWFuZCgndW5kZXJsaW5lJyk7Cjwvc2NyaXB0Pgo8
L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65383</attachid>
            <date>2010-08-25 01:13:41 -0700</date>
            <delta_ts>2010-08-27 11:45:57 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-44560-20100825011339.patch</filename>
            <type>text/plain</type>
            <size>21030</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTk5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgVE8gQkUgV1JJVFRFTiAoT09QUyEpCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlTm9kZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFJlbW92
ZVRleHREZWNvcmF0aW9uVGFnKTogUmV0dXJucyB0cnVlIHRleHQgZGVjb3JhdGlvbiBpcyBub25l
LgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KTogQ2FsbHMgcmVtb3ZlSW1wbGljaXRs
eVN0eWxlZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24pOiBDYWxscyByZW1vdmVJbXBs
aWNpdGx5U3R5bGVkRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6IFBhc3NlcyBzdHlsZSBpbnN0ZWFkIG9m
IHByb3BlcnRpZXMgdG8gZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bi4KKyAgICAgICAgKiBl
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisKIDIwMTAtMDgtMjUgIFBhdHJpY2sgR2Fuc3Rl
cmVyICA8cGFyb2dhQHBhcm9nYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jl
bi4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjU5
NTApCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTcsNyArMzE3LDEyIEBAIHN0YXRpYyBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0
IE5vZGUgKm4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1hcC0+aXNFbXB0eSgp
IHx8IChtYXAtPmxlbmd0aCgpID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikg
PT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiB9Ci0KKyAgICAKK3N0YXRpYyBib29sIGlzU3Bh
bldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlTm9kZShjb25zdCBOb2RlKiBub2RlKQor
eworICAgIHJldHVybiBpc0VtcHR5Rm9udFRhZyhub2RlKSB8fCBpc1NwYW5XaXRob3V0QXR0cmli
dXRlc09yVW5zdHlsZVN0eWxlU3Bhbihub2RlKTsKK30KKyAgICAKIHN0YXRpYyBQYXNzUmVmUHRy
PEVsZW1lbnQ+IGNyZWF0ZUZvbnRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBS
ZWZQdHI8RWxlbWVudD4gZm9udE5vZGUgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCwgZm9u
dFRhZyk7CkBAIC0xMTE5LDIyICsxMTI0LDQzIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNo
b3VsZFJlbW92ZVRleHQKIHsKICAgICAvLyBIb25vciB0ZXh0LWRlY29yYXRpb25zLWluLWVmZmVj
dAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb25zVG9BcHBseSA9IHN0eWxlVG9B
cHBseS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0KTsKLSAgICBpZiAoIXRleHREZWNvcmF0aW9uc1RvQXBwbHkgfHwgIXRleHREZWNv
cmF0aW9uc1RvQXBwbHktPmlzVmFsdWVMaXN0KCkpCisgICAgaWYgKCF0ZXh0RGVjb3JhdGlvbnNU
b0FwcGx5KQogICAgICAgICB0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5ID0gc3R5bGVUb0FwcGx5LT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwogCi0gICAgLy8g
V2hlbiB0aGVyZSBpcyBubyB0ZXh0IGRlY29yYXRpb25zIHRvIGFwcGx5LCByZW1vdmUgYW55IG9u
ZSBvZiB1LCBzLCAmIHN0cmlrZQotICAgIGlmICghdGV4dERlY29yYXRpb25zVG9BcHBseSB8fCAh
dGV4dERlY29yYXRpb25zVG9BcHBseS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAvLyBEb24ndCByZW1v
dmUgaWYgdGhlcmUncyBubyB0ZXh0IGRlY29yYXRpb25zIHNwZWNpZmllZC4KKyAgICBpZiAoIXRl
eHREZWNvcmF0aW9uc1RvQXBwbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgaWYgKCF0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5LT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAg
IEFTU0VSVCh0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0ZXh0RGVjb3JhdGlv
bnNUb0FwcGx5LmdldCgpKS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICAvLyBSZW1vdmUgbm9kZSBpZiBpdCBpbXBsaWNpdGx5
IGFkZHMgc3R5bGUgbm90IHByZXNlbnQgaW4gc3R5bGVUb0FwcGx5CiAgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih0ZXh0RGVjb3JhdGlvbnNU
b0FwcGx5LmdldCgpKTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodGV4dERlY29yYXRpb25BZGRlZEJ5VGFn
KTsKICAgICByZXR1cm4gIXZhbHVlTGlzdC0+aGFzVmFsdWUodmFsdWUuZ2V0KCkpOwogfQorLyoK
K3N0YXRpYyBDU1NQcm9wZXJ0eSBDU1NQcm9wZXJ0eUZyb21JbXBsaWNpdGx5U3R5bGVkRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGJUYWcp
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoc3Ryb25nVGFnKSkKKyAgICAgICAgcmV0dXJuIENTU1By
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoQ1NTVmFsdWVCb2xkKSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoc3Vi
VGFnKSkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5KENTU1Byb3BlcnR5VmVydGljYWxBbGln
biwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTdWIpKTsKKyAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShzdXBUYWcpKQorICAgICAgICByZXR1cm4gQ1NTUHJv
cGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
SWRlbnRpZmllcihDU1NWYWx1ZVN1YikpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlU
YWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZW1UYWcpKQorICAgICAgICByZXR1cm4gQ1NTUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlSXRhbGljKSk7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodVRh
ZykpCisgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVVuZGVybGluZSkp
OworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoc3RyaWtlVGFnKSkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5KENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24sIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVl
TGluZVRocm91Z2gpKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlk
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpKTsK
K30KIAotLy8gVGhpcyBmdW5jdGlvbiBtYXBzIGZyb20gc3R5bGluZyB0YWdzIHRvIENTUyBzdHls
ZXMuICBVc2VkIGZvciBrbm93aW5nIHdoaWNoCi0vLyBzdHlsaW5nIHRhZ3Mgc2hvdWxkIGJlIHJl
bW92ZWQgd2hlbiB0b2dnbGluZyBzdHlsZXMuCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjppbXBs
aWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKEhUTUxF
bGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCitzdGF0aWMg
Ym9vbCBvbGRJbXBsKEhUTUxFbGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCiB7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKQEAgLTExNDIsMjQgKzExNjgsMjQgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aW1wbGlj
aXRseVN0eWxlZAogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgcmUt
d3JpdHRlbiB0byBsb29rdXAgdGhlIHRhZ25hbWUgaW4gYQogICAgICAgICAvLyBoYXNoIGFuZCBt
YXRjaCBhZ2FpbnN0IGFuIGV4cGVjdGVkIHByb3BlcnR5L3ZhbHVlIHBhaXIuCiAgICAgICAgIHN3
aXRjaCAocHJvcGVydHkuaWQoKSkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdo
dDoKLSAgICAgICAgICAgIC8vIElFIGluc2VydHMgInN0cm9uZyIgdGFncyBmb3IgZXhlY0NvbW1h
bmQoImJvbGQiKSwgc28gd2UgcmVtb3ZlIHRoZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0
cmljdGx5IHByZXNlbnRhdGlvbmFsCi0gICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1l
KGJUYWcpIHx8IGVsZW0tPmhhc0xvY2FsTmFtZShzdHJvbmdUYWcpKQotICAgICAgICAgICAgICAg
IHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpLCAi
Ym9sZCIpIHx8ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246Ci0gICAgICAgICAgICBpZiAoZWxl
bS0+aGFzTG9jYWxOYW1lKHN1YlRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuICFlcXVhbEln
bm9yaW5nQ2FzZShwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCksICJzdWIiKSB8fCAhZWxlbS0+
aGFzQ2hpbGROb2RlcygpOwotICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShzdXBU
YWcpKQotICAgICAgICAgICAgICAgIHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHku
dmFsdWUoKS0+Y3NzVGV4dCgpLCAic3VwIikgfHwgIWVsZW0tPmhhc0NoaWxkTm9kZXMoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgotICAg
ICAgICAgICAgLy8gSUUgaW5zZXJ0cyAiZW0iIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJpdGFsaWMi
KSwgc28gd2UgcmVtb3ZlIHRoZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0cmljdGx5IHBy
ZXNlbnRhdGlvbmFsCi0gICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKGlUYWcpIHx8
IGVsZW0tPmhhc0xvY2FsTmFtZShlbVRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuICFlcXVh
bElnbm9yaW5nQ2FzZShwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCksICJpdGFsaWMiKSB8fCAh
ZWxlbS0+aGFzQ2hpbGROb2RlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgorICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQ6CisgICAgICAgICAgICAgICAgLy8gSUUgaW5zZXJ0cyAic3Ryb25nIiB0YWdzIGZv
ciBleGVjQ29tbWFuZCgiYm9sZCIpLCBzbyB3ZSByZW1vdmUgdGhlbSwgZXZlbiB0aG91Z2ggdGhl
eSdyZSBub3Qgc3RyaWN0bHkgcHJlc2VudGF0aW9uYWwKKyAgICAgICAgICAgICAgICBpZiAoZWxl
bS0+aGFzTG9jYWxOYW1lKGJUYWcpIHx8IGVsZW0tPmhhc0xvY2FsTmFtZShzdHJvbmdUYWcpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5LnZh
bHVlKCktPmNzc1RleHQoKSwgImJvbGQiKSB8fCAhZWxlbS0+aGFzQ2hpbGROb2RlcygpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2Fs
QWxpZ246CisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShzdWJUYWcpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5LnZh
bHVlKCktPmNzc1RleHQoKSwgInN1YiIpIHx8ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7CisgICAg
ICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShzdXBUYWcpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5LnZhbHVlKCktPmNzc1Rl
eHQoKSwgInN1cCIpIHx8ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgorICAgICAgICAg
ICAgICAgIC8vIElFIGluc2VydHMgImVtIiB0YWdzIGZvciBleGVjQ29tbWFuZCgiaXRhbGljIiks
IHNvIHdlIHJlbW92ZSB0aGVtLCBldmVuIHRob3VnaCB0aGV5J3JlIG5vdCBzdHJpY3RseSBwcmVz
ZW50YXRpb25hbAorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoaVRhZykg
fHwgZWxlbS0+aGFzTG9jYWxOYW1lKGVtVGFnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICFlcXVhbElnbm9yaW5nQ2FzZShwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCksICJpdGFsaWMi
KSB8fCAhZWxlbS0+aGFzQ2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgorICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgogICAgICAgICAgICAg
ICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUodVRhZykpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzaG91bGRSZW1vdmVUZXh0RGVjb3JhdGlvblRhZyhzdHlsZSwgQ1NTVmFsdWVVbmRlcmxp
bmUpIHx8ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
ZWxlbS0+aGFzTG9jYWxOYW1lKHNUYWcpIHx8IGVsZW0tPmhhc1RhZ05hbWUoc3RyaWtlVGFnKSkK
QEAgLTExNjgsMzUgKzExOTQsNjUgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aW1wbGljaXRs
eVN0eWxlZAogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CisqLworCitlbnVtIEVQdXNoRG93
blR5cGUge1Nob3VsZEJlUHVzaGVkRG93biwgU2hvdWxkTm90QmVQdXNoZWREb3duIH07CitjbGFz
cyBDU1NQcm9wZXJ0eUVsZW1lbnRDb3JyZXNwb25kYW5jZSB7CitwdWJsaWM6CisgICAgaW50IHBy
b3BlcnR5SUQ7CisgICAgYm9vbCBpc1ZhbHVlTGlzdDsKKyAgICBpbnQgcHJpbWl0aXZlSWQ7Cisg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSogZWxlbWVudDsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1l
KiBhdHRyaWJ1dGU7CisgICAgRVB1c2hEb3duVHlwZSBwdXNoRG93blR5cGU7Cit9OworCitzdGF0
aWMgY29uc3QgQ1NTUHJvcGVydHlFbGVtZW50Q29ycmVzcG9uZGFuY2UgQ1NTUHJvcGVydHlFbGVt
ZW50TWFwcGluZ1tdID0geworICAgIHtDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZhbHNlLCBDU1NW
YWx1ZUJvbGQsICZiVGFnLCAwLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQsIGZhbHNlLCBDU1NWYWx1ZUJvbGQsICZzdHJvbmdUYWcsIDAsIFNob3VsZEJl
UHVzaGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5VmVydGljYWxBbGlnbiwgZmFsc2UsIENTU1Zh
bHVlU3ViLCAmc3ViVGFnLCAwLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0
eVZlcnRpY2FsQWxpZ24sIGZhbHNlLCBDU1NWYWx1ZVN1cGVyLCAmc3VwVGFnLCAwLCBTaG91bGRC
ZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZmFsc2UsIENTU1ZhbHVl
SXRhbGljLCAmaVRhZywgMCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKyAgICB7Q1NTUHJvcGVydHlG
b250U3R5bGUsIGZhbHNlLCBDU1NWYWx1ZUl0YWxpYywgJmVtVGFnLCAwLCBTaG91bGRCZVB1c2hl
ZERvd259LAorCisgICAgLy8gdGV4dC1kZWNvcmF0aW9ucyBzaG91bGQgYmUgQ1NTVmFsdWVMaXN0
CisgICAge0NTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHRydWUsIENTU1ZhbHVlVW5kZXJsaW5l
LCAmdVRhZywgMCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKyAgICB7Q1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbiwgdHJ1ZSwgQ1NTVmFsdWVMaW5lVGhyb3VnaCwgJnNUYWcsIDAsIFNob3VsZEJlUHVz
aGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHRydWUsIENTU1ZhbHVl
TGluZVRocm91Z2gsICZzdHJpa2VUYWcsIDAsIFNob3VsZEJlUHVzaGVkRG93bn0sCisgICAge0NT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIHRydWUsIENTU1ZhbHVlVW5k
ZXJsaW5lLCAmdVRhZywgMCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKyAgICB7Q1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdHJ1ZSwgQ1NTVmFsdWVMaW5lVGhyb3VnaCwg
JnNUYWcsIDAsIFNob3VsZEJlUHVzaGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QsIHRydWUsIENTU1ZhbHVlTGluZVRocm91Z2gsICZzdHJpa2VU
YWcsIDAsIFNob3VsZEJlUHVzaGVkRG93bn0sCisKKyAgICAvLyBGSVhNRTogZm9udCBhdHRyaWJ1
dGVzIHNob3VsZCBvbmx5IGJlIHJlbW92ZWQgaWYgdmFsdWVzIHdlcmUgZGlmZmVyZW50CisgICAg
e0NTU1Byb3BlcnR5Q29sb3IsIGZhbHNlLCBDU1NWYWx1ZUludmFsaWQsICZmb250VGFnLCAmY29s
b3JBdHRyLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eUZvbnRGYW1pbHks
IGZhbHNlLCBDU1NWYWx1ZUludmFsaWQsICZmb250VGFnLCAmZmFjZUF0dHIsIFNob3VsZEJlUHVz
aGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5Rm9udFNpemUsIGZhbHNlLCBDU1NWYWx1ZUludmFs
aWQsICZmb250VGFnLCAmc2l6ZUF0dHIsIFNob3VsZEJlUHVzaGVkRG93bn0sCisKKyAgICAvLyB1
bmljb2RlLWJpZGkgYW5kIGRpcmVjdGlvbiBhcmUgcHVzaGVkIGRvd24gc2VwYXJhdGVseSBzbyBk
b24ndCBwdXNoIGRvd24gd2l0aCBvdGhlciBzdHlsZXMuCisgICAge0NTU1Byb3BlcnR5VW5pY29k
ZUJpZGksIGZhbHNlLCBDU1NWYWx1ZUludmFsaWQsIDAsICZkaXJBdHRyLCBTaG91bGROb3RCZVB1
c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eURpcmVjdGlvbiwgZmFsc2UsIENTU1ZhbHVlSW52
YWxpZCwgMCwgJmRpckF0dHIsIFNob3VsZE5vdEJlUHVzaGVkRG93bn0sCit9OwogCiBib29sIEFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIElubGluZVN0eWxl
UmVtb3ZhbE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVt
ZW50KTsKIAotICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwotCiAgICAgaWYgKG1fc3R5bGVkSW5s
aW5lRWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+
dGFnUU5hbWUoKSkpIHsKLSAgICAgICAgcmVtb3ZlZCA9IHRydWU7CiAgICAgICAgIGlmIChtb2Rl
ID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cykKICAgICAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGlmIChpbXBsaWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBs
eWluZ1N0eWxlKGVsZW1lbnQsIHN0eWxlKSkgeworICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwor
ICAgIGlmIChyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZSwgZWxlbWVudCwgbW9k
ZSkpCiAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwotICAgICAgICBpZiAobW9kZSA9PSBSZW1vdmVB
dHRyaWJ1dGVzQW5kRWxlbWVudHMpCi0gICAgICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92
ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7Ci0gICAgfQogCiAgICAgaWYgKCFlbGVtZW50
LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiByZW1vdmVkOwogCiAgICAgLy8gSWYgdGhl
IG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250YWlu
IHJlbGV2YW50CiAgICAgLy8gc3R5bGVzIHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8YiBz
dHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPikKLSAgICBpZiAocmVtb3ZlSFRNTEZvbnRTdHlsZShz
dHlsZSwgZWxlbWVudCwgbW9kZSkpCi0gICAgICAgIHJlbW92ZWQgPSB0cnVlOwotICAgIGlmIChy
ZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLCBlbGVtZW50LCBtb2RlKSkKLSAgICAg
ICAgcmVtb3ZlZCA9IHRydWU7CiAgICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBlbGVtZW50
LCBtb2RlKSkKICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CiAKQEAgLTEyMjcsNjYgKzEyODMsNTUg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuTwogICAgIH0KIH0KIAot
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92
YWxNb2RlIG1vZGUpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5
bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50
KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZVRvUHVzaERvd24pCiB7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBB
U1NFUlQoZWxlbSk7CisgICAgLy8gQXMgaW1wbGVtZW50ZWQgbm93LCBzdHlsZVRvUHVzaERvd24g
ZG9lcyBub3QgZ2V0IHVwZGF0ZWQgcHJvcGVybHkgaWYgbW9kZSA9PSBSZW1vdmVOb25lIGJlY2F1
c2Ugb2YgZWFybHkgZXhpdC4KKyAgICBBU1NFUlQoIXN0eWxlVG9QdXNoRG93biB8fCBtb2RlID09
IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CisgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoQ1NTUHJvcGVydHlFbGVtZW50TWFw
cGluZykgLyBzaXplb2YoQ1NTUHJvcGVydHlFbGVtZW50Q29ycmVzcG9uZGFuY2UpOyBpKyspIHsK
KyAgICAgICAgQVNTRVJUKENTU1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0uZWxlbWVudCB8fCBD
U1NQcm9wZXJ0eUVsZW1lbnRNYXBwaW5nW2ldLmF0dHJpYnV0ZSk7CiAKLSAgICBpZiAoIWVsZW0t
Pmhhc0xvY2FsTmFtZShmb250VGFnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoc3R5bGVUb1B1c2hEb3duICYmIENTU1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0ucHVzaERv
d25UeXBlID09IFNob3VsZE5vdEJlUHVzaGVkRG93bikKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKLSAgICBmb3IgKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0clRvUmVt
b3ZlID0gMDsKLSAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2xvcjoKLSAgICAgICAgICAgIGF0dHJUb1JlbW92ZSA9ICZjb2xvckF0dHI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6Ci0g
ICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmZmFjZUF0dHI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgotICAgICAgICAgICAgYXR0clRvUmVt
b3ZlID0gJnNpemVBdHRyOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChDU1NQcm9w
ZXJ0eUVsZW1lbnRNYXBwaW5nW2ldLmVsZW1lbnQgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoKkNT
U1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0uZWxlbWVudCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKENTU1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0uYXR0cmlidXRlICYm
ICFlbGVtZW50LT5oYXNBdHRyaWJ1dGUoKkNTU1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0uYXR0
cmlidXRlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RWxl
bWVudE1hcHBpbmdbaV0ucHJvcGVydHlJRCk7CisgICAgICAgIGlmICghc3R5bGVWYWx1ZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1h
cFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTUHJvcGVydHlF
bGVtZW50TWFwcGluZ1tpXS5wcmltaXRpdmVJZCk7CisKKyAgICAgICAgaWYgKENTU1Byb3BlcnR5
RWxlbWVudE1hcHBpbmdbaV0uaXNWYWx1ZUxpc3QgJiYgc3R5bGVWYWx1ZS0+aXNWYWx1ZUxpc3Qo
KSAmJiBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzdHlsZVZhbHVlLmdldCgpKS0+aGFzVmFs
dWUobWFwVmFsdWUuZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7IC8vIElmIENTUyB2YWx1
ZSBhc3N1bWVzIENTU1ZhbHVlTGlzdCwgdGhlbiBvbmx5IHNraXAgaWYgdGhlIHZhbHVlIHdhcyBw
cmVzZW50IGluIHN0eWxlIHRvIGFwcGx5LgorICAgICAgICBlbHNlIGlmIChzdHlsZVZhbHVlLT5j
c3NUZXh0KCkgPT0gbWFwVmFsdWUtPmNzc1RleHQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBJZiBDU1MgdmFsdWUgaXMgcHJpbWl0aXZlLCB0aGVuIHNraXAgaWYgdGhleSBhcmUgZXF1YWwu
CisKKyAgICAgICAgaWYgKHN0eWxlVG9QdXNoRG93bikgeworICAgICAgICAgICAgQVNTRVJUKENT
U1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0ucHVzaERvd25UeXBlICE9IFNob3VsZE5vdEJlUHVz
aGVkRG93bik7CisgICAgICAgICAgICBpZiAoQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5w
cmltaXRpdmVJZCA9PSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAgICAgICAgc3R5bGVUb1B1
c2hEb3duLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUVsZW1lbnRNYXBwaW5nW2ldLnByb3BlcnR5
SUQsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgqQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5h
dHRyaWJ1dGUpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdHlsZVRvUHVz
aERvd24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RWxlbWVudE1hcHBpbmdbaV0ucHJvcGVydHlJ
RCwgbWFwVmFsdWUtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXR0clRv
UmVtb3ZlKSB7Ci0gICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICht
b2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cykKLSAgICAgICAgICAgICAgICByZW1v
dmVOb2RlQXR0cmlidXRlKGVsZW0sICphdHRyVG9SZW1vdmUpOworICAgICAgICBpZiAobW9kZSA9
PSBSZW1vdmVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJlbW92ZWQg
PSB0cnVlOworICAgICAgICBpZiAoQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5hdHRyaWJ1
dGUpIHsKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgKkNTU1Byb3Bl
cnR5RWxlbWVudE1hcHBpbmdbaV0uYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChpc1NwYW5X
aXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZU5vZGUoZWxlbWVudCkpCisgICAgICAgICAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmli
dXRlcyhlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0g
ICAgaWYgKGlzRW1wdHlGb250VGFnKGVsZW0pICYmIG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0Fu
ZEVsZW1lbnRzKQotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOwot
CiAgICAgcmV0dXJuIHJlbW92ZWQ7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBIVE1MRWxlbWVudCogZWxlbSwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlKQotewotICAg
IEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKGVsZW0pOwotCi0gICAgaWYgKCFlbGVtLT5oYXNB
dHRyaWJ1dGUoZGlyQXR0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSkgJiYgIXN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW0sIGRpckF0dHIpOwotCi0gICAg
Ly8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxl
U3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCi0gICAgaWYgKGlzVW5zdHlsZWRTdHlsZVNwYW4oZWxl
bSkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbSwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xMzQ0
LDcgKzEzODksNyBAQCBIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9k
ZSogbm9kZSwgY29uc3QgVmVjdG9yPGludD4mIHByb3BlcnRpZXMpCitQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZXh0cmFjdElubGluZVN0
eWxlVG9QdXNoRG93bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBO
b2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKICAgICBBU1NFUlQobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKTsKQEAgLTEzNTUsOCArMTQwMCwxNiBAQCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBBCiAKICAgICBIVE1MRWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50ICo+KG5vZGUpOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKLSAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXN0eWxlKSB7CisgICAgICAgIHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICByZW1vdmVJ
bXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZVRvQXBwbHksIGVsZW1lbnQsIFJlbW92ZUF0dHJp
YnV0ZXNBbmRFbGVtZW50cywgc3R5bGUuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3R5bGUucmVs
ZWFzZSgpOworICAgIH0KKworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7CisgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlVG9BcHBseS0+
ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBzdHlsZVRvQXBwbHktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
cHJvcGVydGllcy5hcHBlbmQoaXQtPmlkKCkpOwogCiAgICAgc3R5bGUgPSBzdHlsZS0+Y29weVBy
b3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLmRhdGEoKSwgcHJvcGVydGllcy5zaXplKCkpOwogCkBA
IC0xMzcyLDYgKzE0MjUsOCBAQCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBBCiAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVs
ZW1lbnQpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwog
CisgICAgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoc3R5bGVUb0FwcGx5LCBlbGVtZW50
LCBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMsIHN0eWxlLmdldCgpKTsKKwogICAgIHJldHVy
biBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTE0MzgsMTEgKzE0OTMsNiBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0CiAgICAgaWYgKCFoaWdoZXN0QW5jZXN0b3Ip
CiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7Ci0gICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQo
KTsKLSAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBp
dCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHByb3BlcnRpZXMu
YXBwZW5kKGl0LT5pZCgpKTsKLQogICAgIC8vIFRoZSBvdXRlciBsb29wIGlzIHRyYXZlcnNpbmcg
dGhlIHRyZWUgdmVydGljYWxseSBmcm9tIGhpZ2hlc3RBbmNlc3RvciB0byB0YXJnZXROb2RlCiAg
ICAgTm9kZSogY3VycmVudCA9IGhpZ2hlc3RBbmNlc3RvcjsKICAgICB3aGlsZSAoY3VycmVudCAh
PSB0YXJnZXROb2RlKSB7CkBAIC0xNDUwLDcgKzE1MDAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpwdXNoRG93bklubGluZVN0CiAgICAgICAgIEFTU0VSVChjdXJyZW50LT5pc0hUTUxFbGVt
ZW50KCkpOwogICAgICAgICBBU1NFUlQoY3VycmVudC0+Y29udGFpbnModGFyZ2V0Tm9kZSkpOwog
ICAgICAgICBOb2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBleHRyYWN0
SW5saW5lU3R5bGVUb1B1c2hEb3duKGN1cnJlbnQsIHByb3BlcnRpZXMpOworICAgICAgICBOb2Rl
KiBsYXN0Q2hpbGQgPSBjdXJyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBleHRyYWN0SW5saW5lU3R5
bGVUb1B1c2hEb3duKHN0eWxlLCBjdXJyZW50KTsKIAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9v
cCB3aWxsIGdvIHRocm91Z2ggY2hpbGRyZW4gb24gZWFjaCBsZXZlbAogICAgICAgICB3aGlsZSAo
Y2hpbGQpIHsKQEAgLTE0NjUsNiArMTUxNiw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1
c2hEb3duSW5saW5lU3QKICAgICAgICAgICAgIGlmIChjaGlsZCA9PSB0YXJnZXROb2RlIHx8IGNo
aWxkLT5jb250YWlucyh0YXJnZXROb2RlKSkKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2hp
bGQ7CiAKKyAgICAgICAgICAgIGlmIChjaGlsZCA9PSBsYXN0Q2hpbGQgfHwgY2hpbGQtPmNvbnRh
aW5zKGxhc3RDaGlsZCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjaGls
ZCA9IG5leHRDaGlsZDsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNSArNzEsMTMgQEAgcHJpdmF0ZToK
IAogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVycwogICAgIGJvb2wgc2hvdWxkUmVtb3ZlVGV4
dERlY29yYXRpb25UYWcoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBpbnQgdGV4
dERlY29yYXRpb25BZGRlZEJ5VGFnKSBjb25zdDsKLSAgICBib29sIGltcGxpY2l0bHlTdHlsZWRF
bGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUoSFRNTEVsZW1lbnQqLCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9t
RWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5l
U3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgaW5s
aW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KSB7cmV0dXJuIHJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KICAg
ICB2b2lkIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxl
bWVudComKTsKLSAgICBib29sIHJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVB
dHRyaWJ1dGVzQW5kRWxlbWVudHMpOwotICAgIGJvb2wgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CisgICAgYm9vbCBy
ZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbios
IEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVUb1B1c2hEb3duID0gMCk7CiAgICAgYm9vbCByZW1vdmVDU1NT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgSFRNTEVs
ZW1lbnQqIGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSosIGNvbnN0
IFZlY3RvcjxpbnQ+Jik7CisgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIE5vZGUqKTsKICAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpOwogICAgIHZvaWQgcHVzaERvd25Jbmxp
bmVTdHlsZUFyb3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAg
ICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65745</attachid>
            <date>2010-08-27 11:46:00 -0700</date>
            <delta_ts>2010-08-27 13:23:26 -0700</delta_ts>
            <desc>work in progress 2</desc>
            <filename>bug-44560-20100827114559.patch</filename>
            <type>text/plain</type>
            <size>27816</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IFdlYktpdCBub3QgcHVzaGluZyBkb3duIGlt
cGxpY2l0bHkgYWRkZWQgc3R5bGVzIHRvIGRlc2NlbmRlbnQgbm9kZXMuCisgICAgICAgIEZpeGVk
IHRoZSBidWcgYnkgcHVzaGluZyBkb3duIGFsbCBlbGVtZW50cyB0aGF0IGltcGxpY2l0bHkgYWRk
IHN0eWxlLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0
LXN0eWxlcy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5
bGVkRWxlbWVudCk6IEFkZGVkIGV4dHJhY3RlZFN0eWxlLCB3aGljaCByZWNlaXZlcworICAgICAg
ICB0aGUgc3R5bGUgaW1wbGljaXRseSBhZGRlZCBieSB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVk
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHls
ZVRvUHVzaERvd24pOiBDYWxscyByZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudAorICAgICAg
ICB0byByZW1vdmUgdGhlIGltcGxpY2l0bHkgc3R5bGVkIGVsZW1lbnQgYW5kIGV4dHJhY3QgdGhl
IGlubGluZSBzdHlsZSBhZGRlZCBieSB0aGUgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93bik6IEZpeGVkIGEgYnVn
IHRoYXQgYWRkSW5saW5lU3R5bGVJZk5lZWRlZAorICAgICAgICBhY2NpZGVudGFsbHkgb3ZlcnJp
ZGUgdGhlIHN0eWxlIG9mIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUpOiBVc2VzIGV4dHJhY3RJbmxpbmVTdHls
ZVRvUHVzaERvd24KKyAgICAgICAgYW5kIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duLgorICAg
ICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaDogUHJvdG90eXBlIGNoYW5nZXMuCisK
IDIwMTAtMDgtMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjYxODkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk3LDE1ICsxMTk3LDE3IEBA
IHN0YXRpYyBjb25zdCBIVE1MRXF1aXZhbGVudCBIVE1MRXF1aXZhbGUKICAgICB7IENTU1Byb3Bl
cnR5RGlyZWN0aW9uLCBmYWxzZSwgQ1NTVmFsdWVJbnZhbGlkLCAwLCAmZGlyQXR0ciwgU2hvdWxk
Tm90QmVQdXNoZWREb3duIH0sCiB9OwogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJ
bXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCitib29s
IEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVT
dHlsZVJlbW92YWxNb2RlIG1vZGUsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleHRyYWN0
ZWRTdHlsZSkKIHsKKyAgICAvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBv
cnQgc3R5bGVQdXNoZWREb3duIHdoZW4gbW9kZSA9PSBSZW1vdmVOb25lIGJlY2F1c2Ugb2YgZWFy
bHkgZXhpdC4KKyAgICBBU1NFUlQoIWV4dHJhY3RlZFN0eWxlIHx8IG1vZGUgIT0gUmVtb3ZlTm9u
ZSk7CiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplb2YoSFRNTEVxdWl2YWxlbnRzKSAvIHNpemVvZihIVE1MRXF1aXZhbGVudCk7IGkrKykg
ewogICAgICAgICBjb25zdCBIVE1MRXF1aXZhbGVudCYgZXF1aXZhbGVudCA9IEhUTUxFcXVpdmFs
ZW50c1tpXTsKICAgICAgICAgQVNTRVJUKGVxdWl2YWxlbnQuZWxlbWVudCB8fCBlcXVpdmFsZW50
LmF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChlcXVpdmFsZW50LmVsZW1lbnQgJiYgIWVsZW1lbnQt
Pmhhc1RhZ05hbWUoKmVxdWl2YWxlbnQuZWxlbWVudCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGVxdWl2YWxlbnQuYXR0cmlidXRlICYmICFlbGVtZW50LT5oYXNBdHRyaWJ1
dGUoKmVxdWl2YWxlbnQuYXR0cmlidXRlKSkKKyAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlICYm
IGVxdWl2YWxlbnQucHVzaERvd25UeXBlID09IFNob3VsZE5vdEJlUHVzaGVkRG93bgorICAgICAg
ICAgICAgfHwgZXF1aXZhbGVudC5lbGVtZW50ICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKCplcXVp
dmFsZW50LmVsZW1lbnQpCisgICAgICAgICAgICB8fCBlcXVpdmFsZW50LmF0dHJpYnV0ZSAmJiAh
ZWxlbWVudC0+aGFzQXR0cmlidXRlKCplcXVpdmFsZW50LmF0dHJpYnV0ZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBzdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShlcXVpdmFsZW50LnByb3BlcnR5SUQpOwpAQCAtMTIxOCw2
ICsxMjIwLDE0IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUltcGxpY2l0bHkKICAg
ICAgICAgZWxzZSBpZiAoc3R5bGVWYWx1ZS0+Y3NzVGV4dCgpID09IG1hcFZhbHVlLT5jc3NUZXh0
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGlzIHByaW1pdGl2ZSwg
dGhlbiBza2lwIGlmIHRoZXkgYXJlIGVxdWFsLgogCisgICAgICAgIGlmIChleHRyYWN0ZWRTdHls
ZSkgeworICAgICAgICAgICAgQVNTRVJUKGVxdWl2YWxlbnQucHVzaERvd25UeXBlICE9IFNob3Vs
ZE5vdEJlUHVzaGVkRG93bik7CisgICAgICAgICAgICBpZiAoZXF1aXZhbGVudC5wcmltaXRpdmVJ
ZCA9PSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNl
dFByb3BlcnR5KGVxdWl2YWxlbnQucHJvcGVydHlJRCwgZWxlbWVudC0+Z2V0QXR0cmlidXRlKCpl
cXVpdmFsZW50LmF0dHJpYnV0ZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGV4dHJhY3RlZFN0eWxlLT5zZXRQcm9wZXJ0eShlcXVpdmFsZW50LnByb3BlcnR5SUQsIG1hcFZh
bHVlLT5jc3NUZXh0KCkpOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3Zl
Tm9uZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMzE0LDcgKzEzMjQsNyBAQCBI
VE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlTdHls
ZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSogbm9kZSwgYm9vbCBp
c1N0eWxlZEVsZW1lbnQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm9wZXJ0aWVzKQorUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RJ
bmxpbmVTdHlsZVRvUHVzaERvd24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlVG9B
cHBseSwgTm9kZSogbm9kZSwgYm9vbCBpc1N0eWxlZEVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKG5v
ZGUpOwogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwpAQCAtMTMzMCw4ICsxMzQw
LDE2IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEEKICAgICAgICAg
cmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIXN0eWxlKSB7CisgICAgICAgIHN0eWxlID0gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICByZW1vdmVJbXBsaWNpdGx5U3R5
bGVkRWxlbWVudChzdHlsZVRvQXBwbHksIGVsZW1lbnQsIFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVt
ZW50cywgc3R5bGUuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOworICAg
IH0KKworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlVG9BcHBseS0+ZW5kKCk7CisgICAg
Zm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHls
ZVRvQXBwbHktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcHJvcGVydGllcy5h
cHBlbmQoaXQtPmlkKCkpOwogCiAgICAgc3R5bGUgPSBzdHlsZS0+Y29weVByb3BlcnRpZXNJblNl
dChwcm9wZXJ0aWVzLmRhdGEoKSwgcHJvcGVydGllcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykgewpAQCAtMTM0Niw2ICsxMzY0LDgg
QEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQQogICAgIGlmIChpc1Nw
YW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbihlbGVtZW50KSkKICAgICAgICAg
cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKIAorICAgIHJlbW92ZUltcGxp
Y2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlVG9BcHBseSwgZWxlbWVudCwgUmVtb3ZlQXR0cmlidXRl
c0FuZEVsZW1lbnRzLCBzdHlsZS5nZXQoKSk7CisKICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgp
OwogfQogCkBAIC0xMzU2LDE1ICsxMzc2LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkgfHwgIW5v
ZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFNpbmNlIGFkZElubGlu
ZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBvYmpl
Y3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCi0gICAgLy8gRklYTUU6IGFwcGx5SW5s
aW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KLSAgICBpZiAoKG5v
ZGUtPnJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSkg
JiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBuZXdJbmxpbmVTdHlsZSA9IHN0eWxlOworICAgIGlmIChub2RlLT5pc0hUTUxF
bGVtZW50KCkpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpOwogICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZXhpc3RpbmdJbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwotCi0gICAg
ICAgIC8vIEF2b2lkIG92ZXJyaWRpbmcgZXhpc3Rpbmcgc3R5bGVzIG9mIG5vZGUKICAgICAgICAg
aWYgKGV4aXN0aW5nSW5saW5lU3R5bGUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbmV3SW5saW5lU3R5bGUgPSBleGlzdGluZ0lubGluZVN0eWxlLT5j
b3B5KCk7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZSA9IGV4aXN0aW5nSW5saW5lU3R5bGUt
PmNvcHkoKTsKICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAtMTM4
Miw3ICsxMzk5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQog
CiAgICAgICAgICAgICAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4sIHVuZGVybGluZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlVW5kZXJsaW5lKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+LCBsaW5lVGhyb3VnaCwg
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTGluZVRocm91Z2gp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleHREZWNvcmF0aW9uT2ZTdHlsZUFwcGxpZWQtPmhhc1ZhbHVlKHVuZGVybGluZS5nZXQo
KSkgJiYgIXRleHREZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZS0+aGFzVmFsdWUodW5kZXJsaW5lLmdl
dCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbk9mSW5saW5l
U3R5bGUtPmFwcGVuZCh1bmRlcmxpbmUuZ2V0KCkpOwogCkBAIC0xMzkxLDIyICsxNDA4LDIzIEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KIAotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5l
d0lubGluZVN0eWxlLT5jc3NUZXh0KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBzdHlsZS0+Y3NzVGV4dCgpKTsKLQor
ICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBi
bG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCisg
ICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUg
aW5zdGVhZC4KKyAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9k
ZS0+Y2hpbGROb2RlQ291bnQoKSkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKSwgc3R5bGVB
dHRyLCBuZXdJbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4obm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBhZGRJbmxpbmVTdHlsZUlmTmVlZGVk
IG1heSBvdmVycmlkZSB0aGUgc3R5bGUgb2Ygbm9kZQogICAgIC8vIFdlIGNhbid0IHdyYXAgbm9k
ZSB3aXRoIHRoZSBzdHlsZWQgZWxlbWVudCBoZXJlIGJlY2F1c2UgbmV3IHN0eWxlZCBlbGVtZW50
IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCBpZiB3ZSBkaWQuCiAgICAgLy8gSWYgd2UgbW9kaWZpZWQg
dGhlIGNoaWxkIHBvaW50ZXIgaW4gcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUgdG8gcG9p
bnQgdG8gbmV3IHN0eWxlIGVsZW1lbnQKICAgICAvLyB0aGVuIHdlIGZhbGwgaW50byBhbiBpbmZp
bml0ZSBsb29wIHdoZXJlIHdlIGtlZXAgcmVtb3ZpbmcgYW5kIGFkZGluZyBzdHlsZWQgZWxlbWVu
dCB3cmFwcGluZyBub2RlLgotICAgIGFkZElubGluZVN0eWxlSWZOZWVkZWQoc3R5bGUsIG5vZGUs
IG5vZGUsIERvTm90QWRkU3R5bGVkRWxlbWVudCk7CisgICAgYWRkSW5saW5lU3R5bGVJZk5lZWRl
ZChuZXdJbmxpbmVTdHlsZS5nZXQoKSwgbm9kZSwgbm9kZSwgRG9Ob3RBZGRTdHlsZWRFbGVtZW50
KTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3Vu
ZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiB0YXJnZXROb2Rl
KQpAQCAtMTQxNSwxMSArMTQzMyw2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3du
SW5saW5lU3QKICAgICBpZiAoIWhpZ2hlc3RBbmNlc3RvcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVmVjdG9yPGludD4gcHJvcGVydGllczsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwotICAgIGZvciAoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaXQtPmlkKCkpOwotCiAg
ICAgLy8gVGhlIG91dGVyIGxvb3AgaXMgdHJhdmVyc2luZyB0aGUgdHJlZSB2ZXJ0aWNhbGx5IGZy
b20gaGlnaGVzdEFuY2VzdG9yIHRvIHRhcmdldE5vZGUKICAgICBOb2RlKiBjdXJyZW50ID0gaGln
aGVzdEFuY2VzdG9yOwogICAgIHdoaWxlIChjdXJyZW50ICE9IHRhcmdldE5vZGUpIHsKQEAgLTE0
MzEsNyArMTQ0NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3QK
ICAgICAgICAgUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IHN0eWxlZEVsZW1lbnQ7CiAgICAgICAgIGlm
IChjdXJyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAmJiBtX3N0eWxlZElubGluZUVsZW1lbnQgJiYg
Y3VycmVudC0+aGFzVGFnTmFtZShtX3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkpKQog
ICAgICAgICAgICAgc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihj
dXJyZW50KTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZVRvUHVzaERvd24gPSBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3duKGN1cnJlbnQsIHN0eWxl
ZEVsZW1lbnQsIHByb3BlcnRpZXMpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHN0eWxlVG9QdXNoRG93biA9IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24o
c3R5bGUsIGN1cnJlbnQsIHN0eWxlZEVsZW1lbnQpOwogCiAgICAgICAgIC8vIFRoZSBpbm5lciBs
b29wIHdpbGwgZ28gdGhyb3VnaCBjaGlsZHJlbiBvbiBlYWNoIGxldmVsCiAgICAgICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgYWdncmVnYXRlIGlubGluZSBjaGlsZCBlbGVtZW50cyB0b2dldGhlciBz
byB0aGF0IHdlIGRvbid0IHdyYXAgZWFjaCBjaGlsZCBzZXBhcmF0ZWx5LgpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDY2MTg5KQorKysgV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDExICs3MywxMSBA
QCBwcml2YXRlOgogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVycwogICAgIGJvb2wgcmVtb3Zl
SW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxF
bGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVt
ZW50cyk7CiAgICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVu
dChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50
KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJl
bW92ZU5vbmUpO30KLSAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxN
b2RlKTsKKyAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXh0cmFjdGVkU3R5bGUgPSAwKTsKICAgICB2b2lk
IHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudCom
KTsKICAgICBib29sIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
SFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0Fu
ZEVsZW1lbnRzKTsKICAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0
aW5nSW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7Ci0gICAg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdElubGluZVN0eWxl
VG9QdXNoRG93bihOb2RlKiwgYm9vbCBpc1N0eWxlZEVsZW1lbnQsIGNvbnN0IFZlY3RvcjxpbnQ+
Jik7CisgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXh0cmFjdElu
bGluZVN0eWxlVG9QdXNoRG93bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqLCBi
b29sIGlzU3R5bGVkRWxlbWVudCk7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93
bihOb2RlKiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKTsKICAgICB2b2lkIHB1
c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
Tm9kZSopOwogICAgIHZvaWQgcmVtb3ZlSW5saW5lU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjE5OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTA4LTI3ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNhbm5vdCByZW1vdmUgdGV4dC1kZWNvcmF0aW9uIHdoZW4gc3R5bGUg
aXMgYWRkZWQgYnkgdSBvciBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDU2MAorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgV2ViS2l0
IHJlbW92ZXMgdGV4dC1kZWNvcmF0aW9ucyBhZGRlZCBieSB1IG9yIHMKKyAgICAgICAgYW5kIHB1
c2hlcyBkb3duIGltcGxpY2l0IHN0eWxlcyBwcm9wZXJseSBpbnRvIGRlc2NlbmRlbnQgbm9kZXMu
CisKKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBs
aWNpdC1zdHlsZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zdHlsZS9zY3JpcHQt
dGVzdHMvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0
U2luZ2xlVG9nZ2xlKToKKyAgICAgICAgKHNlbGVjdEFsbCk6CisgICAgICAgIChzZWxlY3RUZXN0
KToKKyAgICAgICAgKHNlbGVjdFNlY29uZFdvcmQpOgorICAgICAgICAoc2VsZWN0TGFzdFR3b1dv
cmRzKToKKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3R5cGluZy1zdHlsZS0wMDMtZXhwZWN0ZWQu
dHh0OgorCiAyMDEwLTA4LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjYxODguCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3du
LWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACitUZXN0IHRvIG1ha2Ugc3VyZSB3ZSBwdXNoIGRv
d24gaW5saW5lIHN0eWxlcyBwcm9wZXJseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgYm9sZCBvbiBhbGwgb2YgPGI+IDxkaXY+dGV4dDwvZGl2PiA8L2I+IHlpZWxkcyAg
PGRpdj50ZXh0PC9kaXY+IAorUEFTUyBib2xkIG9uIGFsbCBvZiA8Yj48cz48ZGl2PnRleHQ8L2Rp
dj48L3M+PC9iPiB5aWVsZHMgPHM+PGRpdj50ZXh0PC9kaXY+PC9zPgorUEFTUyBib2xkIG9uIHRl
c3Qgb2YgPGI+PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2PndvcmxkPC9kaXY+PC9iPiB5
aWVsZHMgPGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDog
Ym9sZDsgIj53b3JsZDwvZGl2PgorUEFTUyBib2xkIG9uIHRlc3Qgb2YgPGI+aGVsbG88ZGl2IGlk
PSJ0ZXN0Ij53b3JsZDwvZGl2PjwvYj4geWllbGRzIDxiPmhlbGxvPC9iPjxkaXYgaWQ9InRlc3Qi
PndvcmxkPC9kaXY+CitQQVNTIGJvbGQgb24gdGVzdCBvZiA8Yj5oZWxsbzxzcGFuIGlkPSJ0ZXN0
Ij53b3JsZDwvc3Bhbj48L2I+IHlpZWxkcyA8Yj5oZWxsbzwvYj48c3BhbiBpZD0idGVzdCI+d29y
bGQ8L3NwYW4+CitQQVNTIGJvbGQgb24gdGVzdCBvZiA8YiBzdHlsZT0iZm9udC1zdHlsZTogaXRh
bGljOyI+aGVsbG88c3BhbiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48L2Rpdj4geWllbGRzIDxzcGFu
IHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48Yj5oZWxsbzwvYj48c3BhbiBpZD0idGVzdCI+
d29ybGQ8L3NwYW4+PC9zcGFuPgorUEFTUyBib2xkIG9uIHRlc3Qgb2YgPGI+PGRpdiBpZD0idGVz
dCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+d29ybGQ8L2Rp
dj53ZWJraXQ8L2I+IHlpZWxkcyA8ZGl2IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9
ImZvbnQtd2VpZ2h0OiBub3JtYWw7ICI+d29ybGQ8L2Rpdj48Yj53ZWJraXQ8L2I+CitQQVNTIHVu
ZGVybGluZSBvbiBzZWNvbmQgd29yZCBvZiA8dT5oZWxsbyA8Yj53b3JsZDwvYj4gd2Via2l0PC91
PiB5aWVsZHMgPHU+aGVsbG88L3U+IDxiPndvcmxkPC9iPjx1PiB3ZWJraXQ8L3U+CitQQVNTIHVu
ZGVybGluZSBvbiBsYXN0IHR3byB3b3JkcyBvZiA8dT5oZWxsbyA8Yj53b3JsZDwvYj4gd2Via2l0
PC91PiB5aWVsZHMgPHU+aGVsbG8gPC91PjxiPndvcmxkPC9iPiB3ZWJraXQKK1BBU1MgdW5kZXJs
aW5lIG9uIGxhc3QgdHdvIHdvcmRzIG9mIDx1PmhlbGxvIDxiPndvcmxkIHdlYmtpdDwvYj48L3U+
IHlpZWxkcyA8dT5oZWxsbyA8L3U+PGI+d29ybGQgd2Via2l0PC9iPgorUEFTUyB1bmRlcmxpbmUg
b24gc2Vjb25kIHdvcmQgb2YgPHU+aGVsbG8gPGI+d29ybGQgd2Via2l0PC9iPjwvdT4geWllbGRz
IDx1PmhlbGxvPC91PiA8Yj53b3JsZDx1PiB3ZWJraXQ8L3U+PC9iPgorUEFTUyB1bmRlcmxpbmUg
b24gc2Vjb25kIHdvcmQgb2YgPHU+PGI+aGVsbG8gd29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRz
IDxiPjx1PmhlbGxvPC91PiB3b3JsZDwvYj48dT4gd2Via2l0PC91PgorUEFTUyB1bmRlcmxpbmUg
b24gc2Vjb25kIHdvcmQgb2YgPHU+PHM+aGVsbG8gd29ybGQ8L3M+PC91PiB5aWVsZHMgPHM+PHU+
aGVsbG88L3U+IHdvcmxkPC9zPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+
PHM+aGVsbG8gd29ybGQgd2Via2l0PC9zPjwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3Js
ZDx1PiB3ZWJraXQ8L3U+PC9zPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+
PHM+aGVsbG8gd29ybGQ8L3M+IHdlYmtpdDwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3Js
ZDwvcz48dT4gd2Via2l0PC91PgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+
aGVsbG8gPGVtPjxjb2RlPndvcmxkIHdlYmtpdDwvY29kZT48L2VtPiByb2NrczwvdT4geWllbGRz
IDx1PmhlbGxvPC91PiA8ZW0+PGNvZGU+d29ybGQ8dT4gd2Via2l0PC91PjwvY29kZT48L2VtPjx1
PiByb2NrczwvdT4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNp
dC1zdHlsZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1
c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZWRpdGluZy9zdHlsZS90eXBpbmctc3R5bGUtMDAzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3R5cGluZy1zdHlsZS0wMDMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2NjE4OSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvdHlwaW5n
LXN0eWxlLTAwMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwyMyBA
QCBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMSBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBJID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24K
LUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAxIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gMSBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBJID4g
QiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gSSA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4g
SSA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBJID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgog
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJh
bmdlIGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IFNQQU4gPiBJ
ID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBTUEFO
ID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQg
PiBJID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IEkgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAj
dGV4dCA+IEkgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4g
SSA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5n
ZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZy
b20gMSBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24K
LUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAxIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBT
UEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBv
ZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpy
YW5nZSBmcm9tIDEgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAx
IG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9m
ICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlk
Q2hhbmdlTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4g
PiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAzIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMyBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogeHh4eHh4eHh4eHh4eHh4CkBA
IC02MywxMCArNjMsMTAgQEAgZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54
PAogZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eDwvaT48L2I+PHNwYW4g
aWQ9InRlc3QiPjwvc3Bhbj4KIGV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+
eHh4PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgogZXhlY0JvbGRDb21tYW5kOiB4eHg8
Yj54eHg8aT54eHg8L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJh
Y3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFu
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPng8L3NwYW4+PC9pPjwvYj48c3BhbiBpZD0i
dGVzdCI+PC9zcGFuPgotZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8
c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7
Ij54eDwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJh
Y3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFu
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPnh4eDwvc3Bhbj48L2k+PC9iPjxzcGFuIGlk
PSJ0ZXN0Ij48L3NwYW4+Ci1leGVjSXRhbGljQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4g
Y2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4
PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVy
Q29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0
eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNw
YW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3JtYWw7Ij54PC9zcGFuPjwvc3Bhbj48L2k+PC9iPjxz
cGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4
eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13ZWlnaHQ6
IG5vcm1hbDsiPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1z
dHlsZTogbm9ybWFsOyI+eHg8L3NwYW4+PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwv
c3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xh
c3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PHNw
YW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3JtYWw7Ij54
eHg8L3NwYW4+PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBl
Q2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54PC9pPjxzcGFuIGlk
PSJ0ZXN0Ij48L3NwYW4+CitleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDwvYj48
aT48Yj54eHg8L2I+eHg8L2k+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hhcmFj
dGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54eHg8L2k+PHNwYW4gaWQ9InRl
c3QiPjwvc3Bhbj4KK2V4ZWNJdGFsaWNDb21tYW5kOiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9i
Pnh4eDwvaT48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5k
OiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT54PHNwYW4gaWQ9InRlc3QiPjwvc3Bh
bj4KK2V4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54
eHg8L2k+eHg8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5k
OiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT54eHg8c3BhbiBpZD0idGVzdCI+PC9z
cGFuPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1k
b3duLWltcGxpY2l0LXN0eWxlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3du
LWltcGxpY2l0LXN0eWxlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorZGVzY3Jp
cHRpb24oJ1Rlc3QgdG8gbWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUgc3R5bGVzIHByb3Bl
cmx5LicpOworCit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwordGVzdENvbnRhaW5lci5jb250ZW50RWRpdGFibGUgPSB0cnVlOworZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKworZnVuY3Rpb24gdGVzdFNpbmdsZVRvZ2ds
ZSh0b2dnbGVDb21tYW5kLCBzZWxlY3RvciwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRl
bnRzKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOwor
ICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdG9yKHRlc3RDb250YWluZXIpOworICAgIGRvY3VtZW50
LmV4ZWNDb21tYW5kKCdzdHlsZVdpdGhDU1MnLCBmYWxzZSwgJ2ZhbHNlJyk7CisgICAgZG9jdW1l
bnQuZXhlY0NvbW1hbmQodG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIHZhciBhY3Rp
b24gPSB0b2dnbGVDb21tYW5kICsgJyBvbiAnICsgc2VsZWN0ZWQgKyAnIG9mICcgKyBpbml0aWFs
Q29udGVudHMgKyAiIHlpZWxkcyAiICsgdGVzdENvbnRhaW5lci5pbm5lckhUTUw7CisgICAgaWYg
KHRlc3RDb250YWluZXIuaW5uZXJIVE1MID09IGV4cGVjdGVkQ29udGVudHMpCisgICAgICAgIHRl
c3RQYXNzZWQoYWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoYWN0aW9uICsg
IiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudHMpOworfQorCitmdW5jdGlvbiBzZWxlY3RB
bGwoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxk
cmVuKGNvbnRhaW5lcik7CisgICAgcmV0dXJuICdhbGwnOworfQorCitmdW5jdGlvbiBzZWxlY3RU
ZXN0KGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGls
ZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpKTsKKyAgICByZXR1cm4gJ3Rlc3Qn
OworfQorCitmdW5jdGlvbiBzZWxlY3RGaXJzdFdvcmQoY29udGFpbmVyKSB7CisgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgd2luZG93Lmdl
dFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnd29yZCcpOworICAgIHJl
dHVybiAnZmlyc3Qgd29yZCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdFNlY29uZFdvcmQoY29udGFp
bmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwg
MCk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywg
J3dvcmQnKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9y
d2FyZCcsICd3b3JkJyk7CisgICAgcmV0dXJuICdzZWNvbmQgd29yZCc7Cit9CisKK2Z1bmN0aW9u
IHNlbGVjdExhc3RUd29Xb3Jkcyhjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpOwor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2FyZCcsICd3
b3JkJyk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3
YXJkJywgJ3dvcmQnKTsKKyAgICByZXR1cm4gJ2xhc3QgdHdvIHdvcmRzJzsKK30KKwordGVzdFNp
bmdsZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdFNlY29uZFdvcmQsICc8Yj5oZWxsbyA8ZGl2Pndvcmxk
PC9kaXY+PC9iPicsICc8Yj5oZWxsbzwvYj48ZGl2PndvcmxkPC9kaXY+Jyk7Cit0ZXN0U2luZ2xl
VG9nZ2xlKCJib2xkIiwgc2VsZWN0QWxsLCAnPGI+IDxkaXY+dGV4dDwvZGl2PiA8L2I+JywgJyA8
ZGl2PnRleHQ8L2Rpdj4gJyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0QWxsLCAn
PGI+PHM+PGRpdj50ZXh0PC9kaXY+PC9zPjwvYj4nLCAnPHM+PGRpdj50ZXh0PC9kaXY+PC9zPicp
OwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVs
bG88L2Rpdj48ZGl2PndvcmxkPC9kaXY+PC9iPicsICc8ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHls
ZT0iZm9udC13ZWlnaHQ6IGJvbGQ7ICI+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUo
ImJvbGQiLCBzZWxlY3RGaXJzdFdvcmQsICc8Yj48ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0i
Zm9udC13ZWlnaHQ6IG5vcm1hbDsiPndvcmxkPC9kaXY+d2Via2l0PC9iPicsICc8ZGl2PmhlbGxv
PC9kaXY+PGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgIj53b3JsZDwvZGl2PjxiPndl
YmtpdDwvYj4nKTsKKwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdFNlY29uZFdvcmQs
ICc8YiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aGVsbG8gd29ybGQ8L2I+JywgJzxiIHN0
eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbzwvYj48c3BhbiBzdHlsZT0iZm9udC1zdHls
ZTogaXRhbGljOyI+IHdvcmxkPC9zcGFuPicpOworCit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxp
bmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4n
LCAnPHU+aGVsbG88L3U+IDxiPndvcmxkPC9iPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0ZXN0U2luZ2xl
VG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RMYXN0VHdvV29yZHMsICc8dT5oZWxsbyA8Yj53b3Js
ZDwvYj4gd2Via2l0PC91PicsICc8dT5oZWxsbyA8L3U+PGI+d29ybGQ8L2I+IHdlYmtpdCcpOwor
dGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgc2VsZWN0TGFzdFR3b1dvcmRzLCAnPHU+aGVs
bG8gPGI+d29ybGQgd2Via2l0PC9iPjwvdT4nLCAnPHU+aGVsbG8gPC91PjxiPndvcmxkIHdlYmtp
dDwvYj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQs
ICc8dT5oZWxsbyA8Yj53b3JsZCB3ZWJraXQ8L2I+PC91PicsICc8dT5oZWxsbzwvdT4gPGI+d29y
bGQ8dT4gd2Via2l0PC91PjwvYj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNl
bGVjdFNlY29uZFdvcmQsICc8dT48Yj5oZWxsbyB3b3JsZDwvYj4gd2Via2l0PC91PicsICc8Yj48
dT5oZWxsbzwvdT4gd29ybGQ8L2I+PHU+IHdlYmtpdDwvdT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUo
InVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3JsZDwvcz48L3U+
JywgJzxzPjx1PmhlbGxvPC91PiB3b3JsZDwvcz4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVy
bGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3JsZCB3ZWJraXQ8L3M+PC91
PicsICc8cz48dT5oZWxsbzwvdT4gd29ybGQ8dT4gd2Via2l0PC91Pjwvcz4nKTsKK3Rlc3RTaW5n
bGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3Js
ZDwvcz4gd2Via2l0PC91PicsICc8cz48dT5oZWxsbzwvdT4gd29ybGQ8L3M+PHU+IHdlYmtpdDwv
dT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8
dT5oZWxsbyA8ZW0+PGNvZGU+d29ybGQgd2Via2l0PC9jb2RlPjwvZW0+IHJvY2tzPC91PicsICc8
dT5oZWxsbzwvdT4gPGVtPjxjb2RlPndvcmxkPHU+IHdlYmtpdDwvdT48L2NvZGU+PC9lbT48dT4g
cm9ja3M8L3U+Jyk7CisKK3Rlc3RTaW5nbGVUb2dnbGUoInN0cmlrZVRocm91Z2giLCBzZWxlY3RB
bGwsICc8cyBzdHlsZT0iY29sb3I6IGJsdWU7Ij5oZWxsbyB3b3JsZDwvcz4nLCAnPHNwYW4gc3R5
bGU9ImNvbG9yOiBibHVlOyI+aGVsbG8gd29ybGQ8L3NwYW4+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xl
KCJzdHJpa2VUaHJvdWdoIiwgc2VsZWN0VGVzdCwgJzxzIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjxk
aXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGI+d29ybGQ8L2I+IHdlYmtpdDwvcz4nLCAnPHMgc3R5
bGU9ImNvbG9yOiBibHVlOyI+aGVsbG88L3M+PHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+IDxi
PndvcmxkPC9iPjxzPiB3ZWJraXQ8L3M+PC9zcGFuPicpOworCitkb2N1bWVudC5ib2R5LnJlbW92
ZUNoaWxkKHRlc3RDb250YWluZXIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65758</attachid>
            <date>2010-08-27 13:23:29 -0700</date>
            <delta_ts>2010-08-27 13:33:12 -0700</delta_ts>
            <desc>fixes the bug by pushing down all implicitly styled elements</desc>
            <filename>bug-44560-20100827132328.patch</filename>
            <type>text/plain</type>
            <size>29708</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IFdlYktpdCBub3QgcHVzaGluZyBkb3duIGlt
cGxpY2l0bHkgYWRkZWQgc3R5bGVzIHRvIGRlc2NlbmRlbnQgbm9kZXMuCisgICAgICAgIEZpeGVk
IHRoZSBidWcgYnkgcHVzaGluZyBkb3duIGFsbCBlbGVtZW50cyB0aGF0IGltcGxpY2l0bHkgYWRk
IHN0eWxlLgorCisJZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93biBub3cgY2FsbHMgcmVtb3Zl
SW1wbGljaXRseVN0eWxlZEVsZW1lbnQsIHdoaWNoIHdhcyBtb2RpZmllZCB0byBleHRyYWN0CisJ
dGhlIHN0eWxlIGltcGxpY2l0bHkgYWRkZWQgYnkgdGhlIGVsZW1lbnQgdG8gZXh0cmFjdFN0eWxl
LgorCisJVGhpcyByZXZlYWxlZCBhIGJ1ZyBpbiBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93biB3
aGVyZSBhcHBseUlubGluZVN0eWxlSWZOZWVkZWQgY291bGQgYWRkCisJYW4gaW1wbGljaXRseSBz
dHlsZWQgZWxlbWVudCBpbnNpZGUgYW4gZWxlbWVudCB3aXRoIGEgY29uZmxpY3Rpbmcgc3R5bGUs
IHRoZXJlYnkgb3ZlcnJpZGluZyB0aGUgc3R5bGUgb2YgdGhlIGVsZW1lbnQuCisJRml4ZWQgdGhp
cyBieSBleHRlbmRpbmcgdGhlIGxvZ2ljIHRvIGhvbm9yIHRoZSBleGlzdGluZyBpbmxpbmUgc3R5
bGUgZGVjbGFyYXRpb24gdXNlZCBpbgorCXRoZSBjYXNlIG9mIHJld3JpdGluZyBpbmxpbmUgc3R5
bGUgZGVjbGFyYXRpb24gdG8gYWxsIGNhc2VzIGluY2x1ZGluZyB0aGUgb25lIGNhbGxpbmcgYWRk
SW5saW5lU3R5bGVJZk5lZWRlZC4KKworCUFsc28gZml4ZWQgYSBidWcgaW4gcmVtb3ZlSW5saW5l
U3R5bGUgd2hlcmUgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUgd2FzIGNhbGxlZCBvbiBh
IHRleHQgbm9kZQorCW91dHNpZGUgb2Ygc2VsZWN0aW9uIGlmIHN0YXJ0IHdhcyBhdCB0aGUgZW5k
IG9mIHRoZSB0ZXh0IG5vZGUuCisJCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3R5bGUvcHVzaC1k
b3duLWltcGxpY2l0LXN0eWxlcy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJ
bXBsaWNpdGx5U3R5bGVkRWxlbWVudCk6IEFkZGVkIGV4dHJhY3RlZFN0eWxlLCB3aGljaCByZWNl
aXZlcworICAgICAgICB0aGUgc3R5bGUgaW1wbGljaXRseSBhZGRlZCBieSB0aGUgZWxlbWVudCBi
ZWluZyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJh
Y3RJbmxpbmVTdHlsZVRvUHVzaERvd24pOiBDYWxscyByZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxl
bWVudAorICAgICAgICB0byByZW1vdmUgdGhlIGltcGxpY2l0bHkgc3R5bGVkIGVsZW1lbnQgYW5k
IGV4dHJhY3QgdGhlIGlubGluZSBzdHlsZSBhZGRlZCBieSB0aGUgZWxlbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93bik6
IEZpeGVkIGEgYnVnIHRoYXQgYWRkSW5saW5lU3R5bGVJZk5lZWRlZAorICAgICAgICBjb3VsZCBv
dmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9uIHN0eWxlIG9mIHRoZSBub2RlLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVB
cm91bmROb2RlKTogVXNlcyBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3duCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBTZWUgYWJvdmUu
CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOiBQcm90b3R5cGUgY2hhbmdl
cy4KKwogMjAxMC0wOC0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NjE4OSkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTcsMTUgKzExOTcs
MTcgQEAgc3RhdGljIGNvbnN0IEhUTUxFcXVpdmFsZW50IEhUTUxFcXVpdmFsZQogICAgIHsgQ1NT
UHJvcGVydHlEaXJlY3Rpb24sIGZhbHNlLCBDU1NWYWx1ZUludmFsaWQsIDAsICZkaXJBdHRyLCBT
aG91bGROb3RCZVB1c2hlZERvd24gfSwKIH07CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkK
K2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIElu
bGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4
dHJhY3RlZFN0eWxlKQogeworICAgIC8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qg
c3VwcG9ydCBzdHlsZVB1c2hlZERvd24gd2hlbiBtb2RlID09IFJlbW92ZU5vbmUgYmVjYXVzZSBv
ZiBlYXJseSBleGl0LgorICAgIEFTU0VSVCghZXh0cmFjdGVkU3R5bGUgfHwgbW9kZSAhPSBSZW1v
dmVOb25lKTsKICAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemVvZihIVE1MRXF1aXZhbGVudHMpIC8gc2l6ZW9mKEhUTUxFcXVpdmFsZW50KTsg
aSsrKSB7CiAgICAgICAgIGNvbnN0IEhUTUxFcXVpdmFsZW50JiBlcXVpdmFsZW50ID0gSFRNTEVx
dWl2YWxlbnRzW2ldOwogICAgICAgICBBU1NFUlQoZXF1aXZhbGVudC5lbGVtZW50IHx8IGVxdWl2
YWxlbnQuYXR0cmlidXRlKTsKLSAgICAgICAgaWYgKGVxdWl2YWxlbnQuZWxlbWVudCAmJiAhZWxl
bWVudC0+aGFzVGFnTmFtZSgqZXF1aXZhbGVudC5lbGVtZW50KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoZXF1aXZhbGVudC5hdHRyaWJ1dGUgJiYgIWVsZW1lbnQtPmhhc0F0
dHJpYnV0ZSgqZXF1aXZhbGVudC5hdHRyaWJ1dGUpKQorICAgICAgICBpZiAoZXh0cmFjdGVkU3R5
bGUgJiYgZXF1aXZhbGVudC5wdXNoRG93blR5cGUgPT0gU2hvdWxkTm90QmVQdXNoZWREb3duCisg
ICAgICAgICAgICB8fCBlcXVpdmFsZW50LmVsZW1lbnQgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUo
KmVxdWl2YWxlbnQuZWxlbWVudCkKKyAgICAgICAgICAgIHx8IGVxdWl2YWxlbnQuYXR0cmlidXRl
ICYmICFlbGVtZW50LT5oYXNBdHRyaWJ1dGUoKmVxdWl2YWxlbnQuYXR0cmlidXRlKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKGVxdWl2YWxlbnQucHJvcGVydHlJRCk7CkBAIC0x
MjE4LDYgKzEyMjAsMTQgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRs
eQogICAgICAgICBlbHNlIGlmIChzdHlsZVZhbHVlLT5jc3NUZXh0KCkgPT0gbWFwVmFsdWUtPmNz
c1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBJZiBDU1MgdmFsdWUgaXMgcHJpbWl0
aXZlLCB0aGVuIHNraXAgaWYgdGhleSBhcmUgZXF1YWwuCiAKKyAgICAgICAgaWYgKGV4dHJhY3Rl
ZFN0eWxlKSB7CisgICAgICAgICAgICBBU1NFUlQoZXF1aXZhbGVudC5wdXNoRG93blR5cGUgIT0g
U2hvdWxkTm90QmVQdXNoZWREb3duKTsKKyAgICAgICAgICAgIGlmIChlcXVpdmFsZW50LnByaW1p
dGl2ZUlkID09IENTU1ZhbHVlSW52YWxpZCkKKyAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHls
ZS0+c2V0UHJvcGVydHkoZXF1aXZhbGVudC5wcm9wZXJ0eUlELCBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoKmVxdWl2YWxlbnQuYXR0cmlidXRlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5KGVxdWl2YWxlbnQucHJvcGVydHlJRCwg
bWFwVmFsdWUtPmNzc1RleHQoKSk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAobW9kZSA9PSBS
ZW1vdmVOb25lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEzMTQsNyArMTMyNCw3
IEBAIEhUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEEKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBs
eVN0eWxlQ29tbWFuZDo6ZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiBub2RlLCBi
b29sIGlzU3R5bGVkRWxlbWVudCwgY29uc3QgVmVjdG9yPGludD4mIHByb3BlcnRpZXMpCitQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZXh0
cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVUb0FwcGx5LCBOb2RlKiBub2RlLCBib29sIGlzU3R5bGVkRWxlbWVudCkKIHsKICAgICBBU1NF
UlQobm9kZSk7CiAgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CkBAIC0xMzMwLDgg
KzEzNDAsMTYgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQQogICAg
ICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogICAgIH0KIAotICAgIGlmICghc3R5bGUpCi0g
ICAgICAgIHJldHVybiAwOworICAgIGlmICghc3R5bGUpIHsKKyAgICAgICAgc3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHJlbW92ZUltcGxpY2l0
bHlTdHlsZWRFbGVtZW50KHN0eWxlVG9BcHBseSwgZWxlbWVudCwgUmVtb3ZlQXR0cmlidXRlc0Fu
ZEVsZW1lbnRzLCBzdHlsZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7
CisgICAgfQorCisgICAgVmVjdG9yPGludD4gcHJvcGVydGllczsKKyAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVUb0FwcGx5LT5lbmQoKTsK
KyAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9
IHN0eWxlVG9BcHBseS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBwcm9wZXJ0
aWVzLmFwcGVuZChpdC0+aWQoKSk7CiAKICAgICBzdHlsZSA9IHN0eWxlLT5jb3B5UHJvcGVydGll
c0luU2V0KHByb3BlcnRpZXMuZGF0YSgpLCBwcm9wZXJ0aWVzLnNpemUoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgaSsrKSB7CkBAIC0xMzQ2LDYgKzEz
NjQsOCBAQCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBCiAgICAgaWYg
KGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVsZW1lbnQpKQogICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogCisgICAgcmVtb3Zl
SW1wbGljaXRseVN0eWxlZEVsZW1lbnQoc3R5bGVUb0FwcGx5LCBlbGVtZW50LCBSZW1vdmVBdHRy
aWJ1dGVzQW5kRWxlbWVudHMsIHN0eWxlLmdldCgpKTsKKwogICAgIHJldHVybiBzdHlsZS5yZWxl
YXNlKCk7CiB9CiAKQEAgLTEzNTYsMTUgKzEzNzYsMTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sZW5ndGgoKSB8
fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU2luY2UgYWRk
SW5saW5lU3R5bGVJZk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVy
IG9iamVjdHMsIGFkZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVhZC4KLSAgICAvLyBGSVhNRTogYXBw
bHlJbmxpbmVTdHlsZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgotICAgIGlm
ICgobm9kZS0+cmVuZGVyZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCBub2RlLT5jaGlsZE5vZGVDb3Vu
dCgpKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG5ld0lubGluZVN0eWxlID0gc3R5bGU7CisgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgewogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBleGlzdGluZ0lubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7CiAK
ICAgICAgICAgLy8gQXZvaWQgb3ZlcnJpZGluZyBleGlzdGluZyBzdHlsZXMgb2Ygbm9kZQogICAg
ICAgICBpZiAoZXhpc3RpbmdJbmxpbmVTdHlsZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdJbmxpbmVTdHlsZSA9IGV4aXN0aW5nSW5saW5lU3R5
bGUtPmNvcHkoKTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlID0gZXhpc3RpbmdJbmxpbmVT
dHlsZS0+Y29weSgpOwogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CkBA
IC0xMzkxLDIyICsxNDEwLDIzIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGUKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5jc3NUZXh0KCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBz
dHlsZS0+Y3NzVGV4dCgpKTsKLQorICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxlSWZOZWVkZWQg
Y2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBhZGQgc3R5bGUg
YXR0cmlidXRlIGluc3RlYWQuCisgICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5bGVUb1Jhbmdl
IHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KKyAgICBpZiAoKG5vZGUtPnJlbmRlcmVyKCkt
PmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSkgJiYgbm9kZS0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1RleHQo
KSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29s
bGFwc2libGVXaGl0ZXNwYWNlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBh
ZGRJbmxpbmVTdHlsZUlmTmVlZGVkIG1heSBvdmVycmlkZSB0aGUgc3R5bGUgb2Ygbm9kZQogICAg
IC8vIFdlIGNhbid0IHdyYXAgbm9kZSB3aXRoIHRoZSBzdHlsZWQgZWxlbWVudCBoZXJlIGJlY2F1
c2UgbmV3IHN0eWxlZCBlbGVtZW50IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCBpZiB3ZSBkaWQuCiAg
ICAgLy8gSWYgd2UgbW9kaWZpZWQgdGhlIGNoaWxkIHBvaW50ZXIgaW4gcHVzaERvd25JbmxpbmVT
dHlsZUFyb3VuZE5vZGUgdG8gcG9pbnQgdG8gbmV3IHN0eWxlIGVsZW1lbnQKICAgICAvLyB0aGVu
IHdlIGZhbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdoZXJlIHdlIGtlZXAgcmVtb3ZpbmcgYW5k
IGFkZGluZyBzdHlsZWQgZWxlbWVudCB3cmFwcGluZyBub2RlLgotICAgIGFkZElubGluZVN0eWxl
SWZOZWVkZWQoc3R5bGUsIG5vZGUsIG5vZGUsIERvTm90QWRkU3R5bGVkRWxlbWVudCk7CisgICAg
YWRkSW5saW5lU3R5bGVJZk5lZWRlZChuZXdJbmxpbmVTdHlsZS5nZXQoKSwgbm9kZSwgbm9kZSwg
RG9Ob3RBZGRTdHlsZWRFbGVtZW50KTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVz
aERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBOb2RlKiB0YXJnZXROb2RlKQpAQCAtMTQxNSwxMSArMTQzNSw2IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3QKICAgICBpZiAoIWhpZ2hlc3RBbmNlc3RvcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGludD4gcHJvcGVydGllczsKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgp
OwotICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcHJvcGVydGllcy5h
cHBlbmQoaXQtPmlkKCkpOwotCiAgICAgLy8gVGhlIG91dGVyIGxvb3AgaXMgdHJhdmVyc2luZyB0
aGUgdHJlZSB2ZXJ0aWNhbGx5IGZyb20gaGlnaGVzdEFuY2VzdG9yIHRvIHRhcmdldE5vZGUKICAg
ICBOb2RlKiBjdXJyZW50ID0gaGlnaGVzdEFuY2VzdG9yOwogICAgIHdoaWxlIChjdXJyZW50ICE9
IHRhcmdldE5vZGUpIHsKQEAgLTE0MzEsNyArMTQ0Niw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnB1c2hEb3duSW5saW5lU3QKICAgICAgICAgUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IHN0eWxl
ZEVsZW1lbnQ7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAmJiBtX3N0
eWxlZElubGluZUVsZW1lbnQgJiYgY3VycmVudC0+aGFzVGFnTmFtZShtX3N0eWxlZElubGluZUVs
ZW1lbnQtPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgc3R5bGVkRWxlbWVudCA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihjdXJyZW50KTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBleHRyYWN0SW5saW5lU3R5bGVUb1B1
c2hEb3duKGN1cnJlbnQsIHN0eWxlZEVsZW1lbnQsIHByb3BlcnRpZXMpOworICAgICAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9QdXNoRG93biA9IGV4dHJhY3RJ
bmxpbmVTdHlsZVRvUHVzaERvd24oc3R5bGUsIGN1cnJlbnQsIHN0eWxlZEVsZW1lbnQpOwogCiAg
ICAgICAgIC8vIFRoZSBpbm5lciBsb29wIHdpbGwgZ28gdGhyb3VnaCBjaGlsZHJlbiBvbiBlYWNo
IGxldmVsCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWdncmVnYXRlIGlubGluZSBjaGls
ZCBlbGVtZW50cyB0b2dldGhlciBzbyB0aGF0IHdlIGRvbid0IHdyYXAgZWFjaCBjaGlsZCBzZXBh
cmF0ZWx5LgpAQCAtMTQ4Myw2ICsxNDk4LDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUlubGluZVN0eWwKICAgICB9CiAKICAgICBQb3NpdGlvbiBwdXNoRG93blN0YXJ0ID0gc3Rh
cnQuZG93bnN0cmVhbSgpOworICAgIC8vIElmIHRoZSBwdXNoRG93blN0YXJ0IGlzIGF0IHRoZSBl
bmQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhpcyBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZC4K
KyAgICAvLyBNb3ZlIGl0IHRvIHRoZSBuZXh0IGRlZXAgcXVpdmFsZW50IHBvc2l0aW9uIHRvIGF2
b2lkIHJlbW92aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4KKyAgICAvLyBlLmcuIGlmIHB1
c2hEb3duU3RhcnQgd2FzIGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGluIDxiPmhlbGxvPGRpdj53
b3JsZDwvZGl2PjwvYj4sIHdlIHdhbnQgdG8gbW92ZSB0byBQb3NpdGlvbigid29ybGQiLCAwKQor
ICAgIE5vZGUqIHB1c2hEb3duU3RhcnRDb250YWluZXIgPSBwdXNoRG93blN0YXJ0LmNvbnRhaW5l
ck5vZGUoKTsKKyAgICBpZiAocHVzaERvd25TdGFydENvbnRhaW5lciAmJiBwdXNoRG93blN0YXJ0
Q29udGFpbmVyLT5pc1RleHROb2RlKCkgJiYgcHVzaERvd25TdGFydC5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPT0gcHVzaERvd25TdGFydENvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zm
c2V0KCkpCisgICAgICAgIHB1c2hEb3duU3RhcnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShwdXNoRG93blN0YXJ0KTsKICAgICBQb3NpdGlvbiBwdXNoRG93bkVuZCA9IGVuZC51cHN0
cmVhbSgpOwogICAgIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLmdldCgpLCBw
dXNoRG93blN0YXJ0Lm5vZGUoKSk7CiAgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUo
c3R5bGUuZ2V0KCksIHB1c2hEb3duRW5kLm5vZGUoKSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjYxODkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTEgKzczLDExIEBAIHByaXZhdGU6
CiAgICAgLy8gc3R5bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCByZW1vdmVJbmxpbmVTdHls
ZUZyb21FbGVtZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJ
bmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKTsKICAg
ICBpbmxpbmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpIHtyZXR1cm4g
cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7
fQotICAgIGJvb2wgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUpOworICAg
IGJvb2wgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUsIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBleHRyYWN0ZWRTdHlsZSA9IDApOwogICAgIHZvaWQgcmVwbGFjZVdp
dGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYpOwogICAgIGJv
b2wgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVu
dCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMp
OwogICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKLSAgICBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3du
KE5vZGUqLCBib29sIGlzU3R5bGVkRWxlbWVudCwgY29uc3QgVmVjdG9yPGludD4mKTsKKyAgICBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0SW5saW5lU3R5bGVU
b1B1c2hEb3duKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSosIGJvb2wgaXNTdHls
ZWRFbGVtZW50KTsKICAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpOwogICAgIHZvaWQgcHVzaERvd25Jbmxp
bmVTdHlsZUFyb3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAg
ICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY2MTk4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgY2Fubm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBi
eSB1IG9yIHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0NTYwCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3VyZSBXZWJLaXQgcmVtb3ZlcyB0
ZXh0LWRlY29yYXRpb25zIGFkZGVkIGJ5IHUgb3IgcworICAgICAgICBhbmQgcHVzaGVzIGRvd24g
aW1wbGljaXQgc3R5bGVzIHByb3Blcmx5IGludG8gZGVzY2VuZGVudCBub2Rlcy4KKworICAgICAg
ICAqIGVkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxl
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNo
LWRvd24taW1wbGljaXQtc3R5bGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RTaW5nbGVUb2dn
bGUpOgorICAgICAgICAoc2VsZWN0QWxsKToKKyAgICAgICAgKHNlbGVjdFRlc3QpOgorICAgICAg
ICAoc2VsZWN0U2Vjb25kV29yZCk6CisgICAgICAgIChzZWxlY3RMYXN0VHdvV29yZHMpOgorICAg
ICAgICAqIGVkaXRpbmcvc3R5bGUvdHlwaW5nLXN0eWxlLTAwMy1leHBlY3RlZC50eHQ6CisKIDIw
MTAtMDgtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2NjE4OC4KSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW1wbGljaXQt
c3R5bGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
c3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3QgdG8gbWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUg
c3R5bGVzIHByb3Blcmx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRkFJTCBi
b2xkIG9uIHNlY29uZCB3b3JkIG9mIDxiPmhlbGxvIDxkaXY+d29ybGQ8L2Rpdj48L2I+IHlpZWxk
cyA8Yj5oZWxsbyA8L2I+PGRpdj53b3JsZDwvZGl2PiwgZXhwZWN0ZWQgPGI+aGVsbG88L2I+PGRp
dj53b3JsZDwvZGl2PgorUEFTUyBib2xkIG9uIGFsbCBvZiA8Yj4gPGRpdj50ZXh0PC9kaXY+IDwv
Yj4geWllbGRzICA8ZGl2PnRleHQ8L2Rpdj4gCitQQVNTIGJvbGQgb24gYWxsIG9mIDxiPjxzPjxk
aXY+dGV4dDwvZGl2Pjwvcz48L2I+IHlpZWxkcyA8cz48ZGl2PnRleHQ8L2Rpdj48L3M+CitQQVNT
IGJvbGQgb24gZmlyc3Qgd29yZCBvZiA8Yj48ZGl2PmhlbGxvPC9kaXY+PGRpdj53b3JsZDwvZGl2
PjwvYj4geWllbGRzIDxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogYm9s
ZDsgIj53b3JsZDwvZGl2PgorUEFTUyBib2xkIG9uIGZpcnN0IHdvcmQgb2YgPGI+PGRpdj5oZWxs
bzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij53b3JsZDwvZGl2PndlYmtp
dDwvYj4geWllbGRzIDxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9y
bWFsOyAiPndvcmxkPC9kaXY+PGI+d2Via2l0PC9iPgorUEFTUyBib2xkIG9uIHNlY29uZCB3b3Jk
IG9mIDxiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbyB3b3JsZDwvYj4geWllbGRz
IDxiIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbzwvYj48c3BhbiBzdHlsZT0iZm9u
dC1zdHlsZTogaXRhbGljOyI+IHdvcmxkPC9zcGFuPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25k
IHdvcmQgb2YgPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRzIDx1PmhlbGxv
PC91PiA8Yj53b3JsZDwvYj48dT4gd2Via2l0PC91PgorUEFTUyB1bmRlcmxpbmUgb24gbGFzdCB0
d28gd29yZHMgb2YgPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRzIDx1Pmhl
bGxvIDwvdT48Yj53b3JsZDwvYj4gd2Via2l0CitQQVNTIHVuZGVybGluZSBvbiBsYXN0IHR3byB3
b3JkcyBvZiA8dT5oZWxsbyA8Yj53b3JsZCB3ZWJraXQ8L2I+PC91PiB5aWVsZHMgPHU+aGVsbG8g
PC91PjxiPndvcmxkIHdlYmtpdDwvYj4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9m
IDx1PmhlbGxvIDxiPndvcmxkIHdlYmtpdDwvYj48L3U+IHlpZWxkcyA8dT5oZWxsbzwvdT4gPGI+
d29ybGQ8dT4gd2Via2l0PC91PjwvYj4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9m
IDx1PjxiPmhlbGxvIHdvcmxkPC9iPiB3ZWJraXQ8L3U+IHlpZWxkcyA8Yj48dT5oZWxsbzwvdT4g
d29ybGQ8L2I+PHU+IHdlYmtpdDwvdT4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9m
IDx1PjxzPmhlbGxvIHdvcmxkPC9zPjwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3JsZDwv
cz4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PjxzPmhlbGxvIHdvcmxkIHdl
YmtpdDwvcz48L3U+IHlpZWxkcyA8cz48dT5oZWxsbzwvdT4gd29ybGQ8dT4gd2Via2l0PC91Pjwv
cz4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PjxzPmhlbGxvIHdvcmxkPC9z
PiB3ZWJraXQ8L3U+IHlpZWxkcyA8cz48dT5oZWxsbzwvdT4gd29ybGQ8L3M+PHU+IHdlYmtpdDwv
dT4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PmhlbGxvIDxlbT48Y29kZT53
b3JsZCB3ZWJraXQ8L2NvZGU+PC9lbT4gcm9ja3M8L3U+IHlpZWxkcyA8dT5oZWxsbzwvdT4gPGVt
Pjxjb2RlPndvcmxkPHU+IHdlYmtpdDwvdT48L2NvZGU+PC9lbT48dT4gcm9ja3M8L3U+CitQQVNT
IHN0cmlrZVRocm91Z2ggb24gYWxsIG9mIDxzIHN0eWxlPSJjb2xvcjogYmx1ZTsiPmhlbGxvIHdv
cmxkPC9zPiB5aWVsZHMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+aGVsbG8gd29ybGQ8L3Nw
YW4+CitQQVNTIHN0cmlrZVRocm91Z2ggb24gZmlyc3Qgd29yZCBvZiA8cyBzdHlsZT0iY29sb3I6
IGJsdWU7Ij48ZGl2PmhlbGxvPC9kaXY+IDxiPndvcmxkPC9iPiB3ZWJraXQ8L3M+IHlpZWxkcyA8
c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij48ZGl2PmhlbGxvPC9kaXY+IDxiIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgIj53b3JsZDwvYj48cz4gd2Via2l0PC9zPjwvc3Bh
bj4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1p
bXBsaWNpdC1zdHlsZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
c3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zdHlsZS90eXBpbmctc3R5bGUtMDAzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3N0eWxlL3R5cGluZy1zdHlsZS0wMDMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA2NjE4OSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvdHlwaW5nLXN0eWxlLTAw
My1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwyMyBAQCBFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRp
b24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MSBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToo
bnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBJID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0
ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBv
ZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gSSA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBJID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1F
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
MiBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBJID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IEkg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gSSA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRD
aGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAj
dGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0byAxIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxs
U2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0
ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4gU1BB
TiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+
IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQor
RURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9t
IDEgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIg
b2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0
eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
bgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90
aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdl
OnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9m
ICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDMgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3Rp
bGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gMyBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogeHh4eHh4eHh4eHh4eHh4CkBAIC02MywxMCAr
NjMsMTAgQEAgZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54PAogZXhlY1R5
cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eDwvaT48L2I+PHNwYW4gaWQ9InRlc3Qi
Pjwvc3Bhbj4KIGV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PC9pPjwv
Yj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgogZXhlY0JvbGRDb21tYW5kOiB4eHg8Yj54eHg8aT54
eHg8L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1h
bmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0i
Zm9udC13ZWlnaHQ6IG5vcm1hbDsiPng8L3NwYW4+PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+PC9z
cGFuPgotZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8c3BhbiBjbGFz
cz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij54eDwvc3Bh
bj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1h
bmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0i
Zm9udC13ZWlnaHQ6IG5vcm1hbDsiPnh4eDwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48
L3NwYW4+Ci1leGVjSXRhbGljQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFw
cGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PC9zcGFuPjwv
aT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDog
eHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250
LXdlaWdodDogbm9ybWFsOyI+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxl
PSJmb250LXN0eWxlOiBub3JtYWw7Ij54PC9zcGFuPjwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0
ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4eDxz
cGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsi
Pnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zdHlsZTogbm9y
bWFsOyI+eHg8L3NwYW4+PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4
ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxl
LXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PHNwYW4gY2xhc3M9
IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3JtYWw7Ij54eHg8L3NwYW4+
PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hhcmFjdGVy
Q29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54PC9pPjxzcGFuIGlkPSJ0ZXN0Ij48
L3NwYW4+CitleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDwvYj48aT48Yj54eHg8
L2I+eHg8L2k+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFu
ZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54eHg8L2k+PHNwYW4gaWQ9InRlc3QiPjwvc3Bh
bj4KK2V4ZWNJdGFsaWNDb21tYW5kOiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT48
c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54
eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT54PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNU
eXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54eHg8L2k+eHg8
c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54
eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT54eHg8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWltcGxp
Y2l0LXN0eWxlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3Nj
cmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWltcGxpY2l0
LXN0eWxlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorZGVzY3JpcHRpb24oJ1Rl
c3QgdG8gbWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUgc3R5bGVzIHByb3Blcmx5LicpOwor
Cit2YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVz
dENvbnRhaW5lci5jb250ZW50RWRpdGFibGUgPSB0cnVlOworZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZCh0ZXN0Q29udGFpbmVyKTsKKworZnVuY3Rpb24gdGVzdFNpbmdsZVRvZ2dsZSh0b2dnbGVD
b21tYW5kLCBzZWxlY3RvciwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRlbnRzKQorewor
ICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOworICAgIHZhciBz
ZWxlY3RlZCA9IHNlbGVjdG9yKHRlc3RDb250YWluZXIpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCdzdHlsZVdpdGhDU1MnLCBmYWxzZSwgJ2ZhbHNlJyk7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQodG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIHZhciBhY3Rpb24gPSB0b2dn
bGVDb21tYW5kICsgJyBvbiAnICsgc2VsZWN0ZWQgKyAnIG9mICcgKyBpbml0aWFsQ29udGVudHMg
KyAiIHlpZWxkcyAiICsgdGVzdENvbnRhaW5lci5pbm5lckhUTUw7CisgICAgaWYgKHRlc3RDb250
YWluZXIuaW5uZXJIVE1MID09IGV4cGVjdGVkQ29udGVudHMpCisgICAgICAgIHRlc3RQYXNzZWQo
YWN0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoYWN0aW9uICsgIiwgZXhwZWN0
ZWQgIiArIGV4cGVjdGVkQ29udGVudHMpOworfQorCitmdW5jdGlvbiBzZWxlY3RBbGwoY29udGFp
bmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGNvbnRh
aW5lcik7CisgICAgcmV0dXJuICdhbGwnOworfQorCitmdW5jdGlvbiBzZWxlY3RUZXN0KGNvbnRh
aW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpKTsKKyAgICByZXR1cm4gJ3Rlc3QnOworfQorCitm
dW5jdGlvbiBzZWxlY3RGaXJzdFdvcmQoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLm1vZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnd29yZCcpOworICAgIHJldHVybiAnZmly
c3Qgd29yZCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdFNlY29uZFdvcmQoY29udGFpbmVyKSB7Cisg
ICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAg
d2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ3dvcmQnKTsK
KyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICd3
b3JkJyk7CisgICAgcmV0dXJuICdzZWNvbmQgd29yZCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdExh
c3RUd29Xb3Jkcyhjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9z
aXRpb24oY29udGFpbmVyLCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpOworICAgIHdpbmRv
dy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2FyZCcsICd3b3JkJyk7Cisg
ICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ3dv
cmQnKTsKKyAgICByZXR1cm4gJ2xhc3QgdHdvIHdvcmRzJzsKK30KKwordGVzdFNpbmdsZVRvZ2ds
ZSgiYm9sZCIsIHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVsbG88L2Rpdj4gd29ybGQ8L2I+
JywgJzxkaXY+aGVsbG88L2Rpdj48Yj4gd29ybGQ8L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJi
b2xkIiwgc2VsZWN0Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2PndvcmxkPC9iPicsICc8
ZGl2PmhlbGxvPC9kaXY+PGI+d29ybGQ8L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwg
c2VsZWN0Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2PjxlbT53b3JsZDwvZW0+PC9iPics
ICc8ZGl2PmhlbGxvPC9kaXY+PGVtIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgIj53b3JsZDwv
ZW0+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0U2Vjb25kV29yZCwgJzxiPmhl
bGxvIDxkaXY+d29ybGQ8L2Rpdj48L2I+JywgJzxiPmhlbGxvIDwvYj48ZGl2PndvcmxkPC9kaXY+
Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0U2Vjb25kV29yZCwgJzxiPjxlbT5o
ZWxsbzwvZW0+IDxkaXY+d29ybGQ8L2Rpdj48L2I+JywgJzxlbSBzdHlsZT0iZm9udC13ZWlnaHQ6
IGJvbGQ7ICI+aGVsbG88L2VtPiA8ZGl2PndvcmxkPC9kaXY+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xl
KCJib2xkIiwgc2VsZWN0QWxsLCAnPGI+IDxkaXY+dGV4dDwvZGl2PiA8L2I+JywgJyA8ZGl2PnRl
eHQ8L2Rpdj4gJyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0QWxsLCAnPGI+PHM+
PGRpdj50ZXh0PC9kaXY+PC9zPjwvYj4nLCAnPHM+PGRpdj50ZXh0PC9kaXY+PC9zPicpOwordGVz
dFNpbmdsZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVsbG88L2Rp
dj48ZGl2PndvcmxkPC9kaXY+PC9iPicsICc8ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0iZm9u
dC13ZWlnaHQ6IGJvbGQ7ICI+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQi
LCBzZWxlY3RGaXJzdFdvcmQsICc8Yj48ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDsiPndvcmxkPC9kaXY+d2Via2l0PC9iPicsICc8ZGl2PmhlbGxvPC9kaXY+
PGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgIj53b3JsZDwvZGl2PjxiPndlYmtpdDwv
Yj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPGIgc3R5
bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPmhlbGxvIHdvcmxkPC9iPicsICc8YiBzdHlsZT0iZm9u
dC1zdHlsZTogaXRhbGljOyI+aGVsbG88L2I+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxp
YzsiPiB3b3JsZDwvc3Bhbj4nKTsKKwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgc2Vs
ZWN0U2Vjb25kV29yZCwgJzx1PmhlbGxvIDxiPndvcmxkPC9iPiB3ZWJraXQ8L3U+JywgJzx1Pmhl
bGxvPC91PiA8Yj53b3JsZDwvYj48dT4gd2Via2l0PC91PicpOwordGVzdFNpbmdsZVRvZ2dsZSgi
dW5kZXJsaW5lIiwgc2VsZWN0TGFzdFR3b1dvcmRzLCAnPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdl
YmtpdDwvdT4nLCAnPHU+aGVsbG8gPC91PjxiPndvcmxkPC9iPiB3ZWJraXQnKTsKK3Rlc3RTaW5n
bGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdExhc3RUd29Xb3JkcywgJzx1PmhlbGxvIDxiPndv
cmxkIHdlYmtpdDwvYj48L3U+JywgJzx1PmhlbGxvIDwvdT48Yj53b3JsZCB3ZWJraXQ8L2I+Jyk7
Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+aGVs
bG8gPGI+d29ybGQgd2Via2l0PC9iPjwvdT4nLCAnPHU+aGVsbG88L3U+IDxiPndvcmxkPHU+IHdl
YmtpdDwvdT48L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNv
bmRXb3JkLCAnPHU+PGI+aGVsbG8gd29ybGQ8L2I+IHdlYmtpdDwvdT4nLCAnPGI+PHU+aGVsbG88
L3U+IHdvcmxkPC9iPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxp
bmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQ8L3M+PC91PicsICc8cz48
dT5oZWxsbzwvdT4gd29ybGQ8L3M+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBz
ZWxlY3RTZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQgd2Via2l0PC9zPjwvdT4nLCAnPHM+
PHU+aGVsbG88L3U+IHdvcmxkPHU+IHdlYmtpdDwvdT48L3M+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xl
KCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQ8L3M+IHdl
YmtpdDwvdT4nLCAnPHM+PHU+aGVsbG88L3U+IHdvcmxkPC9zPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0
ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+aGVsbG8g
PGVtPjxjb2RlPndvcmxkIHdlYmtpdDwvY29kZT48L2VtPiByb2NrczwvdT4nLCAnPHU+aGVsbG88
L3U+IDxlbT48Y29kZT53b3JsZDx1PiB3ZWJraXQ8L3U+PC9jb2RlPjwvZW0+PHU+IHJvY2tzPC91
PicpOworCit0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiwgc2VsZWN0QWxsLCAnPHMg
c3R5bGU9ImNvbG9yOiBibHVlOyI+aGVsbG8gd29ybGQ8L3M+JywgJzxzcGFuIHN0eWxlPSJjb2xv
cjogYmx1ZTsiPmhlbGxvIHdvcmxkPC9zcGFuPicpOwordGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtl
VGhyb3VnaCIsIHNlbGVjdEZpcnN0V29yZCwgJzxzIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjxkaXY+
aGVsbG88L2Rpdj4gPGI+d29ybGQ8L2I+IHdlYmtpdDwvcz4nLCAnPHNwYW4gc3R5bGU9ImNvbG9y
OiBibHVlOyI+PGRpdj5oZWxsbzwvZGl2PiA8YiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7ICI+d29ybGQ8L2I+PHM+IHdlYmtpdDwvcz48L3NwYW4+Jyk7CisKK2RvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65759</attachid>
            <date>2010-08-27 13:33:15 -0700</date>
            <delta_ts>2010-08-27 14:12:57 -0700</delta_ts>
            <desc>fixed change logs and the expected result for push-down-implicit-styles</desc>
            <filename>bug-44560-20100827133314.patch</filename>
            <type>text/plain</type>
            <size>30334</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IFdlYktpdCBub3QgcHVzaGluZyBkb3duIGlt
cGxpY2l0bHkgYWRkZWQgc3R5bGVzIHRvIGRlc2NlbmRlbnQgbm9kZXMuCisgICAgICAgIEZpeGVk
IHRoZSBidWcgYnkgcHVzaGluZyBkb3duIGFsbCBlbGVtZW50cyB0aGF0IGltcGxpY2l0bHkgYWRk
IHN0eWxlLgorCisgICAgICAgIGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24gbm93IGNhbGxz
IHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50LCB3aGljaCB3YXMgbW9kaWZpZWQgdG8gZXh0
cmFjdAorICAgICAgICB0aGUgc3R5bGUgaW1wbGljaXRseSBhZGRlZCBieSB0aGUgZWxlbWVudCB0
byBleHRyYWN0U3R5bGUuCisKKyAgICAgICAgVGhpcyByZXZlYWxlZCBhIGJ1ZyBpbiBhcHBseUlu
bGluZVN0eWxlVG9QdXNoRG93biB3aGVyZSBhcHBseUlubGluZVN0eWxlSWZOZWVkZWQgY291bGQg
YWRkCisgICAgICAgIGFuIGltcGxpY2l0bHkgc3R5bGVkIGVsZW1lbnQgaW5zaWRlIGFuIGVsZW1l
bnQgd2l0aCBhIGNvbmZsaWN0aW5nIHN0eWxlLCB0aGVyZWJ5IG92ZXJyaWRpbmcgdGhlIHN0eWxl
IG9mIHRoZSBlbGVtZW50LgorICAgICAgICBGaXhlZCB0aGlzIGJ5IGV4dGVuZGluZyB0aGUgbG9n
aWMgdG8gaG9ub3IgdGhlIGV4aXN0aW5nIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbiB1c2VkIGlu
CisgICAgICAgIHRoZSBjYXNlIG9mIHJld3JpdGluZyBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24g
dG8gYWxsIGNhc2VzIGluY2x1ZGluZyB0aGUgb25lIGNhbGxpbmcgYWRkSW5saW5lU3R5bGVJZk5l
ZWRlZC4KKworICAgICAgICBBbHNvIGZpeGVkIGEgYnVnIGluIHJlbW92ZUlubGluZVN0eWxlIHdo
ZXJlIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIHdhcyBjYWxsZWQgb24gYSB0ZXh0IG5v
ZGUKKyAgICAgICAgb3V0c2lkZSBvZiBzZWxlY3Rpb24gaWYgc3RhcnQgd2FzIGF0IHRoZSBlbmQg
b2YgdGhlIHRleHQgbm9kZS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3N0eWxlL3B1c2gtZG93
bi1pbXBsaWNpdC1zdHlsZXMuaHRtbAorCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1w
bGljaXRseVN0eWxlZEVsZW1lbnQpOiBBZGRlZCBleHRyYWN0ZWRTdHlsZSwgd2hpY2ggcmVjZWl2
ZXMKKyAgICAgICAgdGhlIHN0eWxlIGltcGxpY2l0bHkgYWRkZWQgYnkgdGhlIGVsZW1lbnQgYmVp
bmcgcmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpleHRyYWN0
SW5saW5lU3R5bGVUb1B1c2hEb3duKTogQ2FsbHMgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1l
bnQKKyAgICAgICAgdG8gcmVtb3ZlIHRoZSBpbXBsaWNpdGx5IHN0eWxlZCBlbGVtZW50IGFuZCBl
eHRyYWN0IHRoZSBpbmxpbmUgc3R5bGUgYWRkZWQgYnkgdGhlIGVsZW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOiBG
aXhlZCBhIGJ1ZyB0aGF0IGFkZElubGluZVN0eWxlSWZOZWVkZWQKKyAgICAgICAgY291bGQgb3Zl
cnJpZGUgdGhlIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbiBzdHlsZSBvZiB0aGUgbm9kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJv
dW5kTm9kZSk6IFVzZXMgZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogU2VlIGFib3ZlLgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaDogUHJvdG90eXBlIGNoYW5nZXMu
CisKIDIwMTAtMDgtMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjYxODkpCisrKyBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk3LDE1ICsxMTk3LDE3
IEBAIHN0YXRpYyBjb25zdCBIVE1MRXF1aXZhbGVudCBIVE1MRXF1aXZhbGUKICAgICB7IENTU1By
b3BlcnR5RGlyZWN0aW9uLCBmYWxzZSwgQ1NTVmFsdWVJbnZhbGlkLCAwLCAmZGlyQXR0ciwgU2hv
dWxkTm90QmVQdXNoZWREb3duIH0sCiB9OwogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiti
b29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxp
bmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleHRy
YWN0ZWRTdHlsZSkKIHsKKyAgICAvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1
cHBvcnQgc3R5bGVQdXNoZWREb3duIHdoZW4gbW9kZSA9PSBSZW1vdmVOb25lIGJlY2F1c2Ugb2Yg
ZWFybHkgZXhpdC4KKyAgICBBU1NFUlQoIWV4dHJhY3RlZFN0eWxlIHx8IG1vZGUgIT0gUmVtb3Zl
Tm9uZSk7CiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplb2YoSFRNTEVxdWl2YWxlbnRzKSAvIHNpemVvZihIVE1MRXF1aXZhbGVudCk7IGkr
KykgewogICAgICAgICBjb25zdCBIVE1MRXF1aXZhbGVudCYgZXF1aXZhbGVudCA9IEhUTUxFcXVp
dmFsZW50c1tpXTsKICAgICAgICAgQVNTRVJUKGVxdWl2YWxlbnQuZWxlbWVudCB8fCBlcXVpdmFs
ZW50LmF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChlcXVpdmFsZW50LmVsZW1lbnQgJiYgIWVsZW1l
bnQtPmhhc1RhZ05hbWUoKmVxdWl2YWxlbnQuZWxlbWVudCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGVxdWl2YWxlbnQuYXR0cmlidXRlICYmICFlbGVtZW50LT5oYXNBdHRy
aWJ1dGUoKmVxdWl2YWxlbnQuYXR0cmlidXRlKSkKKyAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxl
ICYmIGVxdWl2YWxlbnQucHVzaERvd25UeXBlID09IFNob3VsZE5vdEJlUHVzaGVkRG93bgorICAg
ICAgICAgICAgfHwgZXF1aXZhbGVudC5lbGVtZW50ICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKCpl
cXVpdmFsZW50LmVsZW1lbnQpCisgICAgICAgICAgICB8fCBlcXVpdmFsZW50LmF0dHJpYnV0ZSAm
JiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKCplcXVpdmFsZW50LmF0dHJpYnV0ZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShlcXVpdmFsZW50LnByb3BlcnR5SUQpOwpAQCAtMTIx
OCw2ICsxMjIwLDE0IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUltcGxpY2l0bHkK
ICAgICAgICAgZWxzZSBpZiAoc3R5bGVWYWx1ZS0+Y3NzVGV4dCgpID09IG1hcFZhbHVlLT5jc3NU
ZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGlzIHByaW1pdGl2
ZSwgdGhlbiBza2lwIGlmIHRoZXkgYXJlIGVxdWFsLgogCisgICAgICAgIGlmIChleHRyYWN0ZWRT
dHlsZSkgeworICAgICAgICAgICAgQVNTRVJUKGVxdWl2YWxlbnQucHVzaERvd25UeXBlICE9IFNo
b3VsZE5vdEJlUHVzaGVkRG93bik7CisgICAgICAgICAgICBpZiAoZXF1aXZhbGVudC5wcmltaXRp
dmVJZCA9PSBDU1NWYWx1ZUludmFsaWQpCisgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUt
PnNldFByb3BlcnR5KGVxdWl2YWxlbnQucHJvcGVydHlJRCwgZWxlbWVudC0+Z2V0QXR0cmlidXRl
KCplcXVpdmFsZW50LmF0dHJpYnV0ZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGV4dHJhY3RlZFN0eWxlLT5zZXRQcm9wZXJ0eShlcXVpdmFsZW50LnByb3BlcnR5SUQsIG1h
cFZhbHVlLT5jc3NUZXh0KCkpOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1vZGUgPT0gUmVt
b3ZlTm9uZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMzE0LDcgKzEzMjQsNyBA
QCBIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlT
dHlsZUNvbW1hbmQ6OmV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSogbm9kZSwgYm9v
bCBpc1N0eWxlZEVsZW1lbnQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm9wZXJ0aWVzKQorUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJh
Y3RJbmxpbmVTdHlsZVRvUHVzaERvd24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
VG9BcHBseSwgTm9kZSogbm9kZSwgYm9vbCBpc1N0eWxlZEVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KG5vZGUpOwogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwpAQCAtMTMzMCw4ICsx
MzQwLDE2IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEEKICAgICAg
ICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAoIXN0eWxlKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXN0eWxlKSB7CisgICAgICAgIHN0eWxlID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICByZW1vdmVJbXBsaWNpdGx5
U3R5bGVkRWxlbWVudChzdHlsZVRvQXBwbHksIGVsZW1lbnQsIFJlbW92ZUF0dHJpYnV0ZXNBbmRF
bGVtZW50cywgc3R5bGUuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwor
ICAgIH0KKworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlVG9BcHBseS0+ZW5kKCk7Cisg
ICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dHlsZVRvQXBwbHktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcHJvcGVydGll
cy5hcHBlbmQoaXQtPmlkKCkpOwogCiAgICAgc3R5bGUgPSBzdHlsZS0+Y29weVByb3BlcnRpZXNJ
blNldChwcm9wZXJ0aWVzLmRhdGEoKSwgcHJvcGVydGllcy5zaXplKCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykgewpAQCAtMTM0Niw2ICsxMzY0
LDggQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQQogICAgIGlmIChp
c1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbihlbGVtZW50KSkKICAgICAg
ICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKIAorICAgIHJlbW92ZUlt
cGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlVG9BcHBseSwgZWxlbWVudCwgUmVtb3ZlQXR0cmli
dXRlc0FuZEVsZW1lbnRzLCBzdHlsZS5nZXQoKSk7CisKICAgICByZXR1cm4gc3R5bGUucmVsZWFz
ZSgpOwogfQogCkBAIC0xMzU2LDE1ICsxMzc2LDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGUKICAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkgfHwg
IW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFNpbmNlIGFkZElu
bGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBv
YmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCi0gICAgLy8gRklYTUU6IGFwcGx5
SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KLSAgICBpZiAo
KG5vZGUtPnJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291bnQo
KSkgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBuZXdJbmxpbmVTdHlsZSA9IHN0eWxlOworICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG5vZGUpOwogICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogZXhpc3RpbmdJbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpOwogCiAg
ICAgICAgIC8vIEF2b2lkIG92ZXJyaWRpbmcgZXhpc3Rpbmcgc3R5bGVzIG9mIG5vZGUKICAgICAg
ICAgaWYgKGV4aXN0aW5nSW5saW5lU3R5bGUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbmV3SW5saW5lU3R5bGUgPSBleGlzdGluZ0lubGluZVN0eWxl
LT5jb3B5KCk7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZSA9IGV4aXN0aW5nSW5saW5lU3R5
bGUtPmNvcHkoKTsKICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwpAQCAt
MTM5MSwyMiArMTQxMCwyMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxl
bWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgc3R5
bGUtPmNzc1RleHQoKSk7Ci0KKyAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkIGNh
bid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0eWxlIGF0
dHJpYnV0ZSBpbnN0ZWFkLgorICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9SYW5nZSBz
aG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCisgICAgaWYgKChub2RlLT5yZW5kZXJlcigpLT5p
c0Jsb2NrRmxvdygpIHx8IG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpICYmIG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSkgeworICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0KCkg
JiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5vZGUtPnJlbmRlcmVyKCkpLT5pc0FsbENvbGxh
cHNpYmxlV2hpdGVzcGFjZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogYWRk
SW5saW5lU3R5bGVJZk5lZWRlZCBtYXkgb3ZlcnJpZGUgdGhlIHN0eWxlIG9mIG5vZGUKICAgICAv
LyBXZSBjYW4ndCB3cmFwIG5vZGUgd2l0aCB0aGUgc3R5bGVkIGVsZW1lbnQgaGVyZSBiZWNhdXNl
IG5ldyBzdHlsZWQgZWxlbWVudCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQgaWYgd2UgZGlkLgogICAg
IC8vIElmIHdlIG1vZGlmaWVkIHRoZSBjaGlsZCBwb2ludGVyIGluIHB1c2hEb3duSW5saW5lU3R5
bGVBcm91bmROb2RlIHRvIHBvaW50IHRvIG5ldyBzdHlsZSBlbGVtZW50CiAgICAgLy8gdGhlbiB3
ZSBmYWxsIGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVyZSB3ZSBrZWVwIHJlbW92aW5nIGFuZCBh
ZGRpbmcgc3R5bGVkIGVsZW1lbnQgd3JhcHBpbmcgbm9kZS4KLSAgICBhZGRJbmxpbmVTdHlsZUlm
TmVlZGVkKHN0eWxlLCBub2RlLCBub2RlLCBEb05vdEFkZFN0eWxlZEVsZW1lbnQpOworICAgIGFk
ZElubGluZVN0eWxlSWZOZWVkZWQobmV3SW5saW5lU3R5bGUuZ2V0KCksIG5vZGUsIG5vZGUsIERv
Tm90QWRkU3R5bGVkRWxlbWVudCk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hE
b3duSW5saW5lU3R5bGVBcm91bmROb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgTm9kZSogdGFyZ2V0Tm9kZSkKQEAgLTE0MTUsMTEgKzE0MzUsNiBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0CiAgICAgaWYgKCFoaWdoZXN0QW5jZXN0b3IpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXM7Ci0gICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsK
LSAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9
IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHByb3BlcnRpZXMuYXBw
ZW5kKGl0LT5pZCgpKTsKLQogICAgIC8vIFRoZSBvdXRlciBsb29wIGlzIHRyYXZlcnNpbmcgdGhl
IHRyZWUgdmVydGljYWxseSBmcm9tIGhpZ2hlc3RBbmNlc3RvciB0byB0YXJnZXROb2RlCiAgICAg
Tm9kZSogY3VycmVudCA9IGhpZ2hlc3RBbmNlc3RvcjsKICAgICB3aGlsZSAoY3VycmVudCAhPSB0
YXJnZXROb2RlKSB7CkBAIC0xNDMxLDcgKzE0NDYsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpwdXNoRG93bklubGluZVN0CiAgICAgICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBzdHlsZWRF
bGVtZW50OwogICAgICAgICBpZiAoY3VycmVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgbV9zdHls
ZWRJbmxpbmVFbGVtZW50ICYmIGN1cnJlbnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVt
ZW50LT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oY3VycmVudCk7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duID0gZXh0cmFjdElubGluZVN0eWxlVG9QdXNo
RG93bihjdXJyZW50LCBzdHlsZWRFbGVtZW50LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZVRvUHVzaERvd24gPSBleHRyYWN0SW5s
aW5lU3R5bGVUb1B1c2hEb3duKHN0eWxlLCBjdXJyZW50LCBzdHlsZWRFbGVtZW50KTsKIAogICAg
ICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRyZW4gb24gZWFjaCBs
ZXZlbAogICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFnZ3JlZ2F0ZSBpbmxpbmUgY2hpbGQg
ZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB3ZSBkb24ndCB3cmFwIGVhY2ggY2hpbGQgc2VwYXJh
dGVseS4KQEAgLTE0ODMsNiArMTQ5OCwxMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbmxpbmVTdHlsCiAgICAgfQogCiAgICAgUG9zaXRpb24gcHVzaERvd25TdGFydCA9IHN0YXJ0
LmRvd25zdHJlYW0oKTsKKyAgICAvLyBJZiB0aGUgcHVzaERvd25TdGFydCBpcyBhdCB0aGUgZW5k
IG9mIGEgdGV4dCBub2RlLCB0aGVuIHRoaXMgbm9kZSBpcyBub3QgZnVsbHkgc2VsZWN0ZWQuCisg
ICAgLy8gTW92ZSBpdCB0byB0aGUgbmV4dCBkZWVwIHF1aXZhbGVudCBwb3NpdGlvbiB0byBhdm9p
ZCByZW1vdmluZyB0aGUgc3R5bGUgZnJvbSB0aGlzIG5vZGUuCisgICAgLy8gZS5nLiBpZiBwdXNo
RG93blN0YXJ0IHdhcyBhdCBQb3NpdGlvbigiaGVsbG8iLCA1KSBpbiA8Yj5oZWxsbzxkaXY+d29y
bGQ8L2Rpdj48L2I+LCB3ZSB3YW50IFBvc2l0aW9uKCJ3b3JsZCIsIDApIGluc3RlYWQuCisgICAg
Tm9kZSogcHVzaERvd25TdGFydENvbnRhaW5lciA9IHB1c2hEb3duU3RhcnQuY29udGFpbmVyTm9k
ZSgpOworICAgIGlmIChwdXNoRG93blN0YXJ0Q29udGFpbmVyICYmIHB1c2hEb3duU3RhcnRDb250
YWluZXItPmlzVGV4dE5vZGUoKSAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSA9PSBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KSkKKyAgICAgICAgcHVzaERvd25TdGFydCA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KHB1c2hEb3duU3RhcnQpOwogICAgIFBvc2l0aW9uIHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFt
KCk7CiAgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hE
b3duU3RhcnQubm9kZSgpKTsKICAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHls
ZS5nZXQoKSwgcHVzaERvd25FbmQubm9kZSgpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5oCShyZXZpc2lvbiA2NjE4OSkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMSArNzMsMTEgQEAgcHJpdmF0ZToKICAg
ICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGlu
ZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOwogICAgIGlu
bGluZSBib29sIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCkge3JldHVybiByZW1v
dmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBSZW1vdmVOb25lKTt9Ci0g
ICAgYm9vbCByZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSk7CisgICAgYm9v
bCByZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGV4dHJhY3RlZFN0eWxlID0gMCk7CiAgICAgdm9pZCByZXBsYWNlV2l0aFNw
YW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqJik7CiAgICAgYm9vbCBy
ZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kiwg
SW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAg
ICAgSFRNTEVsZW1lbnQqIGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwotICAgIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9k
ZSosIGJvb2wgaXNTdHlsZWRFbGVtZW50LCBjb25zdCBWZWN0b3I8aW50PiYpOworICAgIFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVz
aERvd24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKiwgYm9vbCBpc1N0eWxlZEVs
ZW1lbnQpOwogICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSosIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSk7CiAgICAgdm9pZCBwdXNoRG93bklubGluZVN0
eWxlQXJvdW5kTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKICAgICB2
b2lkIHJlbW92ZUlubGluZVN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjYxOTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wOC0yNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBjYW5ub3QgcmVtb3ZlIHRleHQtZGVjb3JhdGlvbiB3aGVuIHN0eWxlIGlzIGFkZGVkIGJ5IHUg
b3IgcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1
NjAKKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktpdCByZW1vdmVzIHRleHQt
ZGVjb3JhdGlvbnMgYWRkZWQgYnkgdSBvciBzCisgICAgICAgIGFuZCBwdXNoZXMgZG93biBpbXBs
aWNpdCBzdHlsZXMgcHJvcGVybHkgaW50byBkZXNjZW5kZW50IG5vZGVzLgorCisgICAgICAgICog
ZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3R5bGUvc2NyaXB0LXRlc3RzL3B1c2gtZG93
bi1pbXBsaWNpdC1zdHlsZXMuanM6IEFkZGVkLgorICAgICAgICAodGVzdFNpbmdsZVRvZ2dsZSk6
CisgICAgICAgIChzZWxlY3RBbGwpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgIChz
ZWxlY3RTZWNvbmRXb3JkKToKKyAgICAgICAgKHNlbGVjdExhc3RUd29Xb3Jkcyk6CisgICAgICAg
ICogZWRpdGluZy9zdHlsZS90eXBpbmctc3R5bGUtMDAzLWV4cGVjdGVkLnR4dDogTmVnYXRpb24g
b2YgaW5saW5lCisgICAgICAgIHN0eWxlcyBhcmUgbm93IGRvbmUgYnkgcHVzaGluZyBkb3duIGlt
cGxpY2l0bHkgc3R5bGVkIGVsZW1lbnRzIHJhdGhlciB0aGFuCisgICAgICAgIGNhbmNlbGluZyB0
aGVtIGJ5IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMuCisKIDIwMTAtMDgtMjcgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI2NjE4OC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVz
aC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWlt
cGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAK
K1Rlc3QgdG8gbWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUgc3R5bGVzIHByb3Blcmx5Lgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBib2xkIG9uIGZpcnN0IHdvcmQg
b2YgPGI+PGRpdj5oZWxsbzwvZGl2PiB3b3JsZDwvYj4geWllbGRzIDxkaXY+aGVsbG88L2Rpdj48
Yj4gd29ybGQ8L2I+CitQQVNTIGJvbGQgb24gZmlyc3Qgd29yZCBvZiA8Yj48ZGl2PmhlbGxvPC9k
aXY+d29ybGQ8L2I+IHlpZWxkcyA8ZGl2PmhlbGxvPC9kaXY+PGI+d29ybGQ8L2I+CitQQVNTIGJv
bGQgb24gZmlyc3Qgd29yZCBvZiA8Yj48ZGl2PmhlbGxvPC9kaXY+PGVtPndvcmxkPC9lbT48L2I+
IHlpZWxkcyA8ZGl2PmhlbGxvPC9kaXY+PGVtIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgIj53
b3JsZDwvZW0+CitQQVNTIGJvbGQgb24gc2Vjb25kIHdvcmQgb2YgPGI+aGVsbG8gPGRpdj53b3Js
ZDwvZGl2PjwvYj4geWllbGRzIDxiPmhlbGxvIDwvYj48ZGl2PndvcmxkPC9kaXY+CitQQVNTIGJv
bGQgb24gc2Vjb25kIHdvcmQgb2YgPGI+PGVtPmhlbGxvPC9lbT4gPGRpdj53b3JsZDwvZGl2Pjwv
Yj4geWllbGRzIDxlbSBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7ICI+aGVsbG88L2VtPiA8ZGl2
PndvcmxkPC9kaXY+CitQQVNTIGJvbGQgb24gYWxsIG9mIDxiPiA8ZGl2PnRleHQ8L2Rpdj4gPC9i
PiB5aWVsZHMgIDxkaXY+dGV4dDwvZGl2PiAKK1BBU1MgYm9sZCBvbiBhbGwgb2YgPGI+PHM+PGRp
dj50ZXh0PC9kaXY+PC9zPjwvYj4geWllbGRzIDxzPjxkaXY+dGV4dDwvZGl2Pjwvcz4KK1BBU1Mg
Ym9sZCBvbiBmaXJzdCB3b3JkIG9mIDxiPjxkaXY+aGVsbG88L2Rpdj48ZGl2PndvcmxkPC9kaXY+
PC9iPiB5aWVsZHMgPGRpdj5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xk
OyAiPndvcmxkPC9kaXY+CitQQVNTIGJvbGQgb24gZmlyc3Qgd29yZCBvZiA8Yj48ZGl2PmhlbGxv
PC9kaXY+PGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPndvcmxkPC9kaXY+d2Via2l0
PC9iPiB5aWVsZHMgPGRpdj5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3Jt
YWw7ICI+d29ybGQ8L2Rpdj48Yj53ZWJraXQ8L2I+CitQQVNTIGJvbGQgb24gc2Vjb25kIHdvcmQg
b2YgPGIgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPmhlbGxvIHdvcmxkPC9iPiB5aWVsZHMg
PGIgc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPmhlbGxvPC9iPjxzcGFuIHN0eWxlPSJmb250
LXN0eWxlOiBpdGFsaWM7Ij4gd29ybGQ8L3NwYW4+CitQQVNTIHVuZGVybGluZSBvbiBzZWNvbmQg
d29yZCBvZiA8dT5oZWxsbyA8Yj53b3JsZDwvYj4gd2Via2l0PC91PiB5aWVsZHMgPHU+aGVsbG88
L3U+IDxiPndvcmxkPC9iPjx1PiB3ZWJraXQ8L3U+CitQQVNTIHVuZGVybGluZSBvbiBsYXN0IHR3
byB3b3JkcyBvZiA8dT5oZWxsbyA8Yj53b3JsZDwvYj4gd2Via2l0PC91PiB5aWVsZHMgPHU+aGVs
bG8gPC91PjxiPndvcmxkPC9iPiB3ZWJraXQKK1BBU1MgdW5kZXJsaW5lIG9uIGxhc3QgdHdvIHdv
cmRzIG9mIDx1PmhlbGxvIDxiPndvcmxkIHdlYmtpdDwvYj48L3U+IHlpZWxkcyA8dT5oZWxsbyA8
L3U+PGI+d29ybGQgd2Via2l0PC9iPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2Yg
PHU+aGVsbG8gPGI+d29ybGQgd2Via2l0PC9iPjwvdT4geWllbGRzIDx1PmhlbGxvPC91PiA8Yj53
b3JsZDx1PiB3ZWJraXQ8L3U+PC9iPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2Yg
PHU+PGI+aGVsbG8gd29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRzIDxiPjx1PmhlbGxvPC91PiB3
b3JsZDwvYj48dT4gd2Via2l0PC91PgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2Yg
PHU+PHM+aGVsbG8gd29ybGQ8L3M+PC91PiB5aWVsZHMgPHM+PHU+aGVsbG88L3U+IHdvcmxkPC9z
PgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+PHM+aGVsbG8gd29ybGQgd2Vi
a2l0PC9zPjwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3JsZDx1PiB3ZWJraXQ8L3U+PC9z
PgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+PHM+aGVsbG8gd29ybGQ8L3M+
IHdlYmtpdDwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3JsZDwvcz48dT4gd2Via2l0PC91
PgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQgb2YgPHU+aGVsbG8gPGVtPjxjb2RlPndv
cmxkIHdlYmtpdDwvY29kZT48L2VtPiByb2NrczwvdT4geWllbGRzIDx1PmhlbGxvPC91PiA8ZW0+
PGNvZGU+d29ybGQ8dT4gd2Via2l0PC91PjwvY29kZT48L2VtPjx1PiByb2NrczwvdT4KK1BBU1Mg
c3RyaWtlVGhyb3VnaCBvbiBhbGwgb2YgPHMgc3R5bGU9ImNvbG9yOiBibHVlOyI+aGVsbG8gd29y
bGQ8L3M+IHlpZWxkcyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5oZWxsbyB3b3JsZDwvc3Bh
bj4KK1BBU1Mgc3RyaWtlVGhyb3VnaCBvbiBmaXJzdCB3b3JkIG9mIDxzIHN0eWxlPSJjb2xvcjog
Ymx1ZTsiPjxkaXY+aGVsbG88L2Rpdj4gPGI+d29ybGQ8L2I+IHdlYmtpdDwvcz4geWllbGRzIDxz
cGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjxkaXY+aGVsbG88L2Rpdj4gPGIgc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyAiPndvcmxkPC9iPjxzPiB3ZWJraXQ8L3M+PC9zcGFu
PgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWlt
cGxpY2l0LXN0eWxlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9z
dHlsZS9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3N0eWxlL3R5cGluZy1zdHlsZS0wMDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvc3R5bGUvdHlwaW5nLXN0eWxlLTAwMy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDY2MTg5KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS90eXBpbmctc3R5bGUtMDAz
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjMgKzMxLDIzIEBAIEVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE8KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
bgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90
aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAx
IG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMSBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5n
OkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihu
dWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2Vs
ZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3Rl
eHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9m
ICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBJID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBJID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBz
dGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAy
IG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMyBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IEkgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0ZXh0ID4gSSA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBJID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENo
YW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0
ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxT
ZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2Vs
ZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3Rl
eHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMSBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBTUEFO
ID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
U1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
MSBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBv
ZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6
cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDMgb2Yg
I3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gMyBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDMgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0byAzIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpX
ZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiB4eHh4eHh4eHh4eHh4eHgKQEAgLTYzLDEwICs2
MywxMCBAQCBleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPng8CiBleGVjVHlw
ZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+
PC9zcGFuPgogZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8L2k+PC9i
PjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+CiBleGVjQm9sZENvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4
eDwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFu
ZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJm
b250LXdlaWdodDogbm9ybWFsOyI+eDwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3Nw
YW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNz
PSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPnh4PC9zcGFu
PjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFu
ZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJm
b250LXdlaWdodDogbm9ybWFsOyI+eHh4PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwv
c3Bhbj4KLWV4ZWNJdGFsaWNDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8c3BhbiBjbGFzcz0iQXBw
bGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij54eHg8L3NwYW4+PC9p
PjwvYj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgotZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4
eHg8Yj54eHg8aT54eHg8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQt
d2VpZ2h0OiBub3JtYWw7Ij54eHg8c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9
ImZvbnQtc3R5bGU6IG5vcm1hbDsiPng8L3NwYW4+PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRl
c3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNw
YW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+
eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3Jt
YWw7Ij54eDwvc3Bhbj48L3NwYW4+PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgotZXhl
Y1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8c3BhbiBjbGFzcz0iQXBwbGUt
c3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij54eHg8c3BhbiBjbGFzcz0i
QXBwbGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtc3R5bGU6IG5vcm1hbDsiPnh4eDwvc3Bhbj48
L3NwYW4+PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJD
b21tYW5kOiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPng8L2k+PHNwYW4gaWQ9InRlc3QiPjwv
c3Bhbj4KK2V4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwv
Yj54eDwvaT48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5k
OiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT48c3BhbiBpZD0idGVzdCI+PC9zcGFu
PgorZXhlY0l0YWxpY0NvbW1hbmQ6IHh4eDxiPnh4eDwvYj48aT48Yj54eHg8L2I+eHh4PC9pPjxz
cGFuIGlkPSJ0ZXN0Ij48L3NwYW4+CitleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4
eDwvYj48aT48Yj54eHg8L2I+eHh4PC9pPng8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5
cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT54eDxz
cGFuIGlkPSJ0ZXN0Ij48L3NwYW4+CitleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4
eDwvYj48aT48Yj54eHg8L2I+eHh4PC9pPnh4eDxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+CkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGlj
aXQtc3R5bGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc2Ny
aXB0LXRlc3RzL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQt
c3R5bGVzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACitkZXNjcmlwdGlvbignVGVz
dCB0byBtYWtlIHN1cmUgd2UgcHVzaCBkb3duIGlubGluZSBzdHlsZXMgcHJvcGVybHkuJyk7CisK
K3ZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cit0ZXN0
Q29udGFpbmVyLmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7Citkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKHRlc3RDb250YWluZXIpOworCitmdW5jdGlvbiB0ZXN0U2luZ2xlVG9nZ2xlKHRvZ2dsZUNv
bW1hbmQsIHNlbGVjdG9yLCBpbml0aWFsQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpCit7Cisg
ICAgdGVzdENvbnRhaW5lci5pbm5lckhUTUwgPSBpbml0aWFsQ29udGVudHM7CisgICAgdmFyIHNl
bGVjdGVkID0gc2VsZWN0b3IodGVzdENvbnRhaW5lcik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ3N0eWxlV2l0aENTUycsIGZhbHNlLCAnZmFsc2UnKTsKKyAgICBkb2N1bWVudC5leGVjQ29t
bWFuZCh0b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7CisgICAgdmFyIGFjdGlvbiA9IHRvZ2ds
ZUNvbW1hbmQgKyAnIG9uICcgKyBzZWxlY3RlZCArICcgb2YgJyArIGluaXRpYWxDb250ZW50cyAr
ICIgeWllbGRzICIgKyB0ZXN0Q29udGFpbmVyLmlubmVySFRNTDsKKyAgICBpZiAodGVzdENvbnRh
aW5lci5pbm5lckhUTUwgPT0gZXhwZWN0ZWRDb250ZW50cykKKyAgICAgICAgdGVzdFBhc3NlZChh
Y3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChhY3Rpb24gKyAiLCBleHBlY3Rl
ZCAiICsgZXhwZWN0ZWRDb250ZW50cyk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChjb250YWlu
ZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oY29udGFp
bmVyKTsKKyAgICByZXR1cm4gJ2FsbCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdFRlc3QoY29udGFp
bmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0JykpOworICAgIHJldHVybiAndGVzdCc7Cit9CisKK2Z1
bmN0aW9uIHNlbGVjdEZpcnN0V29yZChjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICd3b3JkJyk7CisgICAgcmV0dXJuICdmaXJz
dCB3b3JkJzsKK30KKworZnVuY3Rpb24gc2VsZWN0U2Vjb25kV29yZChjb250YWluZXIpIHsKKyAg
ICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2ZvcndhcmQnLCAnd29yZCcpOwor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ3dv
cmQnKTsKKyAgICByZXR1cm4gJ3NlY29uZCB3b3JkJzsKK30KKworZnVuY3Rpb24gc2VsZWN0TGFz
dFR3b1dvcmRzKGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3Np
dGlvbihjb250YWluZXIsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCk7CisgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ3dvcmQnKTsKKyAg
ICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnd29y
ZCcpOworICAgIHJldHVybiAnbGFzdCB0d28gd29yZHMnOworfQorCit0ZXN0U2luZ2xlVG9nZ2xl
KCJib2xkIiwgc2VsZWN0Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2PiB3b3JsZDwvYj4n
LCAnPGRpdj5oZWxsbzwvZGl2PjxiPiB3b3JsZDwvYj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJv
bGQiLCBzZWxlY3RGaXJzdFdvcmQsICc8Yj48ZGl2PmhlbGxvPC9kaXY+d29ybGQ8L2I+JywgJzxk
aXY+aGVsbG88L2Rpdj48Yj53b3JsZDwvYj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBz
ZWxlY3RGaXJzdFdvcmQsICc8Yj48ZGl2PmhlbGxvPC9kaXY+PGVtPndvcmxkPC9lbT48L2I+Jywg
JzxkaXY+aGVsbG88L2Rpdj48ZW0gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyAiPndvcmxkPC9l
bT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPGI+aGVs
bG8gPGRpdj53b3JsZDwvZGl2PjwvYj4nLCAnPGI+aGVsbG8gPC9iPjxkaXY+d29ybGQ8L2Rpdj4n
KTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPGI+PGVtPmhl
bGxvPC9lbT4gPGRpdj53b3JsZDwvZGl2PjwvYj4nLCAnPGVtIHN0eWxlPSJmb250LXdlaWdodDog
Ym9sZDsgIj5oZWxsbzwvZW0+IDxkaXY+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUo
ImJvbGQiLCBzZWxlY3RBbGwsICc8Yj4gPGRpdj50ZXh0PC9kaXY+IDwvYj4nLCAnIDxkaXY+dGV4
dDwvZGl2PiAnKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxlY3RBbGwsICc8Yj48cz48
ZGl2PnRleHQ8L2Rpdj48L3M+PC9iPicsICc8cz48ZGl2PnRleHQ8L2Rpdj48L3M+Jyk7Cit0ZXN0
U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2
PjxkaXY+d29ybGQ8L2Rpdj48L2I+JywgJzxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250
LXdlaWdodDogYm9sZDsgIj53b3JsZDwvZGl2PicpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIs
IHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdl
aWdodDogbm9ybWFsOyI+d29ybGQ8L2Rpdj53ZWJraXQ8L2I+JywgJzxkaXY+aGVsbG88L2Rpdj48
ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyAiPndvcmxkPC9kaXY+PGI+d2Via2l0PC9i
PicpOwordGVzdFNpbmdsZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdFNlY29uZFdvcmQsICc8YiBzdHls
ZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aGVsbG8gd29ybGQ8L2I+JywgJzxiIHN0eWxlPSJmb250
LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbzwvYj48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGlj
OyI+IHdvcmxkPC9zcGFuPicpOworCit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxl
Y3RTZWNvbmRXb3JkLCAnPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4nLCAnPHU+aGVs
bG88L3U+IDxiPndvcmxkPC9iPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1
bmRlcmxpbmUiLCBzZWxlY3RMYXN0VHdvV29yZHMsICc8dT5oZWxsbyA8Yj53b3JsZDwvYj4gd2Vi
a2l0PC91PicsICc8dT5oZWxsbyA8L3U+PGI+d29ybGQ8L2I+IHdlYmtpdCcpOwordGVzdFNpbmds
ZVRvZ2dsZSgidW5kZXJsaW5lIiwgc2VsZWN0TGFzdFR3b1dvcmRzLCAnPHU+aGVsbG8gPGI+d29y
bGQgd2Via2l0PC9iPjwvdT4nLCAnPHU+aGVsbG8gPC91PjxiPndvcmxkIHdlYmtpdDwvYj4nKTsK
K3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT5oZWxs
byA8Yj53b3JsZCB3ZWJraXQ8L2I+PC91PicsICc8dT5oZWxsbzwvdT4gPGI+d29ybGQ8dT4gd2Vi
a2l0PC91PjwvYj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29u
ZFdvcmQsICc8dT48Yj5oZWxsbyB3b3JsZDwvYj4gd2Via2l0PC91PicsICc8Yj48dT5oZWxsbzwv
dT4gd29ybGQ8L2I+PHU+IHdlYmtpdDwvdT4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGlu
ZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3JsZDwvcz48L3U+JywgJzxzPjx1
PmhlbGxvPC91PiB3b3JsZDwvcz4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNl
bGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3JsZCB3ZWJraXQ8L3M+PC91PicsICc8cz48
dT5oZWxsbzwvdT4gd29ybGQ8dT4gd2Via2l0PC91Pjwvcz4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUo
InVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT48cz5oZWxsbyB3b3JsZDwvcz4gd2Vi
a2l0PC91PicsICc8cz48dT5oZWxsbzwvdT4gd29ybGQ8L3M+PHU+IHdlYmtpdDwvdT4nKTsKK3Rl
c3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsIHNlbGVjdFNlY29uZFdvcmQsICc8dT5oZWxsbyA8
ZW0+PGNvZGU+d29ybGQgd2Via2l0PC9jb2RlPjwvZW0+IHJvY2tzPC91PicsICc8dT5oZWxsbzwv
dT4gPGVtPjxjb2RlPndvcmxkPHU+IHdlYmtpdDwvdT48L2NvZGU+PC9lbT48dT4gcm9ja3M8L3U+
Jyk7CisKK3Rlc3RTaW5nbGVUb2dnbGUoInN0cmlrZVRocm91Z2giLCBzZWxlY3RBbGwsICc8cyBz
dHlsZT0iY29sb3I6IGJsdWU7Ij5oZWxsbyB3b3JsZDwvcz4nLCAnPHNwYW4gc3R5bGU9ImNvbG9y
OiBibHVlOyI+aGVsbG8gd29ybGQ8L3NwYW4+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2VU
aHJvdWdoIiwgc2VsZWN0Rmlyc3RXb3JkLCAnPHMgc3R5bGU9ImNvbG9yOiBibHVlOyI+PGRpdj5o
ZWxsbzwvZGl2PiA8Yj53b3JsZDwvYj4gd2Via2l0PC9zPicsICc8c3BhbiBzdHlsZT0iY29sb3I6
IGJsdWU7Ij48ZGl2PmhlbGxvPC9kaXY+IDxiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsgIj53b3JsZDwvYj48cz4gd2Via2l0PC9zPjwvc3Bhbj4nKTsKKworZG9jdW1lbnQu
Ym9keS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65765</attachid>
            <date>2010-08-27 14:13:01 -0700</date>
            <delta_ts>2010-08-28 15:49:50 -0700</delta_ts>
            <desc>fixed per enrica&apos;s comment</desc>
            <filename>bug-44560-20100827141259.patch</filename>
            <type>text/plain</type>
            <size>30272</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IFdlYktpdCBub3QgcHVzaGluZyBkb3duIGlt
cGxpY2l0bHkgYWRkZWQgc3R5bGVzIHRvIGRlc2NlbmRlbnQgbm9kZXMuCisgICAgICAgIEZpeGVk
IHRoZSBidWcgYnkgcHVzaGluZyBkb3duIGFsbCBlbGVtZW50cyB0aGF0IGltcGxpY2l0bHkgYWRk
IHN0eWxlLgorCisgICAgICAgIGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24gbm93IGNhbGxz
IHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50LCB3aGljaCB3YXMgbW9kaWZpZWQgdG8gZXh0
cmFjdAorICAgICAgICB0aGUgc3R5bGUgaW1wbGljaXRseSBhZGRlZCBieSB0aGUgZWxlbWVudCB0
byBleHRyYWN0U3R5bGUuCisKKyAgICAgICAgVGhpcyByZXZlYWxlZCBhIGJ1ZyBpbiBhcHBseUlu
bGluZVN0eWxlVG9QdXNoRG93biB3aGVyZSBhcHBseUlubGluZVN0eWxlSWZOZWVkZWQgY291bGQg
YWRkCisgICAgICAgIGFuIGltcGxpY2l0bHkgc3R5bGVkIGVsZW1lbnQgaW5zaWRlIGFuIGVsZW1l
bnQgd2l0aCBhIGNvbmZsaWN0aW5nIHN0eWxlLCB0aGVyZWJ5IG92ZXJyaWRpbmcgdGhlIHN0eWxl
IG9mIHRoZSBlbGVtZW50LgorICAgICAgICBGaXhlZCB0aGlzIGJ5IGV4dGVuZGluZyB0aGUgbG9n
aWMgdG8gaG9ub3IgdGhlIGV4aXN0aW5nIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbiB1c2VkIGlu
CisgICAgICAgIHRoZSBjYXNlIG9mIHJld3JpdGluZyBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24g
dG8gYWxsIGNhc2VzIGluY2x1ZGluZyB0aGUgb25lIGNhbGxpbmcgYWRkSW5saW5lU3R5bGVJZk5l
ZWRlZC4KKworICAgICAgICBBbHNvIGZpeGVkIGEgYnVnIGluIHJlbW92ZUlubGluZVN0eWxlIHdo
ZXJlIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIHdhcyBjYWxsZWQgb24gYSB0ZXh0IG5v
ZGUKKyAgICAgICAgb3V0c2lkZSBvZiBzZWxlY3Rpb24gaWYgc3RhcnQgd2FzIGF0IHRoZSBlbmQg
b2YgdGhlIHRleHQgbm9kZS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3N0eWxlL3B1c2gtZG93
bi1pbXBsaWNpdC1zdHlsZXMuaHRtbAorCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1w
bGljaXRseVN0eWxlZEVsZW1lbnQpOiBBZGRlZCBleHRyYWN0ZWRTdHlsZSwgd2hpY2ggcmVjZWl2
ZXMKKyAgICAgICAgdGhlIHN0eWxlIGltcGxpY2l0bHkgYWRkZWQgYnkgdGhlIGVsZW1lbnQgYmVp
bmcgcmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpleHRyYWN0
SW5saW5lU3R5bGVUb1B1c2hEb3duKTogQ2FsbHMgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1l
bnQKKyAgICAgICAgdG8gcmVtb3ZlIHRoZSBpbXBsaWNpdGx5IHN0eWxlZCBlbGVtZW50IGFuZCBl
eHRyYWN0IHRoZSBpbmxpbmUgc3R5bGUgYWRkZWQgYnkgdGhlIGVsZW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOiBG
aXhlZCBhIGJ1ZyB0aGF0IGFkZElubGluZVN0eWxlSWZOZWVkZWQKKyAgICAgICAgY291bGQgb3Zl
cnJpZGUgdGhlIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbiBzdHlsZSBvZiB0aGUgbm9kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJv
dW5kTm9kZSk6IFVzZXMgZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogU2VlIGFib3ZlLgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaDogUHJvdG90eXBlIGNoYW5nZXMu
CisKIDIwMTAtMDgtMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjYxODkpCisrKyBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk3LDE1ICsxMTk3LDE3
IEBAIHN0YXRpYyBjb25zdCBIVE1MRXF1aXZhbGVudCBIVE1MRXF1aXZhbGUKICAgICB7IENTU1By
b3BlcnR5RGlyZWN0aW9uLCBmYWxzZSwgQ1NTVmFsdWVJbnZhbGlkLCAwLCAmZGlyQXR0ciwgU2hv
dWxkTm90QmVQdXNoZWREb3duIH0sCiB9OwogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiti
b29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxp
bmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleHRy
YWN0ZWRTdHlsZSkKIHsKKyAgICAvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1
cHBvcnQgc3R5bGVQdXNoZWREb3duIHdoZW4gbW9kZSA9PSBSZW1vdmVOb25lIGJlY2F1c2Ugb2Yg
ZWFybHkgZXhpdC4KKyAgICBBU1NFUlQoIWV4dHJhY3RlZFN0eWxlIHx8IG1vZGUgIT0gUmVtb3Zl
Tm9uZSk7CiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplb2YoSFRNTEVxdWl2YWxlbnRzKSAvIHNpemVvZihIVE1MRXF1aXZhbGVudCk7IGkr
KykgewogICAgICAgICBjb25zdCBIVE1MRXF1aXZhbGVudCYgZXF1aXZhbGVudCA9IEhUTUxFcXVp
dmFsZW50c1tpXTsKICAgICAgICAgQVNTRVJUKGVxdWl2YWxlbnQuZWxlbWVudCB8fCBlcXVpdmFs
ZW50LmF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChlcXVpdmFsZW50LmVsZW1lbnQgJiYgIWVsZW1l
bnQtPmhhc1RhZ05hbWUoKmVxdWl2YWxlbnQuZWxlbWVudCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKGVxdWl2YWxlbnQuYXR0cmlidXRlICYmICFlbGVtZW50LT5oYXNBdHRy
aWJ1dGUoKmVxdWl2YWxlbnQuYXR0cmlidXRlKSkKKyAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxl
ICYmIGVxdWl2YWxlbnQucHVzaERvd25UeXBlID09IFNob3VsZE5vdEJlUHVzaGVkRG93bgorICAg
ICAgICAgICAgfHwgZXF1aXZhbGVudC5lbGVtZW50ICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKCpl
cXVpdmFsZW50LmVsZW1lbnQpCisgICAgICAgICAgICB8fCBlcXVpdmFsZW50LmF0dHJpYnV0ZSAm
JiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKCplcXVpdmFsZW50LmF0dHJpYnV0ZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShlcXVpdmFsZW50LnByb3BlcnR5SUQpOwpAQCAtMTIx
OCw2ICsxMjIwLDEzIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUltcGxpY2l0bHkK
ICAgICAgICAgZWxzZSBpZiAoc3R5bGVWYWx1ZS0+Y3NzVGV4dCgpID09IG1hcFZhbHVlLT5jc3NU
ZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGlzIHByaW1pdGl2
ZSwgdGhlbiBza2lwIGlmIHRoZXkgYXJlIGVxdWFsLgogCisgICAgICAgIGlmIChleHRyYWN0ZWRT
dHlsZSkgeworICAgICAgICAgICAgaWYgKGVxdWl2YWxlbnQucHJpbWl0aXZlSWQgPT0gQ1NTVmFs
dWVJbnZhbGlkKQorICAgICAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5zZXRQcm9wZXJ0eShl
cXVpdmFsZW50LnByb3BlcnR5SUQsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgqZXF1aXZhbGVudC5h
dHRyaWJ1dGUpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBleHRyYWN0ZWRT
dHlsZS0+c2V0UHJvcGVydHkoZXF1aXZhbGVudC5wcm9wZXJ0eUlELCBtYXBWYWx1ZS0+Y3NzVGV4
dCgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTMxNCw3ICsxMzIzLDcgQEAgSFRNTEVsZW1lbnQq
IEFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21tYW5kOjpl
eHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqIG5vZGUsIGJvb2wgaXNTdHlsZWRFbGVt
ZW50LCBjb25zdCBWZWN0b3I8aW50PiYgcHJvcGVydGllcykKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21tYW5kOjpleHRyYWN0SW5saW5lU3R5bGVU
b1B1c2hEb3duKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRvQXBwbHksIE5vZGUq
IG5vZGUsIGJvb2wgaXNTdHlsZWRFbGVtZW50KQogewogICAgIEFTU0VSVChub2RlKTsKICAgICBB
U1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKQEAgLTEzMzAsOCArMTMzOSwxNiBAQCBQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBCiAgICAgICAgIHJldHVybiBzdHls
ZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKCFzdHlsZSkgeworICAgICAgICBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQo
c3R5bGVUb0FwcGx5LCBlbGVtZW50LCBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMsIHN0eWxl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8aW50PiBwcm9wZXJ0aWVzOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZVRvQXBwbHktPmVuZCgpOworICAgIGZvciAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGVUb0FwcGx5LT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGl0LT5p
ZCgpKTsKIAogICAgIHN0eWxlID0gc3R5bGUtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGll
cy5kYXRhKCksIHByb3BlcnRpZXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKQEAgLTEzNDYsNiArMTM2Myw4IEBAIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEEKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0
dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4oZWxlbWVudCkpCiAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAKKyAgICByZW1vdmVJbXBsaWNpdGx5U3R5bGVk
RWxlbWVudChzdHlsZVRvQXBwbHksIGVsZW1lbnQsIFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50
cywgc3R5bGUuZ2V0KCkpOworCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIApAQCAt
MTM1NiwxNSArMTM3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlCiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpIHx8ICFub2RlLT5yZW5kZXJl
cigpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVl
ZGVkIGNhbid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0
eWxlIGF0dHJpYnV0ZSBpbnN0ZWFkLgotICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9S
YW5nZSBzaG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCi0gICAgaWYgKChub2RlLT5yZW5kZXJl
cigpLT5pc0Jsb2NrRmxvdygpIHx8IG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpICYmIG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
bmV3SW5saW5lU3R5bGUgPSBzdHlsZTsKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7
CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pihub2RlKTsKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nSW5s
aW5lU3R5bGUgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKIAogICAgICAgICAvLyBBdm9p
ZCBvdmVycmlkaW5nIGV4aXN0aW5nIHN0eWxlcyBvZiBub2RlCiAgICAgICAgIGlmIChleGlzdGlu
Z0lubGluZVN0eWxlKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IG5ld0lubGluZVN0eWxlID0gZXhpc3RpbmdJbmxpbmVTdHlsZS0+Y29weSgpOworICAg
ICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBleGlzdGluZ0lubGluZVN0eWxlLT5jb3B5KCk7CiAg
ICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gc3R5bGUtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKQEAgLTEzOTEsMjIgKzE0MDks
MjMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQogCi0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
ciwgbmV3SW5saW5lU3R5bGUtPmNzc1RleHQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIHN0eWxlLT5jc3NUZXh0KCkp
OwotCisgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVz
IHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVh
ZC4KKyAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQg
aGVyZSBpbnN0ZWFkLgorICAgIGlmICgobm9kZS0+cmVuZGVyZXIoKS0+aXNCbG9ja0Zsb3coKSB8
fCBub2RlLT5jaGlsZE5vZGVDb3VudCgpKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLCBz
dHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5jc3NUZXh0KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0
PFJlbmRlclRleHQqPihub2RlLT5yZW5kZXJlcigpKS0+aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3Bh
Y2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IGFkZElubGluZVN0eWxlSWZO
ZWVkZWQgbWF5IG92ZXJyaWRlIHRoZSBzdHlsZSBvZiBub2RlCiAgICAgLy8gV2UgY2FuJ3Qgd3Jh
cCBub2RlIHdpdGggdGhlIHN0eWxlZCBlbGVtZW50IGhlcmUgYmVjYXVzZSBuZXcgc3R5bGVkIGVs
ZW1lbnQgd2lsbCBuZXZlciBiZSByZW1vdmVkIGlmIHdlIGRpZC4KICAgICAvLyBJZiB3ZSBtb2Rp
ZmllZCB0aGUgY2hpbGQgcG9pbnRlciBpbiBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSB0
byBwb2ludCB0byBuZXcgc3R5bGUgZWxlbWVudAogICAgIC8vIHRoZW4gd2UgZmFsbCBpbnRvIGFu
IGluZmluaXRlIGxvb3Agd2hlcmUgd2Uga2VlcCByZW1vdmluZyBhbmQgYWRkaW5nIHN0eWxlZCBl
bGVtZW50IHdyYXBwaW5nIG5vZGUuCi0gICAgYWRkSW5saW5lU3R5bGVJZk5lZWRlZChzdHlsZSwg
bm9kZSwgbm9kZSwgRG9Ob3RBZGRTdHlsZWRFbGVtZW50KTsKKyAgICBhZGRJbmxpbmVTdHlsZUlm
TmVlZGVkKG5ld0lubGluZVN0eWxlLmdldCgpLCBub2RlLCBub2RlLCBEb05vdEFkZFN0eWxlZEVs
ZW1lbnQpOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxl
QXJvdW5kTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIE5vZGUqIHRhcmdl
dE5vZGUpCkBAIC0xNDE1LDExICsxNDM0LDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVz
aERvd25JbmxpbmVTdAogICAgIGlmICghaGlnaGVzdEFuY2VzdG9yKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzOwotICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgZm9yIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpdC0+aWQoKSk7
Ci0KICAgICAvLyBUaGUgb3V0ZXIgbG9vcCBpcyB0cmF2ZXJzaW5nIHRoZSB0cmVlIHZlcnRpY2Fs
bHkgZnJvbSBoaWdoZXN0QW5jZXN0b3IgdG8gdGFyZ2V0Tm9kZQogICAgIE5vZGUqIGN1cnJlbnQg
PSBoaWdoZXN0QW5jZXN0b3I7CiAgICAgd2hpbGUgKGN1cnJlbnQgIT0gdGFyZ2V0Tm9kZSkgewpA
QCAtMTQzMSw3ICsxNDQ1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25Jbmxp
bmVTdAogICAgICAgICBSZWZQdHI8U3R5bGVkRWxlbWVudD4gc3R5bGVkRWxlbWVudDsKICAgICAg
ICAgaWYgKGN1cnJlbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIG1fc3R5bGVkSW5saW5lRWxlbWVu
dCAmJiBjdXJyZW50LT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUo
KSkpCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KGN1cnJlbnQpOwotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlVG9QdXNoRG93biA9IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oY3VycmVudCwg
c3R5bGVkRWxlbWVudCwgcHJvcGVydGllcyk7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duID0gZXh0cmFjdElubGluZVN0eWxlVG9QdXNo
RG93bihzdHlsZSwgY3VycmVudCwgc3R5bGVkRWxlbWVudCk7CiAKICAgICAgICAgLy8gVGhlIGlu
bmVyIGxvb3Agd2lsbCBnbyB0aHJvdWdoIGNoaWxkcmVuIG9uIGVhY2ggbGV2ZWwKICAgICAgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBhZ2dyZWdhdGUgaW5saW5lIGNoaWxkIGVsZW1lbnRzIHRvZ2V0
aGVyIHNvIHRoYXQgd2UgZG9uJ3Qgd3JhcCBlYWNoIGNoaWxkIHNlcGFyYXRlbHkuCkBAIC0xNDgz
LDYgKzE0OTcsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAog
ICAgIH0KIAogICAgIFBvc2l0aW9uIHB1c2hEb3duU3RhcnQgPSBzdGFydC5kb3duc3RyZWFtKCk7
CisgICAgLy8gSWYgdGhlIHB1c2hEb3duU3RhcnQgaXMgYXQgdGhlIGVuZCBvZiBhIHRleHQgbm9k
ZSwgdGhlbiB0aGlzIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLgorICAgIC8vIE1vdmUgaXQg
dG8gdGhlIG5leHQgZGVlcCBxdWl2YWxlbnQgcG9zaXRpb24gdG8gYXZvaWQgcmVtb3ZpbmcgdGhl
IHN0eWxlIGZyb20gdGhpcyBub2RlLgorICAgIC8vIGUuZy4gaWYgcHVzaERvd25TdGFydCB3YXMg
YXQgUG9zaXRpb24oImhlbGxvIiwgNSkgaW4gPGI+aGVsbG88ZGl2PndvcmxkPC9kaXY+PC9iPiwg
d2Ugd2FudCBQb3NpdGlvbigid29ybGQiLCAwKSBpbnN0ZWFkLgorICAgIE5vZGUqIHB1c2hEb3du
U3RhcnRDb250YWluZXIgPSBwdXNoRG93blN0YXJ0LmNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAo
cHVzaERvd25TdGFydENvbnRhaW5lciAmJiBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5pc1RleHRO
b2RlKCkKKyAgICAgICAgJiYgcHVzaERvd25TdGFydC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPT0gcHVzaERvd25TdGFydENvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisg
ICAgICAgIHB1c2hEb3duU3RhcnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNo
RG93blN0YXJ0KTsKICAgICBQb3NpdGlvbiBwdXNoRG93bkVuZCA9IGVuZC51cHN0cmVhbSgpOwog
ICAgIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLmdldCgpLCBwdXNoRG93blN0
YXJ0Lm5vZGUoKSk7CiAgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0
KCksIHB1c2hEb3duRW5kLm5vZGUoKSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkocmV2aXNpb24gNjYxODkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTEgKzczLDExIEBAIHByaXZhdGU6CiAgICAgLy8g
c3R5bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVt
ZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHls
ZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKTsKICAgICBpbmxpbmUg
Ym9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpIHtyZXR1cm4gcmVtb3ZlSW5s
aW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7fQotICAgIGJv
b2wgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUpOworICAgIGJvb2wgcmVt
b3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBI
VE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBleHRyYWN0ZWRTdHlsZSA9IDApOwogICAgIHZvaWQgcmVwbGFjZVdpdGhTcGFuT3JS
ZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYpOwogICAgIGJvb2wgcmVtb3Zl
Q1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGlu
ZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOwogICAgIEhU
TUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKLSAgICBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqLCBi
b29sIGlzU3R5bGVkRWxlbWVudCwgY29uc3QgVmVjdG9yPGludD4mKTsKKyAgICBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3du
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSosIGJvb2wgaXNTdHlsZWRFbGVtZW50
KTsKICAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqLCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpOwogICAgIHZvaWQgcHVzaERvd25JbmxpbmVTdHlsZUFy
b3VuZE5vZGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CiAgICAgdm9pZCBy
ZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwg
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY2MTk4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDgtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgY2Fu
bm90IHJlbW92ZSB0ZXh0LWRlY29yYXRpb24gd2hlbiBzdHlsZSBpcyBhZGRlZCBieSB1IG9yIHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTYwCisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3VyZSBXZWJLaXQgcmVtb3ZlcyB0ZXh0LWRlY29y
YXRpb25zIGFkZGVkIGJ5IHUgb3IgcworICAgICAgICBhbmQgcHVzaGVzIGRvd24gaW1wbGljaXQg
c3R5bGVzIHByb3Blcmx5IGludG8gZGVzY2VuZGVudCBub2Rlcy4KKworICAgICAgICAqIGVkaXRp
bmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGVkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1w
bGljaXQtc3R5bGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RTaW5nbGVUb2dnbGUpOgorICAg
ICAgICAoc2VsZWN0QWxsKToKKyAgICAgICAgKHNlbGVjdFRlc3QpOgorICAgICAgICAoc2VsZWN0
U2Vjb25kV29yZCk6CisgICAgICAgIChzZWxlY3RMYXN0VHdvV29yZHMpOgorICAgICAgICAqIGVk
aXRpbmcvc3R5bGUvdHlwaW5nLXN0eWxlLTAwMy1leHBlY3RlZC50eHQ6IE5lZ2F0aW9uIG9mIGlu
bGluZQorICAgICAgICBzdHlsZXMgYXJlIG5vdyBkb25lIGJ5IHB1c2hpbmcgZG93biBpbXBsaWNp
dGx5IHN0eWxlZCBlbGVtZW50cyByYXRoZXIgdGhhbgorICAgICAgICBjYW5jZWxpbmcgdGhlbSBi
eSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb25zLgorCiAyMDEwLTA4LTI3ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByNjYxODguCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93
bi1pbXBsaWNpdC1zdHlsZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvc3R5bGUvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNp
dC1zdHlsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitUZXN0
IHRvIG1ha2Ugc3VyZSB3ZSBwdXNoIGRvd24gaW5saW5lIHN0eWxlcyBwcm9wZXJseS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYm9sZCBvbiBmaXJzdCB3b3JkIG9mIDxi
PjxkaXY+aGVsbG88L2Rpdj4gd29ybGQ8L2I+IHlpZWxkcyA8ZGl2PmhlbGxvPC9kaXY+PGI+IHdv
cmxkPC9iPgorUEFTUyBib2xkIG9uIGZpcnN0IHdvcmQgb2YgPGI+PGRpdj5oZWxsbzwvZGl2Pndv
cmxkPC9iPiB5aWVsZHMgPGRpdj5oZWxsbzwvZGl2PjxiPndvcmxkPC9iPgorUEFTUyBib2xkIG9u
IGZpcnN0IHdvcmQgb2YgPGI+PGRpdj5oZWxsbzwvZGl2PjxlbT53b3JsZDwvZW0+PC9iPiB5aWVs
ZHMgPGRpdj5oZWxsbzwvZGl2PjxlbSBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7ICI+d29ybGQ8
L2VtPgorUEFTUyBib2xkIG9uIHNlY29uZCB3b3JkIG9mIDxiPmhlbGxvIDxkaXY+d29ybGQ8L2Rp
dj48L2I+IHlpZWxkcyA8Yj5oZWxsbyA8L2I+PGRpdj53b3JsZDwvZGl2PgorUEFTUyBib2xkIG9u
IHNlY29uZCB3b3JkIG9mIDxiPjxlbT5oZWxsbzwvZW0+IDxkaXY+d29ybGQ8L2Rpdj48L2I+IHlp
ZWxkcyA8ZW0gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyAiPmhlbGxvPC9lbT4gPGRpdj53b3Js
ZDwvZGl2PgorUEFTUyBib2xkIG9uIGFsbCBvZiA8Yj4gPGRpdj50ZXh0PC9kaXY+IDwvYj4geWll
bGRzICA8ZGl2PnRleHQ8L2Rpdj4gCitQQVNTIGJvbGQgb24gYWxsIG9mIDxiPjxzPjxkaXY+dGV4
dDwvZGl2Pjwvcz48L2I+IHlpZWxkcyA8cz48ZGl2PnRleHQ8L2Rpdj48L3M+CitQQVNTIGJvbGQg
b24gZmlyc3Qgd29yZCBvZiA8Yj48ZGl2PmhlbGxvPC9kaXY+PGRpdj53b3JsZDwvZGl2PjwvYj4g
eWllbGRzIDxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgIj53
b3JsZDwvZGl2PgorUEFTUyBib2xkIG9uIGZpcnN0IHdvcmQgb2YgPGI+PGRpdj5oZWxsbzwvZGl2
PjxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij53b3JsZDwvZGl2PndlYmtpdDwvYj4g
eWllbGRzIDxkaXY+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyAi
PndvcmxkPC9kaXY+PGI+d2Via2l0PC9iPgorUEFTUyBib2xkIG9uIHNlY29uZCB3b3JkIG9mIDxi
IHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbyB3b3JsZDwvYj4geWllbGRzIDxiIHN0
eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5oZWxsbzwvYj48c3BhbiBzdHlsZT0iZm9udC1zdHls
ZTogaXRhbGljOyI+IHdvcmxkPC9zcGFuPgorUEFTUyB1bmRlcmxpbmUgb24gc2Vjb25kIHdvcmQg
b2YgPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRzIDx1PmhlbGxvPC91PiA8
Yj53b3JsZDwvYj48dT4gd2Via2l0PC91PgorUEFTUyB1bmRlcmxpbmUgb24gbGFzdCB0d28gd29y
ZHMgb2YgPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwvdT4geWllbGRzIDx1PmhlbGxvIDwv
dT48Yj53b3JsZDwvYj4gd2Via2l0CitQQVNTIHVuZGVybGluZSBvbiBsYXN0IHR3byB3b3JkcyBv
ZiA8dT5oZWxsbyA8Yj53b3JsZCB3ZWJraXQ8L2I+PC91PiB5aWVsZHMgPHU+aGVsbG8gPC91Pjxi
PndvcmxkIHdlYmtpdDwvYj4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1Pmhl
bGxvIDxiPndvcmxkIHdlYmtpdDwvYj48L3U+IHlpZWxkcyA8dT5oZWxsbzwvdT4gPGI+d29ybGQ8
dT4gd2Via2l0PC91PjwvYj4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1Pjxi
PmhlbGxvIHdvcmxkPC9iPiB3ZWJraXQ8L3U+IHlpZWxkcyA8Yj48dT5oZWxsbzwvdT4gd29ybGQ8
L2I+PHU+IHdlYmtpdDwvdT4KK1BBU1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1Pjxz
PmhlbGxvIHdvcmxkPC9zPjwvdT4geWllbGRzIDxzPjx1PmhlbGxvPC91PiB3b3JsZDwvcz4KK1BB
U1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PjxzPmhlbGxvIHdvcmxkIHdlYmtpdDwv
cz48L3U+IHlpZWxkcyA8cz48dT5oZWxsbzwvdT4gd29ybGQ8dT4gd2Via2l0PC91Pjwvcz4KK1BB
U1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PjxzPmhlbGxvIHdvcmxkPC9zPiB3ZWJr
aXQ8L3U+IHlpZWxkcyA8cz48dT5oZWxsbzwvdT4gd29ybGQ8L3M+PHU+IHdlYmtpdDwvdT4KK1BB
U1MgdW5kZXJsaW5lIG9uIHNlY29uZCB3b3JkIG9mIDx1PmhlbGxvIDxlbT48Y29kZT53b3JsZCB3
ZWJraXQ8L2NvZGU+PC9lbT4gcm9ja3M8L3U+IHlpZWxkcyA8dT5oZWxsbzwvdT4gPGVtPjxjb2Rl
PndvcmxkPHU+IHdlYmtpdDwvdT48L2NvZGU+PC9lbT48dT4gcm9ja3M8L3U+CitQQVNTIHN0cmlr
ZVRocm91Z2ggb24gYWxsIG9mIDxzIHN0eWxlPSJjb2xvcjogYmx1ZTsiPmhlbGxvIHdvcmxkPC9z
PiB5aWVsZHMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+aGVsbG8gd29ybGQ8L3NwYW4+CitQ
QVNTIHN0cmlrZVRocm91Z2ggb24gZmlyc3Qgd29yZCBvZiA8cyBzdHlsZT0iY29sb3I6IGJsdWU7
Ij48ZGl2PmhlbGxvPC9kaXY+IDxiPndvcmxkPC9iPiB3ZWJraXQ8L3M+IHlpZWxkcyA8c3BhbiBz
dHlsZT0iY29sb3I6IGJsdWU7Ij48ZGl2PmhlbGxvPC9kaXY+IDxiIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsgIj53b3JsZDwvYj48cz4gd2Via2l0PC9zPjwvc3Bhbj4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNpdC1zdHlsZXMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbXBsaWNp
dC1zdHlsZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUv
cHVzaC1kb3duLWltcGxpY2l0LXN0eWxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHls
ZS90eXBpbmctc3R5bGUtMDAzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3R5cGluZy1zdHlsZS0wMDMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2
NjE4OSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvdHlwaW5nLXN0eWxlLTAwMy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwyMyBAQCBFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRD
aGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAj
dGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEg
b2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkg
dG9ET01SYW5nZTpyYW5nZSBmcm9tIDEgb2YgI3RleHQgPiBJID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4g
U1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMSBvZiAjdGV4
dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFt
IHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBJID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxT
ZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1FRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAj
dGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIg
b2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDMgb2YgI3RleHQgPiBTUEFOID4gSSA+IEIgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBJID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IEkgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMyBvZiAjdGV4dCA+IEkgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAzIG9mICN0ZXh0ID4gSSA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFt
IHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgog
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+
IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAx
IG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0
aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdl
OihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMSBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDEgb2YgI3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxIG9mICN0ZXh0ID4g
U1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEg
b2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkg
PiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4g
PiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElO
RyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEgb2Yg
I3RleHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxIG9mICN0ZXh0ID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3Rl
eHQgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdl
IGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBTUEFOID4gSSA+IEIgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAzIG9mICN0ZXh0
ID4gU1BBTiA+IFNQQU4gPiBJID4gQiA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDMgb2YgI3RleHQgPiBTUEFOID4gU1BBTiA+IEkgPiBCID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxl
Y3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMiBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6
cmFuZ2UgZnJvbSAzIG9mICN0ZXh0ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
MyBvZiAjdGV4dCA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmll
d0RpZENoYW5nZU5vdGlmaWNhdGlvbgogeHh4eHh4eHh4eHh4eHh4CkBAIC02MywxMCArNjMsMTAg
QEAgZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54PAogZXhlY1R5cGVDaGFy
YWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eDwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bh
bj4KIGV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PC9pPjwvYj48c3Bh
biBpZD0idGVzdCI+PC9zcGFuPgogZXhlY0JvbGRDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8L2k+
PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4
eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDsiPng8L3NwYW4+PC9pPjwvYj48c3BhbiBpZD0idGVzdCI+PC9zcGFuPgot
ZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8aT54eHg8c3BhbiBjbGFzcz0iQXBw
bGUtc3R5bGUtc3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij54eDwvc3Bhbj48L2k+
PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4
eDxiPnh4eDxpPnh4eDxzcGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13
ZWlnaHQ6IG5vcm1hbDsiPnh4eDwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+
Ci1leGVjSXRhbGljQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0
eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PC9zcGFuPjwvaT48L2I+
PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+
eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXdlaWdo
dDogbm9ybWFsOyI+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxlLXNwYW4iIHN0eWxlPSJmb250
LXN0eWxlOiBub3JtYWw7Ij54PC9zcGFuPjwvc3Bhbj48L2k+PC9iPjxzcGFuIGlkPSJ0ZXN0Ij48
L3NwYW4+Ci1leGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDxpPnh4eDxzcGFuIGNs
YXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPnh4eDxz
cGFuIGNsYXNzPSJBcHBsZS1zdHlsZS1zcGFuIiBzdHlsZT0iZm9udC1zdHlsZTogbm9ybWFsOyI+
eHg8L3NwYW4+PC9zcGFuPjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KLWV4ZWNUeXBl
Q2hhcmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PGk+eHh4PHNwYW4gY2xhc3M9IkFwcGxlLXN0eWxl
LXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+eHh4PHNwYW4gY2xhc3M9IkFwcGxl
LXN0eWxlLXNwYW4iIHN0eWxlPSJmb250LXN0eWxlOiBub3JtYWw7Ij54eHg8L3NwYW4+PC9zcGFu
PjwvaT48L2I+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFu
ZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54PC9pPjxzcGFuIGlkPSJ0ZXN0Ij48L3NwYW4+
CitleGVjVHlwZUNoYXJhY3RlckNvbW1hbmQ6IHh4eDxiPnh4eDwvYj48aT48Yj54eHg8L2I+eHg8
L2k+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hhcmFjdGVyQ29tbWFuZDogeHh4
PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54eHg8L2k+PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4
ZWNJdGFsaWNDb21tYW5kOiB4eHg8Yj54eHg8L2I+PGk+PGI+eHh4PC9iPnh4eDwvaT48c3BhbiBp
ZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8L2I+
PGk+PGI+eHh4PC9iPnh4eDwvaT54PHNwYW4gaWQ9InRlc3QiPjwvc3Bhbj4KK2V4ZWNUeXBlQ2hh
cmFjdGVyQ29tbWFuZDogeHh4PGI+eHh4PC9iPjxpPjxiPnh4eDwvYj54eHg8L2k+eHg8c3BhbiBp
ZD0idGVzdCI+PC9zcGFuPgorZXhlY1R5cGVDaGFyYWN0ZXJDb21tYW5kOiB4eHg8Yj54eHg8L2I+
PGk+PGI+eHh4PC9iPnh4eDwvaT54eHg8c3BhbiBpZD0idGVzdCI+PC9zcGFuPgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWltcGxpY2l0LXN0
eWxlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NjcmlwdC10
ZXN0cy9wdXNoLWRvd24taW1wbGljaXQtc3R5bGVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9zdHlsZS9zY3JpcHQtdGVzdHMvcHVzaC1kb3duLWltcGxpY2l0LXN0eWxl
cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorZGVzY3JpcHRpb24oJ1Rlc3QgdG8g
bWFrZSBzdXJlIHdlIHB1c2ggZG93biBpbmxpbmUgc3R5bGVzIHByb3Blcmx5LicpOworCit2YXIg
dGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdENvbnRh
aW5lci5jb250ZW50RWRpdGFibGUgPSB0cnVlOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0
ZXN0Q29udGFpbmVyKTsKKworZnVuY3Rpb24gdGVzdFNpbmdsZVRvZ2dsZSh0b2dnbGVDb21tYW5k
LCBzZWxlY3RvciwgaW5pdGlhbENvbnRlbnRzLCBleHBlY3RlZENvbnRlbnRzKQoreworICAgIHRl
c3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENvbnRlbnRzOworICAgIHZhciBzZWxlY3Rl
ZCA9IHNlbGVjdG9yKHRlc3RDb250YWluZXIpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdz
dHlsZVdpdGhDU1MnLCBmYWxzZSwgJ2ZhbHNlJyk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
dG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIHZhciBhY3Rpb24gPSB0b2dnbGVDb21t
YW5kICsgJyBvbiAnICsgc2VsZWN0ZWQgKyAnIG9mICcgKyBpbml0aWFsQ29udGVudHMgKyAiIHlp
ZWxkcyAiICsgdGVzdENvbnRhaW5lci5pbm5lckhUTUw7CisgICAgaWYgKHRlc3RDb250YWluZXIu
aW5uZXJIVE1MID09IGV4cGVjdGVkQ29udGVudHMpCisgICAgICAgIHRlc3RQYXNzZWQoYWN0aW9u
KTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoYWN0aW9uICsgIiwgZXhwZWN0ZWQgIiAr
IGV4cGVjdGVkQ29udGVudHMpOworfQorCitmdW5jdGlvbiBzZWxlY3RBbGwoY29udGFpbmVyKSB7
CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGNvbnRhaW5lcik7
CisgICAgcmV0dXJuICdhbGwnOworfQorCitmdW5jdGlvbiBzZWxlY3RUZXN0KGNvbnRhaW5lcikg
eworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndGVzdCcpKTsKKyAgICByZXR1cm4gJ3Rlc3QnOworfQorCitmdW5jdGlv
biBzZWxlY3RGaXJzdFdvcmQoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigp
LnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1v
ZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnd29yZCcpOworICAgIHJldHVybiAnZmlyc3Qgd29y
ZCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdFNlY29uZFdvcmQoY29udGFpbmVyKSB7CisgICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ3dvcmQnKTsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICd3b3JkJyk7
CisgICAgcmV0dXJuICdzZWNvbmQgd29yZCc7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdExhc3RUd29X
b3Jkcyhjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24o
Y29udGFpbmVyLCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpOworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2FyZCcsICd3b3JkJyk7CisgICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ3dvcmQnKTsK
KyAgICByZXR1cm4gJ2xhc3QgdHdvIHdvcmRzJzsKK30KKwordGVzdFNpbmdsZVRvZ2dsZSgiYm9s
ZCIsIHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVsbG88L2Rpdj4gd29ybGQ8L2I+JywgJzxk
aXY+aGVsbG88L2Rpdj48Yj4gd29ybGQ8L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwg
c2VsZWN0Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2PndvcmxkPC9iPicsICc8ZGl2Pmhl
bGxvPC9kaXY+PGI+d29ybGQ8L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0
Rmlyc3RXb3JkLCAnPGI+PGRpdj5oZWxsbzwvZGl2PjxlbT53b3JsZDwvZW0+PC9iPicsICc8ZGl2
PmhlbGxvPC9kaXY+PGVtIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsgIj53b3JsZDwvZW0+Jyk7
Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0U2Vjb25kV29yZCwgJzxiPmhlbGxvIDxk
aXY+d29ybGQ8L2Rpdj48L2I+JywgJzxiPmhlbGxvIDwvYj48ZGl2PndvcmxkPC9kaXY+Jyk7Cit0
ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0U2Vjb25kV29yZCwgJzxiPjxlbT5oZWxsbzwv
ZW0+IDxkaXY+d29ybGQ8L2Rpdj48L2I+JywgJzxlbSBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7
ICI+aGVsbG88L2VtPiA8ZGl2PndvcmxkPC9kaXY+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xk
Iiwgc2VsZWN0QWxsLCAnPGI+IDxkaXY+dGV4dDwvZGl2PiA8L2I+JywgJyA8ZGl2PnRleHQ8L2Rp
dj4gJyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJib2xkIiwgc2VsZWN0QWxsLCAnPGI+PHM+PGRpdj50
ZXh0PC9kaXY+PC9zPjwvYj4nLCAnPHM+PGRpdj50ZXh0PC9kaXY+PC9zPicpOwordGVzdFNpbmds
ZVRvZ2dsZSgiYm9sZCIsIHNlbGVjdEZpcnN0V29yZCwgJzxiPjxkaXY+aGVsbG88L2Rpdj48ZGl2
PndvcmxkPC9kaXY+PC9iPicsICc8ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0iZm9udC13ZWln
aHQ6IGJvbGQ7ICI+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxl
Y3RGaXJzdFdvcmQsICc8Yj48ZGl2PmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6
IG5vcm1hbDsiPndvcmxkPC9kaXY+d2Via2l0PC9iPicsICc8ZGl2PmhlbGxvPC9kaXY+PGRpdiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgIj53b3JsZDwvZGl2PjxiPndlYmtpdDwvYj4nKTsK
K3Rlc3RTaW5nbGVUb2dnbGUoImJvbGQiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPGIgc3R5bGU9ImZv
bnQtc3R5bGU6IGl0YWxpYzsiPmhlbGxvIHdvcmxkPC9iPicsICc8YiBzdHlsZT0iZm9udC1zdHls
ZTogaXRhbGljOyI+aGVsbG88L2I+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPiB3
b3JsZDwvc3Bhbj4nKTsKKwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgc2VsZWN0U2Vj
b25kV29yZCwgJzx1PmhlbGxvIDxiPndvcmxkPC9iPiB3ZWJraXQ8L3U+JywgJzx1PmhlbGxvPC91
PiA8Yj53b3JsZDwvYj48dT4gd2Via2l0PC91PicpOwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJs
aW5lIiwgc2VsZWN0TGFzdFR3b1dvcmRzLCAnPHU+aGVsbG8gPGI+d29ybGQ8L2I+IHdlYmtpdDwv
dT4nLCAnPHU+aGVsbG8gPC91PjxiPndvcmxkPC9iPiB3ZWJraXQnKTsKK3Rlc3RTaW5nbGVUb2dn
bGUoInVuZGVybGluZSIsIHNlbGVjdExhc3RUd29Xb3JkcywgJzx1PmhlbGxvIDxiPndvcmxkIHdl
YmtpdDwvYj48L3U+JywgJzx1PmhlbGxvIDwvdT48Yj53b3JsZCB3ZWJraXQ8L2I+Jyk7Cit0ZXN0
U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+aGVsbG8gPGI+
d29ybGQgd2Via2l0PC9iPjwvdT4nLCAnPHU+aGVsbG88L3U+IDxiPndvcmxkPHU+IHdlYmtpdDwv
dT48L2I+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3Jk
LCAnPHU+PGI+aGVsbG8gd29ybGQ8L2I+IHdlYmtpdDwvdT4nLCAnPGI+PHU+aGVsbG88L3U+IHdv
cmxkPC9iPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBz
ZWxlY3RTZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQ8L3M+PC91PicsICc8cz48dT5oZWxs
bzwvdT4gd29ybGQ8L3M+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RT
ZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQgd2Via2l0PC9zPjwvdT4nLCAnPHM+PHU+aGVs
bG88L3U+IHdvcmxkPHU+IHdlYmtpdDwvdT48L3M+Jyk7Cit0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRl
cmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+PHM+aGVsbG8gd29ybGQ8L3M+IHdlYmtpdDwv
dT4nLCAnPHM+PHU+aGVsbG88L3U+IHdvcmxkPC9zPjx1PiB3ZWJraXQ8L3U+Jyk7Cit0ZXN0U2lu
Z2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCBzZWxlY3RTZWNvbmRXb3JkLCAnPHU+aGVsbG8gPGVtPjxj
b2RlPndvcmxkIHdlYmtpdDwvY29kZT48L2VtPiByb2NrczwvdT4nLCAnPHU+aGVsbG88L3U+IDxl
bT48Y29kZT53b3JsZDx1PiB3ZWJraXQ8L3U+PC9jb2RlPjwvZW0+PHU+IHJvY2tzPC91PicpOwor
Cit0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiwgc2VsZWN0QWxsLCAnPHMgc3R5bGU9
ImNvbG9yOiBibHVlOyI+aGVsbG8gd29ybGQ8L3M+JywgJzxzcGFuIHN0eWxlPSJjb2xvcjogYmx1
ZTsiPmhlbGxvIHdvcmxkPC9zcGFuPicpOwordGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtlVGhyb3Vn
aCIsIHNlbGVjdEZpcnN0V29yZCwgJzxzIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjxkaXY+aGVsbG88
L2Rpdj4gPGI+d29ybGQ8L2I+IHdlYmtpdDwvcz4nLCAnPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVl
OyI+PGRpdj5oZWxsbzwvZGl2PiA8YiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91
Z2g7ICI+d29ybGQ8L2I+PHM+IHdlYmtpdDwvcz48L3NwYW4+Jyk7CisKK2RvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwo=
</data>
<flag name="review"
          id="54627"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>