<?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>27156</bug_id>
          
          <creation_ts>2009-07-10 13:34:04 -0700</creation_ts>
          <short_desc>SplitElementCommand shouldn&apos;t be duplicating id attribute</short_desc>
          <delta_ts>2010-07-31 18:19:01 -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>All</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>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>42793</dependson>
    
    <dependson>42941</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130935</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-10 13:34:04 -0700</bug_when>
    <thetext>When SplitElementCommand is called for an element with id attribute, it generates two elements with the same id attributes.  Since the id attribute must be unique throughout the document, this behavior is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131468</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-07-13 18:57:54 -0700</bug_when>
    <thetext>If you fix this verify that places that split and then merge soon after will continue to merge even though the second element isn&apos;t exactly identical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131469</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-07-13 18:58:34 -0700</bug_when>
    <thetext>I&apos;m referring to mergeElementsIfIdentical (I think that&apos;s the function name).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253836</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-20 11:32:35 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; If you fix this verify that places that split and then merge soon after will continue to merge even though the second element isn&apos;t exactly identical.

I discussed this with Ojan but it seems like we shouldn&apos;t be merging elements unless we split the element.  Because imagine you have [hello&lt;b id=&quot;test&quot;&gt;world&lt;/b&gt;] and bold the text.  If we had merged the elements, we&apos;ll get [&lt;b id=&quot;test&quot;&gt;helloworld&lt;/b&gt;] but world may have style or some functionality provided by JavaScript.  And merging two elements together may result in loss of functionality.

(In reply to comment #2)
&gt; I&apos;m referring to mergeElementsIfIdentical (I think that&apos;s the function name).

areIdenticalElements in ApplyStyleCommand and MergeIdenticalElementsCommand need to be modified to do what you&apos;re proposing.

IMHO, the correct approach is not to split elements as much as possible in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254115</commentid>
    <comment_count>4</comment_count>
      <attachid>62141</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-20 20:14:29 -0700</bug_when>
    <thetext>Created attachment 62141
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254564</commentid>
    <comment_count>5</comment_count>
      <attachid>62241</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-21 15:58:33 -0700</bug_when>
    <thetext>Created attachment 62241
ready for feedback

Same approach but shouldSplitElement is much smarter in determining which element must be split.  I ended up hitting a bug in SplitTextNodeCommand (it wasn&apos;t implementing redo property) so the patch contains the fix for SplitTextNodeCommand as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254598</commentid>
    <comment_count>6</comment_count>
      <attachid>62241</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-07-21 17:20:17 -0700</bug_when>
    <thetext>Comment on attachment 62241
ready for feedback

Should there be new layout tests?

WebCore/editing/ApplyStyleCommand.h:90
 +      bool shouldSplitElement(Element* elem, CSSMutableStyleDeclaration* style);
Nit: No variable names needed here.

WebCore/editing/ApplyStyleCommand.h:126
 +  RefPtr&lt;CSSMutableStyleDeclaration&gt; getPropertiesNotInComputedStyle(CSSStyleDeclaration* style, CSSStyleDeclaration* computedStyle);
Should this method now be renamed?  It&apos;s not operating on a computedStyle anymore.

WebCore/editing/ApplyStyleCommand.cpp:54
 +  static void reconcileTextDecorationProperties(CSSMutableStyleDeclaration* style)
This is just a refactoring right?  Might be good to do this in a separate change (although it&apos;s pretty clear here too).

WebCore/editing/ApplyStyleCommand.cpp:938
 +              isDiff = true;
Can we just return true here and stop checking the other styles?  If so, we could probably get rid of the isDiff variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254605</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-21 17:39:45 -0700</bug_when>
    <thetext>Thanks for the feedback!

(In reply to comment #6)
&gt; (From update of attachment 62241 [details])
&gt; Should there be new layout tests?

Yes, I&apos;ll be writing and adding a test for the actual patch.

&gt; WebCore/editing/ApplyStyleCommand.h:90
&gt;  +      bool shouldSplitElement(Element* elem, CSSMutableStyleDeclaration* style);
&gt; Nit: No variable names needed here.

Will do.

&gt; WebCore/editing/ApplyStyleCommand.h:126
&gt;  +  RefPtr&lt;CSSMutableStyleDeclaration&gt; getPropertiesNotInComputedStyle(CSSStyleDeclaration* style, CSSStyleDeclaration* computedStyle);
&gt; Should this method now be renamed?  It&apos;s not operating on a computedStyle anymore.

I was thinking about that too but couldn&apos;t think of a good name.  CSSStyleEditingDiff ?

&gt; WebCore/editing/ApplyStyleCommand.cpp:54
&gt;  +  static void reconcileTextDecorationProperties(CSSMutableStyleDeclaration* style)
&gt; This is just a refactoring right?  Might be good to do this in a separate change (although it&apos;s pretty clear here too).

No, the reason I had to make it a static function was because I have to use it in shouldSplitElement.  ASSERT statement is also modified to be more flexible.

&gt; WebCore/editing/ApplyStyleCommand.cpp:938
&gt;  +              isDiff = true;
&gt; Can we just return true here and stop checking the other styles?  If so, we could probably get rid of the isDiff variable.

Good idea.  I had a printf right beneath for debugging purposes but now that I think about it, isDiff is completely redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254911</commentid>
    <comment_count>8</comment_count>
      <attachid>62324</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-22 11:57:22 -0700</bug_when>
    <thetext>Created attachment 62324
fixed per Tony&apos;s comments

I replaced getPropertiesNotInComputedStyle by canonicalizedDiff in CSSStyleDeclaration since it makes more sense now for getPropertiesNotInComputedStyle to become a method now.  I recall someone (either mitz or dhaytt) didn&apos;t like this idea last time I proposed but I don&apos;t recall where I got this impression. I guess this change can be done in a separate patch. The rest is fixed as Tony suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256400</commentid>
    <comment_count>9</comment_count>
      <attachid>62649</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-26 23:21:07 -0700</bug_when>
    <thetext>Created attachment 62649
fixes the bug

Ready for review.  Per Justin&apos;s comment, I made sure to minimize unnecessary splits.  As a result, there is no layout tests that end up with extra tags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256401</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-26 23:22:42 -0700</bug_when>
    <thetext>Attachment 62649 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/editing/ApplyStyleCommand.cpp:1599:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 13 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>256403</commentid>
    <comment_count>11</comment_count>
      <attachid>62650</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-26 23:27:45 -0700</bug_when>
    <thetext>Created attachment 62650
Fixed the switch statement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256730</commentid>
    <comment_count>12</comment_count>
      <attachid>62650</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-27 11:59:34 -0700</bug_when>
    <thetext>Comment on attachment 62650
Fixed the switch statement

It seems like you could separate the ApplyStyleCommand changes into a separate patch from the SplitElementCommand changes.

I don&apos;t follow the logic of how we decide if we should split. Is there code somewhere else that corresponds to this? I worry that this will fall out of sync with the code that depends on nodes being split or not.

&gt; +bool ApplyStyleCommand::shouldSplitElement(Element* elem, CSSMutableStyleDeclaration* style)
&gt; +{
&gt; +    if (!elem || !elem-&gt;isHTMLElement() || !elem-&gt;parentElement() || !elem-&gt;parentElement()-&gt;isContentEditable())
&gt; +        return false;
&gt; +
&gt; +    // If the element is of styleInlineElement, then split because commands such as createLink and unlink require this behavior
&gt; +    if (m_styledInlineElement &amp;&amp; elem-&gt;hasTagName(m_styledInlineElement-&gt;tagQName()))
&gt; +        return true;
&gt; +
&gt; +    // If the element is one of presentational elements and interferes with the syle we&apos;re applying, then split
&gt; +    if (implicitlyStyledElementShouldBeRemovedWhenApplyingStyle(static_cast&lt;HTMLElement*&gt;(elem), style))
&gt; +        return true;
&gt; +
&gt; +    // If the element is a font tag and interferes with the style we&apos;re applying, then split
&gt; +    if (elem-&gt;hasTagName(fontTag)) {
&gt; +        CSSMutableStyleDeclaration::const_iterator end = style-&gt;end();
&gt; +        for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it) {
&gt; +            switch ((*it).id()) {
&gt; +            case CSSPropertyColor:
&gt; +                if (elem-&gt;hasAttribute(colorAttr))
&gt; +                    return true;
&gt; +                break;
&gt; +            case CSSPropertyFontFamily:
&gt; +                if (elem-&gt;hasAttribute(faceAttr))
&gt; +                    return true;
&gt; +                break;
&gt; +            case CSSPropertyFontSize:
&gt; +                if (elem-&gt;hasAttribute(sizeAttr))
&gt; +                    return true;
&gt; +                break;
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +
&gt; +    // Otherwise, compute the difference between the computed style and the syle we&apos;re applying.
&gt; +    // If the difference doesn&apos;t match new style, then the element interferes, so split.
&gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; styleOfElem = computedStyle(elem);
&gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; styleOfParent = computedStyle(elem-&gt;parentNode());
&gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; diff = propertiesNotIn(styleOfElem.get(), styleOfParent.get());
&gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; styleToApply = style-&gt;copy();
&gt; +
&gt; +    bool isDiff = false;
&gt; +    CSSMutableStyleDeclaration::const_iterator end = style-&gt;end();
&gt; +    for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it) {
&gt; +        const CSSProperty&amp; property = *it;
&gt; +        if (diff-&gt;getPropertyCSSValue(property.id()) &amp;&amp; diff-&gt;getPropertyValue(property.id()) != property.cssText())
&gt; +            isDiff = true;
&gt; +    }
&gt; +    return isDiff;
&gt; +}


&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; +        Added a test to ensure splitting element doesn&apos;t produce multiple nodes with the same id.
&gt; +        The test unbolds a text inside b element with id so as to split the element.
&gt; +        It traverses through all nodes in under document.body to ensure that there is only one node with the id.

Don&apos;t need these last two sentences. It&apos;s clear from looking at the test that it does this. The ChangeLog should just give a high-level understanding of the changes and explain non-obvious bits.

&gt; +++ LayoutTests/editing/style/split-element.html	(revision 0)
It might be easier to just:
document.execCommand(&apos;bold&apos;);
var test = document.getElementById(&apos;test&apos;);
test.parentNode.removeChild(test);
test = document.getElementById(&apos;test&apos;);
document.body.innerHTML = test ? &apos;FAIL ...&apos; : &apos;PASS&apos;;

No need to keep a count of the nodes or anything.

&gt; +&lt;script type=&quot;text/javascript&quot;&gt;

No need to include the type here.

&gt; +function countNodesWithId(node, id)
&gt; +{
&gt; +    if (!(node instanceof Element))
&gt; +        return 0;
&gt; +

No need to make sure they are elements. There won&apos;t be non-element nodes on this page with an ID.

&gt; +    var count = 0;
&gt; +    if (node.id == id)
&gt; +        count++;
&gt; +
&gt; +    for (var i = 0; i &lt; node.childNodes.length; i++)
&gt; +        count += countNodesWithId(node.childNodes[i], id);
&gt; +
&gt; +    return count;
&gt; +}
&gt; +
&gt; +var range = document.createRange();
&gt; +range.setStart(document.getElementById(&apos;test&apos;).firstChild, 1);
&gt; +range.setEnd(document.getElementById(&apos;test&apos;).firstChild, 4);
&gt; +window.getSelection().removeAllRanges();
&gt; +window.getSelection().addRange(range);

var testNode = document.getElementById(&apos;test&apos;).firstChild;
window.getSelection().setBaseAndExtent(testNode, 1, testNode, 4);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256918</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-27 16:00:05 -0700</bug_when>
    <thetext>Thanks for the review as usual.

(In reply to comment #12)
&gt; (From update of attachment 62650 [details])
&gt; It seems like you could separate the ApplyStyleCommand changes into a separate patch from the SplitElementCommand changes.
&gt; 
&gt; I don&apos;t follow the logic of how we decide if we should split. Is there code somewhere else that corresponds to this? I worry that this will fall out of sync with the code that depends on nodes being split or not.

Take a look at removeInlineStyle.  Everything that is touched by removeInlineStyle needs to be split:

            if (m_styledInlineElement &amp;&amp; elem-&gt;hasTagName(m_styledInlineElement-&gt;tagQName()))
                removeNodePreservingChildren(elem);

            if (implicitlyStyledElementShouldBeRemovedWhenApplyingStyle(elem, style.get()))
                replaceWithSpanOrRemoveIfWithoutAttributes(elem);

            // If the node was converted to a span, the span may still contain relevant
            // styles which must be removed (e.g. &lt;b style=&apos;font-weight: bold&apos;&gt;)
            if (elem-&gt;inDocument()) {
                removeHTMLFontStyle(style.get(), elem);
                removeHTMLBidiEmbeddingStyle(style.get(), elem);
                removeCSSStyle(style.get(), elem);
            }

The reason we need to split an element is because we need to remove the style from either the start or the end of the selection.  So, m_styledInlineElement (only used for createLink, unlink) and implicitlyStyledElementShouldBeRemovedWhenApplyingStyle are straight from these two lines.  Now, the comment sounds as if removeHTMLFontStyle removes font style from a span but that&apos;s completely wrong.  removeHTMLFontStyle only removes attributes of the font tag.  So this results in the third check.  Finally, removeCSSStyle takes care of the CSS styles.

&gt; &gt; +    // Otherwise, compute the difference between the computed style and the syle we&apos;re applying.
&gt; &gt; +    // If the difference doesn&apos;t match new style, then the element interferes, so split.
&gt; &gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; styleOfElem = computedStyle(elem);
&gt; &gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; styleOfParent = computedStyle(elem-&gt;parentNode());
&gt; &gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; diff = propertiesNotIn(styleOfElem.get(), styleOfParent.get());
&gt; &gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; styleToApply = style-&gt;copy();

This part comes from removeCSSStyle.  Now that I think about, I should have used elem-&gt;inlineStyleDecl(); for diff.  Will fix this.

&gt; &gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; &gt; +        Added a test to ensure splitting element doesn&apos;t produce multiple nodes with the same id.
&gt; &gt; +        The test unbolds a text inside b element with id so as to split the element.
&gt; &gt; +        It traverses through all nodes in under document.body to ensure that there is only one node with the id.
&gt; 
&gt; Don&apos;t need these last two sentences. It&apos;s clear from looking at the test that it does this. The ChangeLog should just give a high-level understanding of the changes and explain non-obvious bits.

Will fix.

&gt; It might be easier to just:
&gt; document.execCommand(&apos;bold&apos;);
&gt; var test = document.getElementById(&apos;test&apos;);
&gt; test.parentNode.removeChild(test);
&gt; test = document.getElementById(&apos;test&apos;);
&gt; document.body.innerHTML = test ? &apos;FAIL ...&apos; : &apos;PASS&apos;;
&gt; 
&gt; No need to keep a count of the nodes or anything.

The reason I did that was for debugging purposes.  Should this test fail in the future, we can easily see what&apos;s happening.  If I had just said PASS or FAIL, it&apos;s not instantly clear whether the node is disappearing or we&apos;re producing nodes with the same id.  Also, Firefox currently produce 2 nodes with the same id but WebKit without my patch produces 3.  So I wanted to distinguish those things as well to make the future debugging etc.. easily.

&gt; var testNode = document.getElementById(&apos;test&apos;).firstChild;
&gt; window.getSelection().setBaseAndExtent(testNode, 1, testNode, 4);

I wanted to make this test run on Firefox so that we can compare behaviors easily (Firefox fails).  Ideally, I make it run on MSIE as well but I decided that&apos;s too much trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257003</commentid>
    <comment_count>14</comment_count>
      <attachid>62790</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-27 19:37:06 -0700</bug_when>
    <thetext>Created attachment 62790
fixed per ojan&apos;s comments

Maybe we can extract removeInlineStyleFromElement in a separate patch but then adding dontRemove in that cleanup patch would be weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257254</commentid>
    <comment_count>15</comment_count>
      <attachid>62790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-28 11:06:48 -0700</bug_when>
    <thetext>Comment on attachment 62790
fixed per ojan&apos;s comments

I didn&apos;t do a review, but I did spend a moment looking at style. Here is one style comment. I hope to be able to review this bug later, but that should not prevent someone else from doing so.

&gt; +bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration *style, HTMLElement *elem, bool dontRemove)

I don’t know why the style bot is not complaining about this. The &quot;*&quot; character should be next to the types.

Please use a word, &quot;element&quot;, instead of a word fragment, &quot;elem&quot;. In general we should keep abbreviations to a minimum in new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257281</commentid>
    <comment_count>16</comment_count>
      <attachid>62856</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-28 12:06:37 -0700</bug_when>
    <thetext>Created attachment 62856
fixed style per darin&apos;s comment

(In reply to comment #15)
&gt; (From update of attachment 62790 [details])
&gt; &gt; +bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration *style, HTMLElement *elem, bool dontRemove)
&gt; 
&gt; I don’t know why the style bot is not complaining about this. The &quot;*&quot; character should be next to the types.

Ugh... that&apos;s why I shouldn&apos;t copy &amp; paste to create a new method.  Sorry about that.

&gt; Please use a word, &quot;element&quot;, instead of a word fragment, &quot;elem&quot;. In general we should keep abbreviations to a minimum in new code.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257950</commentid>
    <comment_count>17</comment_count>
      <attachid>62856</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-29 16:09:53 -0700</bug_when>
    <thetext>Comment on attachment 62856
fixed style per darin&apos;s comment

WebCore/editing/ApplyStyleCommand.cpp:1185
 +  bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration* style, HTMLElement* element, bool dontRemove)
Generally, don&apos;t name variable names with negatives in them. invert this and call it shouldRemove instead. Also, Darin will kill me if I let you add a boolean argument. Use an enum instead. That way, the meaning of the argument is clear from the calling context.

&gt; +    // If the node was converted to a span, the span may still contain relevant
&gt; +    // styles which must be removed (e.g. &lt;b style=&apos;font-weight: bold&apos;&gt;)
&gt; +    if (removeHTMLFontStyle(style, element, dontRemove))
&gt; +        removed = true;
&gt; +    if (removeHTMLBidiEmbeddingStyle(style, element, dontRemove))
&gt; +        removed = true;
&gt; +    if (removeCSSStyle(style, element, dontRemove))
&gt; +        removed = true;

This can be a single if-statement:
if (removeHTMLFontStyle(style, element, dontRemove)
    || removeHTMLBidiEmbeddingStyle(style, element, dontRemove)
    || removeCSSStyle(style, element, dontRemove))
    removed = true;

&gt; -    if (isEmptyFontTag(elem))
&gt; +    if (isEmptyFontTag(elem) &amp;&amp; !dontRemove)
&gt;          removeNodePreservingChildren(elem);

Shouldn&apos;t we set removed=true here?

&gt;      // FIXME: should this be isSpanWithoutAttributesOrUnstyleStyleSpan?  Need a test.
&gt;      if (isUnstyledStyleSpan(elem))
&gt;          removeNodePreservingChildren(elem);

Ditto.

&gt; -        splitTextElementAtStart(start, end);
&gt; +        if (shouldSplitElement(start.node()-&gt;parentElement(), style))
&gt; +            splitTextElementAtStart(start, end);
&gt; +        else
&gt; +            splitTextAtStart(start, end);

&gt; -        splitTextElementAtEnd(start, end);
&gt; +        if (shouldSplitElement(end.node()-&gt;parentElement(), style))
&gt; +            splitTextElementAtEnd(start, end);
&gt; +        else
&gt; +            splitTextAtEnd(start, end);

Maybe the method should be called shouldSplitTextElement to match splitTextElementAt*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257957</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 16:17:48 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 62856 [details])
&gt; WebCore/editing/ApplyStyleCommand.cpp:1185
&gt;  +  bool ApplyStyleCommand::removeInlineStyleFromElement(CSSMutableStyleDeclaration* style, HTMLElement* element, bool dontRemove)
&gt; Generally, don&apos;t name variable names with negatives in them. invert this and call it shouldRemove instead. Also, Darin will kill me if I let you add a boolean argument. Use an enum instead. That way, the meaning of the argument is clear from the calling context.

Will do.

&gt; &gt; +    // If the node was converted to a span, the span may still contain relevant
&gt; &gt; +    // styles which must be removed (e.g. &lt;b style=&apos;font-weight: bold&apos;&gt;)
&gt; &gt; +    if (removeHTMLFontStyle(style, element, dontRemove))
&gt; &gt; +        removed = true;
&gt; &gt; +    if (removeHTMLBidiEmbeddingStyle(style, element, dontRemove))
&gt; &gt; +        removed = true;
&gt; &gt; +    if (removeCSSStyle(style, element, dontRemove))
&gt; &gt; +        removed = true;
&gt; 
&gt; This can be a single if-statement:
&gt; if (removeHTMLFontStyle(style, element, dontRemove)
&gt;     || removeHTMLBidiEmbeddingStyle(style, element, dontRemove)
&gt;     || removeCSSStyle(style, element, dontRemove))
&gt;     removed = true;

No. I did that first not realizing removeCSSStyle can be processing the nodes that have also been processed by removeHTMLFontStyle and removeHTMLBidiEmbeddingStyle.  Had I used ||, removeCSSStyle will not be called on any nodes that have been processed by removeHTMLFontStyle or removeHTMLBidiEmbeddingStyle.

&gt; &gt; -    if (isEmptyFontTag(elem))
&gt; &gt; +    if (isEmptyFontTag(elem) &amp;&amp; !dontRemove)
&gt; &gt;          removeNodePreservingChildren(elem);
&gt; 
&gt; Shouldn&apos;t we set removed=true here?

No. We should split even if the node was fully removed.  Removing attribute will cause the style to change so not splitting will result in the not fully selected nodes&apos; style to modify if we moved removed=true here.

&gt; &gt; -        splitTextElementAtStart(start, end);
&gt; &gt; +        if (shouldSplitElement(start.node()-&gt;parentElement(), style))
&gt; &gt; +            splitTextElementAtStart(start, end);
&gt; &gt; +        else
&gt; &gt; +            splitTextAtStart(start, end);
&gt; 
&gt; &gt; -        splitTextElementAtEnd(start, end);
&gt; &gt; +        if (shouldSplitElement(end.node()-&gt;parentElement(), style))
&gt; &gt; +            splitTextElementAtEnd(start, end);
&gt; &gt; +        else
&gt; &gt; +            splitTextAtEnd(start, end);
&gt; 
&gt; Maybe the method should be called shouldSplitTextElement to match splitTextElementAt*?

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257984</commentid>
    <comment_count>19</comment_count>
      <attachid>63012</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 17:01:54 -0700</bug_when>
    <thetext>Created attachment 63012
fixed per ojan&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257986</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-29 17:03:33 -0700</bug_when>
    <thetext>Attachment 63012 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/editing/ApplyStyleCommand.h:75:  Missing spaces around =  [whitespace/operators] [4]
WebCore/editing/ApplyStyleCommand.h:77:  Missing spaces around =  [whitespace/operators] [4]
WebCore/editing/ApplyStyleCommand.h:78:  Missing spaces around =  [whitespace/operators] [4]
WebCore/editing/ApplyStyleCommand.h:79:  Missing spaces around =  [whitespace/operators] [4]
Total errors found: 4 in 13 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>257990</commentid>
    <comment_count>21</comment_count>
      <attachid>63014</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 17:12:43 -0700</bug_when>
    <thetext>Created attachment 63014
fixed the style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258327</commentid>
    <comment_count>22</comment_count>
      <attachid>63014</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-30 12:18:45 -0700</bug_when>
    <thetext>Comment on attachment 63014
fixed the style

&gt; +    enum InlineStyleRemovalMode { RemoveAttributesAndElement, RemoveNone };

s/RemoveAttributesAndElement/RemoveAttributesAndElements

&gt; +    bool removeInlineStyleFromElement(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; +    bool removeHTMLFontStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; +    bool removeHTMLBidiEmbeddingStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; +    bool removeCSSStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);

Typically, returning a boolean value from a method indicates whether it succeeded or not. In this case, it indicates whether we would have removed something. Which isn&apos;t exactly the same a success. Can we return an enum here as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258429</commentid>
    <comment_count>23</comment_count>
      <attachid>63113</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-30 15:43:43 -0700</bug_when>
    <thetext>Created attachment 63113
fixed per ojan&apos;s comments


(In reply to comment #22)
&gt; (From update of attachment 63014 [details])
&gt; &gt; +    enum InlineStyleRemovalMode { RemoveAttributesAndElement, RemoveNone };
&gt; 
&gt; s/RemoveAttributesAndElement/RemoveAttributesAndElements

Done.

&gt; &gt; +    bool removeInlineStyleFromElement(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; &gt; +    bool removeHTMLFontStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; &gt; +    bool removeHTMLBidiEmbeddingStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; &gt; +    bool removeCSSStyle(CSSMutableStyleDeclaration*, HTMLElement*, InlineStyleRemovalMode = RemoveAttributesAndElement);
&gt; 
&gt; Typically, returning a boolean value from a method indicates whether it succeeded or not. In this case, it indicates whether we would have removed something. Which isn&apos;t exactly the same a success. Can we return an enum here as well?

I can&apos;t agree on this. Adding another enum will make the functions too verbose IMHO. And there are plenty of member functions such as mergeStartWithPreviousIfIdentical whose return value indicates whether or not the operation was done or not. It&apos;s pretty standard that remove function always succeed and therefore have a void type. So remove* being a boolean type pretty much tells us that it&apos;s indicating whether or not attributes / elements have been (or should have been removed) or not.

In general, I&apos;m not a big fan of using enum for something that doesn&apos;t have more than two states other than function argument. If we had boolean variable, then I can tell immediately that it can be either true or false. But if I had enum, there could be more than two states so I have to think twice when reading the code. I agree that the code calling a method with enum is much easier to read than the one calling with a boolean variable because I have to check the function declaration to know what it is. However, when I read the code of these methods as is, I have to wonder if there are such thing as RemoveElements or RemoveAttributes and if conditions checking with == are right or not.  If we made the method to return enum type, then caller will check it against Removed or NotRemoved.  But since it&apos;s enum type, a person reading the code will wonder whether there are some other states.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258435</commentid>
    <comment_count>24</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-30 16:01:10 -0700</bug_when>
    <thetext>&gt; I can&apos;t agree on this. Adding another enum will make the functions too verbose IMHO. And there are plenty of member functions such as mergeStartWithPreviousIfIdentical whose return value indicates whether or not the operation was done or not. It&apos;s pretty standard that remove function always succeed and therefore have a void type. So remove* being a boolean type pretty much tells us that it&apos;s indicating whether or not attributes / elements have been (or should have been removed) or not.

The problematic case is something like:
removeInlineStyleFromElement(foo, bar, RemoveNone)

Since it&apos;s not actually removing anything, what does success or failure mean here? The return value isn&apos;t actually a measure of whether the call succeeded. It&apos;s a measure fo whether the call would have succeeded if you passed in a different enum value. That&apos;s the part I find confusing.

Where something like the following is more clear:
WouldRemove == removeInlineStyleFromElement(foo, bar, RemoveNone)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258440</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-30 16:07:17 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Since it&apos;s not actually removing anything, what does success or failure mean here? The return value isn&apos;t actually a measure of whether the call succeeded. It&apos;s a measure fo whether the call would have succeeded if you passed in a different enum value. That&apos;s the part I find confusing.
&gt; 
&gt; Where something like the following is more clear:
&gt; WouldRemove == removeInlineStyleFromElement(foo, bar, RemoveNone)

WouldRemove will look nice for that case but then if I did
removeInlineStyleFromElement(foo, bar, RemoveAttributesAndElements)

it&apos;ll be quite strange for me to check against &quot;WouldRemove&quot; as the attributes and elements have already been removed.  But if we made removeInlineStyleFromElement to return both WouldRemove and Removed depending on the mode passed in, it&apos;ll add unnecessary complexity to the code that&apos;s already way too complicated in my taste.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258462</commentid>
    <comment_count>26</comment_count>
      <attachid>63121</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-30 16:28:56 -0700</bug_when>
    <thetext>Created attachment 63121
added shouldRemoveInlineStyleFromElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258670</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-31 18:19:01 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/64432.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62141</attachid>
            <date>2010-07-20 20:14:29 -0700</date>
            <delta_ts>2010-07-21 15:58:33 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>attempt27156-split-carefully</filename>
            <type>text/plain</type>
            <size>14350</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYz
NzgwKQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5o
IgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDcgKzY4
LDEyIEBACiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIG1fZWxl
bWVudDEgPSBtX2VsZW1lbnQyLT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKLSAgICAK
KworICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVj
YXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50
CisgICAgaW50IGVjID0gMDsKKyAgICBtX2VsZW1lbnQyLT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5h
bWVzOjppZEF0dHIsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKwogICAgIGV4ZWN1dGVBcHBseSgp
OwogfQogCkBAIC04OCw2ICs5NCwxMCBAQAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0uZ2V0
KCksIHJlZkNoaWxkLmdldCgpLCBlYyk7CiAKKyAgICAvLyBSZWNvdmVyIHRoZSBpZCBhdHRyaWJ1
dGUgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCisgICAgaWYgKG1fZWxlbWVudDEtPmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVudDItPnNldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aWRBdHRyKSk7CisKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwogfQogCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYzNzgwKQorKysg
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDE2ICsxMTAsNiBAQAogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5
bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUsIHN0YXJ0LCBlbmQsIGVkaXRpbmdB
Y3Rpb24pKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZWRFbGVt
ZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKLXsKLSAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGZhbHNlKSk7Ci19Ci0K
LXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50KQotewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5
U3R5bGVDb21tYW5kOjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSkpOwotfQotCiB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoYm9vbCB1c2VEZWZhdWx0UGFy
YWdyYXBoRWxlbWVudCkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgdXNlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQpKTsKQEAgLTcwOSw3ICs2OTksNyBAQAogICAgIEFTU0VSVChhbmNob3JOb2Rl
LT5pc0xpbmsoKSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShhbmNob3JOb2RlKSk7Ci0gICAgYXBwbHlT
dHlsZWRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihhbmNob3JOb2RlKSk7CisgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oYW5jaG9yTm9kZSksIGZhbHNlKSk7CiAgICAgLy8gQ2xvbmVzIG9mIGFuY2hv
ck5vZGUgaGF2ZSBiZWVuIHB1c2hlZCBkb3duLCBub3cgcmVtb3ZlIGl0LgogICAgIGlmIChhbmNo
b3JOb2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oYW5jaG9yTm9kZSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwCShyZXZpc2lv
biA2Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9VbmxpbmtDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgIlVubGlua0NvbW1hbmQuaCIKIAogI2lu
Y2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDMsNyArNDYsNTIgQEAKICAgICAgICAgCiAgICAgcHVzaFBhcnRpYWxseVNl
bGVjdGVkQW5jaG9yRWxlbWVudHNEb3duKCk7CiAKLSAgICByZW1vdmVTdHlsZWRFbGVtZW50KEhU
TUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGNvZGUgYXJlIGNvcGllZCBmcm9tIEFwcGx5U3R5bGVDb21tYW5kCisgICAgLy8g
V2Ugc2hvdWxkIG1lcmdlIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIG9uZXMgaW4gQXBwbHlTdHlsZUNv
bW1hbmQgaW4gdGhlIGZ1dHVyZS4KKworICAgIC8vIHNwbGl0RWxlbWVudEF0U3RhcnRJZk5lZWRl
ZAorICAgIFBvc2l0aW9uIHN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBQ
b3NpdGlvbiBlbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKKworICAgIGlmIChzdGFydC5u
b2RlKCktPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4g
Y2FyZXRNaW5PZmZzZXQoc3RhcnQubm9kZSgpKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpIDwgY2FyZXRNYXhPZmZzZXQoc3RhcnQubm9kZSgpKSkgeworICAgICAgICBpbnQgZW5k
T2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gc3RhcnQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CisgICAgICAgIFRleHQgKnRleHQgPSBzdGF0aWNf
Y2FzdDxUZXh0ICo+KHN0YXJ0Lm5vZGUoKSk7CisgICAgICAgIHNwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAg
ICAgCisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9u
KHN0YXJ0Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydC5ub2RlKCktPm5vZGVJbmRleCgpKSwg
UG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBlbmRP
ZmZzZXRBZGp1c3RtZW50KSkpOworICAgIH0KKworICAgIHN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9u
KCkuc3RhcnQoKTsKKyAgICBlbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKKworICAgIC8v
IHNwbGl0RWxlbWVudEF0RW5kSWZOZWVkZWQKKyAgICBpZiAoZW5kLm5vZGUoKS0+aXNUZXh0Tm9k
ZSgpICYmIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gY2FyZXRNaW5PZmZzZXQoZW5k
Lm5vZGUoKSkgJiYgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPCBjYXJldE1heE9mZnNl
dChlbmQubm9kZSgpKSkgeworICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAq
PihlbmQubm9kZSgpKTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRl
eHQsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKworICAgICAgICBOb2RlICpwcmV2
Tm9kZSA9IHRleHQtPnBhcmVudE5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCktPmxhc3RDaGlsZCgp
OworICAgICAgICBBU1NFUlQocHJldk5vZGUpOworICAgICAgICBOb2RlICpzdGFydE5vZGUgPSBz
dGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHByZXZOb2RlIDogc3RhcnQubm9kZSgpOworICAg
ICAgICBBU1NFUlQoc3RhcnROb2RlKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+bm9kZUluZGV4
KCkgKyAxKSkpOworICAgIH0KKworICAgIC8vIFJlbW92ZSBhbmNob3IKKyAgICBOb2RlKiBub2Rl
OworICAgIE5vZGUqIG5leHQgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAg
ICBOb2RlKiBlbmROb2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCkubm9kZSgpOworICAgIGRv
IHsKKyAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphVGFn
KSkKKyAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7CisKKyAg
ICAgICAgTm9kZSogYW5jaG9yTm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYg
KGFuY2hvck5vZGUgJiYgYW5jaG9yTm9kZSAhPSBuZXh0ICYmIGFuY2hvck5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjphVGFnKSkKKyAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oYW5jaG9yTm9kZSk7CisKKyAgICB9IHdoaWxlIChub2RlICYmIG5vZGUgIT0gZW5kTm9k
ZSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lv
biA2Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBACiAgICAgLy8gc3R5bGUtYXBwbGljYXRpb24gaGVscGVy
cwogICAgIHZvaWQgYXBwbHlCbG9ja1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7
CiAgICAgdm9pZCBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKik7CisgICAgYm9vbCBzaG91bGRTcGxpdEVsZW1lbnQoRWxlbWVudCogZWxlbSwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKICAgICB2b2lkIGFwcGx5SW5saW5l
U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKICAgICB2b2lkIGFwcGx5SW5saW5l
U3R5bGVUb1JhbmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIGFkZEJsb2NrU3R5bGUoY29u
c3QgU3R5bGVDaGFuZ2UmLCBIVE1MRWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Ny
ZWF0ZUxpbmtDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ3JlYXRl
TGlua0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9DcmVh
dGVMaW5rQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21tYW5kLmgiCisjaW5jbHVk
ZSAiVW5saW5rQ29tbWFuZC5oIgorI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5kLmgiCiAjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKQEAgLTQyLDEzICs0NCwx
MyBAQAogewogICAgIGlmIChlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKKwogICAgIFJlZlB0cjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yRWxl
bWVudCA9IEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgYW5jaG9y
RWxlbWVudC0+c2V0SHJlZihtX3VybCk7Ci0gICAgCisKICAgICBpZiAoZW5kaW5nU2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIHB1c2hQYXJ0aWFsbHlTZWxlY3RlZEFuY2hvckVsZW1l
bnRzRG93bigpOwotICAgICAgICBhcHBseVN0eWxlZEVsZW1lbnQoYW5jaG9yRWxlbWVudC5nZXQo
KSk7CisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFVubGlua0NvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpKSk7CisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5
bGVDb21tYW5kOjpjcmVhdGUoYW5jaG9yRWxlbWVudC5nZXQoKSwgZmFsc2UpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpbnNlcnROb2RlQXQoYW5jaG9yRWxlbWVudC5nZXQoKSwgZW5kaW5nU2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7CiAgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBtX3VybCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYzNzgwKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMjMgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKyAgICAKK3N0YXRpYyB2
b2lkIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCit7ICAgIAorICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRp
b25zSW5FZmZlY3QgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNv
cmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbik7CisgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgYm90aCB0ZXh0LWRlY29yYXRpb24gYW5k
IC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QgYmVjYXVzZSB0aGF0IHdvdWxkbid0
IG1ha2Ugc2Vuc2UuCisgICAgQVNTRVJUKCF0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCB8fCAhdGV4
dERlY29yYXRpb24pOworICAgIGlmICh0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgeworICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdGV4dERlY29y
YXRpb25zSW5FZmZlY3QtPmNzc1RleHQoKSk7CisgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgdGV4
dERlY29yYXRpb24gPSB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDsKKyAgICB9CisgICAgCisgICAg
Ly8gSWYgdGV4dC1kZWNvcmF0aW9uIGlzIHNldCB0byAibm9uZSIsIHJlbW92ZSB0aGUgcHJvcGVy
dHkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFkZCByZWR1bmRhbnQgInRleHQtZGVjb3JhdGlv
bjogbm9uZSIuCisgICAgaWYgKHRleHREZWNvcmF0aW9uICYmICF0ZXh0RGVjb3JhdGlvbi0+aXNW
YWx1ZUxpc3QoKSkKKyAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24pOworfQogCiBjbGFzcyBTdHlsZUNoYW5nZSB7CiBwdWJsaWM6CkBAIC03Miw3
ICs4OSw2IEBACiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBhc3NSZWZQdHI8Q1NTU3R5bGVE
ZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCByZWNvbmNpbGVUZXh0RGVj
b3JhdGlvblByb3BlcnRpZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKICAgICB2b2lk
IGV4dHJhY3RUZXh0U3R5bGVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAKICAgICBT
dHJpbmcgbV9jc3NTdHlsZTsKQEAgLTEyNSwyMyArMTQxLDYgQEAKICAgICBtX2Nzc1N0eWxlID0g
bXV0YWJsZVN0eWxlLT5jc3NUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiB9CiAKLXZvaWQgU3R5
bGVDaGFuZ2U6OnJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCi17ICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERl
Y29yYXRpb25zSW5FZmZlY3QgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRl
eHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbik7Ci0gICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgYm90aCB0ZXh0LWRlY29yYXRp
b24gYW5kIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QgYmVjYXVzZSB0aGF0IHdv
dWxkbid0IG1ha2Ugc2Vuc2UuCi0gICAgQVNTRVJUKCF0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCB8
fCAhdGV4dERlY29yYXRpb24pOwotICAgIGlmICh0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgewot
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdGV4
dERlY29yYXRpb25zSW5FZmZlY3QtPmNzc1RleHQoKSk7Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICAg
ICAgdGV4dERlY29yYXRpb24gPSB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB0ZXh0LWRlY29yYXRpb24gaXMgc2V0IHRvICJub25lIiwgcmVtb3ZlIHRoZSBwcm9w
ZXJ0eSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWRkIHJlZHVuZGFudCAidGV4dC1kZWNvcmF0
aW9uOiBub25lIi4KLSAgICBpZiAodGV4dERlY29yYXRpb24gJiYgIXRleHREZWNvcmF0aW9uLT5p
c1ZhbHVlTGlzdCgpKQotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbik7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0SWRlbnRpZmllclZhbHVlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgaWYg
KCFzdHlsZSkKQEAgLTg4Nyw2ICs4ODYsNTMgQEAKICAgICB9CiB9CiAKK2Jvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNob3VsZFNwbGl0RWxlbWVudChFbGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5pc0hUTUxF
bGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZSBlbGVtZW50
IGlzIG9mIHN0eWxlSW5saW5lRWxlbWVudCwgdGhlbiBzcGxpdCBiZWNhdXNlIGNvbW1hbmRzIHN1
Y2ggYXMgY3JlYXRlTGluayBhbmQgdW5saW5rIHJlcXVpcmUgdGhpcyBiZWhhdmlvcgorICAgIGlm
IChtX3N0eWxlZElubGluZUVsZW1lbnQgJiYgZWxlbS0+aGFzVGFnTmFtZShtX3N0eWxlZElubGlu
ZUVsZW1lbnQtPnRhZ1FOYW1lKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElm
IHRoZSBlbGVtZW50IGlzIG9uZSBvZiBwcmVzZW50YXRpb25hbCBlbGVtZW50cyBhbmQgaW50ZXJm
ZXJlcyB3aXRoIHRoZSBzeWxlIHdlJ3JlIGFwcGx5aW5nLCB0aGVuIHNwbGl0CisgICAgaWYgKGlt
cGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUoc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtKSwgc3R5bGUpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgZm9udCB0YWcgYW5kIGludGVyZmVyZXMg
d2l0aCB0aGUgc3R5bGUgd2UncmUgYXBwbHlpbmcsIHRoZW4gc3BsaXQKKyAgICBpZiAoZWxlbS0+
aGFzVGFnTmFtZShmb250VGFnKSkgeworICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOworICAgICAgICBmb3IgKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZShjb2xvckF0dHIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgorICAgICAgICAgICAgICAgICAgICBp
ZiAoZWxlbS0+aGFzQXR0cmlidXRlKGZhY2VBdHRyKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVt
LT5oYXNBdHRyaWJ1dGUoc2l6ZUF0dHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhlIGNvbXB1dGVkIHN0eWxlIGFuZCB0aGUgc3lsZSB3ZSdyZSBhcHBseWluZy4KKyAg
ICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBkb2Vzbid0IG1hdGNoIG5ldyBzdHlsZSwgdGhlbiB0aGUg
ZWxlbWVudCBpbnRlcmZlcmVzLCBzbyBzcGxpdC4KKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZU9mRWxlbSA9IGNvbXB1dGVkU3R5bGUoZWxlbSk7CisgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkaWZmID0gZ2V0UHJvcGVydGllc05vdElu
Q29tcHV0ZWRTdHlsZShzdHlsZSwgc3R5bGVPZkVsZW0uZ2V0KCkpOworICAgIHJlY29uY2lsZVRl
eHREZWNvcmF0aW9uUHJvcGVydGllcyhkaWZmLmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9BcHBseSA9IHN0eWxlLT5jb3B5KCk7CisgICAgcmVj
b25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKHN0eWxlVG9BcHBseS5nZXQoKSk7CisgICAg
Ym9vbCBpc0RpZmYgPSBkaWZmLT5jc3NUZXh0KCkgIT0gc3R5bGVUb0FwcGx5LT5jc3NUZXh0KCk7
CisgICAgZnByaW50ZihzdGRlcnIsICJbJXNdWyVzXVslZF1cblslc11cblslc11cbiIsIGRpZmYt
PmNzc1RleHQoKS5hc2NpaSgpLmRhdGEoKSwgc3R5bGVUb0FwcGx5LT5jc3NUZXh0KCkuYXNjaWko
KS5kYXRhKCksIGlzRGlmZiwgc3R5bGVPZkVsZW0tPmNzc1RleHQoKS5hc2NpaSgpLmRhdGEoKSwg
c3R5bGVUb0FwcGx5LT5jc3NUZXh0KCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIGlz
RGlmZjsKK30KKwogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCiB7CiAgICAgTm9kZSogc3RhcnREdW1teVNw
YW5BbmNlc3RvciA9IDA7CkBAIC05MDcsNyArOTUzLDEyIEBACiAgICAgfQogCiAgICAgLy8gc3Bs
aXQgdGhlIHN0YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9u
IHN0YXJ0cyBpbnNpZGUgb2YgaXQKLSAgICBib29sIHNwbGl0U3RhcnQgPSBzcGxpdFRleHRFbGVt
ZW50QXRTdGFydElmTmVlZGVkKHN0YXJ0LCBlbmQpOyAKKyAgICBib29sIHNwbGl0U3RhcnQ7Cisg
ICAgaWYgKHNob3VsZFNwbGl0RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwg
c3R5bGUpKQorICAgICAgICBzcGxpdFN0YXJ0ID0gc3BsaXRUZXh0RWxlbWVudEF0U3RhcnRJZk5l
ZWRlZChzdGFydCwgZW5kKTsKKyAgICBlbHNlCisgICAgICAgIHNwbGl0U3RhcnQgPSBzcGxpdFRl
eHRBdFN0YXJ0SWZOZWVkZWQoc3RhcnQsIGVuZCk7CisKICAgICBpZiAoc3BsaXRTdGFydCkgewog
ICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRp
b24oKTsKQEAgLTkxNSw3ICs5NjYsMTIgQEAKICAgICB9CiAKICAgICAvLyBzcGxpdCB0aGUgZW5k
IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRl
IG9mIGl0Ci0gICAgYm9vbCBzcGxpdEVuZCA9IHNwbGl0VGV4dEVsZW1lbnRBdEVuZElmTmVlZGVk
KHN0YXJ0LCBlbmQpOworICAgIGJvb2wgc3BsaXRFbmQ7CisgICAgaWYgKHNob3VsZFNwbGl0RWxl
bWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlKSkKKyAgICAgICAgc3BsaXRF
bmQgPSBzcGxpdFRleHRFbGVtZW50QXRFbmRJZk5lZWRlZChzdGFydCwgZW5kKTsKKyAgICBlbHNl
CisgICAgICAgIHNwbGl0RW5kID0gc3BsaXRUZXh0QXRFbmRJZk5lZWRlZChzdGFydCwgZW5kKTsK
KwogICAgIGlmIChzcGxpdEVuZCkgewogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5oCShyZXZpc2lvbiA2Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw2IEBACiAgICAg
dm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CiAg
ICAgdm9pZCBhcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uID0gRWRp
dEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOwogICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBF
ZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOwotICAgIHZvaWQgYXBwbHlT
dHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAgIHZvaWQgcmVtb3ZlU3R5bGVk
RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihi
b29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRy
dWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9
IHRydWUpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
LCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9
IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50
cyA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0
cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62241</attachid>
            <date>2010-07-21 15:58:33 -0700</date>
            <delta_ts>2010-07-22 11:57:22 -0700</delta_ts>
            <desc>ready for feedback</desc>
            <filename>attempt27156-split-carefully2</filename>
            <type>text/plain</type>
            <size>14028</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYz
NzgwKQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5o
IgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDcgKzY4
LDEyIEBACiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIG1fZWxl
bWVudDEgPSBtX2VsZW1lbnQyLT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKLSAgICAK
KworICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVj
YXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50
CisgICAgaW50IGVjID0gMDsKKyAgICBtX2VsZW1lbnQyLT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5h
bWVzOjppZEF0dHIsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKwogICAgIGV4ZWN1dGVBcHBseSgp
OwogfQogCkBAIC04OCw2ICs5NCwxMCBAQAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0uZ2V0
KCksIHJlZkNoaWxkLmdldCgpLCBlYyk7CiAKKyAgICAvLyBSZWNvdmVyIHRoZSBpZCBhdHRyaWJ1
dGUgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCisgICAgaWYgKG1fZWxlbWVudDEtPmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVudDItPnNldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aWRBdHRyKSk7CisKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwogfQogCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjM3ODApCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBA
QAogICAgIC8vIHN0eWxlLWFwcGxpY2F0aW9uIGhlbHBlcnMKICAgICB2b2lkIGFwcGx5QmxvY2tT
dHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIHZvaWQgYXBwbHlSZWxhdGl2
ZUZvbnRTdHlsZUNoYW5nZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAgIGJvb2wg
c2hvdWxkU3BsaXRFbGVtZW50KEVsZW1lbnQqIGVsZW0sIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSk7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9SYW5nZShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCk7CiAgICAgdm9pZCBhZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRNTEVs
ZW1lbnQqKTsKQEAgLTEyMiw3ICsxMjMsNyBAQAogCiBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5v
ZGUqKTsKIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9j
dW1lbnQqKTsKLVJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGll
c05vdEluQ29tcHV0ZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKTsKK1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY29tcHV0ZWRTdHlsZSk7CiAK
IHZvaWQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIFBvc2l0aW9uKTsKIHZvaWQgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuaAkocmV2aXNpb24gNjM3ODApCisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogCiAgICAg
dmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRvUmVhcHBseSgpOworICAgIHZvaWQgZXhlY3V0ZUFwcGx5KCk7CiAK
ICAgICBSZWZQdHI8VGV4dD4gbV90ZXh0MTsKICAgICBSZWZQdHI8VGV4dD4gbV90ZXh0MjsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjM3ODApCisr
KyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCwyNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOworICAgIAorc3RhdGljIHZvaWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9w
ZXJ0aWVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sgICAgCisgICAgUmVm
UHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICAvLyBXZSBzaG91bGRuJ3QgaGF2
ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciB0ZXh0LWRlY29yYXRpb24gYW5kIC13ZWJraXQtdGV4dC1k
ZWNvcmF0aW9ucy1pbi1lZmZlY3QKKyAgICBBU1NFUlQoIXRleHREZWNvcmF0aW9uc0luRWZmZWN0
IHx8ICF0ZXh0RGVjb3JhdGlvbiB8fCB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC0+Y3NzVGV4dCgp
ID09IHRleHREZWNvcmF0aW9uLT5jc3NUZXh0KCkpOworICAgIGlmICh0ZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCkgeworICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbiwgdGV4dERlY29yYXRpb25zSW5FZmZlY3QtPmNzc1RleHQoKSk7CisgICAgICAgIHN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KTsKKyAgICAgICAgdGV4dERlY29yYXRpb24gPSB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDsK
KyAgICB9CiAKKyAgICAvLyBJZiB0ZXh0LWRlY29yYXRpb24gaXMgc2V0IHRvICJub25lIiwgcmVt
b3ZlIHRoZSBwcm9wZXJ0eSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWRkIHJlZHVuZGFudCAi
dGV4dC1kZWNvcmF0aW9uOiBub25lIi4KKyAgICBpZiAodGV4dERlY29yYXRpb24gJiYgIXRleHRE
ZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Cit9CisKIGNsYXNzIFN0eWxlQ2hhbmdlIHsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBTdHlsZUNoYW5nZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29u
c3QgUG9zaXRpb24mKTsKQEAgLTcyLDcgKzg5LDYgQEAKIAogcHJpdmF0ZToKICAgICB2b2lkIGlu
aXQoUGFzc1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiwgY29uc3QgUG9zaXRpb24mKTsKLSAg
ICB2b2lkIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiopOwogICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qKTsKIAogICAgIFN0cmluZyBtX2Nzc1N0eWxlOwpAQCAtMTI1LDIzICsxNDEs
NiBAQAogICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNzc1RleHQoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6cmVjb25jaWxlVGV4dERlY29yYXRpb25Q
cm9wZXJ0aWVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsgICAgCi0gICAg
UmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAgICAvLyBXZSBzaG91bGRuJ3Qg
aGF2ZSBib3RoIHRleHQtZGVjb3JhdGlvbiBhbmQgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWlu
LWVmZmVjdCBiZWNhdXNlIHRoYXQgd291bGRuJ3QgbWFrZSBzZW5zZS4KLSAgICBBU1NFUlQoIXRl
eHREZWNvcmF0aW9uc0luRWZmZWN0IHx8ICF0ZXh0RGVjb3JhdGlvbik7Ci0gICAgaWYgKHRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC0+Y3NzVGV4dCgpKTsK
LSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpOwotICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9IHRleHREZWNvcmF0aW9u
c0luRWZmZWN0OwotICAgIH0KLQotICAgIC8vIElmIHRleHQtZGVjb3JhdGlvbiBpcyBzZXQgdG8g
Im5vbmUiLCByZW1vdmUgdGhlIHByb3BlcnR5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhZGQg
cmVkdW5kYW50ICJ0ZXh0LWRlY29yYXRpb246IG5vbmUiLgotICAgIGlmICh0ZXh0RGVjb3JhdGlv
biAmJiAhdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLX0KLQogc3RhdGljIGludCBn
ZXRJZGVudGlmaWVyVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBpbnQg
cHJvcGVydHlJRCkKIHsKICAgICBpZiAoIXN0eWxlKQpAQCAtMzY4LDcgKzM2Nyw3IEBACiAgICAg
cmV0dXJuIGZhbHNlOyAvLyBNYWtlIGNvbXBpbGVyIGhhcHB5CiB9CiAKLVJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21w
dXRlZFN0eWxlKQorUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0
aWVzTm90SW5Db21wdXRlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAg
QVNTRVJUKGNvbXB1dGVkU3R5bGUpOwpAQCAtODg3LDYgKzg4Niw2MCBAQAogICAgIH0KIH0KIAor
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KEVsZW1lbnQqIGVsZW0s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAoIWVsZW0gfHwg
IWVsZW0tPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgdGhlIGVsZW1lbnQgaXMgb2Ygc3R5bGVJbmxpbmVFbGVtZW50LCB0aGVuIHNwbGl0IGJlY2F1
c2UgY29tbWFuZHMgc3VjaCBhcyBjcmVhdGVMaW5rIGFuZCB1bmxpbmsgcmVxdWlyZSB0aGlzIGJl
aGF2aW9yCisgICAgaWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiBlbGVtLT5oYXNUYWdOYW1l
KG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUoKSkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgb25lIG9mIHByZXNlbnRhdGlvbmFsIGVsZW1l
bnRzIGFuZCBpbnRlcmZlcmVzIHdpdGggdGhlIHN5bGUgd2UncmUgYXBwbHlpbmcsIHRoZW4gc3Bs
aXQKKyAgICBpZiAoaW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBw
bHlpbmdTdHlsZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW0pLCBzdHlsZSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBmb250IHRhZyBh
bmQgaW50ZXJmZXJlcyB3aXRoIHRoZSBzdHlsZSB3ZSdyZSBhcHBseWluZywgdGhlbiBzcGxpdAor
ICAgIGlmIChlbGVtLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSB7CisgICAgICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAg
ICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgc3dpdGNoICgo
Kml0KS5pZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aGFzQXR0cmlidXRlKGNvbG9yQXR0cikpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGUoZmFjZUF0dHIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZShzaXplQXR0cikpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIGNvbXB1dGUgdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY29tcHV0ZWQgc3R5bGUgYW5kIHRoZSBzeWxlIHdlJ3Jl
IGFwcGx5aW5nLgorICAgIC8vIElmIHRoZSBkaWZmZXJlbmNlIGRvZXNuJ3QgbWF0Y2ggbmV3IHN0
eWxlLCB0aGVuIHRoZSBlbGVtZW50IGludGVyZmVyZXMsIHNvIHNwbGl0LgorICAgIFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlT2ZFbGVtID0gY29tcHV0ZWRTdHlsZShl
bGVtKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzdHlsZU9mUGFy
ZW50ID0gY29tcHV0ZWRTdHlsZShlbGVtLT5wYXJlbnROb2RlKCkpOworICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGlmZiA9IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVk
U3R5bGUoc3R5bGVPZkVsZW0uZ2V0KCksIHN0eWxlT2ZQYXJlbnQuZ2V0KCkpOworCisgICAgcmVj
b25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKGRpZmYuZ2V0KCkpOworICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb0FwcGx5ID0gc3R5bGUtPmNvcHkoKTsK
KyAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMoc3R5bGVUb0FwcGx5LmdldCgp
KTsKKworICAgIGJvb2wgaXNEaWZmID0gZmFsc2U7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICBmb3IgKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5
ID0gKml0OworICAgICAgICBpZiAoZGlmZi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5p
ZCgpKSAmJiBkaWZmLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5LmlkKCkpICE9IHByb3BlcnR5
LmNzc1RleHQoKSkKKyAgICAgICAgICAgIGlzRGlmZiA9IHRydWU7CisgICAgfQorICAgIHJldHVy
biBpc0RpZmY7Cit9CisKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKQogewogICAgIE5vZGUqIHN0YXJ0RHVt
bXlTcGFuQW5jZXN0b3IgPSAwOwpAQCAtOTA3LDcgKzk2MCwxMiBAQAogICAgIH0KIAogICAgIC8v
IHNwbGl0IHRoZSBzdGFydCBub2RlIGFuZCBjb250YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVj
dGlvbiBzdGFydHMgaW5zaWRlIG9mIGl0Ci0gICAgYm9vbCBzcGxpdFN0YXJ0ID0gc3BsaXRUZXh0
RWxlbWVudEF0U3RhcnRJZk5lZWRlZChzdGFydCwgZW5kKTsgCisgICAgYm9vbCBzcGxpdFN0YXJ0
OworICAgIGlmIChzaG91bGRTcGxpdEVsZW1lbnQoc3RhcnQubm9kZSgpLT5wYXJlbnRFbGVtZW50
KCksIHN0eWxlKSkKKyAgICAgICAgc3BsaXRTdGFydCA9IHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0
SWZOZWVkZWQoc3RhcnQsIGVuZCk7CisgICAgZWxzZQorICAgICAgICBzcGxpdFN0YXJ0ID0gc3Bs
aXRUZXh0QXRTdGFydElmTmVlZGVkKHN0YXJ0LCBlbmQpOworCiAgICAgaWYgKHNwbGl0U3RhcnQp
IHsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBv
c2l0aW9uKCk7CkBAIC05MTUsNyArOTczLDEyIEBACiAgICAgfQogCiAgICAgLy8gc3BsaXQgdGhl
IGVuZCBub2RlIGFuZCBjb250YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBlbmRzIGlu
c2lkZSBvZiBpdAotICAgIGJvb2wgc3BsaXRFbmQgPSBzcGxpdFRleHRFbGVtZW50QXRFbmRJZk5l
ZWRlZChzdGFydCwgZW5kKTsKKyAgICBib29sIHNwbGl0RW5kOworICAgIGlmIChzaG91bGRTcGxp
dEVsZW1lbnQoZW5kLm5vZGUoKS0+cGFyZW50RWxlbWVudCgpLCBzdHlsZSkpCisgICAgICAgIHNw
bGl0RW5kID0gc3BsaXRUZXh0RWxlbWVudEF0RW5kSWZOZWVkZWQoc3RhcnQsIGVuZCk7CisgICAg
ZWxzZQorICAgICAgICBzcGxpdEVuZCA9IHNwbGl0VGV4dEF0RW5kSWZOZWVkZWQoc3RhcnQsIGVu
ZCk7CisKICAgICBpZiAoc3BsaXRFbmQpIHsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9u
KCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
U3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDYzNzgwKQorKysgV2ViQ29yZS9lZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcs
MTggQEAKICAgICBBU1NFUlQobV9vZmZzZXQgPCBtX3RleHQyLT5sZW5ndGgoKSk7CiB9CiAKK3Zv
aWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmV4ZWN1dGVBcHBseSgpCit7CisgICAgQVNTRVJUKG1f
dGV4dDEpOworICAgIEFTU0VSVChtX3RleHQyKTsKKworICAgIGludCBlYyA9IDA7CisgICAgbV90
ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobV90ZXh0MS5nZXQoKSwgbV90ZXh0Mi5n
ZXQoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGV4dDItPmRl
bGV0ZURhdGEoMCwgbV9vZmZzZXQsIGVjKTsKK30KKwogdm9pZCBTcGxpdFRleHROb2RlQ29tbWFu
ZDo6ZG9BcHBseSgpCiB7CiAgICAgTm9kZSogcGFyZW50ID0gbV90ZXh0Mi0+cGFyZW50Tm9kZSgp
OwpAQCAtNjIsMTMgKzc0LDkgQEAKICAgICBSZWZQdHI8VGV4dD4gcHJlZml4VGV4dE5vZGUgPSBU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgcHJlZml4VGV4dCk7CiAgICAgQVNTRVJUKHByZWZpeFRl
eHROb2RlKTsKICAgICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhtX3RleHQyLmdldCgpLCAwLCBt
X29mZnNldCwgcHJlZml4VGV4dE5vZGUuZ2V0KCksIDApOworICAgIG1fdGV4dDEgPSBwcmVmaXhU
ZXh0Tm9kZS5yZWxlYXNlKCk7CiAKLSAgICBwYXJlbnQtPmluc2VydEJlZm9yZShwcmVmaXhUZXh0
Tm9kZS5nZXQoKSwgbV90ZXh0Mi5nZXQoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV90ZXh0Mi0+ZGVsZXRlRGF0YSgwLCBtX29mZnNldCwgZWMpOwotICAgIG1f
dGV4dDEgPSBwcmVmaXhUZXh0Tm9kZS5yZWxlYXNlKCk7CisgICAgZXhlY3V0ZUFwcGx5KCk7CiB9
CiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCkBAIC03OCwxNiArODYs
MjMgQEAKIAogICAgIEFTU0VSVChtX3RleHQxLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkpOwog
Ci0gICAgUmVmUHRyPFRleHQ+IHByZWZpeFRleHROb2RlID0gbV90ZXh0MS5yZWxlYXNlKCk7Ci0g
ICAgU3RyaW5nIHByZWZpeFRleHQgPSBwcmVmaXhUZXh0Tm9kZS0+ZGF0YSgpOworICAgIFN0cmlu
ZyBwcmVmaXhUZXh0ID0gbV90ZXh0MS0+ZGF0YSgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0LCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhwcmVm
aXhUZXh0Tm9kZS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0Mi5nZXQoKSwg
MCk7Ci0gICAgcHJlZml4VGV4dE5vZGUtPnJlbW92ZShlYyk7CisgICAgZG9jdW1lbnQoKS0+Y29w
eU1hcmtlcnMobV90ZXh0MS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0Mi5n
ZXQoKSwgMCk7CisgICAgbV90ZXh0MS0+cmVtb3ZlKGVjKTsKIH0KIAordm9pZCBTcGxpdFRleHRO
b2RlQ29tbWFuZDo6ZG9SZWFwcGx5KCkKK3sKKyAgICBpZiAoIW1fdGV4dDIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGV4ZWN1dGVBcHBseSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxv
Y2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDYzNzgwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVz
dGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw0ICs0LDQg
QEAKIHdvcmxkCiB3ZWJraXQKIGlzIGdyZWF0Ci08YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxs
byA8YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1
b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJt
YXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVv
dGUgaWQ9Im91dGVyIj48YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3ZWJraXQgPC9ibG9ja3F1b3Rl
PjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaXMgZ3Jl
YXQgPC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaGVsbG8gPGJsb2NrcXVv
dGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2tx
dW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAg
MCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPjxibG9ja3F1
b3RlPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2Nr
cXVvdGU+IGlzIGdyZWF0IDwvYmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFy
LWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2Mzc4MCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBAQAogdHdvCiB0aHJlZQogQmVmb3JlOiA8
YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPnR3bzxicj50aHJlZTwvYmxvY2txdW90ZT4KLUFm
dGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJs
b2NrcXVvdGUgaWQ9InRlc3QiPnRocmVlPC9ibG9ja3F1b3RlPgorQWZ0ZXI6IDxibG9ja3F1b3Rl
IGlkPSJ0ZXN0Ij5vbmU8YnI+PC9ibG9ja3F1b3RlPnR3bzxicj48YmxvY2txdW90ZT50aHJlZTwv
YmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50
LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFw
aC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjM3ODApCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2Nr
cXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDQgKzIsNCBAQAogCiBoZWxs
bwogd29ybGQKLTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxi
bG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46
IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9
InRlc3QiPiB3b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9
InRlc3QiPiBoZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1p
bmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25l
OyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2tx
dW90ZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62324</attachid>
            <date>2010-07-22 11:57:22 -0700</date>
            <delta_ts>2010-07-26 23:21:07 -0700</delta_ts>
            <desc>fixed per Tony&apos;s comments</desc>
            <filename>attempt27156-split-carefully3</filename>
            <type>text/plain</type>
            <size>23269</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDYz
NzgwKQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50Q29tbWFuZC5o
IgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDcgKzY4
LDEyIEBACiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIG1fZWxl
bWVudDEgPSBtX2VsZW1lbnQyLT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsKLSAgICAK
KworICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVj
YXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50
CisgICAgaW50IGVjID0gMDsKKyAgICBtX2VsZW1lbnQyLT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5h
bWVzOjppZEF0dHIsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKwogICAgIGV4ZWN1dGVBcHBseSgp
OwogfQogCkBAIC04OCw2ICs5NCwxMCBAQAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0uZ2V0
KCksIHJlZkNoaWxkLmdldCgpLCBlYyk7CiAKKyAgICAvLyBSZWNvdmVyIHRoZSBpZCBhdHRyaWJ1
dGUgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCisgICAgaWYgKG1fZWxlbWVudDEtPmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVudDItPnNldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aWRBdHRyKSk7CisKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwogfQogCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gNjM3ODApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzk0LDcgKzc5NCw3IEBACiAKIHN0YXRpYyBUcmlTdGF0ZSB0cmlT
dGF0ZU9mU3R5bGVJbkNvbXB1dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogZGVzaXJlZFN0
eWxlLCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIGNvbXB1dGVkU3R5bGUsIGJvb2wgaWdu
b3JlVGV4dE9ubHlQcm9wZXJ0aWVzID0gZmFsc2UpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBkaWZmID0gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZShk
ZXNpcmVkU3R5bGUsIGNvbXB1dGVkU3R5bGUpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gZGlmZiA9IGRlc2lyZWRTdHlsZS0+Y2Fub25pY2FsaXplZERpZmYoY29tcHV0
ZWRTdHlsZSk7CiAKICAgICBpZiAoaWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKQogICAgICAgICBk
aWZmLT5yZW1vdmVQcm9wZXJ0aWVzSW5TZXQodGV4dE9ubHlQcm9wZXJ0aWVzLCBzaXplb2YodGV4
dE9ubHlQcm9wZXJ0aWVzKSAvIHNpemVvZih0ZXh0T25seVByb3BlcnRpZXNbMF0pKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2Mzc4MCkKKysrIFdlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
Nyw3IEBACiAgICAgLy8gc3R5bGUtYXBwbGljYXRpb24gaGVscGVycwogICAgIHZvaWQgYXBwbHlC
bG9ja1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9pZCBhcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAg
Ym9vbCBzaG91bGRTcGxpdEVsZW1lbnQoRWxlbWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9SYW5nZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7
CiAgICAgdm9pZCBhZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRNTEVsZW1lbnQq
KTsKQEAgLTEyMiw3ICsxMjMsNiBAQAogCiBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsK
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQq
KTsKLVJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdElu
Q29tcHV0ZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKTsKIAogdm9pZCBwcmVwYXJlRWRpdGluZ1N0eWxl
VG9BcHBseUF0KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgUG9zaXRpb24pOwogdm9pZCBy
ZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUq
KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCShyZXZpc2lvbiA2
Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5
KCk7CisgICAgdm9pZCBleGVjdXRlQXBwbHkoKTsKIAogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQx
OwogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQyOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcAkocmV2aXNpb24gNjM3ODApCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsNyBAQAogewogICAgIC8vIHJldHVybiB0
YWJsZSBvZmZzZXQgMCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBWaXNpYmxlUG9zaXRpb24gaW5zaWRl
IHRoZSB0YWJsZQogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IGMucHJldmlvdXMoKTsK
LSAgICBpZiAoaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShwcmV2aW91cykpCisgICAgaWYgKGlz
TGFzdFBvc2l0aW9uQmVmb3JlVGFibGUocHJldmlvdXMpICYmIGlzRWRpdGFibGVQb3NpdGlvbihw
cmV2aW91cy5kZWVwRXF1aXZhbGVudCgpKSkKICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAg
IAogICAgIHJldHVybiBjOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CShyZXZpc2lvbiA2Mzc4MCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisgICAgCitzdGF0aWMgdm9pZCByZWNvbmNp
bGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQoreyAgICAKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uc0luRWZmZWN0
ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAg
IC8vIFdlIHNob3VsZG4ndCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHRleHQtZGVjb3JhdGlv
biBhbmQgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdAorICAgIEFTU0VSVCghdGV4
dERlY29yYXRpb25zSW5FZmZlY3QgfHwgIXRleHREZWNvcmF0aW9uIHx8IHRleHREZWNvcmF0aW9u
c0luRWZmZWN0LT5jc3NUZXh0KCkgPT0gdGV4dERlY29yYXRpb24tPmNzc1RleHQoKSk7CisgICAg
aWYgKHRleHREZWNvcmF0aW9uc0luRWZmZWN0KSB7CisgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC0+Y3Nz
VGV4dCgpKTsKKyAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9IHRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0OworICAgIH0KIAorICAgIC8vIElmIHRleHQtZGVjb3JhdGlvbiBp
cyBzZXQgdG8gIm5vbmUiLCByZW1vdmUgdGhlIHByb3BlcnR5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2Fu
dCB0byBhZGQgcmVkdW5kYW50ICJ0ZXh0LWRlY29yYXRpb246IG5vbmUiLgorICAgIGlmICh0ZXh0
RGVjb3JhdGlvbiAmJiAhdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKK30KKwogY2xh
c3MgU3R5bGVDaGFuZ2UgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN0eWxlQ2hhbmdlKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYpOwpAQCAtNzIsNyArODksNiBAQAogCiBw
cml2YXRlOgogICAgIHZvaWQgaW5pdChQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+LCBj
b25zdCBQb3NpdGlvbiYpOwotICAgIHZvaWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0
aWVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9pZCBleHRyYWN0VGV4dFN0
eWxlcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogCiAgICAgU3RyaW5nIG1fY3NzU3R5
bGU7CkBAIC0xMDYsNyArMTIyLDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZSA9IHBvc2l0aW9uLmNvbXB1
dGVkU3R5bGUoKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFi
bGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoc3R5bGUuZ2V0KCksIGNv
bXB1dGVkU3R5bGUuZ2V0KCkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbXV0YWJsZVN0eWxlID0gc3R5bGUtPmNhbm9uaWNhbGl6ZWREaWZmKGNvbXB1dGVkU3R5bGUu
Z2V0KCkpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVT
dHlsZS5nZXQoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnNob3Vs
ZFN0eWxlV2l0aENTUygpKQpAQCAtMTE3LDcgKzEzMyw3IEBACiAgICAgICAgIG11dGFibGVTdHls
ZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKIAogICAgIC8vIElmIHVu
aWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHlsZSBhbmQgZGlyZWN0aW9uIGlzIG5v
dCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHlsZS4KLSAgICAvLyBGSVhNRTogU2hv
dWxkbid0IHRoaXMgYmUgZG9uZSBpbiBnZXRQcm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlPwor
ICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBiZSBkb25lIGluIGNhbm9uaWNhbGl6ZWREaWZm
PwogICAgIGlmIChtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlV
bmljb2RlQmlkaSkgJiYgIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGly
ZWN0aW9uKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsK
IApAQCAtMTI1LDIzICsxNDEsNiBAQAogICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNz
c1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6cmVjb25j
aWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKLXsgICAgCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAg
ICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBib3RoIHRleHQtZGVjb3JhdGlvbiBhbmQgLXdlYmtpdC10
ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCBiZWNhdXNlIHRoYXQgd291bGRuJ3QgbWFrZSBzZW5z
ZS4KLSAgICBBU1NFUlQoIXRleHREZWNvcmF0aW9uc0luRWZmZWN0IHx8ICF0ZXh0RGVjb3JhdGlv
bik7Ci0gICAgaWYgKHRleHREZWNvcmF0aW9uc0luRWZmZWN0KSB7Ci0gICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdC0+Y3NzVGV4dCgpKTsKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwotICAgICAgICB0ZXh0RGVjb3JhdGlv
biA9IHRleHREZWNvcmF0aW9uc0luRWZmZWN0OwotICAgIH0KLQotICAgIC8vIElmIHRleHQtZGVj
b3JhdGlvbiBpcyBzZXQgdG8gIm5vbmUiLCByZW1vdmUgdGhlIHByb3BlcnR5IGJlY2F1c2Ugd2Ug
ZG9uJ3Qgd2FudCB0byBhZGQgcmVkdW5kYW50ICJ0ZXh0LWRlY29yYXRpb246IG5vbmUiLgotICAg
IGlmICh0ZXh0RGVjb3JhdGlvbiAmJiAhdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsK
LX0KLQogc3RhdGljIGludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBpbnQgcHJvcGVydHlJRCkKIHsKICAgICBpZiAoIXN0eWxlKQpAQCAtMzIx
LDcwICszMjAsNiBAQAogICAgIHJldHVybiBzdHlsZUVsZW1lbnQucmVsZWFzZSgpOwogfQogCi1z
dGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgaW50IHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQotewot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0SUQpOwotICAgIGlmICghdGV4dERlY29yYXRpb24gfHwgIXRleHREZWNv
cmF0aW9uLT5pc1ZhbHVlTGlzdCgpIHx8ICFyZWZUZXh0RGVjb3JhdGlvbiB8fCAhcmVmVGV4dERl
Y29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odGV4dERlY29yYXRpb24uZ2V0KCkpLT5jb3B5KCk7Ci0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1
ZXNJblJlZlRleHREZWNvcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4ocmVmVGV4
dERlY29yYXRpb24pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNJblJlZlRl
eHREZWNvcmF0aW9uLT5sZW5ndGgoKTsgaSsrKQotICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+
cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24tPml0ZW0oaSkpOwotCi0gICAgc2V0
VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24uZ2V0KCksIHBy
b3BlcnRJRCk7Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCi17Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQpOwotCi0gICAgaWYgKCFmb250V2VpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFmb250V2VpZ2h0LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEJlY2F1c2UgYiB0YWcgY2FuIG9ubHkgYm9sZCB0ZXh0LCB0aGVy
ZSBhcmUgb25seSB0d28gc3RhdGVzIGluIHBsYWluIGh0bWw6IGJvbGQgYW5kIG5vdCBib2xkLgot
ICAgIC8vIENvbGxhcHNlIGFsbCBvdGhlciB2YWx1ZXMgdG8gZWl0aGVyIG9uZSBvZiB0aGVzZSB0
d28gc3RhdGVzIGZvciBlZGl0aW5nIHB1cnBvc2VzLgotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihmb250V2VpZ2h0LmdldCgpKS0+Z2V0SWRlbnQoKSkgewotICAg
ICAgICBjYXNlIENTU1ZhbHVlMTAwOgotICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgotICAgICAg
ICBjYXNlIENTU1ZhbHVlMzAwOgotICAgICAgICBjYXNlIENTU1ZhbHVlNDAwOgotICAgICAgICBj
YXNlIENTU1ZhbHVlNTAwOgotICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZTYwMDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZTcwMDoKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZTgwMDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZTkwMDoKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGb3IgQ1NTVmFs
dWVCb2xkZXIgYW5kIENTU1ZhbHVlTGlnaHRlcgotICAgIHJldHVybiBmYWxzZTsgLy8gTWFrZSBj
b21waWxlciBoYXBweQotfQotCi1SZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdl
dFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiogY29tcHV0ZWRTdHlsZSkKLXsKLSAgICBBU1NF
UlQoc3R5bGUpOwotICAgIEFTU0VSVChjb21wdXRlZFN0eWxlKTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJlc3VsdCA9IHN0eWxlLT5jb3B5KCk7Ci0gICAgY29tcHV0
ZWRTdHlsZS0+ZGlmZihyZXN1bHQuZ2V0KCkpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBjb21w
dXRlZFRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0gY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBk
aWZmVGV4dERlY29yYXRpb25zKHJlc3VsdC5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
biwgY29tcHV0ZWRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7Ci0gICAgZGlmZlRleHRE
ZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QsIGNvbXB1dGVkVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwotCi0gICAg
aWYgKGZvbnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgpKSA9PSBmb250V2VpZ2h0SXNCb2xkKGNv
bXB1dGVkU3R5bGUpKQotICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFdlaWdodCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBFZGl0aW5nIHN0eWxl
IHByb3BlcnRpZXMgbXVzdCBiZSBwcmVzZXJ2ZWQgZHVyaW5nIGVkaXRpbmcgb3BlcmF0aW9uLgog
Ly8gZS5nLiB3aGVuIGEgdXNlciBpbnNlcnRzIGEgbmV3IHBhcmFncmFwaCwgYWxsIHByb3BlcnRp
ZXMgbGlzdGVkIGhlcmUgbXVzdCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBwYXJhZ3JhcGguCiAvLyBG
SVhNRTogVGhlIGN1cnJlbnQgZWRpdGluZ1N0eWxlUHJvcGVydGllcyBjb250YWlucyBhbGwgaW5o
ZXJpdGFibGVQcm9wZXJ0aWVzIGJ1dCB3ZSBtYXkgbm90IG5lZWQgdG8gcHJlc2VydmUgYWxsIGlu
aGVyaXRhYmxlIHByb3BlcnRpZXMKQEAgLTg4Nyw2ICs4MjIsNjAgQEAKICAgICB9CiB9CiAKK2Jv
b2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0RWxlbWVudChFbGVtZW50KiBlbGVtLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFlbGVtIHx8ICFl
bGVtLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElm
IHRoZSBlbGVtZW50IGlzIG9mIHN0eWxlSW5saW5lRWxlbWVudCwgdGhlbiBzcGxpdCBiZWNhdXNl
IGNvbW1hbmRzIHN1Y2ggYXMgY3JlYXRlTGluayBhbmQgdW5saW5rIHJlcXVpcmUgdGhpcyBiZWhh
dmlvcgorICAgIGlmIChtX3N0eWxlZElubGluZUVsZW1lbnQgJiYgZWxlbS0+aGFzVGFnTmFtZSht
X3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIG9uZSBvZiBwcmVzZW50YXRpb25hbCBlbGVtZW50
cyBhbmQgaW50ZXJmZXJlcyB3aXRoIHRoZSBzeWxlIHdlJ3JlIGFwcGx5aW5nLCB0aGVuIHNwbGl0
CisgICAgaWYgKGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5
aW5nU3R5bGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtKSwgc3R5bGUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgZm9udCB0YWcgYW5k
IGludGVyZmVyZXMgd2l0aCB0aGUgc3R5bGUgd2UncmUgYXBwbHlpbmcsIHRoZW4gc3BsaXQKKyAg
ICBpZiAoZWxlbS0+aGFzVGFnTmFtZShmb250VGFnKSkgeworICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOworICAgICAg
ICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0
eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKCpp
dCkuaWQoKSkgeworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgICAgICAg
ICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGUoY29sb3JBdHRyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aGFz
QXR0cmlidXRlKGZhY2VBdHRyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNp
emU6CisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZShzaXplQXR0cikpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCBjb21w
dXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbXB1dGVkIHN0eWxlIGFuZCB0aGUgc3ls
ZSB3ZSdyZSBhcHBseWluZy4KKyAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBkb2Vzbid0IG1hdGNo
IG5ldyBzdHlsZSwgdGhlbiB0aGUgZWxlbWVudCBpbnRlcmZlcmVzLCBzbyBzcGxpdC4KKyAgICBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzdHlsZU9mRWxlbSA9IGNvbXB1dGVk
U3R5bGUoZWxlbSk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGVPZlBhcmVudCA9IGNvbXB1dGVkU3R5bGUoZWxlbS0+cGFyZW50Tm9kZSgpKTsKKyAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRpZmYgPSBzdHlsZU9mRWxlbS0+Y2Fub25p
Y2FsaXplZERpZmYoc3R5bGVPZlBhcmVudC5nZXQoKSk7CisKKyAgICByZWNvbmNpbGVUZXh0RGVj
b3JhdGlvblByb3BlcnRpZXMoZGlmZi5nZXQoKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZVRvQXBwbHkgPSBzdHlsZS0+Y29weSgpOworICAgIHJlY29uY2ls
ZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhzdHlsZVRvQXBwbHkuZ2V0KCkpOworCisgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQo
KTsKKyAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBp
dCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgQ1NT
UHJvcGVydHkmIHByb3BlcnR5ID0gKml0OworICAgICAgICBpZiAoZGlmZi0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eS5pZCgpKSAmJiBkaWZmLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5
LmlkKCkpICE9IHByb3BlcnR5LmNzc1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlJbmxpbmVTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCiB7CiAg
ICAgTm9kZSogc3RhcnREdW1teVNwYW5BbmNlc3RvciA9IDA7CkBAIC05MDcsNyArODk2LDEyIEBA
CiAgICAgfQogCiAgICAgLy8gc3BsaXQgdGhlIHN0YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxl
bWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0cyBpbnNpZGUgb2YgaXQKLSAgICBib29sIHNwbGl0
U3RhcnQgPSBzcGxpdFRleHRFbGVtZW50QXRTdGFydElmTmVlZGVkKHN0YXJ0LCBlbmQpOyAKKyAg
ICBib29sIHNwbGl0U3RhcnQ7CisgICAgaWYgKHNob3VsZFNwbGl0RWxlbWVudChzdGFydC5ub2Rl
KCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAgICBzcGxpdFN0YXJ0ID0gc3BsaXRU
ZXh0RWxlbWVudEF0U3RhcnRJZk5lZWRlZChzdGFydCwgZW5kKTsKKyAgICBlbHNlCisgICAgICAg
IHNwbGl0U3RhcnQgPSBzcGxpdFRleHRBdFN0YXJ0SWZOZWVkZWQoc3RhcnQsIGVuZCk7CisKICAg
ICBpZiAoc3BsaXRTdGFydCkgewogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAg
ICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKQEAgLTkxNSw3ICs5MDksMTIgQEAKICAgICB9CiAK
ICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUg
c2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0Ci0gICAgYm9vbCBzcGxpdEVuZCA9IHNwbGl0VGV4
dEVsZW1lbnRBdEVuZElmTmVlZGVkKHN0YXJ0LCBlbmQpOworICAgIGJvb2wgc3BsaXRFbmQ7Cisg
ICAgaWYgKHNob3VsZFNwbGl0RWxlbWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0
eWxlKSkKKyAgICAgICAgc3BsaXRFbmQgPSBzcGxpdFRleHRFbGVtZW50QXRFbmRJZk5lZWRlZChz
dGFydCwgZW5kKTsKKyAgICBlbHNlCisgICAgICAgIHNwbGl0RW5kID0gc3BsaXRUZXh0QXRFbmRJ
Zk5lZWRlZChzdGFydCwgZW5kKTsKKwogICAgIGlmIChzcGxpdEVuZCkgewogICAgICAgICBzdGFy
dCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjM3ODAp
CisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0NywxOCBAQAogICAgIEFTU0VSVChtX29mZnNldCA8IG1fdGV4dDItPmxl
bmd0aCgpKTsKIH0KIAordm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkK
K3sKKyAgICBBU1NFUlQobV90ZXh0MSk7CisgICAgQVNTRVJUKG1fdGV4dDIpOworCisgICAgaW50
IGVjID0gMDsKKyAgICBtX3RleHQyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShtX3RleHQx
LmdldCgpLCBtX3RleHQyLmdldCgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47
CisgICAgbV90ZXh0Mi0+ZGVsZXRlRGF0YSgwLCBtX29mZnNldCwgZWMpOworfQorCiB2b2lkIFNw
bGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBOb2RlKiBwYXJlbnQgPSBtX3Rl
eHQyLT5wYXJlbnROb2RlKCk7CkBAIC02MiwxMyArNzQsOSBAQAogICAgIFJlZlB0cjxUZXh0PiBw
cmVmaXhUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBwcmVmaXhUZXh0KTsKICAg
ICBBU1NFUlQocHJlZml4VGV4dE5vZGUpOwogICAgIGRvY3VtZW50KCktPmNvcHlNYXJrZXJzKG1f
dGV4dDIuZ2V0KCksIDAsIG1fb2Zmc2V0LCBwcmVmaXhUZXh0Tm9kZS5nZXQoKSwgMCk7CisgICAg
bV90ZXh0MSA9IHByZWZpeFRleHROb2RlLnJlbGVhc2UoKTsKIAotICAgIHBhcmVudC0+aW5zZXJ0
QmVmb3JlKHByZWZpeFRleHROb2RlLmdldCgpLCBtX3RleHQyLmdldCgpLCBlYyk7Ci0gICAgaWYg
KGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RleHQyLT5kZWxldGVEYXRhKDAsIG1fb2Zm
c2V0LCBlYyk7Ci0gICAgbV90ZXh0MSA9IHByZWZpeFRleHROb2RlLnJlbGVhc2UoKTsKKyAgICBl
eGVjdXRlQXBwbHkoKTsKIH0KIAogdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5
KCkKQEAgLTc4LDE2ICs4NiwyMyBAQAogCiAgICAgQVNTRVJUKG1fdGV4dDEtPmRvY3VtZW50KCkg
PT0gZG9jdW1lbnQoKSk7CiAKLSAgICBSZWZQdHI8VGV4dD4gcHJlZml4VGV4dE5vZGUgPSBtX3Rl
eHQxLnJlbGVhc2UoKTsKLSAgICBTdHJpbmcgcHJlZml4VGV4dCA9IHByZWZpeFRleHROb2RlLT5k
YXRhKCk7CisgICAgU3RyaW5nIHByZWZpeFRleHQgPSBtX3RleHQxLT5kYXRhKCk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBtX3RleHQyLT5pbnNlcnREYXRhKDAsIHByZWZpeFRl
eHQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50KCkt
PmNvcHlNYXJrZXJzKHByZWZpeFRleHROb2RlLmdldCgpLCAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgp
LCBtX3RleHQyLmdldCgpLCAwKTsKLSAgICBwcmVmaXhUZXh0Tm9kZS0+cmVtb3ZlKGVjKTsKKyAg
ICBkb2N1bWVudCgpLT5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBwcmVmaXhUZXh0Lmxl
bmd0aCgpLCBtX3RleHQyLmdldCgpLCAwKTsKKyAgICBtX3RleHQxLT5yZW1vdmUoZWMpOwogfQog
Cit2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1JlYXBwbHkoKQoreworICAgIGlmICghbV90
ZXh0MikKKyAgICAgICAgcmV0dXJuOworCisgICAgZXhlY3V0ZUFwcGx5KCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlz
aW9uIDYzNzgwKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKICAKICAgICB2b2lkIGRpZmYo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjYW5vbmljYWxpemVkRGlmZihjb25zdCBDU1NTdHlsZURl
Y2xhcmF0aW9uKikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNp
b24gNjM3ODApCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsOSBAQAogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHku
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1J1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogCkBAIC0xNDQsNiArMTQ2LDc4IEBACiAgICAg
ICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOwogfQogCitz
dGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgaW50IHByb3BlcnR5SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKK3sK
KyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7CisgICAgaWYgKCF0ZXh0RGVjb3JhdGlvbiB8fCAhdGV4dERl
Y29yYXRpb24tPmlzVmFsdWVMaXN0KCkgfHwgIXJlZlRleHREZWNvcmF0aW9uIHx8ICFyZWZUZXh0
RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih0ZXh0RGVjb3JhdGlvbi5nZXQoKSktPmNvcHkoKTsKKyAgICBDU1NWYWx1ZUxpc3QqIHZh
bHVlc0luUmVmVGV4dERlY29yYXRpb24gPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihyZWZU
ZXh0RGVjb3JhdGlvbik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlc0luUmVm
VGV4dERlY29yYXRpb24tPmxlbmd0aCgpOyBpKyspCisgICAgICAgIG5ld1RleHREZWNvcmF0aW9u
LT5yZW1vdmVBbGwodmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi0+aXRlbShpKSk7CisKKyAgICBp
ZiAobmV3VGV4dERlY29yYXRpb24tPmxlbmd0aCgpKQorICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkocHJvcGVydHlJRCwgbmV3VGV4dERlY29yYXRpb24tPmNzc1RleHQoKSwgc3R5bGUtPmdldFBy
b3BlcnR5UHJpb3JpdHkocHJvcGVydHlJRCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOworfQorCitzdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNC
b2xkKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIEFTU0VSVChzdHls
ZSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKKworICAgIGlmICghZm9udFdlaWdodCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZm9udFdlaWdodC0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBCZWNhdXNlIGIgdGFnIGNh
biBvbmx5IGJvbGQgdGV4dCwgdGhlcmUgYXJlIG9ubHkgdHdvIHN0YXRlcyBpbiBwbGFpbiBodG1s
OiBib2xkIGFuZCBub3QgYm9sZC4KKyAgICAvLyBDb2xsYXBzZSBhbGwgb3RoZXIgdmFsdWVzIHRv
IGVpdGhlciBvbmUgb2YgdGhlc2UgdHdvIHN0YXRlcyBmb3IgZWRpdGluZyBwdXJwb3Nlcy4KKyAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZm9udFdlaWdodC5nZXQo
KSktPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZTEwMDoKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZTIwMDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZTMwMDoKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZTQwMDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZTUwMDoKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZU5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUJvbGQ6CisgICAgICAgIGNhc2UgQ1NTVmFsdWU2MDA6CisgICAgICAgIGNhc2UgQ1NTVmFs
dWU3MDA6CisgICAgICAgIGNhc2UgQ1NTVmFsdWU4MDA6CisgICAgICAgIGNhc2UgQ1NTVmFsdWU5
MDA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gRm9yIENTU1ZhbHVlQm9sZGVyIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIKKyAgICBy
ZXR1cm4gZmFsc2U7IC8vIE1ha2UgY29tcGlsZXIgaGFwcHkKK30KKworLyogUmV0dXJucyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiB0aGF0IGNvbnRhaW5zIHByb3BlcnRpZXMgb2YgdGhpcyBD
U1NTdHlsZURlY2xhcmF0aW9uIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjaWZpZWQgc3R5bGUKKyAq
IEl0IGNhbm9uaWNhbGl6ZSB0aGUgQ1NTIHByb3BlcnRpZXMgc28gdGV4dC1kZWNvcmF0aW9ucy1p
bi1lZmZlY3QgYW5kIHRleHQtZGVjb3JhdGlvbiBhcmUgY29uc2lkZXJlZCBhcyB0aGUgc2FtZSBw
cm9wZXJ0eQorICogYW5kIGZvbnQgc2l6ZSBpcyBjYW5vbmljYWxpemVkIGFzIGJvbGQgb3Igbm90
IGJvbGQgcmF0aGVyIHRoYW4gdmFsdWVzIGJldHdlZW4gMTAwIGFuZCA5MDAuICovCitQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjYW5v
bmljYWxpemVkRGlmZihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoc3R5bGUpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gcmVzdWx0ID0gY29weSgpOworICAgIHN0eWxlLT5kaWZmKHJlc3VsdC5nZXQoKSk7CisKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
CisgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIGRpZmZUZXh0RGVjb3Jh
dGlvbnMocmVzdWx0LmdldCgpLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdC5nZXQoKSk7CisgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0
KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIHRleHREZWNvcmF0
aW9uc0luRWZmZWN0LmdldCgpKTsKKyAgICBkaWZmVGV4dERlY29yYXRpb25zKHJlc3VsdC5nZXQo
KSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdGV4dERlY29yYXRpb24uZ2V0KCkpOworICAg
IGRpZmZUZXh0RGVjb3JhdGlvbnMocmVzdWx0LmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0LCB0ZXh0RGVjb3JhdGlvbi5nZXQoKSk7CisKKyAgICBpZiAoZm9u
dFdlaWdodElzQm9sZChyZXN1bHQuZ2V0KCkpID09IGZvbnRXZWlnaHRJc0JvbGQoc3R5bGUpKQor
ICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGlu
dCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5
PiBsaXN0OwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVz
dGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2Mzc4MCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5k
ZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQs
NCArNCw0IEBACiB3b3JsZAogd2Via2l0CiBpcyBncmVhdAotPGJsb2NrcXVvdGUgaWQ9Im91dGVy
Ij4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+PC9ibG9ja3F1b3RlPjwv
YmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIiBz
dHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiPjxi
bG9ja3F1b3RlIGlkPSJvdXRlciI+PGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd2Via2l0IDwvYmxv
Y2txdW90ZT48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGlkPSJvdXRlciI+
IGlzIGdyZWF0IDwvYmxvY2txdW90ZT4KKzxibG9ja3F1b3RlIGlkPSJvdXRlciI+IGhlbGxvIDxi
bG9ja3F1b3RlIGlkPSJpbm5lciI+IHdvcmxkPGJyPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+
PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZT48
YmxvY2txdW90ZT4gd2Via2l0IDwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3Rl
PjxibG9ja3F1b3RlPiBpcyBncmVhdCA8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL291dGRlbnQtcmVndWxhci1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL291dGRlbnQt
cmVndWxhci1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjM3ODApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL291dGRlbnQtcmVndWxhci1ibG9ja3F1b3RlLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw0ICs0LDQgQEAKIHR3bwogdGhyZWUKIEJl
Zm9yZTogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj50d288YnI+dGhyZWU8L2Jsb2NrcXVv
dGU+Ci1BZnRlcjogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj48L2Jsb2NrcXVvdGU+dHdv
PGJyPjxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwvYmxvY2txdW90ZT4KK0FmdGVyOiA8Ymxv
Y2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJsb2NrcXVvdGU+
dGhyZWU8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1w
YXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYzNzgwKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1p
bi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw0ICsyLDQgQEAK
IAogaGVsbG8KIHdvcmxkCi08YmxvY2txdW90ZSBpZD0idGVzdCI+IGhlbGxvPGJyPjwvYmxvY2tx
dW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0i
bWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1
b3RlIGlkPSJ0ZXN0Ij4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KKzxibG9ja3F1
b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3
ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRl
cjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGU+IHdvcmxkIDwvYmxvY2txdW90ZT48
L2Jsb2NrcXVvdGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62649</attachid>
            <date>2010-07-26 23:21:07 -0700</date>
            <delta_ts>2010-07-26 23:27:45 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>fix27156</filename>
            <type>text/plain</type>
            <size>24793</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDEwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDctMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgQmVjYXVzZSB0aGlzIGNhdXNlcyB1cyBub3QgdG8gbWVyZ2UgZWxlbWVudHMsIGFk
ZGVkIHNob3VsZFNwbGl0RWxlbWVudCB0byBBcHBseVN0eWxlQ29tbWFuZCB3aGljaAorICAgICAg
ICBkZXRlcm1pbmVzIHRoZSBuZWNlc3NpdHkgb2Ygc3BsaXR0aW5nIHRoZSBlbGVtZW50LiBJdCBj
aGVja3MgdGhlIG5hbWUsIGF0dHJpYnV0ZXMsIGFuZCBzdHlsZXMgb2YgdGhlIGVsZW1lbnQKKyAg
ICAgICAgYW5kIGNoZWNrcyBhZ2FpbnN0IHRoZSBzdHlsZSBiZWluZyBhcHBsaWVkLiAgSXQgcmV0
dXJucyB0cnVlIG9ubHkgaWYgdGhlIGVsZW1lbnQgaW50ZXJmZXJlcyB3aXRoIHRoZSBzdHlsZQor
ICAgICAgICBiZWluZyBhcHBsaWVkIGFuZCBvbmx5IGlmIHRoZSBlbGVtZW50IHdhcyBzcGxpdHRh
YmxlLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC5odG1sCisK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQ2hhbmdlOjppbml0KTogRWRpdGVkIGNvbW1lbnQgZm9yIHByb3BlcnRpZXNOb3RJ
bi4KKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnRpZXNOb3RJbik6IFJlbmFtZWQgZnJvbSBnZXRQ
cm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUpOiBBZGRlZCBzdHlsZSBhcyB0aGUgM3JkIGFyZ3Vt
ZW50IHRvIHNwbGl0VGV4dEVsZW1lbnRBdCouCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQpOiBDYWxscyBzaG91bGRTcGxpdEVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0RW5kKTogQ2FsbHMgc2hvdWxkU3BsaXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0RWxlbWVudCk6IFNlZSBhYm92ZS4KKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJpU3RhdGVPZlN0eWxlSW5Db21wdXRlZFN0eWxlKTog
Q2FsbHMgcHJvcGVydGllc05vdEluIGluc3RlYWQgb2YgZ2V0UHJvcGVydGllc05vdEluQ29tcHV0
ZWRTdHlsZS4KKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KTogRGVsZXRl
cyB0aGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KTogUmVjb3ZlcnMgdGhlIGlkIGF0
dHJpYnV0ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQuCisKIDIwMTAtMDctMjYgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA2NDA4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFN0eWxlQ2hhbmdlOjppbml0KFBh
c3NSZWZQdHI8Q1NTU3R5CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBwb3NpdGlvbi5jb21wdXRlZFN0eWxl
KCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUg
PSBnZXRQcm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlKHN0eWxlLmdldCgpLCBjb21wdXRlZFN0
eWxlLmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFi
bGVTdHlsZSA9IHByb3BlcnRpZXNOb3RJbihzdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS5nZXQo
KSk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxl
LmdldCgpKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+c2hvdWxkU3R5
bGVXaXRoQ1NTKCkpCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBTdHlsZUNoYW5nZTo6aW5pdChQ
YXNzUmVmUHRyPENTU1N0eQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5V2hpdGVTcGFjZSk7CiAKICAgICAvLyBJZiB1bmljb2RlLWJpZGkgaXMgcHJlc2Vu
dCBpbiBtdXRhYmxlU3R5bGUgYW5kIGRpcmVjdGlvbiBpcyBub3QsIHRoZW4gYWRkIGRpcmVjdGlv
biB0byBtdXRhYmxlU3R5bGUuCi0gICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGJlIGRvbmUg
aW4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZT8KKyAgICAvLyBGSVhNRTogU2hvdWxk
bid0IHRoaXMgYmUgZG9uZSBpbiBwcm9wZXJ0aWVzTm90SW4/CiAgICAgaWYgKG11dGFibGVTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSAmJiAhc3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKQogICAgICAgICBtdXRh
YmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBzdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwogCkBAIC0zNjgsNyArMzY4LDcgQEAg
c3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NTdHlsZURlYwogICAgIHJldHVybiBmYWxz
ZTsgLy8gTWFrZSBjb21waWxlciBoYXBweQogfQogCi1SZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiogY29tcHV0ZWRTdHlsZSkK
K1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcHJvcGVydGllc05vdEluKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxl
KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGNvbXB1dGVkU3R5bGUpOwpAQCAt
OTEwLDcgKzkxMCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUK
ICAgICAvLyBzcGxpdCB0aGUgc3RhcnQgbm9kZSBhbmQgY29udGFpbmluZyBlbGVtZW50IGlmIHRo
ZSBzZWxlY3Rpb24gc3RhcnRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3BsaXRTdGFydCA9IGlz
VmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShzdGFydCk7CiAgICAgaWYgKHNwbGl0U3RhcnQp
IHsKLSAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAg
IHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQsIHN0eWxlKTsKICAgICAgICAgc3Rh
cnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAg
ICAgIHN0YXJ0RHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoc3Rh
cnQubm9kZSgpKTsKQEAgLTkxOSw3ICs5MTksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhlIGVuZCBub2RlIGFuZCBjb250YWluaW5n
IGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBlbmRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3Bs
aXRFbmQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoZW5kKTsKICAgICBpZiAoc3Bs
aXRFbmQpIHsKLSAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQpOworICAg
ICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVuZCwgc3R5bGUpOwogICAgICAgICBz
dGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKICAg
ICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoZW5k
Lm5vZGUoKSk7CkBAIC0xNTUyLDEwICsxNTUyLDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0QXRFbmQoYwogICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBvc2l0aW9uKHByZXZOb2RlLCBjYXJl
dE1heE9mZnNldChwcmV2Tm9kZSkpKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Bs
aXRUZXh0RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0gc3RhcnQubm9kZSgp
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVu
dCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICBpZiAoIXNob3VsZFNwbGl0RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwg
c3R5bGUpKQogICAgICAgICByZXR1cm4gc3BsaXRUZXh0QXRTdGFydChzdGFydCwgZW5kKTsKIAog
ICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkg
PyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsKQEAgLTE1NjQsMTAgKzE1NjMs
OSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5vZGUo
KS0+bm9kZUluZGV4KCkpLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKIH0KIAotdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1l
bnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBOb2RlKiBwYXJlbnQgPSBlbmQu
bm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50
RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAoIXNob3VsZFNwbGl0RWxlbWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50
KCksIHN0eWxlKSkKICAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0RW5kKHN0YXJ0LCBlbmQpOwog
CiAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKTsKQEAgLTE1
ODAsNiArMTU3OCw1NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
CiAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+
bm9kZUluZGV4KCkgKyAxKSk7CiB9CiAKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNw
bGl0RWxlbWVudChFbGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpCit7CisgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5pc0hUTUxFbGVtZW50KCkgfHwgIWVsZW0t
PnBhcmVudEVsZW1lbnQoKSB8fCAhZWxlbS0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBp
cyBvZiBzdHlsZUlubGluZUVsZW1lbnQsIHRoZW4gc3BsaXQgYmVjYXVzZSBjb21tYW5kcyBzdWNo
IGFzIGNyZWF0ZUxpbmsgYW5kIHVubGluayByZXF1aXJlIHRoaXMgYmVoYXZpb3IKKyAgICBpZiAo
bV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVF
bGVtZW50LT50YWdRTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB0
aGUgZWxlbWVudCBpcyBvbmUgb2YgcHJlc2VudGF0aW9uYWwgZWxlbWVudHMgYW5kIGludGVyZmVy
ZXMgd2l0aCB0aGUgc3lsZSB3ZSdyZSBhcHBseWluZywgdGhlbiBzcGxpdAorICAgIGlmIChpbXBs
aWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbSksIHN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBhIGZvbnQgdGFnIGFuZCBpbnRlcmZlcmVzIHdp
dGggdGhlIHN0eWxlIHdlJ3JlIGFwcGx5aW5nLCB0aGVuIHNwbGl0CisgICAgaWYgKGVsZW0tPmhh
c1RhZ05hbWUoZm9udFRhZykpIHsKKyAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICAgICAgZm9yIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKCgqaXQpLmlkKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5oYXNBdHRyaWJ1dGUoY29sb3JBdHRyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW0tPmhhc0F0dHJpYnV0ZShmYWNlQXR0cikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS0+
aGFzQXR0cmlidXRlKHNpemVBdHRyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIHRoZSBjb21wdXRlZCBzdHlsZSBhbmQgdGhlIHN5bGUgd2UncmUgYXBwbHlpbmcuCisgICAg
Ly8gSWYgdGhlIGRpZmZlcmVuY2UgZG9lc24ndCBtYXRjaCBuZXcgc3R5bGUsIHRoZW4gdGhlIGVs
ZW1lbnQgaW50ZXJmZXJlcywgc28gc3BsaXQuCisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGVPZkVsZW0gPSBjb21wdXRlZFN0eWxlKGVsZW0pOworICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlT2ZQYXJlbnQgPSBjb21wdXRlZFN0
eWxlKGVsZW0tPnBhcmVudE5vZGUoKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBkaWZmID0gcHJvcGVydGllc05vdEluKHN0eWxlT2ZFbGVtLmdldCgpLCBzdHlsZU9m
UGFyZW50LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlVG9BcHBseSA9IHN0eWxlLT5jb3B5KCk7CisKKyAgICBib29sIGlzRGlmZiA9IGZhbHNlOwor
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHls
ZS0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKKyAgICAgICAgaWYgKGRpZmYtPmdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSkgJiYgZGlmZi0+Z2V0UHJvcGVydHlWYWx1ZShw
cm9wZXJ0eS5pZCgpKSAhPSBwcm9wZXJ0eS5jc3NUZXh0KCkpCisgICAgICAgICAgICBpc0RpZmYg
PSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaXNEaWZmOworfQorCiBib29sIEFwcGx5U3R5bGVD
b21tYW5kOjppc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjQwODQpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOSBA
QCBwcml2YXRlOgogICAgIHZvaWQgYWRkSW5saW5lU3R5bGVJZk5lZWRlZChDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiosIE5vZGUqIHN0YXJ0LCBOb2RlKiBlbmQpOwogICAgIHZvaWQgc3BsaXRU
ZXh0QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwog
ICAgIHZvaWQgc3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3Np
dGlvbiYgZW5kKTsKLSAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7Ci0gICAgdm9pZCBzcGxpdFRleHRFbGVt
ZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKKyAg
ICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKKyAg
ICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSk7CisgICAg
Ym9vbCBzaG91bGRTcGxpdEVsZW1lbnQoRWxlbWVudCogZWxlbSwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKTsKICAgICBib29sIGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9k
ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pOwogICAgIGJvb2wgbWVyZ2VTdGFydFdpdGhQcmV2
aW91c0lmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCk7CiAgICAgYm9vbCBtZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKQEAgLTEyMyw3ICsxMjQsNyBAQCBwcml2YXRl
OgogCiBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQqKTsKLVJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRl
ZFN0eWxlKTsKK1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcHJvcGVydGllc05v
dEluKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBjb21w
dXRlZFN0eWxlKTsKIAogdm9pZCBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgUG9zaXRpb24pOwogdm9pZCByZW1vdmVTdHlsZXNBZGRlZEJ5
Tm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCShyZXZpc2lvbiA2NDA4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OTUsNyArNzk1LDcgQEAgc3RhdGljIGNvbnN0IGludCB0ZXh0T25seVBy
b3BlcnRpZXNbXSA9IAogCiBzdGF0aWMgVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlSW5Db21wdXRl
ZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIGRlc2lyZWRTdHlsZSwgQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlLCBib29sIGlnbm9yZVRleHRPbmx5UHJvcGVydGll
cyA9IGZhbHNlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGlm
ZiA9IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoZGVzaXJlZFN0eWxlLCBjb21wdXRl
ZFN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRpZmYgPSBw
cm9wZXJ0aWVzTm90SW4oZGVzaXJlZFN0eWxlLCBjb21wdXRlZFN0eWxlKTsKIAogICAgIGlmIChp
Z25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmYtPnJlbW92ZVByb3BlcnRpZXNJ
blNldCh0ZXh0T25seVByb3BlcnRpZXMsIHNpemVvZih0ZXh0T25seVByb3BlcnRpZXMpIC8gc2l6
ZW9mKHRleHRPbmx5UHJvcGVydGllc1swXSkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NwbGl0
RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVs
ZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNjQwODQpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3Bs
aXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksNiArNjAsMTAgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21t
YW5kOjpleGVjdXRlQXBwbHkoKQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogICAgIAor
ICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVjYXVz
ZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50Cisg
ICAgbV9lbGVtZW50Mi0+cmVtb3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBlYyk7Cisg
ICAgQVNTRVJUKCFlYyk7CisgICAgCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIG1fZWxlbWVu
dDEtPmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldLCBlYyk7CkBAIC04OCw2ICs5MywxMCBAQCB2b2lk
IFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCiAgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShjaGlsZHJl
bltpXS5nZXQoKSwgcmVmQ2hpbGQuZ2V0KCksIGVjKTsKIAorICAgIC8vIFJlY292ZXIgdGhlIGlk
IGF0dHJpYnV0ZSBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBpZiAobV9lbGVtZW50MS0+
aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSkKKyAgICAgICAgbV9lbGVtZW50Mi0+c2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjppZEF0dHIpKTsKKwogICAgIG1fZWxlbWVudDEtPnJlbW92ZShlYyk7CiB9CiAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY0MTA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDctMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0
cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzE1NgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgc3BsaXR0aW5nIGVsZW1lbnQg
ZG9lc24ndCBwcm9kdWNlIG11bHRpcGxlIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisgICAgICAg
IFRoZSB0ZXN0IHVuYm9sZHMgYSB0ZXh0IGluc2lkZSBiIGVsZW1lbnQgd2l0aCBpZCBzbyBhcyB0
byBzcGxpdCB0aGUgZWxlbWVudC4KKyAgICAgICAgSXQgdHJhdmVyc2VzIHRocm91Z2ggYWxsIG5v
ZGVzIGluIHVuZGVyIGRvY3VtZW50LmJvZHkgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBv
bmUgbm9kZSB3aXRoIHRoZSBpZC4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5k
ZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQgdGhlIGR1cGxpY2F0
aW9uIG9mIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29t
bWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVk
LnR4dDogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9vdXRkZW50LXJlZ3Vs
YXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvc3R5
bGUvc3BsaXQtZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
c3R5bGUvc3BsaXQtZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3VuZG8v
cmVkby1zdHlsZS1leHBlY3RlZC50eHQ6IEVkaXRpbmcgZGVsZWdhdGVzIGNoYW5nZWQuCisKIDIw
MTAtMDctMjYgIENvc21pbiBUcnV0YSAgPGN0cnV0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1
b3Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MDg0KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNCw0ICs0LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQKIGlzIGdyZWF0
Ci08YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3
b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJr
aXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjog
bm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48YmxvY2txdW90ZSBp
ZD0iaW5uZXIiPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+
PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgorPGJsb2NrcXVv
dGUgaWQ9Im91dGVyIj4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+PC9i
bG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1i
bG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRp
bmc6IDBweDsiPjxibG9ja3F1b3RlPjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwv
YmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwvYmxvY2txdW90
ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9p
bmRlbnQtcHJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQwODQpCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxMSArMjUsMTEgQEAgZG9lcyBub3QgY3Jhc2guPC8jdGV4dD4KIDwvI3RleHQ+CiA8
L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9u
ZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSI+Ci08UFJF
IGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIHRocmVlCiA8LyN0ZXh0PgogPC9Q
UkU+Ci08UFJFIGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIGZvdXI8LyN0ZXh0
PgogPC9QUkU+CiA8L0JMT0NLUVVPVEU+CkBAIC02NiwxMSArNjYsMTEgQEAgZG9lcyBub3QgY3Jh
c2guPC8jdGV4dD4KIDwvI3RleHQ+CiA8L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxlPSJtYXJnaW46
IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9IndlYmtpdC1p
bmRlbnQtYmxvY2txdW90ZSI+Ci08UFJFIGlkPSJwcmUtdGFibGUiPgorPFBSRT4KIDwjdGV4dD50
YWJsZSB0d28KIDwvI3RleHQ+CiA8L1BSRT4KLTxQUkUgaWQ9InByZS10YWJsZSI+Cis8UFJFPgog
PCN0ZXh0PnRhYmxlIHRocmVlPHNlbGVjdGlvbi1mb2N1cz48LyN0ZXh0PgogPC9QUkU+CiA8L0JM
T0NLUVVPVEU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1z
ZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgt
aW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MDg0KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1
b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw0ICsyLDQgQEAgVGhpcyB0ZXN0
cyBpbmRlbnRpbmcgdGhlIHNlY29uZCBwYXJhZ3JhcAogCiBoZWxsbwogd29ybGQKLTxibG9ja3F1
b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3
ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRl
cjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9InRlc3QiPiB3b3JsZCA8L2Js
b2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBoZWxsbzxicj48
L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIg
c3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48
YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KSW5kZXg6IExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
b3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDA4NCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2Nr
cXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBAQCBvbmUKIHR3
bwogdGhyZWUKIEJlZm9yZTogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj50d288YnI+dGhy
ZWU8L2Jsb2NrcXVvdGU+Ci1BZnRlcjogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj48L2Js
b2NrcXVvdGU+dHdvPGJyPjxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwvYmxvY2txdW90ZT4K
K0FmdGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+
PGJsb2NrcXVvdGU+dGhyZWU8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3N0eWxlL3NwbGl0LWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdHMgc3BsaXR0aW5nIGEgYiBl
bGVtZW50IHdpdGggaWQgYXR0cmlidXRlIGJ5IHVuYm9sZGluZyB0aGUgdGV4dCBpbnNpZGUgYW5k
IGVuc3VyZXMgdGhhdCBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IGNyZWF0ZSB0d28gZWxlbWVu
dHMgd2l0aCB0aGUgc2FtZSBpZC4KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
dHlsZS9zcGxpdC1lbGVtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zdHlsZS9zcGxpdC1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NiBAQAorPGJvZHk+Cis8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT4KKzxiIGlkPSJ0ZXN0
Ij5oZWxsbzwvYj4KKzwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gY291bnROb2Rlc1dpdGhJZChub2RlLCBpZCkKK3sK
KyAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgdmFyIGNvdW50ID0gMDsKKyAgICBpZiAobm9kZS5pZCA9PSBpZCkKKyAgICAgICAgY291
bnQrKzsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsg
aSsrKQorICAgICAgICBjb3VudCArPSBjb3VudE5vZGVzV2l0aElkKG5vZGUuY2hpbGROb2Rlc1tp
XSwgaWQpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCit2YXIgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOworcmFuZ2Uuc2V0U3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rl
c3QnKS5maXJzdENoaWxkLCAxKTsKK3JhbmdlLnNldEVuZChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdCcpLmZpcnN0Q2hpbGQsIDQpOword2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFs
bFJhbmdlcygpOword2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTsKKworYmVm
b3JlID0gY291bnROb2Rlc1dpdGhJZChkb2N1bWVudC5ib2R5LCAndGVzdCcpOworZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoJ2JvbGQnLCBmYWxzZSwgbnVsbCk7CithZnRlciA9IGNvdW50Tm9kZXNXaXRo
SWQoZG9jdW1lbnQuYm9keSwgJ3Rlc3QnKTsKKworZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAi
VGhpcyB0ZXN0cyBzcGxpdHRpbmcgYSBiIGVsZW1lbnQgd2l0aCBpZCBhdHRyaWJ1dGUgYnkgdW5i
b2xkaW5nIHRoZSB0ZXh0IGluc2lkZSBhbmQgIgorKyAiZW5zdXJlcyB0aGF0IHNwbGl0dGluZyBl
bGVtZW50IGRvZXNuJ3QgY3JlYXRlIHR3byBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGlkLjxicj48
YnI+IjsKKworaWYgKGJlZm9yZSAhPSAxKQorICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9
ICJGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQgZXhhY3RseSAxIG5vZGUgd2l0aCB0aGUgaWQgJ3Rl
c3QnIGJlZm9yZSB1bmJvbGRpbmcgYnV0IGZvdW5kICIgKyBiZWZvcmUgKyAiIG5vZGVzLjxicj4i
OworZWxzZSBpZiAoYWZ0ZXIgIT0gMSkKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAi
RkFJTEVEOiBleHBlY3RlZCB0byBmaW5kIGV4YWN0bHkgMSBub2RlIHdpdGggdGhlIGlkICd0ZXN0
JyBhZnRlciB1bmJvbGRpbmcgYnV0IGZvdW5kICIgKyBhZnRlciArICIgbm9kZXM8YnI+IjsKK2Vs
c2UKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAiUEFTUyIKKworPC9zY3JpcHQ+Cis8
L2JvZHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQwODQp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjkgKzEsMjUgQEAKIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJl
Z2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDcgb2YgRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQKIEVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2luRWRpdGluZ05v
dGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51
bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENo
YW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BB
TiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxl
Y3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3
RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6
cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNF
CiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0
aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxs
KSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4g
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BB
TiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2Yg
I3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
IEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0
aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62650</attachid>
            <date>2010-07-26 23:27:45 -0700</date>
            <delta_ts>2010-07-27 19:37:06 -0700</delta_ts>
            <desc>Fixed the switch statement</desc>
            <filename>fix27156b</filename>
            <type>text/plain</type>
            <size>24745</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDEwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDctMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgQmVjYXVzZSB0aGlzIGNhdXNlcyB1cyBub3QgdG8gbWVyZ2UgZWxlbWVudHMsIGFk
ZGVkIHNob3VsZFNwbGl0RWxlbWVudCB0byBBcHBseVN0eWxlQ29tbWFuZCB3aGljaAorICAgICAg
ICBkZXRlcm1pbmVzIHRoZSBuZWNlc3NpdHkgb2Ygc3BsaXR0aW5nIHRoZSBlbGVtZW50LiBJdCBj
aGVja3MgdGhlIG5hbWUsIGF0dHJpYnV0ZXMsIGFuZCBzdHlsZXMgb2YgdGhlIGVsZW1lbnQKKyAg
ICAgICAgYW5kIGNoZWNrcyBhZ2FpbnN0IHRoZSBzdHlsZSBiZWluZyBhcHBsaWVkLiAgSXQgcmV0
dXJucyB0cnVlIG9ubHkgaWYgdGhlIGVsZW1lbnQgaW50ZXJmZXJlcyB3aXRoIHRoZSBzdHlsZQor
ICAgICAgICBiZWluZyBhcHBsaWVkIGFuZCBvbmx5IGlmIHRoZSBlbGVtZW50IHdhcyBzcGxpdHRh
YmxlLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC5odG1sCisK
KyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQ2hhbmdlOjppbml0KTogRWRpdGVkIGNvbW1lbnQgZm9yIHByb3BlcnRpZXNOb3RJ
bi4KKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnRpZXNOb3RJbik6IFJlbmFtZWQgZnJvbSBnZXRQ
cm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUpOiBBZGRlZCBzdHlsZSBhcyB0aGUgM3JkIGFyZ3Vt
ZW50IHRvIHNwbGl0VGV4dEVsZW1lbnRBdCouCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQpOiBDYWxscyBzaG91bGRTcGxpdEVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0RW5kKTogQ2FsbHMgc2hvdWxkU3BsaXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0RWxlbWVudCk6IFNlZSBhYm92ZS4KKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJpU3RhdGVPZlN0eWxlSW5Db21wdXRlZFN0eWxlKTog
Q2FsbHMgcHJvcGVydGllc05vdEluIGluc3RlYWQgb2YgZ2V0UHJvcGVydGllc05vdEluQ29tcHV0
ZWRTdHlsZS4KKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KTogRGVsZXRl
cyB0aGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KTogUmVjb3ZlcnMgdGhlIGlkIGF0
dHJpYnV0ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQuCisKIDIwMTAtMDctMjYgIEdhdmluIEJhcnJh
Y2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA2NDA4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFN0eWxlQ2hhbmdlOjppbml0KFBh
c3NSZWZQdHI8Q1NTU3R5CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBwb3NpdGlvbi5jb21wdXRlZFN0eWxl
KCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUg
PSBnZXRQcm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlKHN0eWxlLmdldCgpLCBjb21wdXRlZFN0
eWxlLmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFi
bGVTdHlsZSA9IHByb3BlcnRpZXNOb3RJbihzdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS5nZXQo
KSk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxl
LmdldCgpKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+c2hvdWxkU3R5
bGVXaXRoQ1NTKCkpCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBTdHlsZUNoYW5nZTo6aW5pdChQ
YXNzUmVmUHRyPENTU1N0eQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5V2hpdGVTcGFjZSk7CiAKICAgICAvLyBJZiB1bmljb2RlLWJpZGkgaXMgcHJlc2Vu
dCBpbiBtdXRhYmxlU3R5bGUgYW5kIGRpcmVjdGlvbiBpcyBub3QsIHRoZW4gYWRkIGRpcmVjdGlv
biB0byBtdXRhYmxlU3R5bGUuCi0gICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGJlIGRvbmUg
aW4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZT8KKyAgICAvLyBGSVhNRTogU2hvdWxk
bid0IHRoaXMgYmUgZG9uZSBpbiBwcm9wZXJ0aWVzTm90SW4/CiAgICAgaWYgKG11dGFibGVTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSAmJiAhc3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKQogICAgICAgICBtdXRh
YmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBzdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwogCkBAIC0zNjgsNyArMzY4LDcgQEAg
c3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NTdHlsZURlYwogICAgIHJldHVybiBmYWxz
ZTsgLy8gTWFrZSBjb21waWxlciBoYXBweQogfQogCi1SZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiogY29tcHV0ZWRTdHlsZSkK
K1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcHJvcGVydGllc05vdEluKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxl
KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGNvbXB1dGVkU3R5bGUpOwpAQCAt
OTEwLDcgKzkxMCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUK
ICAgICAvLyBzcGxpdCB0aGUgc3RhcnQgbm9kZSBhbmQgY29udGFpbmluZyBlbGVtZW50IGlmIHRo
ZSBzZWxlY3Rpb24gc3RhcnRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3BsaXRTdGFydCA9IGlz
VmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShzdGFydCk7CiAgICAgaWYgKHNwbGl0U3RhcnQp
IHsKLSAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAg
IHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQsIHN0eWxlKTsKICAgICAgICAgc3Rh
cnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAg
ICAgIHN0YXJ0RHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoc3Rh
cnQubm9kZSgpKTsKQEAgLTkxOSw3ICs5MTksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhlIGVuZCBub2RlIGFuZCBjb250YWluaW5n
IGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBlbmRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3Bs
aXRFbmQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoZW5kKTsKICAgICBpZiAoc3Bs
aXRFbmQpIHsKLSAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQpOworICAg
ICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVuZCwgc3R5bGUpOwogICAgICAgICBz
dGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKICAg
ICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoZW5k
Lm5vZGUoKSk7CkBAIC0xNTUyLDEwICsxNTUyLDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0QXRFbmQoYwogICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBvc2l0aW9uKHByZXZOb2RlLCBjYXJl
dE1heE9mZnNldChwcmV2Tm9kZSkpKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Bs
aXRUZXh0RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0gc3RhcnQubm9kZSgp
LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVu
dCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICBpZiAoIXNob3VsZFNwbGl0RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwg
c3R5bGUpKQogICAgICAgICByZXR1cm4gc3BsaXRUZXh0QXRTdGFydChzdGFydCwgZW5kKTsKIAog
ICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkg
PyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsKQEAgLTE1NjQsMTAgKzE1NjMs
OSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5vZGUo
KS0+bm9kZUluZGV4KCkpLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKIH0KIAotdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1l
bnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBOb2RlKiBwYXJlbnQgPSBlbmQu
bm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50
RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICBpZiAoIXNob3VsZFNwbGl0RWxlbWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50
KCksIHN0eWxlKSkKICAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0RW5kKHN0YXJ0LCBlbmQpOwog
CiAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKTsKQEAgLTE1
ODAsNiArMTU3OCw1NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
CiAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+
bm9kZUluZGV4KCkgKyAxKSk7CiB9CiAKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNw
bGl0RWxlbWVudChFbGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpCit7CisgICAgaWYgKCFlbGVtIHx8ICFlbGVtLT5pc0hUTUxFbGVtZW50KCkgfHwgIWVsZW0t
PnBhcmVudEVsZW1lbnQoKSB8fCAhZWxlbS0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0
YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBp
cyBvZiBzdHlsZUlubGluZUVsZW1lbnQsIHRoZW4gc3BsaXQgYmVjYXVzZSBjb21tYW5kcyBzdWNo
IGFzIGNyZWF0ZUxpbmsgYW5kIHVubGluayByZXF1aXJlIHRoaXMgYmVoYXZpb3IKKyAgICBpZiAo
bV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVF
bGVtZW50LT50YWdRTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiB0
aGUgZWxlbWVudCBpcyBvbmUgb2YgcHJlc2VudGF0aW9uYWwgZWxlbWVudHMgYW5kIGludGVyZmVy
ZXMgd2l0aCB0aGUgc3lsZSB3ZSdyZSBhcHBseWluZywgdGhlbiBzcGxpdAorICAgIGlmIChpbXBs
aWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbSksIHN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBhIGZvbnQgdGFnIGFuZCBpbnRlcmZlcmVzIHdp
dGggdGhlIHN0eWxlIHdlJ3JlIGFwcGx5aW5nLCB0aGVuIHNwbGl0CisgICAgaWYgKGVsZW0tPmhh
c1RhZ05hbWUoZm9udFRhZykpIHsKKyAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICAgICAgZm9yIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKCgqaXQpLmlkKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgICAgICAgICBpZiAoZWxl
bS0+aGFzQXR0cmlidXRlKGNvbG9yQXR0cikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRGYW1pbHk6CisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZShmYWNl
QXR0cikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgICAgICAg
ICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGUoc2l6ZUF0dHIpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgY29tcHV0ZSB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIHRoZSBjb21wdXRlZCBzdHlsZSBhbmQgdGhlIHN5bGUgd2UncmUgYXBwbHlp
bmcuCisgICAgLy8gSWYgdGhlIGRpZmZlcmVuY2UgZG9lc24ndCBtYXRjaCBuZXcgc3R5bGUsIHRo
ZW4gdGhlIGVsZW1lbnQgaW50ZXJmZXJlcywgc28gc3BsaXQuCisgICAgUmVmUHRyPENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVPZkVsZW0gPSBjb21wdXRlZFN0eWxlKGVsZW0pOwor
ICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlT2ZQYXJlbnQgPSBj
b21wdXRlZFN0eWxlKGVsZW0tPnBhcmVudE5vZGUoKSk7CisgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBkaWZmID0gcHJvcGVydGllc05vdEluKHN0eWxlT2ZFbGVtLmdldCgp
LCBzdHlsZU9mUGFyZW50LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlVG9BcHBseSA9IHN0eWxlLT5jb3B5KCk7CisKKyAgICBib29sIGlzRGlmZiA9
IGZhbHNlOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKKyAgICAgICAgaWYgKGRp
ZmYtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSkgJiYgZGlmZi0+Z2V0UHJvcGVy
dHlWYWx1ZShwcm9wZXJ0eS5pZCgpKSAhPSBwcm9wZXJ0eS5jc3NUZXh0KCkpCisgICAgICAgICAg
ICBpc0RpZmYgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gaXNEaWZmOworfQorCiBib29sIEFw
cGx5U3R5bGVDb21tYW5kOjppc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uKQogewogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjQwODQpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMs
OCArOTMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkSW5saW5lU3R5bGVJZk5lZWRlZChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqIHN0YXJ0LCBOb2RlKiBlbmQpOwogICAgIHZv
aWQgc3BsaXRUZXh0QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kKTsKLSAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7Ci0gICAgdm9pZCBzcGxp
dFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKTsKKyAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKTsKKyAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSk7CisgICAgYm9vbCBzaG91bGRTcGxpdEVsZW1lbnQoRWxlbWVudCogZWxlbSwgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKICAgICBib29sIGlzVmFsaWRDYXJldFBvc2l0aW9u
SW5UZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pOwogICAgIGJvb2wgbWVyZ2VTdGFy
dFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCk7CiAgICAgYm9vbCBtZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKQEAgLTEyMyw3ICsxMjQsNyBA
QCBwcml2YXRlOgogCiBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQqKTsKLVJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
KiBjb21wdXRlZFN0eWxlKTsKK1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcHJv
cGVydGllc05vdEluKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBjb21wdXRlZFN0eWxlKTsKIAogdm9pZCBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgUG9zaXRpb24pOwogdm9pZCByZW1vdmVTdHls
ZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIE5vZGUqKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2NDA4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTUsNyArNzk1LDcgQEAgc3RhdGljIGNvbnN0IGludCB0
ZXh0T25seVByb3BlcnRpZXNbXSA9IAogCiBzdGF0aWMgVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxl
SW5Db21wdXRlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIGRlc2lyZWRTdHlsZSwgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlLCBib29sIGlnbm9yZVRleHRPbmx5
UHJvcGVydGllcyA9IGZhbHNlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gZGlmZiA9IGdldFByb3BlcnRpZXNOb3RJbkNvbXB1dGVkU3R5bGUoZGVzaXJlZFN0eWxl
LCBjb21wdXRlZFN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGRpZmYgPSBwcm9wZXJ0aWVzTm90SW4oZGVzaXJlZFN0eWxlLCBjb21wdXRlZFN0eWxlKTsKIAog
ICAgIGlmIChpZ25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmYtPnJlbW92ZVBy
b3BlcnRpZXNJblNldCh0ZXh0T25seVByb3BlcnRpZXMsIHNpemVvZih0ZXh0T25seVByb3BlcnRp
ZXMpIC8gc2l6ZW9mKHRleHRPbmx5UHJvcGVydGllc1swXSkpOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNjQwODQpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAKICNpbmNsdWRlICJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksNiArNjAsMTAgQEAgdm9pZCBTcGxpdEVs
ZW1lbnRDb21tYW5kOjpleGVjdXRlQXBwbHkoKQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwogICAgIAorICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1l
bnQgYmVjYXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBl
bGVtZW50CisgICAgbV9lbGVtZW50Mi0+cmVtb3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRy
LCBlYyk7CisgICAgQVNTRVJUKCFlYyk7CisgICAgCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJl
bi5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
IG1fZWxlbWVudDEtPmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldLCBlYyk7CkBAIC04OCw2ICs5Mywx
MCBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9y
ZShjaGlsZHJlbltpXS5nZXQoKSwgcmVmQ2hpbGQuZ2V0KCksIGVjKTsKIAorICAgIC8vIFJlY292
ZXIgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBpZiAobV9l
bGVtZW50MS0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSkKKyAgICAgICAgbV9lbGVt
ZW50Mi0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKTsKKwogICAgIG1fZWxlbWVudDEtPnJlbW92ZShlYyk7
CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MTA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDctMjYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3BsaXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRp
bmcgaWQgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzE1NgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgc3BsaXR0aW5n
IGVsZW1lbnQgZG9lc24ndCBwcm9kdWNlIG11bHRpcGxlIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQu
CisgICAgICAgIFRoZSB0ZXN0IHVuYm9sZHMgYSB0ZXh0IGluc2lkZSBiIGVsZW1lbnQgd2l0aCBp
ZCBzbyBhcyB0byBzcGxpdCB0aGUgZWxlbWVudC4KKyAgICAgICAgSXQgdHJhdmVyc2VzIHRocm91
Z2ggYWxsIG5vZGVzIGluIHVuZGVyIGRvY3VtZW50LmJvZHkgdG8gZW5zdXJlIHRoYXQgdGhlcmUg
aXMgb25seSBvbmUgbm9kZSB3aXRoIHRoZSBpZC4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0Nv
bW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQgdGhl
IGR1cGxpY2F0aW9uIG9mIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICog
ZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3Rl
LWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9vdXRk
ZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGVk
aXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGVkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0
aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQ6IEVkaXRpbmcgZGVsZWdhdGVzIGNoYW5n
ZWQuCisKIDIwMTAtMDctMjYgIENvc21pbiBUcnV0YSAgPGN0cnV0YUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3Rl
ZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MDg0KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw0ICs0LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQK
IGlzIGdyZWF0Ci08YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0i
aW5uZXIiPiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNs
YXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7
IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48Ymxv
Y2txdW90ZSBpZD0iaW5uZXIiPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Js
b2NrcXVvdGU+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgor
PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29y
bGQ8YnI+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0
LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5v
bmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9j
a3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwv
YmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50
LXByZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQwODQpCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAgZG9lcyBub3QgY3Jhc2guPC8jdGV4dD4KIDwv
I3RleHQ+CiA8L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJv
cmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90
ZSI+Ci08UFJFIGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIHRocmVlCiA8LyN0
ZXh0PgogPC9QUkU+Ci08UFJFIGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIGZv
dXI8LyN0ZXh0PgogPC9QUkU+CiA8L0JMT0NLUVVPVEU+CkBAIC02NiwxMSArNjYsMTEgQEAgZG9l
cyBub3QgY3Jhc2guPC8jdGV4dD4KIDwvI3RleHQ+CiA8L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxl
PSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9
IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSI+Ci08UFJFIGlkPSJwcmUtdGFibGUiPgorPFBSRT4K
IDwjdGV4dD50YWJsZSB0d28KIDwvI3RleHQ+CiA8L1BSRT4KLTxQUkUgaWQ9InByZS10YWJsZSI+
Cis8UFJFPgogPCN0ZXh0PnRhYmxlIHRocmVlPHNlbGVjdGlvbi1mb2N1cz48LyN0ZXh0PgogPC9Q
UkU+CiA8L0JMT0NLUVVPVEU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1w
YXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MDg0KQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1p
bi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw0ICsyLDQgQEAg
VGhpcyB0ZXN0cyBpbmRlbnRpbmcgdGhlIHNlY29uZCBwYXJhZ3JhcAogCiBoZWxsbwogd29ybGQK
LTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3Rl
IGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQw
cHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9InRlc3QiPiB3
b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBo
ZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxv
Y2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5n
OiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2Nr
cXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA2NDA4NCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1
bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBA
QCBvbmUKIHR3bwogdGhyZWUKIEJlZm9yZTogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj50
d288YnI+dGhyZWU8L2Jsb2NrcXVvdGU+Ci1BZnRlcjogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9u
ZTxicj48L2Jsb2NrcXVvdGU+dHdvPGJyPjxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwvYmxv
Y2txdW90ZT4KK0FmdGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90
ZT50d288YnI+PGJsb2NrcXVvdGU+dGhyZWU8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdHMgc3BsaXR0
aW5nIGEgYiBlbGVtZW50IHdpdGggaWQgYXR0cmlidXRlIGJ5IHVuYm9sZGluZyB0aGUgdGV4dCBp
bnNpZGUgYW5kIGVuc3VyZXMgdGhhdCBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IGNyZWF0ZSB0
d28gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBpZC4KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMv
ZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NiBAQAorPGJvZHk+Cis8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT4KKzxi
IGlkPSJ0ZXN0Ij5oZWxsbzwvYj4KKzwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gY291bnROb2Rlc1dpdGhJZChub2Rl
LCBpZCkKK3sKKyAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgdmFyIGNvdW50ID0gMDsKKyAgICBpZiAobm9kZS5pZCA9PSBpZCkKKyAg
ICAgICAgY291bnQrKzsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVz
Lmxlbmd0aDsgaSsrKQorICAgICAgICBjb3VudCArPSBjb3VudE5vZGVzV2l0aElkKG5vZGUuY2hp
bGROb2Rlc1tpXSwgaWQpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCit2YXIgcmFuZ2UgPSBk
b2N1bWVudC5jcmVhdGVSYW5nZSgpOworcmFuZ2Uuc2V0U3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3QnKS5maXJzdENoaWxkLCAxKTsKK3JhbmdlLnNldEVuZChkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdCcpLmZpcnN0Q2hpbGQsIDQpOword2luZG93LmdldFNlbGVjdGlvbigp
LnJlbW92ZUFsbFJhbmdlcygpOword2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdl
KTsKKworYmVmb3JlID0gY291bnROb2Rlc1dpdGhJZChkb2N1bWVudC5ib2R5LCAndGVzdCcpOwor
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2JvbGQnLCBmYWxzZSwgbnVsbCk7CithZnRlciA9IGNvdW50
Tm9kZXNXaXRoSWQoZG9jdW1lbnQuYm9keSwgJ3Rlc3QnKTsKKworZG9jdW1lbnQuYm9keS5pbm5l
ckhUTUwgPSAiVGhpcyB0ZXN0cyBzcGxpdHRpbmcgYSBiIGVsZW1lbnQgd2l0aCBpZCBhdHRyaWJ1
dGUgYnkgdW5ib2xkaW5nIHRoZSB0ZXh0IGluc2lkZSBhbmQgIgorKyAiZW5zdXJlcyB0aGF0IHNw
bGl0dGluZyBlbGVtZW50IGRvZXNuJ3QgY3JlYXRlIHR3byBlbGVtZW50cyB3aXRoIHRoZSBzYW1l
IGlkLjxicj48YnI+IjsKKworaWYgKGJlZm9yZSAhPSAxKQorICAgIGRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MICs9ICJGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQgZXhhY3RseSAxIG5vZGUgd2l0aCB0
aGUgaWQgJ3Rlc3QnIGJlZm9yZSB1bmJvbGRpbmcgYnV0IGZvdW5kICIgKyBiZWZvcmUgKyAiIG5v
ZGVzLjxicj4iOworZWxzZSBpZiAoYWZ0ZXIgIT0gMSkKKyAgICBkb2N1bWVudC5ib2R5LmlubmVy
SFRNTCArPSAiRkFJTEVEOiBleHBlY3RlZCB0byBmaW5kIGV4YWN0bHkgMSBub2RlIHdpdGggdGhl
IGlkICd0ZXN0JyBhZnRlciB1bmJvbGRpbmcgYnV0IGZvdW5kICIgKyBhZnRlciArICIgbm9kZXM8
YnI+IjsKK2Vsc2UKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSAiUEFTUyIKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNjQwODQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkgKzEsMjUgQEAKIEVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQK
IEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJlZ2lu
RWRpdGluZ05vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2Yg
I3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
IEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0
aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1F
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQg
PiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNT
ZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6
KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCg==
</data>
<flag name="review"
          id="50888"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62790</attachid>
            <date>2010-07-27 19:37:06 -0700</date>
            <delta_ts>2010-07-28 12:06:37 -0700</delta_ts>
            <desc>fixed per ojan&apos;s comments</desc>
            <filename>fix27156c</filename>
            <type>text/plain</type>
            <size>27872</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDE4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IAorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVs
ZW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSByZW1vdmVJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKTogQWRkZWQgZG9udFJl
bW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKTogQWRkZWQgZG9udFJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBDYWxs
cyByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KTogUmVtb3ZlZCB0aGUgY2FsbCB0
byBzcGxpdFRleHRBdFN0YXJ0LgorICAgICAgICBCcmFuY2hpbmcgaXMgbm93IGRvbmUgaW4gYXBw
bHlJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRFbmQpOiBEaXR0byBmb3Igc3BsaXRUZXh0QXRFbmQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRD
b21tYW5kOjpleGVjdXRlQXBwbHkpOiBEZWxldGVzIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUg
c2Vjb25kIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpk
b1VuYXBwbHkpOiBSZWNvdmVycyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBzZWNvbmQgZWxlbWVu
dC4KKwogMjAxMC0wNy0yNyAgSmFtZXMgSGF3a2lucyAgPGpoYXdraW5zQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MTczKQorKysgV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDcgKzYxNSw3IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSgKICAgICAgICAgICAgICAg
ICBibG9jayA9IG5ld0Jsb2NrOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0hUTUxFbGVt
ZW50KCkpOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihibG9jay5nZXQoKSkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGJsb2NrLmdldCgpKSwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgIGlmICghbV9yZW1vdmVPbmx5KQogICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0
eWxlKHN0eWxlQ2hhbmdlLCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGJsb2NrLmdldCgpKSk7
CiAgICAgICAgICAgICB9CkBAIC05MTAsNyArOTEwLDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0aGUgc3RhcnQgbm9kZSBhbmQgY29u
dGFpbmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGluc2lkZSBvZiBpdAogICAg
IGJvb2wgc3BsaXRTdGFydCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShzdGFydCk7
CiAgICAgaWYgKHNwbGl0U3RhcnQpIHsKLSAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQo
c3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChzaG91bGRTcGxpdEVsZW1lbnQoc3RhcnQubm9kZSgp
LT5wYXJlbnRFbGVtZW50KCksIHN0eWxlKSkKKyAgICAgICAgICAgIHNwbGl0VGV4dEVsZW1lbnRB
dFN0YXJ0KHN0YXJ0LCBlbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGxpdFRleHRB
dFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAg
ICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKICAgICAgICAgc3RhcnREdW1teVNwYW5BbmNlc3Rv
ciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5ub2RlKCkpOwpAQCAtOTE5LDcgKzky
MiwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8g
c3BsaXQgdGhlIGVuZCBub2RlIGFuZCBjb250YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlv
biBlbmRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3BsaXRFbmQgPSBpc1ZhbGlkQ2FyZXRQb3Np
dGlvbkluVGV4dE5vZGUoZW5kKTsKICAgICBpZiAoc3BsaXRFbmQpIHsKLSAgICAgICAgc3BsaXRU
ZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoc2hvdWxkU3BsaXRFbGVt
ZW50KGVuZC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAgICAgICAgc3Bs
aXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0
aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZER1bW15U3Bh
bkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGVuZC5ub2RlKCkpOwpAQCAtMTIw
MCw2NSArMTIwNiwxMTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFu
TwogICAgIH0KIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHls
ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQor
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtLCBib29sIGRv
bnRSZW1vdmUpCit7CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBBU1NFUlQoZWxlbSk7CisKKyAg
ICBib29sIHJlbW92ZWQgPSBmYWxzZTsKKworICAgIGlmIChtX3N0eWxlZElubGluZUVsZW1lbnQg
JiYgZWxlbS0+aGFzVGFnTmFtZShtX3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkpKSB7
CisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICBpZiAoIWRvbnRSZW1vdmUpCisgICAg
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworICAgIH0KKworICAg
IGlmIChpbXBsaWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0
eWxlKGVsZW0sIHN0eWxlKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KCFkb250UmVtb3ZlKQorICAgICAgICAgICAgcmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhv
dXRBdHRyaWJ1dGVzKGVsZW0pOworICAgIH0KKworICAgIGlmICghZWxlbS0+aW5Eb2N1bWVudCgp
KQorICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKworICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252
ZXJ0ZWQgdG8gYSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAorICAg
IC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2ZvbnQtd2Vp
Z2h0OiBib2xkJz4pCisgICAgaWYgKHJlbW92ZUhUTUxGb250U3R5bGUoc3R5bGUsIGVsZW0sIGRv
bnRSZW1vdmUpKQorICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICBpZiAocmVtb3ZlSFRNTEJp
ZGlFbWJlZGRpbmdTdHlsZShzdHlsZSwgZWxlbSwgZG9udFJlbW92ZSkpCisgICAgICAgIHJlbW92
ZWQgPSB0cnVlOworICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbSwgZG9udFJlbW92
ZSkpCisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHJlbW92ZWQ7Cit9CisK
K2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24gKnN0eWxlLCBIVE1MRWxlbWVudCAqZWxlbSwgYm9vbCBkb250UmVtb3Zl
KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGVsZW0pOwogCiAgICAgaWYgKCFl
bGVtLT5oYXNMb2NhbE5hbWUoZm9udFRhZykpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5k
KCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUqIGF0dHJUb1JlbW92ZSA9IDA7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQo
KSkgewotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgY29sb3JBdHRyKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgotICAgICAgICAg
ICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgZmFjZUF0dHIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgotICAgICAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgc2l6ZUF0dHIpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgICAgICAg
ICBhdHRyVG9SZW1vdmUgPSAmY29sb3JBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgorICAgICAgICAgICAgYXR0clRvUmVtb3ZlID0g
JmZhY2VBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250U2l6ZToKKyAgICAgICAgICAgIGF0dHJUb1JlbW92ZSA9ICZzaXplQXR0cjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJUb1JlbW92ZSkgeworICAg
ICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIWRvbnRSZW1vdmUpCisg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCAqYXR0clRvUmVtb3ZlKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpc0VtcHR5Rm9udFRhZyhlbGVtKSkKKyAgICBp
ZiAoaXNFbXB0eUZvbnRUYWcoZWxlbSkgJiYgIWRvbnRSZW1vdmUpCiAgICAgICAgIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisKKyAgICByZXR1cm4gcmVtb3ZlZDsKIH0KIAot
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQorYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxFbGVtZW50ICplbGVtLCBib29sIGRvbnRSZW1v
dmUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAo
IWVsZW0tPmhhc0F0dHJpYnV0ZShkaXJBdHRyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5VW5pY29kZUJpZGkpICYmICFzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eURpcmVjdGlvbikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGRvbnRSZW1vdmUpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmVtb3Zl
Tm9kZUF0dHJpYnV0ZShlbGVtLCBkaXJBdHRyKTsKIAogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhp
cyBiZSBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3Bhbj8gIE5lZWQgYSB0
ZXN0LgogICAgIGlmIChpc1Vuc3R5bGVkU3R5bGVTcGFuKGVsZW0pKQogICAgICAgICByZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0pCitib29sIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxF
bGVtZW50KiBlbGVtLCBib29sIGRvbnRSZW1vdmUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAg
ICBBU1NFUlQoZWxlbSk7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9
IGVsZW0tPmlubGluZVN0eWxlRGVjbCgpOwogICAgIGlmICghZGVjbCkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUt
PmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPigoKml0KS5p
ZCgpKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGRlY2wtPmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHlJRCAh
PSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UgfHwgIWlzVGFiU3Bhbk5vZGUoZWxlbSkpKSB7CisgICAg
ICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChkb250UmVtb3ZlKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHko
ZGVjbCwgcHJvcGVydHlJRCk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eVVuaWNvZGVCaWRpICYmICFkZWNsLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGly
ZWN0aW9uKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZGVj
bCwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwpAQCAtMTI3MSw2ICsxMzMwLDggQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQwogCiAgICAgaWYgKGlzU3BhbldpdGhvdXRB
dHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVsZW0pKQogICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKGVsZW0pOworCisgICAgcmV0dXJuIHJlbW92ZWQ7CiB9CiAKIHN0YXRp
YyBib29sIGhhc1RleHREZWNvcmF0aW9uUHJvcGVydHkoTm9kZSAqbm9kZSkKQEAgLTE0NzIsMTkg
KzE1MzMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9k
ZSk7CiAgICAgICAgICAgICBOb2RlKiBwcmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91c05vZGVQ
b3N0T3JkZXIoKTsKICAgICAgICAgICAgIE5vZGUqIG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHRO
b2RlKCk7Ci0gICAgICAgICAgICBpZiAobV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW0tPmhh
c1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50LT50YWdRTmFtZSgpKSkKLSAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOwotCi0gICAgICAgICAgICBp
ZiAoaW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHls
ZShlbGVtLCBzdHlsZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhTcGFuT3JS
ZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKGVsZW0pOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUg
bm9kZSB3YXMgY29udmVydGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4g
cmVsZXZhbnQKLSAgICAgICAgICAgIC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUu
Zy4gPGIgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz4pCi0gICAgICAgICAgICBpZiAoZWxlbS0+
aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlSFRNTEZvbnRTdHlsZShzdHls
ZS5nZXQoKSwgZWxlbSk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdT
dHlsZShzdHlsZS5nZXQoKSwgZWxlbSk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUo
c3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3ZlSW5s
aW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZS5nZXQoKSwgZWxlbSwgZmFsc2UpOwogICAgICAgICAg
ICAgaWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocy5ub2Rl
KCkgPT0gZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2
ZSBiZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xNTU0LDEw
ICsxNjAzLDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoYwogCiB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0g
c3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+
cGFyZW50RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7Ci0K
ICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgp
ID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgVGV4dCogdGV4dCA9
IHN0YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKQEAg
LTE1NjYsMTAgKzE2MTEsNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVt
ZW50CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFy
ZW50ID0gZW5kLm5vZGUoKS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJl
bnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzQ29udGVu
dEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsK
LQogICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7CiAgICAg
c3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKIApAQCAtMTU4MCw2ICsxNjIxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnNwbGl0VGV4dEVsZW1lbnQKICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5v
ZGUsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9kZS0+
cGFyZW50KCksIHByZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEpKTsKIH0KIAorYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KEVsZW1lbnQqIGVsZW0sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAoIWVsZW0gfHwgIWVsZW0tPmlzSFRN
TEVsZW1lbnQoKSB8fCAhZWxlbS0+cGFyZW50RWxlbWVudCgpIHx8ICFlbGVtLT5wYXJlbnRFbGVt
ZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGVsZW0pLCB0cnVlKTsKK30KKwogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6
aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
IHsKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOwpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDY0MTczKQorKysgV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDEwIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBzaG91bGRSZW1vdmVUZXh0RGVjb3JhdGlvblRhZyhDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZVRvQXBwbHksIGludCB0ZXh0RGVjb3JhdGlvbkFkZGVkQnlUYWcpIGNvbnN0
OwogICAgIGJvb2wgaW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBw
bHlpbmdTdHlsZShIVE1MRWxlbWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAg
ICAgdm9pZCByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVs
ZW1lbnQqJik7Ci0gICAgdm9pZCByZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxCaWRpRW1iZWRk
aW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwotICAg
IHZvaWQgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxl
bWVudCopOworICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAqLCBIVE1MRWxlbWVudCAqLCBib29sIGRvbnRSZW1vdmUpOworICAg
IGJvb2wgcmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhU
TUxFbGVtZW50KiwgYm9vbCBkb250UmVtb3ZlKTsKKyAgICBib29sIHJlbW92ZUhUTUxCaWRpRW1i
ZWRkaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIGJv
b2wgZG9udFJlbW92ZSk7CisgICAgYm9vbCByZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgYm9vbCBkb250UmVtb3ZlKTsKICAgICB2b2lkIHJl
bW92ZUlubGluZVN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIGJvb2wgbm9k
ZUZ1bGx5U2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkgY29uc3Q7CiAgICAgYm9vbCBub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUqLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0OwpAQCAtOTUsNiAr
OTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRB
dFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAg
dm9pZCBzcGxpdFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKTsKKyAgICBib29sIHNob3VsZFNwbGl0RWxlbWVudChFbGVtZW50KiBlbGVt
LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIGJvb2wgaXNWYWxpZENhcmV0UG9z
aXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbik7CiAgICAgYm9vbCBtZXJn
ZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG1lcmdlRW5kV2l0aE5leHRJZklkZW50aWNhbChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNjQxNzMpCisrKyBXZWJD
b3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAKICNpbmNsdWRl
ICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTgsNyArNTksMTEgQEAgdm9pZCBT
cGxpdEVsZW1lbnRDb21tYW5kOjpleGVjdXRlQXBwbHkoKQogICAgIHBhcmVudC0+aW5zZXJ0QmVm
b3JlKG1fZWxlbWVudDEuZ2V0KCksIG1fZWxlbWVudDIuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJv
bSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVjYXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBm
b3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50CisgICAgbV9lbGVtZW50Mi0+cmVtb3ZlQXR0cmlidXRl
KEhUTUxOYW1lczo6aWRBdHRyLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7CisKICAgICBzaXplX3Qg
c2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKICAgICAgICAgbV9lbGVtZW50MS0+YXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0sIGVjKTsK
QEAgLTg4LDYgKzkzLDEwIEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgbV9lbGVtZW50
Mi0+aW5zZXJ0QmVmb3JlKGNoaWxkcmVuW2ldLmdldCgpLCByZWZDaGlsZC5nZXQoKSwgZWMpOwog
CisgICAgLy8gUmVjb3ZlciB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBvcmlnaW5hbCBlbGVtZW50
LgorICAgIGlmIChtX2VsZW1lbnQxLT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKQor
ICAgICAgICBtX2VsZW1lbnQyLT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIsIG1fZWxl
bWVudDEtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpOworCiAgICAgbV9lbGVtZW50
MS0+cmVtb3ZlKGVjKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQxODUpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0y
NyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdEVsZW1lbnRDb21tYW5kIHNob3VsZG4n
dCBiZSBkdXBsaWNhdGluZyBpZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MTU2CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVu
c3VyZSBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IHByb2R1Y2UgbXVsdGlwbGUgbm9kZXMgd2l0
aCB0aGUgc2FtZSBpZC4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5l
c3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQgdGhlIGR1cGxpY2F0aW9uIG9m
IG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9p
bmRlbnQtcHJlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29t
bWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dDog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9vdXRkZW50LXJlZ3VsYXItYmxv
Y2txdW90ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVt
ZW50LWlkLWR1cGxpY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGlu
Zy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGVkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dDogRWRpdGluZyBkZWxlZ2F0
ZXMgY2hhbmdlZC4KKwogMjAxMC0wNy0yNyAgQW5kcmV3IFNjaGVya3VzICA8c2NoZXJrdXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3Rl
ZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MTczKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw0ICs0LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQK
IGlzIGdyZWF0Ci08YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0i
aW5uZXIiPiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNs
YXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7
IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48Ymxv
Y2txdW90ZSBpZD0iaW5uZXIiPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Js
b2NrcXVvdGU+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgor
PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29y
bGQ8YnI+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0
LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5v
bmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9j
a3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwv
YmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50
LXByZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQxNzMpCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAgZG9lcyBub3QgY3Jhc2guPC8jdGV4dD4KIDwv
I3RleHQ+CiA8L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJv
cmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90
ZSI+Ci08UFJFIGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIHRocmVlCiA8LyN0
ZXh0PgogPC9QUkU+Ci08UFJFIGlkPSJwcmUtYmFzaWMiPgorPFBSRT4KIDwjdGV4dD5saW5lIGZv
dXI8LyN0ZXh0PgogPC9QUkU+CiA8L0JMT0NLUVVPVEU+CkBAIC02NiwxMSArNjYsMTEgQEAgZG9l
cyBub3QgY3Jhc2guPC8jdGV4dD4KIDwvI3RleHQ+CiA8L1BSRT4KIDxCTE9DS1FVT1RFIHN0eWxl
PSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIgY2xhc3M9
IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSI+Ci08UFJFIGlkPSJwcmUtdGFibGUiPgorPFBSRT4K
IDwjdGV4dD50YWJsZSB0d28KIDwvI3RleHQ+CiA8L1BSRT4KLTxQUkUgaWQ9InByZS10YWJsZSI+
Cis8UFJFPgogPCN0ZXh0PnRhYmxlIHRocmVlPHNlbGVjdGlvbi1mb2N1cz48LyN0ZXh0PgogPC9Q
UkU+CiA8L0JMT0NLUVVPVEU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1w
YXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MTczKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1p
bi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw0ICsyLDQgQEAg
VGhpcyB0ZXN0cyBpbmRlbnRpbmcgdGhlIHNlY29uZCBwYXJhZ3JhcAogCiBoZWxsbwogd29ybGQK
LTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3Rl
IGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQw
cHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9InRlc3QiPiB3
b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBo
ZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxv
Y2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5n
OiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2Nr
cXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA2NDE3MykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1
bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBA
QCBvbmUKIHR3bwogdGhyZWUKIEJlZm9yZTogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj50
d288YnI+dGhyZWU8L2Jsb2NrcXVvdGU+Ci1BZnRlcjogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9u
ZTxicj48L2Jsb2NrcXVvdGU+dHdvPGJyPjxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwvYmxv
Y2txdW90ZT4KK0FmdGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90
ZT50d288YnI+PGJsb2NrcXVvdGU+dGhyZWU8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1p
ZC1kdXBsaWNhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMgc3BsaXR0aW5nIGEgYiBlbGVt
ZW50IHdpdGggaWQgYXR0cmlidXRlIGJ5IHVuYm9sZGluZyB0aGUgdGV4dCBpbnNpZGUgYW5kIGVu
c3VyZXMgdGhhdCBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IGNyZWF0ZSB0d28gZWxlbWVudHMg
d2l0aCB0aGUgc2FtZSBpZC4KKworRkFJTEVEOiBleHBlY3RlZCB0byBmaW5kIGV4YWN0bHkgbm9k
ZSB3aXRoIHRoZSBpZCAndGVzdCcgYWZ0ZXIgcmVtb3ZpbmcgYW5jaG9yIGJ1dCBmb3VuZCAzIG5v
ZGVzCitQQVNTOiBvdXRkZW50aW5nCitQQVNTOiB1bmxpc3RpZnlpbmcKKwpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1
cGxpY2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxl
L3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MCBAQAorPGJvZHk+Cis8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT4KKzxhIGhyZWY9
Imh0dHA6Ly93ZWJraXQub3JnLyIgaWQ9ImFuY2hvcl90ZXN0Ij5oZWxsbzxpPndvcmxkPC9pPndl
YmtpdDxiPnJvY2tzPC9iPjxlbT5iZWNhdXNlIG9mIHlvdTwvZW0+PC9hPgorPGJsb2NrcXVvdGUg
aWQ9ImluZGVudF90ZXN0Ij5oZWxsbzxwPndvcmxkPC9wPjxwPndlYmtpdDwvcD48cD5yb2Nrczwv
cD48cD5iZWNhdXNlIG9mIHlvdTwvcD48L2Jsb2NrcXVvdGU+Cis8dWwgaWQ9Imxpc3RfdGVzdCI+
PGxpPmhlbGxvPC9saT48bGk+d29ybGQ8L2xpPjxsaT53ZWJraXQ8L2xpPjxsaT5yb2NrczwvbGk+
PGxpPmJlY2F1c2Ugb2YgeW91PC9saT48L3VsPgorPC9kaXY+Cis8c2NyaXB0PgorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKworZnVuY3Rpb24gY291bnROb2Rlc1dpdGhJZChub2RlLCBpZCkKK3sKKyAgICB2
YXIgY291bnQgPSAobm9kZS5pZCA9PSBpZCA/IDEgOiAwKTsKKworICAgIGZvciAodmFyIGkgPSAw
OyBub2RlLmNoaWxkTm9kZXMgJiYgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKKyAg
ICAgICAgY291bnQgKz0gY291bnROb2Rlc1dpdGhJZChub2RlLmNoaWxkTm9kZXNbaV0sIGlkKTsK
KworICAgIHJldHVybiBjb3VudDsKK30KKworZnVuY3Rpb24gZXhlY0NvbW1hbmRBbmRDaGVja0R1
cGxpY2F0aW9uKGNvbW1hbmQsIGlkLCBuYW1lKQoreworICAgIHZhciByYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7CisgICAgcmFuZ2Uuc2V0U3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpLCAyKTsKKyAgICByYW5nZS5zZXRFbmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQp
LCA0KTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAg
d2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTsKKworICAgIGJlZm9yZSA9IGNv
dW50Tm9kZXNXaXRoSWQoZG9jdW1lbnQuYm9keSwgaWQpOworICAgIGlmIChiZWZvcmUgIT0gMSkK
KyAgICAgICAgcmV0dXJuICJGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQgZXhhY3RseSBub2RlIHdp
dGggdGhlIGlkICd0ZXN0JyBiZWZvcmUgIiArIG5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgYmVmb3Jl
ICsgIiBub2Rlcy48YnI+IjsKKworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZh
bHNlLCBudWxsKTsKKworICAgIGFmdGVyID0gY291bnROb2Rlc1dpdGhJZChkb2N1bWVudC5ib2R5
LCBpZCk7CisgICAgaWYgKGFmdGVyICE9IDEpCisgICAgICAgIHJldHVybiAiRkFJTEVEOiBleHBl
Y3RlZCB0byBmaW5kIGV4YWN0bHkgbm9kZSB3aXRoIHRoZSBpZCAndGVzdCcgYWZ0ZXIgIiArIG5h
bWUgKyAiIGJ1dCBmb3VuZCAiICsgYWZ0ZXIgKyAiIG5vZGVzPGJyPiI7CisgICAgcmV0dXJuICJQ
QVNTOiAiICsgbmFtZSArICI8YnI+IjsKK30KKworZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0g
IlRoaXMgdGVzdHMgc3BsaXR0aW5nIGEgYiBlbGVtZW50IHdpdGggaWQgYXR0cmlidXRlIGJ5IHVu
Ym9sZGluZyB0aGUgdGV4dCBpbnNpZGUgYW5kICIKKysgImVuc3VyZXMgdGhhdCBzcGxpdHRpbmcg
ZWxlbWVudCBkb2Vzbid0IGNyZWF0ZSB0d28gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBpZC48YnI+
PGJyPiI7Citkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBleGVjQ29tbWFuZEFuZENoZWNrRHVw
bGljYXRpb24oJ3VubGluaycsICdhbmNob3JfdGVzdCcsICdyZW1vdmluZyBhbmNob3InKTsKK2Rv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IGV4ZWNDb21tYW5kQW5kQ2hlY2tEdXBsaWNhdGlvbign
b3V0ZGVudCcsICdpbmRlbnRfdGVzdCcsICdvdXRkZW50aW5nJyk7Citkb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCArPSBleGVjQ29tbWFuZEFuZENoZWNrRHVwbGljYXRpb24oJ2luc2VydHVub3JkZXJl
ZGxpc3QnLCAnbGlzdF90ZXN0JywgJ3VubGlzdGlmeWluZycpOworZG9jdW1lbnQuYm9keS5yZW1v
dmVDaGlsZChkaXYpOworCis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MTcz
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI5ICsxLDI1IEBACiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRC
ZWdpbkVkaXRpbmdJbkRPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byA3IG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50CiBFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOldlYlZpZXdEaWRCZWdpbkVkaXRpbmdO
b3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246
V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihu
dWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlE
b3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRD
aGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmll
d0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdl
OnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVs
bCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdE
aWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9m
ICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0
b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvIDQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVj
dGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3Rl
eHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0
eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
OldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62856</attachid>
            <date>2010-07-28 12:06:37 -0700</date>
            <delta_ts>2010-07-29 17:01:54 -0700</delta_ts>
            <desc>fixed style per darin&apos;s comment</desc>
            <filename>fix27156d</filename>
            <type>text/plain</type>
            <size>28282</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDIwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IAorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVs
ZW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSByZW1vdmVJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKTogQWRkZWQgZG9udFJl
bW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKTogQWRkZWQgZG9udFJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBDYWxs
cyByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KTogUmVtb3ZlZCB0aGUgY2FsbCB0
byBzcGxpdFRleHRBdFN0YXJ0LgorICAgICAgICBCcmFuY2hpbmcgaXMgbm93IGRvbmUgaW4gYXBw
bHlJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRFbmQpOiBEaXR0byBmb3Igc3BsaXRUZXh0QXRFbmQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRD
b21tYW5kOjpleGVjdXRlQXBwbHkpOiBEZWxldGVzIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUg
c2Vjb25kIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpk
b1VuYXBwbHkpOiBSZWNvdmVycyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBzZWNvbmQgZWxlbWVu
dC4KKwogMjAxMC0wNy0yOCAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NDIwMikKKysr
IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxNSw3ICs2MTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
CiAgICAgICAgICAgICAgICAgYmxvY2sgPSBuZXdCbG9jazsKICAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNIVE1MRWxlbWVudCgpKTsKICAgICAgICAgICAgIGlmIChibG9jay0+aXNIVE1MRWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oYmxvY2suZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVD
U1NTdHlsZShzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihibG9jay5nZXQoKSksIGZh
bHNlKTsKICAgICAgICAgICAgICAgICBpZiAoIW1fcmVtb3ZlT25seSkKICAgICAgICAgICAgICAg
ICAgICAgYWRkQmxvY2tTdHlsZShzdHlsZUNoYW5nZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihibG9jay5nZXQoKSkpOwogICAgICAgICAgICAgfQpAQCAtOTEwLDcgKzkxMCwxMCBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhlIHN0
YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0cyBp
bnNpZGUgb2YgaXQKICAgICBib29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlvbklu
VGV4dE5vZGUoc3RhcnQpOwogICAgIGlmIChzcGxpdFN0YXJ0KSB7Ci0gICAgICAgIHNwbGl0VGV4
dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoc2hvdWxkU3BsaXRFbGVt
ZW50KHN0YXJ0Lm5vZGUoKS0+cGFyZW50RWxlbWVudCgpLCBzdHlsZSkpCisgICAgICAgICAgICBz
cGxpdFRleHRFbGVtZW50QXRTdGFydChzdGFydCwgZW5kKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3BsaXRUZXh0QXRTdGFydChzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFy
dFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAgICAgIHN0YXJ0
RHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoc3RhcnQubm9kZSgp
KTsKQEAgLTkxOSw3ICs5MjIsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZQogICAgIC8vIHNwbGl0IHRoZSBlbmQgbm9kZSBhbmQgY29udGFpbmluZyBlbGVtZW50
IGlmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbnNpZGUgb2YgaXQKICAgICBib29sIHNwbGl0RW5kID0g
aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGVuZCk7CiAgICAgaWYgKHNwbGl0RW5kKSB7
Ci0gICAgICAgIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChzdGFydCwgZW5kKTsKKyAgICAgICAgaWYg
KHNob3VsZFNwbGl0RWxlbWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlKSkK
KyAgICAgICAgICAgIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChzdGFydCwgZW5kKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3BsaXRUZXh0QXRFbmQoc3RhcnQsIGVuZCk7CiAgICAgICAgIHN0
YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAg
ICAgICBlbmREdW1teVNwYW5BbmNlc3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShlbmQu
bm9kZSgpKTsKQEAgLTExNzYsNiArMTE4Miw0MCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpp
bXBsaWNpdGx5U3R5bGVkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZG9udFJlbW92ZSkKK3sK
KyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVChlbGVtZW50KTsKKworICAgIGJvb2wgcmVt
b3ZlZCA9IGZhbHNlOworCisgICAgaWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiBlbGVtZW50
LT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUoKSkpIHsKKyAgICAg
ICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgIGlmICghZG9udFJlbW92ZSkKKyAgICAgICAgICAg
IHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgfQorCisgICAgaWYg
KGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUo
ZWxlbWVudCwgc3R5bGUpKSB7CisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICBpZiAo
IWRvbnRSZW1vdmUpCisgICAgICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91
dEF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgfQorCisgICAgaWYgKCFlbGVtZW50LT5pbkRvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiByZW1vdmVkOworCisgICAgLy8gSWYgdGhlIG5vZGUgd2Fz
IGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250YWluIHJlbGV2YW50
CisgICAgLy8gc3R5bGVzIHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8YiBzdHlsZT0nZm9u
dC13ZWlnaHQ6IGJvbGQnPikKKyAgICBpZiAocmVtb3ZlSFRNTEZvbnRTdHlsZShzdHlsZSwgZWxl
bWVudCwgZG9udFJlbW92ZSkpCisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgIGlmIChyZW1v
dmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLCBlbGVtZW50LCBkb250UmVtb3ZlKSkKKyAg
ICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBlbGVt
ZW50LCBkb250UmVtb3ZlKSkKKyAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisKKyAgICByZXR1cm4g
cmVtb3ZlZDsKK30KKwogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JS
ZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKIHsKICAgICBib29s
IHJlbW92ZU5vZGUgPSBmYWxzZTsKQEAgLTEyMDAsNjUgKzEyNDAsODQgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuTwogICAgIH0KIH0KIAotdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAq
c3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
SFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVt
ZW50KiBlbGVtLCBib29sIGRvbnRSZW1vdmUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBB
U1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShmb250VGFnKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCByZW1vdmVkID0gZmFsc2U7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0clRvUmVtb3ZlID0gMDsK
ICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sb3I6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCBjb2xv
ckF0dHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHk6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
LCBmYWNlQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShl
bGVtLCBzaXplQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2xvcjoKKyAgICAgICAgICAgIGF0dHJUb1JlbW92ZSA9ICZjb2xvckF0dHI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6Cisg
ICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmZmFjZUF0dHI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgICAgICAgICAgYXR0clRvUmVt
b3ZlID0gJnNpemVBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYXR0clRvUmVtb3ZlKSB7CisgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmICghZG9udFJlbW92ZSkKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmli
dXRlKGVsZW0sICphdHRyVG9SZW1vdmUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGlz
RW1wdHlGb250VGFnKGVsZW0pKQorICAgIGlmIChpc0VtcHR5Rm9udFRhZyhlbGVtKSAmJiAhZG9u
dFJlbW92ZSkKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKKwor
ICAgIHJldHVybiByZW1vdmVkOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVI
VE1MQmlkaUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwg
SFRNTEVsZW1lbnQgKmVsZW0pCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVs
ZW1lbnQqIGVsZW0sIGJvb2wgZG9udFJlbW92ZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAg
IEFTU0VSVChlbGVtKTsKIAogICAgIGlmICghZWxlbS0+aGFzQXR0cmlidXRlKGRpckF0dHIpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghc3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSkgJiYgIXN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZG9udFJlbW92ZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW0sIGRpckF0dHIpOwog
CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JV
bnN0eWxlU3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCiAgICAgaWYgKGlzVW5zdHlsZWRTdHlsZVNw
YW4oZWxlbSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NT
U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxl
bSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIGJvb2wgZG9udFJlbW92ZSkK
IHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsKIAogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAg
aWYgKCFkZWNsKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19j
YXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQpLmlkKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICAgICAg
aWYgKHZhbHVlICYmIChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNU
YWJTcGFuTm9kZShlbGVtKSkpIHsKKyAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKGRvbnRSZW1vdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShkZWNsLCBwcm9wZXJ0eUlEKTsKICAgICAgICAgICAg
IGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5VW5pY29kZUJpZGkgJiYgIWRlY2wtPmdldFBy
b3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pLmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICByZW1vdmVDU1NQcm9wZXJ0eShkZWNsLCBDU1NQcm9wZXJ0eURpcmVjdGlvbik7CkBAIC0x
MjcxLDYgKzEzMzAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZShD
CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVTdHlsZVNwYW4oZWxl
bSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisKKyAgICBy
ZXR1cm4gcmVtb3ZlZDsKIH0KIAogc3RhdGljIGJvb2wgaGFzVGV4dERlY29yYXRpb25Qcm9wZXJ0
eShOb2RlICpub2RlKQpAQCAtMTQ3MiwxOSArMTUzMyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIE5vZGUqIHByZXYgPSBl
bGVtLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcigpOwogICAgICAgICAgICAgTm9kZSog
bmV4dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChtX3N0eWxl
ZElubGluZUVsZW1lbnQgJiYgZWxlbS0+aGFzVGFnTmFtZShtX3N0eWxlZElubGluZUVsZW1lbnQt
PnRhZ1FOYW1lKCkpKQotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oZWxlbSk7Ci0KLSAgICAgICAgICAgIGlmIChpbXBsaWNpdGx5U3R5bGVkRWxlbWVudFNob3Vs
ZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKGVsZW0sIHN0eWxlLmdldCgpKSkKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbSk7
Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252ZXJ0ZWQgdG8gYSBzcGFuLCB0
aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAotICAgICAgICAgICAgLy8gc3R5bGVz
IHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8YiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQn
PikKLSAgICAgICAgICAgIGlmIChlbGVtLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICByZW1vdmVIVE1MRm9udFN0eWxlKHN0eWxlLmdldCgpLCBlbGVtKTsKLSAgICAgICAgICAgICAg
ICByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLmdldCgpLCBlbGVtKTsKLSAgICAg
ICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZS5nZXQoKSwgZWxlbSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLmdldCgp
LCBlbGVtLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChzLm5vZGUoKSA9PSBlbGVtKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBoYXZlIGJlZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBp
cyBhdCB0aGUgc3RhcnQKQEAgLTE1NTQsMTAgKzE2MDMsNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpzcGxpdFRleHRBdEVuZChjCiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4
dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCkKIHsKLSAgICBOb2RlKiBwYXJlbnQgPSBzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFy
ZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICAgICByZXR1cm4gc3BsaXRU
ZXh0QXRTdGFydChzdGFydCwgZW5kKTsKLQogICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0g
c3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIDogMDsKICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Lm5vZGUo
KSk7CiAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIHN0YXJ0LmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwpAQCAtMTU2NiwxMCArMTYxMSw2IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkKIHsKLSAgICBOb2RlKiBwYXJlbnQgPSBlbmQubm9kZSgpLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgpIHx8ICFwYXJlbnQt
PnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHNw
bGl0VGV4dEF0RW5kKHN0YXJ0LCBlbmQpOwotCiAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0
PFRleHQqPihlbmQubm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQo
dGV4dCwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCkBAIC0xNTgwLDYgKzE2MjEs
MTQgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudAogICAgIHVwZGF0
ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSksIFBvc2l0aW9uKHByZXZOb2RlLT5wYXJlbnQoKSwgcHJldk5vZGUtPm5vZGVJbmRleCgp
ICsgMSkpOwogfQogCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdEVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorewor
ICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpIHx8ICFlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkgfHwgIWVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50
RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlbW92ZUlu
bGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxl
bWVudCksIHRydWUpOworfQorCiBib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc1ZhbGlkQ2FyZXRQ
b3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIE5vZGUq
IG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkocmV2aXNpb24gNjQyMDIpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDExIEBAIHByaXZhdGU6CiAgICAgLy8g
c3R5bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBzaG91bGRSZW1vdmVUZXh0RGVjb3JhdGlv
blRhZyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRvQXBwbHksIGludCB0ZXh0RGVjb3JhdGlv
bkFkZGVkQnlUYWcpIGNvbnN0OwogICAgIGJvb2wgaW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91
bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1MRWxlbWVudCosIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKik7CisgICAgYm9vbCByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBib29sIGRvbnRSZW1vdmUp
OwogICAgIHZvaWQgcmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhU
TUxFbGVtZW50KiYpOwotICAgIHZvaWQgcmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVIVE1MQmlkaUVt
YmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsK
LSAgICB2b2lkIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRN
TEVsZW1lbnQqKTsKKyAgICBib29sIHJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIGJvb2wgZG9udFJlbW92ZSk7CisgICAgYm9vbCBy
ZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
SFRNTEVsZW1lbnQqLCBib29sIGRvbnRSZW1vdmUpOworICAgIGJvb2wgcmVtb3ZlQ1NTU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIGJvb2wgZG9udFJlbW92
ZSk7CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KTsKICAgICBib29sIG5vZGVGdWxseVNlbGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0OwogICAgIGJvb2wgbm9kZUZ1bGx5VW5zZWxl
Y3RlZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBj
b25zdDsKQEAgLTk1LDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNwbGl0VGV4dEF0RW5k
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgdm9pZCBz
cGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAgYm9vbCBzaG91bGRTcGxpdEVsZW1l
bnQoRWxlbWVudCogZWxlbSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKICAgICBib29s
IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24p
OwogICAgIGJvb2wgbWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBtZXJnZUVuZFdpdGhO
ZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDY0MjAyKQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50Q29tbWFu
ZC5oIgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU4LDcg
KzU5LDExIEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkKICAgICBw
YXJlbnQtPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdldCgpLCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICAvLyBEZWxldGUg
aWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50IGJlY2F1c2UgdGhlIHNhbWUgaWQg
Y2Fubm90IGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBvbmUgZWxlbWVudAorICAgIG1fZWxlbWVudDIt
PnJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgZWMpOworICAgIEFTU0VSVCghZWMp
OworCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIG1fZWxlbWVudDEtPmFwcGVuZENoaWxkKGNo
aWxkcmVuW2ldLCBlYyk7CkBAIC04OCw2ICs5MywxMCBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1h
bmQ6OmRvVW5hcHBseSgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShjaGlsZHJlbltpXS5nZXQoKSwgcmVmQ2hp
bGQuZ2V0KCksIGVjKTsKIAorICAgIC8vIFJlY292ZXIgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUg
b3JpZ2luYWwgZWxlbWVudC4KKyAgICBpZiAobV9lbGVtZW50MS0+aGFzQXR0cmlidXRlKEhUTUxO
YW1lczo6aWRBdHRyKSkKKyAgICAgICAgbV9lbGVtZW50Mi0+c2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKTsK
KwogICAgIG1fZWxlbWVudDEtPnJlbW92ZShlYyk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0
MjAyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXRFbGVtZW50
Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisgICAgICAgIEFk
ZGVkIGEgdGVzdCB0byBlbnN1cmUgc3BsaXR0aW5nIGVsZW1lbnQgZG9lc24ndCBwcm9kdWNlIG11
bHRpcGxlIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWND
b21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkIHRo
ZSBkdXBsaWNhdGlvbiBvZiBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLgorICAgICAgICAqIGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90
ZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvb3V0
ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcv
c3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGVkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQ6
IEVkaXRpbmcgZGVsZWdhdGVzIGNoYW5nZWQuCisKIDIwMTAtMDctMjggIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBGaXgg
dHdvIGxheW91dCB0ZXN0IGZhaWx1cmUgb24gdGhlIHdpbmRvd3Mgc2xhdmUuIFJlbW92ZSB3aW4t
eHAgc3BlY2lmaWMgcmVzdWx0cyBhZnRlciB0aGUgcjY0MTg2IGNoYW5nZS4KSW5kZXg6IExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9p
bmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQyMDIpCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90
ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBAQCBoZWxsbwogd29y
bGQKIHdlYmtpdAogaXMgZ3JlYXQKLTxibG9ja3F1b3RlIGlkPSJvdXRlciI+IGhlbGxvIDxibG9j
a3F1b3RlIGlkPSJpbm5lciI+IHdvcmxkPGJyPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJs
b2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjog
MCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZSBpZD0i
b3V0ZXIiPjxibG9ja3F1b3RlIGlkPSJpbm5lciI+IHdlYmtpdCA8L2Jsb2NrcXVvdGU+PC9ibG9j
a3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBpcyBncmVhdCA8L2Js
b2NrcXVvdGU+Cis8YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0i
aW5uZXIiPiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNs
YXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7
IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IHdl
YmtpdCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZT4g
aXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDIw
MikKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQCBkb2VzIG5vdCBjcmFzaC48
LyN0ZXh0PgogPC8jdGV4dD4KIDwvUFJFPgogPEJMT0NLUVVPVEUgc3R5bGU9Im1hcmdpbjogMCAw
IDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IiBjbGFzcz0id2Via2l0LWluZGVu
dC1ibG9ja3F1b3RlIj4KLTxQUkUgaWQ9InByZS1iYXNpYyI+Cis8UFJFPgogPCN0ZXh0PmxpbmUg
dGhyZWUKIDwvI3RleHQ+CiA8L1BSRT4KLTxQUkUgaWQ9InByZS1iYXNpYyI+Cis8UFJFPgogPCN0
ZXh0PmxpbmUgZm91cjwvI3RleHQ+CiA8L1BSRT4KIDwvQkxPQ0tRVU9URT4KQEAgLTY2LDExICs2
NiwxMSBAQCBkb2VzIG5vdCBjcmFzaC48LyN0ZXh0PgogPC8jdGV4dD4KIDwvUFJFPgogPEJMT0NL
UVVPVEUgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAw
cHg7IiBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIj4KLTxQUkUgaWQ9InByZS10YWJs
ZSI+Cis8UFJFPgogPCN0ZXh0PnRhYmxlIHR3bwogPC8jdGV4dD4KIDwvUFJFPgotPFBSRSBpZD0i
cHJlLXRhYmxlIj4KKzxQUkU+CiA8I3RleHQ+dGFibGUgdGhyZWU8c2VsZWN0aW9uLWZvY3VzPjwv
I3RleHQ+CiA8L1BSRT4KIDwvQkxPQ0tRVU9URT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRl
bnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NjQyMDIpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNvbmQt
cGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
LDQgKzIsNCBAQCBUaGlzIHRlc3RzIGluZGVudGluZyB0aGUgc2Vjb25kIHBhcmFncmFwCiAKIGhl
bGxvCiB3b3JsZAotPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBoZWxsbzxicj48L2Jsb2NrcXVvdGU+
PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZSBp
ZD0idGVzdCI+IHdvcmxkIDwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+Cis8YmxvY2txdW90ZSBp
ZD0idGVzdCI+IGhlbGxvPGJyPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0
LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5v
bmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPiB3b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9j
a3F1b3RlPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9vdXRkZW50LXJl
Z3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9vdXRkZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDY0MjAyKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9v
dXRkZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTQsNCArNCw0IEBAIG9uZQogdHdvCiB0aHJlZQogQmVmb3JlOiA8YmxvY2txdW90ZSBpZD0idGVz
dCI+b25lPGJyPnR3bzxicj50aHJlZTwvYmxvY2txdW90ZT4KLUFmdGVyOiA8YmxvY2txdW90ZSBp
ZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJsb2NrcXVvdGUgaWQ9InRlc3Qi
PnRocmVlPC9ibG9ja3F1b3RlPgorQWZ0ZXI6IDxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij5vbmU8YnI+
PC9ibG9ja3F1b3RlPnR3bzxicj48YmxvY2txdW90ZT50aHJlZTwvYmxvY2txdW90ZT4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zcGxp
dC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGhpcyB0ZXN0cyBzcGxpdHRp
bmcgYSBiIGVsZW1lbnQgd2l0aCBpZCBhdHRyaWJ1dGUgYnkgdW5ib2xkaW5nIHRoZSB0ZXh0IGlu
c2lkZSBhbmQgZW5zdXJlcyB0aGF0IHNwbGl0dGluZyBlbGVtZW50IGRvZXNuJ3QgY3JlYXRlIHR3
byBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGlkLgorCitGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQg
ZXhhY3RseSBub2RlIHdpdGggdGhlIGlkICd0ZXN0JyBhZnRlciByZW1vdmluZyBhbmNob3IgYnV0
IGZvdW5kIDMgbm9kZXMKK1BBU1M6IG91dGRlbnRpbmcKK1BBU1M6IHVubGlzdGlmeWluZworCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRp
b24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVs
ZW1lbnQtaWQtZHVwbGljYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Vk
aXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACis8Ym9keT4KKzxkaXYgaWQ9ImRpdiIgY29udGVudGVkaXRhYmxl
PgorPGEgaHJlZj0iaHR0cDovL3dlYmtpdC5vcmcvIiBpZD0iYW5jaG9yX3Rlc3QiPmhlbGxvPGk+
d29ybGQ8L2k+d2Via2l0PGI+cm9ja3M8L2I+PGVtPmJlY2F1c2Ugb2YgeW91PC9lbT48L2E+Cis8
YmxvY2txdW90ZSBpZD0iaW5kZW50X3Rlc3QiPmhlbGxvPHA+d29ybGQ8L3A+PHA+d2Via2l0PC9w
PjxwPnJvY2tzPC9wPjxwPmJlY2F1c2Ugb2YgeW91PC9wPjwvYmxvY2txdW90ZT4KKzx1bCBpZD0i
bGlzdF90ZXN0Ij48bGk+aGVsbG88L2xpPjxsaT53b3JsZDwvbGk+PGxpPndlYmtpdDwvbGk+PGxp
PnJvY2tzPC9saT48bGk+YmVjYXVzZSBvZiB5b3U8L2xpPjwvdWw+Cis8L2Rpdj4KKzxzY3JpcHQ+
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBjb3VudE5vZGVzV2l0aElkKG5vZGUsIGlk
KQoreworICAgIHZhciBjb3VudCA9IChub2RlLmlkID09IGlkID8gMSA6IDApOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IG5vZGUuY2hpbGROb2RlcyAmJiBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0
aDsgaSsrKQorICAgICAgICBjb3VudCArPSBjb3VudE5vZGVzV2l0aElkKG5vZGUuY2hpbGROb2Rl
c1tpXSwgaWQpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCitmdW5jdGlvbiBleGVjQ29tbWFu
ZEFuZENoZWNrRHVwbGljYXRpb24oY29tbWFuZCwgaWQsIG5hbWUpCit7CisgICAgdmFyIHJhbmdl
ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCksIDIpOworICAgIHJhbmdlLnNldEVuZChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChpZCksIDQpOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5n
ZXMoKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpOworCisgICAg
YmVmb3JlID0gY291bnROb2Rlc1dpdGhJZChkb2N1bWVudC5ib2R5LCBpZCk7CisgICAgaWYgKGJl
Zm9yZSAhPSAxKQorICAgICAgICByZXR1cm4gIkZBSUxFRDogZXhwZWN0ZWQgdG8gZmluZCBleGFj
dGx5IG5vZGUgd2l0aCB0aGUgaWQgJ3Rlc3QnIGJlZm9yZSAiICsgbmFtZSArICIgYnV0IGZvdW5k
ICIgKyBiZWZvcmUgKyAiIG5vZGVzLjxicj4iOworCisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
Y29tbWFuZCwgZmFsc2UsIG51bGwpOworCisgICAgYWZ0ZXIgPSBjb3VudE5vZGVzV2l0aElkKGRv
Y3VtZW50LmJvZHksIGlkKTsKKyAgICBpZiAoYWZ0ZXIgIT0gMSkKKyAgICAgICAgcmV0dXJuICJG
QUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQgZXhhY3RseSBub2RlIHdpdGggdGhlIGlkICd0ZXN0JyBh
ZnRlciAiICsgbmFtZSArICIgYnV0IGZvdW5kICIgKyBhZnRlciArICIgbm9kZXM8YnI+IjsKKyAg
ICByZXR1cm4gIlBBU1M6ICIgKyBuYW1lICsgIjxicj4iOworfQorCitkb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCArPSAiVGhpcyB0ZXN0cyBzcGxpdHRpbmcgYSBiIGVsZW1lbnQgd2l0aCBpZCBhdHRy
aWJ1dGUgYnkgdW5ib2xkaW5nIHRoZSB0ZXh0IGluc2lkZSBhbmQgIgorKyAiZW5zdXJlcyB0aGF0
IHNwbGl0dGluZyBlbGVtZW50IGRvZXNuJ3QgY3JlYXRlIHR3byBlbGVtZW50cyB3aXRoIHRoZSBz
YW1lIGlkLjxicj48YnI+IjsKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IGV4ZWNDb21tYW5k
QW5kQ2hlY2tEdXBsaWNhdGlvbigndW5saW5rJywgJ2FuY2hvcl90ZXN0JywgJ3JlbW92aW5nIGFu
Y2hvcicpOworZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gZXhlY0NvbW1hbmRBbmRDaGVja0R1
cGxpY2F0aW9uKCdvdXRkZW50JywgJ2luZGVudF90ZXN0JywgJ291dGRlbnRpbmcnKTsKK2RvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MICs9IGV4ZWNDb21tYW5kQW5kQ2hlY2tEdXBsaWNhdGlvbignaW5z
ZXJ0dW5vcmRlcmVkbGlzdCcsICdsaXN0X3Rlc3QnLCAndW5saXN0aWZ5aW5nJyk7Citkb2N1bWVu
dC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjQyMDIpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkgKzEsMjUgQEAKIEVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2ViVmlld0RpZEJl
Z2luRWRpdGluZ05vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9m
ICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIg
b2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZm
aW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UK
IEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRp
b24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwp
IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2Vs
ZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9m
ICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
Ci1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0
ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3Rl
eHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFt
IHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgot
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+
IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0
ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5T
U2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZy
b20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5n
OkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90
aWZpY2F0aW9uCg==
</data>
<flag name="review"
          id="51108"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63012</attachid>
            <date>2010-07-29 17:01:54 -0700</date>
            <delta_ts>2010-07-29 17:12:43 -0700</delta_ts>
            <desc>fixed per ojan&apos;s comments</desc>
            <filename>fix27156e</filename>
            <type>text/plain</type>
            <size>29939</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDMwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IAorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVs
ZW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSByZW1vdmVJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKTogQWRkZWQgZG9udFJl
bW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKTogQWRkZWQgZG9udFJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBDYWxs
cyByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KTogUmVtb3ZlZCB0aGUgY2FsbCB0
byBzcGxpdFRleHRBdFN0YXJ0LgorICAgICAgICBCcmFuY2hpbmcgaXMgbm93IGRvbmUgaW4gYXBw
bHlJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRFbmQpOiBEaXR0byBmb3Igc3BsaXRUZXh0QXRFbmQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRD
b21tYW5kOjpleGVjdXRlQXBwbHkpOiBEZWxldGVzIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUg
c2Vjb25kIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpk
b1VuYXBwbHkpOiBSZWNvdmVycyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBzZWNvbmQgZWxlbWVu
dC4KKwogMjAxMC0wNy0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MzA3KQorKysgV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDcgKzkxMCwxMCBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhl
IHN0YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0
cyBpbnNpZGUgb2YgaXQKICAgICBib29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlv
bkluVGV4dE5vZGUoc3RhcnQpOwogICAgIGlmIChzcGxpdFN0YXJ0KSB7Ci0gICAgICAgIHNwbGl0
VGV4dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoc2hvdWxkU3BsaXRU
ZXh0RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAg
ICAgICAgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7CiAgICAgICAgIHN0YXJ0
ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgICAg
ICBzdGFydER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0YXJ0
Lm5vZGUoKSk7CkBAIC05MTksNyArOTIyLDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcg
ZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAgYm9vbCBzcGxp
dEVuZCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAgIGlmIChzcGxp
dEVuZCkgewotICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVuZCk7CisgICAg
ICAgIGlmIChzaG91bGRTcGxpdFRleHRFbGVtZW50KGVuZC5ub2RlKCktPnBhcmVudEVsZW1lbnQo
KSwgc3R5bGUpKQorICAgICAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsK
ICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0
aW9uKCk7CiAgICAgICAgIGVuZER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JG
b3JOb2RlKGVuZC5ub2RlKCkpOwpAQCAtMTE3Niw2ICsxMTgyLDQwIEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OmltcGxpY2l0bHlTdHlsZWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChzdHlsZSk7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworCisgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CisKKyAgICBpZiAobV9zdHlsZWRJ
bmxpbmVFbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50
LT50YWdRTmFtZSgpKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1v
ZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnQpCisgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgIH0KKworICAgIGlmIChpbXBsaWNpdGx5
U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKGVsZW1lbnQsIHN0
eWxlKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vZGUgPT0gUmVt
b3ZlQXR0cmlidXRlc0FuZEVsZW1lbnQpCisgICAgICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJl
bW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgfQorCisgICAgaWYgKCFlbGVt
ZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiByZW1vdmVkOworCisgICAgLy8gSWYg
dGhlIG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250
YWluIHJlbGV2YW50CisgICAgLy8gc3R5bGVzIHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8
YiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPikKKyAgICBpZiAocmVtb3ZlSFRNTEZvbnRTdHls
ZShzdHlsZSwgZWxlbWVudCwgbW9kZSkpCisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgIGlm
IChyZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLCBlbGVtZW50LCBtb2RlKSkKKyAg
ICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBlbGVt
ZW50LCBtb2RlKSkKKyAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisKKyAgICByZXR1cm4gcmVtb3Zl
ZDsKK30KKwogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJ
ZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKIHsKICAgICBib29sIHJlbW92
ZU5vZGUgPSBmYWxzZTsKQEAgLTEyMDAsNjUgKzEyNDAsODQgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cmVwbGFjZVdpdGhTcGFuTwogICAgIH0KIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUs
IEhUTUxFbGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZv
bnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBl
bGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsK
ICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShmb250VGFn
KSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0clRvUmVtb3Zl
ID0gMDsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
LCBjb2xvckF0dHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRGYW1pbHk6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0
ZShlbGVtLCBmYWNlQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJp
YnV0ZShlbGVtLCBzaXplQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgICAgIGF0dHJUb1JlbW92ZSA9ICZjb2xvckF0
dHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1p
bHk6CisgICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmZmFjZUF0dHI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgICAgICAgICAgYXR0
clRvUmVtb3ZlID0gJnNpemVBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYXR0clRvUmVtb3ZlKSB7CisgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChtb2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50KQorICAg
ICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgKmF0dHJUb1JlbW92ZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaXNFbXB0eUZvbnRUYWcoZWxlbSkpCisgICAgaWYg
KGlzRW1wdHlGb250VGFnKGVsZW0pICYmIG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1l
bnQpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisKKyAgICBy
ZXR1cm4gcmVtb3ZlZDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJp
ZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxF
bGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJpZGlFbWJl
ZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50
KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKHN0eWxl
KTsKICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0F0dHJpYnV0ZShkaXJB
dHRyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
IXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpICYmICFz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1vZGUgPT0gUmVtb3Zl
Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVs
ZW0sIGRpckF0dHIpOwogCiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3BhbldpdGhv
dXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCiAgICAgaWYgKGlz
VW5zdHlsZWRTdHlsZVNwYW4oZWxlbSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oZWxlbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBI
VE1MRWxlbWVudCogZWxlbSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIElu
bGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFT
U0VSVChlbGVtKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gZWxl
bS0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgaWYgKCFkZWNsKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5k
KCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQpLmlkKCkp
OwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKICAgICAgICAgaWYgKHZhbHVlICYmIChwcm9wZXJ0eUlEICE9IENT
U1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVtKSkpIHsKKyAgICAgICAg
ICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3Bl
cnR5KGRlY2wsIHByb3BlcnR5SUQpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlVbmljb2RlQmlkaSAmJiAhZGVjbC0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eURpcmVjdGlvbikuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5
KGRlY2wsIENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKQEAgLTEyNzEsNiArMTMzMCw4IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEMKIAogICAgIGlmIChpc1NwYW5XaXRo
b3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbihlbGVtKSkKICAgICAgICAgcmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKKworICAgIHJldHVybiByZW1vdmVkOwogfQogCiBz
dGF0aWMgYm9vbCBoYXNUZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vZGUgKm5vZGUpCkBAIC0xNDcy
LDE5ICsxNTMzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAog
ICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpOwogICAgICAgICAgICAgTm9kZSogcHJldiA9IGVsZW0tPnRyYXZlcnNlUHJldmlvdXNO
b2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBOb2RlKiBuZXh0ID0gZWxlbS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOwotICAgICAgICAgICAgaWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiBlbGVt
LT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUoKSkpCi0gICAgICAg
ICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKLQotICAgICAgICAg
ICAgaWYgKGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5n
U3R5bGUoZWxlbSwgc3R5bGUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bh
bk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhlbGVtKTsKLQotICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250
YWluIHJlbGV2YW50Ci0gICAgICAgICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVk
IChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+KQotICAgICAgICAgICAgaWYgKGVs
ZW0tPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxGb250U3R5bGUo
c3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxCaWRpRW1iZWRk
aW5nU3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0
eWxlKHN0eWxlLmdldCgpLCBlbGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUuZ2V0KCksIGVsZW0pOwogICAgICAgICAgICAg
aWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocy5ub2RlKCkg
PT0gZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBi
ZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xNTU0LDEwICsx
NjAzLDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoYwogCiB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0gc3Rh
cnQubm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFy
ZW50RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7Ci0KICAg
ICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8g
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKQEAgLTE1
NjYsMTAgKzE2MTEsNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50
ID0gZW5kLm5vZGUoKS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzQ29udGVudEVk
aXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsKLQog
ICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7CiAgICAgc3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKIApAQCAtMTU4MCw2ICsxNjIxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnNwbGl0VGV4dEVsZW1lbnQKICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUs
IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9kZS0+cGFy
ZW50KCksIHByZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEpKTsKIH0KIAorYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIWVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHls
ZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSwgUmVtb3ZlTm9uZSk7Cit9CisK
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5v
ZGUoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2NDMw
NykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIGVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlIHsKIGNsYXNz
IEFwcGx5U3R5bGVDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1Ymxp
YzoKICAgICBlbnVtIEVQcm9wZXJ0eUxldmVsIHsgUHJvcGVydHlEZWZhdWx0LCBGb3JjZUJsb2Nr
UHJvcGVydGllcyB9OworICAgIGVudW0gSW5saW5lU3R5bGVSZW1vdmFsTW9kZSB7IFJlbW92ZUF0
dHJpYnV0ZXNBbmRFbGVtZW50LCBSZW1vdmVOb25lIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBcHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0
dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMSBAQCBwcml2YXRlOgogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVy
cwogICAgIGJvb2wgc2hvdWxkUmVtb3ZlVGV4dERlY29yYXRpb25UYWcoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVUb0FwcGx5LCBpbnQgdGV4dERlY29yYXRpb25BZGRlZEJ5VGFnKSBjb25zdDsK
ICAgICBib29sIGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5
aW5nU3R5bGUoSFRNTEVsZW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZT1SZW1vdmVBdHRyaWJ1
dGVzQW5kRWxlbWVudCk7CiAgICAgdm9pZCByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91
dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqJik7Ci0gICAgdm9pZCByZW1vdmVIVE1MRm9udFN0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKLSAgICB2b2lkIHJl
bW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBI
VE1MRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qLCBIVE1MRWxlbWVudCopOworICAgIGJvb2wgcmVtb3ZlSFRNTEZvbnRTdHlsZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1v
dmFsTW9kZT1SZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudCk7CisgICAgYm9vbCByZW1vdmVIVE1M
QmlkaUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1l
bnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlPVJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50KTsK
KyAgICBib29sIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRN
TEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlPVJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVt
ZW50KTsKICAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBl
bmQpOwogICAgIGJvb2wgbm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAgICAgYm9vbCBub2RlRnVsbHlVbnNl
bGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
IGNvbnN0OwpAQCAtOTUsNiArOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3BsaXRUZXh0QXRF
bmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lk
IHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKKyAgICBib29sIHNob3VsZFNwbGl0VGV4
dEVsZW1lbnQoRWxlbWVudCogZWxlbSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKICAg
ICBib29sIGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pOwogICAgIGJvb2wgbWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBtZXJnZUVu
ZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHJl
dmlzaW9uIDY0MzA3KQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3BsaXRFbGVtZW50
Q29tbWFuZC5oIgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTU4LDcgKzU5LDExIEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KCkK
ICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX2VsZW1lbnQxLmdldCgpLCBtX2VsZW1lbnQyLmdl
dCgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICAvLyBE
ZWxldGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50IGJlY2F1c2UgdGhlIHNh
bWUgaWQgY2Fubm90IGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBvbmUgZWxlbWVudAorICAgIG1fZWxl
bWVudDItPnJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgZWMpOworICAgIEFTU0VS
VCghZWMpOworCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIG1fZWxlbWVudDEtPmFwcGVuZENo
aWxkKGNoaWxkcmVuW2ldLCBlYyk7CkBAIC04OCw2ICs5MywxMCBAQCB2b2lkIFNwbGl0RWxlbWVu
dENvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCiAgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJlZm9yZShjaGlsZHJlbltpXS5nZXQoKSwg
cmVmQ2hpbGQuZ2V0KCksIGVjKTsKIAorICAgIC8vIFJlY292ZXIgdGhlIGlkIGF0dHJpYnV0ZSBv
ZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBpZiAobV9lbGVtZW50MS0+aGFzQXR0cmlidXRl
KEhUTUxOYW1lczo6aWRBdHRyKSkKKyAgICAgICAgbV9lbGVtZW50Mi0+c2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0
dHIpKTsKKwogICAgIG1fZWxlbWVudDEtPnJlbW92ZShlYyk7CiB9CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXRF
bGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisgICAg
ICAgIEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgc3BsaXR0aW5nIGVsZW1lbnQgZG9lc24ndCBwcm9k
dWNlIG11bHRpcGxlIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisKKyAgICAgICAgKiBlZGl0aW5n
L2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0OiBSZW1v
dmVkIHRoZSBkdXBsaWNhdGlvbiBvZiBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLgorICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAg
ICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxv
Y2txdW90ZS1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1h
bmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVk
aXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlv
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3Rl
ZC50eHQ6IEVkaXRpbmcgZGVsZWdhdGVzIGNoYW5nZWQuCisKIDIwMTAtMDctMjkgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVy
IEh1bnQuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
NTIwNzM2OS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLVRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZmxhdHRl
biBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQuIFlvdSBzaG91bGRuJ3Qg
Z2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBsZXZlbCBsaXN0IGJlbG93
LgorVGhpcyB0ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0byBzd2l0Y2hpbmcgYSBsaXN0
IGNvbnRhaW5pbmcgYSBzdWItbGlzdCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxkbid0IGdldCBhIGNy
YXNoLiBUaGlzIHRlc3QgdXNlZCB0byBmbGF0dGVuIHRoZSBsaXN0IGJ1dCB0aGlzIGJlaGF2aW9y
IGlzIGNvcnJlY3RlZCBpbiB0aGUgYnVnIDQzMTE2LgogCiBPbmUKIFR3bwpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHJldmlzaW9uIDY0MzA3
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi08cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4g
dHJ5aW5nIHRvIGZsYXR0ZW4gYSBsaXN0IGNvbnRhaW5pbmcgYSBzdWItbGlzdCBhdCB0aGUgZW5k
LiBZb3Ugc2hvdWxkbid0IGdldCBhIGNyYXNoIGFuZCB0aGVyZSBzaG91bGQgYmUgYSBzaW5nbGUg
bGV2ZWwgbGlzdCBiZWxvdy48L3A+Cis8cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5
aW5nIHRvIHN3aXRjaGluZyBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQu
IFlvdSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2guIFRoaXMgdGVzdCB1c2VkIHRvIGZsYXR0ZW4gdGhl
IGxpc3QgYnV0IHRoaXMgYmVoYXZpb3IgaXMgY29ycmVjdGVkIGluIHRoZSBidWcgNDMxMTYuPC9w
PgogPGRpdiBpZD0iZGl2IiBjb250ZW50ZWRpdGFibGU9InRydWUiPjxvbD48bGk+T25lPC9saT48
bGk+VHdvPC9saT48dWw+PGxpPlRocmVlPC9saT48bGk+Rm91cjwvbGk+PC9kaXY+CiA8cCBpZD0i
Y29uc29sZSI+PC9wPgogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2lu
ZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNCw0ICs0LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQKIGlzIGdyZWF0Ci08YmxvY2tx
dW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3b3JsZDxicj48
L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50
LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFk
ZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48YmxvY2txdW90ZSBpZD0iaW5uZXIi
PiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVv
dGUgaWQ9Im91dGVyIj4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9Im91
dGVyIj4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+PC9ibG9ja3F1b3Rl
PjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3Rl
IiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsi
PjxibG9ja3F1b3RlPjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90
ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwvYmxvY2txdW90ZT4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MSArMjcsOSBAQCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgY2xhc3M9IndlYmtpdC1pbmRl
bnQtYmxvY2txdW90ZSIKIHwgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3Jk
ZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCiB8ICAgICAgICAgPHByZT4KLXwgICAgICAgICAgIGlk
PSJwcmUtYmFzaWMiCiB8ICAgICAgICAgICAibGluZSB0aHJlZQogIgogfCAgICAgICAgIDxwcmU+
Ci18ICAgICAgICAgICBpZD0icHJlLWJhc2ljIgogfCAgICAgICAgICAgImxpbmUgZm91ciIKIHwg
ICAgICAgIgogCkBAIC02OCwxMSArNjYsOSBAQCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAg
ICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgICAgICAg
ICAgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7
IgogfCAgICAgICAgICAgICAgICAgPHByZT4KLXwgICAgICAgICAgICAgICAgICAgaWQ9InByZS10
YWJsZSIKIHwgICAgICAgICAgICAgICAgICAgInRhYmxlIHR3bwogIgogfCAgICAgICAgICAgICAg
ICAgPHByZT4KLXwgICAgICAgICAgICAgICAgICAgaWQ9InByZS10YWJsZSIKIHwgICAgICAgICAg
ICAgICAgICAgInRhYmxlIHRocmVlPCNzZWxlY3Rpb24tZm9jdXM+IgogfCAgICAgICAgICAgICA8
dGQ+CiB8ICAgICAgICAgICAgICAgInJpZ2h0IGNlbGwiCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
aW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vj
b25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMiw0ICsyLDQgQEAgVGhpcyB0ZXN0cyBpbmRlbnRpbmcgdGhlIHNlY29uZCBwYXJhZ3JhcAog
CiBoZWxsbwogd29ybGQKLTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1
b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJt
YXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVv
dGUgaWQ9InRlc3QiPiB3b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVv
dGUgaWQ9InRlc3QiPiBoZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9Indl
YmtpdC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVy
OiBub25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwv
YmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVu
dC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA2NDMwNykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00LDQgKzQsNCBAQCBvbmUKIHR3bwogdGhyZWUKIEJlZm9yZTogPGJsb2NrcXVvdGUgaWQ9
InRlc3QiPm9uZTxicj50d288YnI+dGhyZWU8L2Jsb2NrcXVvdGU+Ci1BZnRlcjogPGJsb2NrcXVv
dGUgaWQ9InRlc3QiPm9uZTxicj48L2Jsb2NrcXVvdGU+dHdvPGJyPjxibG9ja3F1b3RlIGlkPSJ0
ZXN0Ij50aHJlZTwvYmxvY2txdW90ZT4KK0FmdGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25l
PGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJsb2NrcXVvdGU+dGhyZWU8L2Jsb2NrcXVvdGU+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRp
b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUv
c3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24t
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMgc3Bs
aXR0aW5nIGEgYiBlbGVtZW50IHdpdGggaWQgYXR0cmlidXRlIGJ5IHVuYm9sZGluZyB0aGUgdGV4
dCBpbnNpZGUgYW5kIGVuc3VyZXMgdGhhdCBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IGNyZWF0
ZSB0d28gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBpZC4KKworRkFJTEVEOiBleHBlY3RlZCB0byBm
aW5kIGV4YWN0bHkgbm9kZSB3aXRoIHRoZSBpZCAndGVzdCcgYWZ0ZXIgcmVtb3ZpbmcgYW5jaG9y
IGJ1dCBmb3VuZCAzIG5vZGVzCitQQVNTOiBvdXRkZW50aW5nCitQQVNTOiB1bmxpc3RpZnlpbmcK
KwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1cGxp
Y2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9zcGxp
dC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorPGJvZHk+Cis8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0
YWJsZT4KKzxhIGhyZWY9Imh0dHA6Ly93ZWJraXQub3JnLyIgaWQ9ImFuY2hvcl90ZXN0Ij5oZWxs
bzxpPndvcmxkPC9pPndlYmtpdDxiPnJvY2tzPC9iPjxlbT5iZWNhdXNlIG9mIHlvdTwvZW0+PC9h
PgorPGJsb2NrcXVvdGUgaWQ9ImluZGVudF90ZXN0Ij5oZWxsbzxwPndvcmxkPC9wPjxwPndlYmtp
dDwvcD48cD5yb2NrczwvcD48cD5iZWNhdXNlIG9mIHlvdTwvcD48L2Jsb2NrcXVvdGU+Cis8dWwg
aWQ9Imxpc3RfdGVzdCI+PGxpPmhlbGxvPC9saT48bGk+d29ybGQ8L2xpPjxsaT53ZWJraXQ8L2xp
PjxsaT5yb2NrczwvbGk+PGxpPmJlY2F1c2Ugb2YgeW91PC9saT48L3VsPgorPC9kaXY+Cis8c2Ny
aXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gY291bnROb2Rlc1dpdGhJZChub2Rl
LCBpZCkKK3sKKyAgICB2YXIgY291bnQgPSAobm9kZS5pZCA9PSBpZCA/IDEgOiAwKTsKKworICAg
IGZvciAodmFyIGkgPSAwOyBub2RlLmNoaWxkTm9kZXMgJiYgaSA8IG5vZGUuY2hpbGROb2Rlcy5s
ZW5ndGg7IGkrKykKKyAgICAgICAgY291bnQgKz0gY291bnROb2Rlc1dpdGhJZChub2RlLmNoaWxk
Tm9kZXNbaV0sIGlkKTsKKworICAgIHJldHVybiBjb3VudDsKK30KKworZnVuY3Rpb24gZXhlY0Nv
bW1hbmRBbmRDaGVja0R1cGxpY2F0aW9uKGNvbW1hbmQsIGlkLCBuYW1lKQoreworICAgIHZhciBy
YW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgcmFuZ2Uuc2V0U3RhcnQoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpLCAyKTsKKyAgICByYW5nZS5zZXRFbmQoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpLCA0KTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxs
UmFuZ2VzKCk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTsKKwor
ICAgIGJlZm9yZSA9IGNvdW50Tm9kZXNXaXRoSWQoZG9jdW1lbnQuYm9keSwgaWQpOworICAgIGlm
IChiZWZvcmUgIT0gMSkKKyAgICAgICAgcmV0dXJuICJGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQg
ZXhhY3RseSBub2RlIHdpdGggdGhlIGlkICd0ZXN0JyBiZWZvcmUgIiArIG5hbWUgKyAiIGJ1dCBm
b3VuZCAiICsgYmVmb3JlICsgIiBub2Rlcy48YnI+IjsKKworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKGNvbW1hbmQsIGZhbHNlLCBudWxsKTsKKworICAgIGFmdGVyID0gY291bnROb2Rlc1dpdGhJ
ZChkb2N1bWVudC5ib2R5LCBpZCk7CisgICAgaWYgKGFmdGVyICE9IDEpCisgICAgICAgIHJldHVy
biAiRkFJTEVEOiBleHBlY3RlZCB0byBmaW5kIGV4YWN0bHkgbm9kZSB3aXRoIHRoZSBpZCAndGVz
dCcgYWZ0ZXIgIiArIG5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgYWZ0ZXIgKyAiIG5vZGVzPGJyPiI7
CisgICAgcmV0dXJuICJQQVNTOiAiICsgbmFtZSArICI8YnI+IjsKK30KKworZG9jdW1lbnQuYm9k
eS5pbm5lckhUTUwgKz0gIlRoaXMgdGVzdHMgc3BsaXR0aW5nIGEgYiBlbGVtZW50IHdpdGggaWQg
YXR0cmlidXRlIGJ5IHVuYm9sZGluZyB0aGUgdGV4dCBpbnNpZGUgYW5kICIKKysgImVuc3VyZXMg
dGhhdCBzcGxpdHRpbmcgZWxlbWVudCBkb2Vzbid0IGNyZWF0ZSB0d28gZWxlbWVudHMgd2l0aCB0
aGUgc2FtZSBpZC48YnI+PGJyPiI7Citkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBleGVjQ29t
bWFuZEFuZENoZWNrRHVwbGljYXRpb24oJ3VubGluaycsICdhbmNob3JfdGVzdCcsICdyZW1vdmlu
ZyBhbmNob3InKTsKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IGV4ZWNDb21tYW5kQW5kQ2hl
Y2tEdXBsaWNhdGlvbignb3V0ZGVudCcsICdpbmRlbnRfdGVzdCcsICdvdXRkZW50aW5nJyk7Citk
b2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBleGVjQ29tbWFuZEFuZENoZWNrRHVwbGljYXRpb24o
J2luc2VydHVub3JkZXJlZGxpc3QnLCAnbGlzdF90ZXN0JywgJ3VubGlzdGlmeWluZycpOworZG9j
dW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworCis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5ICsxLDI1IEBACiBFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50CiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOldlYlZpZXdE
aWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
U1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihu
dWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFO
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQ
QU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAg
b2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
MiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRD
aGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9m
ICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
MiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2Vs
ZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMiBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0
cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRp
b24KLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3Rl
eHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0
eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJ
VElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVj
dGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63014</attachid>
            <date>2010-07-29 17:12:43 -0700</date>
            <delta_ts>2010-07-30 15:43:43 -0700</delta_ts>
            <desc>fixed the style</desc>
            <filename>fix27156f</filename>
            <type>text/plain</type>
            <size>29947</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDMwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IAorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVs
ZW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSByZW1vdmVJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKTogQWRkZWQgZG9udFJl
bW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKTogQWRkZWQgZG9udFJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBDYWxs
cyByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KTogUmVtb3ZlZCB0aGUgY2FsbCB0
byBzcGxpdFRleHRBdFN0YXJ0LgorICAgICAgICBCcmFuY2hpbmcgaXMgbm93IGRvbmUgaW4gYXBw
bHlJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRFbmQpOiBEaXR0byBmb3Igc3BsaXRUZXh0QXRFbmQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRD
b21tYW5kOjpleGVjdXRlQXBwbHkpOiBEZWxldGVzIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUg
c2Vjb25kIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpk
b1VuYXBwbHkpOiBSZWNvdmVycyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBzZWNvbmQgZWxlbWVu
dC4KKwogMjAxMC0wNy0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MzA3KQorKysgV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDcgKzkxMCwxMCBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhl
IHN0YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0
cyBpbnNpZGUgb2YgaXQKICAgICBib29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlv
bkluVGV4dE5vZGUoc3RhcnQpOwogICAgIGlmIChzcGxpdFN0YXJ0KSB7Ci0gICAgICAgIHNwbGl0
VGV4dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAoc2hvdWxkU3BsaXRU
ZXh0RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAg
ICAgICAgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7CiAgICAgICAgIHN0YXJ0
ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgICAg
ICBzdGFydER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0YXJ0
Lm5vZGUoKSk7CkBAIC05MTksNyArOTIyLDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcg
ZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAgYm9vbCBzcGxp
dEVuZCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAgIGlmIChzcGxp
dEVuZCkgewotICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVuZCk7CisgICAg
ICAgIGlmIChzaG91bGRTcGxpdFRleHRFbGVtZW50KGVuZC5ub2RlKCktPnBhcmVudEVsZW1lbnQo
KSwgc3R5bGUpKQorICAgICAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsK
ICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0
aW9uKCk7CiAgICAgICAgIGVuZER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JG
b3JOb2RlKGVuZC5ub2RlKCkpOwpAQCAtMTE3Niw2ICsxMTgyLDQwIEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OmltcGxpY2l0bHlTdHlsZWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChzdHlsZSk7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworCisgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CisKKyAgICBpZiAobV9zdHlsZWRJ
bmxpbmVFbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50
LT50YWdRTmFtZSgpKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1v
ZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnQpCisgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgIH0KKworICAgIGlmIChpbXBsaWNpdGx5
U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKGVsZW1lbnQsIHN0
eWxlKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vZGUgPT0gUmVt
b3ZlQXR0cmlidXRlc0FuZEVsZW1lbnQpCisgICAgICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJl
bW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgfQorCisgICAgaWYgKCFlbGVt
ZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiByZW1vdmVkOworCisgICAgLy8gSWYg
dGhlIG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250
YWluIHJlbGV2YW50CisgICAgLy8gc3R5bGVzIHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8
YiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQnPikKKyAgICBpZiAocmVtb3ZlSFRNTEZvbnRTdHls
ZShzdHlsZSwgZWxlbWVudCwgbW9kZSkpCisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgIGlm
IChyZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLCBlbGVtZW50LCBtb2RlKSkKKyAg
ICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBlbGVt
ZW50LCBtb2RlKSkKKyAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisKKyAgICByZXR1cm4gcmVtb3Zl
ZDsKK30KKwogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJ
ZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKIHsKICAgICBib29sIHJlbW92
ZU5vZGUgPSBmYWxzZTsKQEAgLTEyMDAsNjUgKzEyNDAsODQgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cmVwbGFjZVdpdGhTcGFuTwogICAgIH0KIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUs
IEhUTUxFbGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZv
bnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBl
bGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsK
ICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShmb250VGFn
KSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0clRvUmVtb3Zl
ID0gMDsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
LCBjb2xvckF0dHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRGYW1pbHk6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0
ZShlbGVtLCBmYWNlQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJp
YnV0ZShlbGVtLCBzaXplQXR0cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICAgICAgICAgIGF0dHJUb1JlbW92ZSA9ICZjb2xvckF0
dHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1p
bHk6CisgICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmZmFjZUF0dHI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgICAgICAgICAgYXR0
clRvUmVtb3ZlID0gJnNpemVBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYXR0clRvUmVtb3ZlKSB7CisgICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChtb2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50KQorICAg
ICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgKmF0dHJUb1JlbW92ZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaXNFbXB0eUZvbnRUYWcoZWxlbSkpCisgICAgaWYg
KGlzRW1wdHlGb250VGFnKGVsZW0pICYmIG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1l
bnQpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisKKyAgICBy
ZXR1cm4gcmVtb3ZlZDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJp
ZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEhUTUxF
bGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJpZGlFbWJl
ZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50
KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKHN0eWxl
KTsKICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0F0dHJpYnV0ZShkaXJB
dHRyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
IXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpICYmICFz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1vZGUgPT0gUmVtb3Zl
Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVs
ZW0sIGRpckF0dHIpOwogCiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3BhbldpdGhv
dXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCiAgICAgaWYgKGlz
VW5zdHlsZWRTdHlsZVNwYW4oZWxlbSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oZWxlbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBI
VE1MRWxlbWVudCogZWxlbSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIElu
bGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFT
U0VSVChlbGVtKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gZWxl
bS0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgaWYgKCFkZWNsKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5k
KCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQpLmlkKCkp
OwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKICAgICAgICAgaWYgKHZhbHVlICYmIChwcm9wZXJ0eUlEICE9IENT
U1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVtKSkpIHsKKyAgICAgICAg
ICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3Bl
cnR5KGRlY2wsIHByb3BlcnR5SUQpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlVbmljb2RlQmlkaSAmJiAhZGVjbC0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eURpcmVjdGlvbikuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5
KGRlY2wsIENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKQEAgLTEyNzEsNiArMTMzMCw4IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEMKIAogICAgIGlmIChpc1NwYW5XaXRo
b3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbihlbGVtKSkKICAgICAgICAgcmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKKworICAgIHJldHVybiByZW1vdmVkOwogfQogCiBz
dGF0aWMgYm9vbCBoYXNUZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vZGUgKm5vZGUpCkBAIC0xNDcy
LDE5ICsxNTMzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAog
ICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpOwogICAgICAgICAgICAgTm9kZSogcHJldiA9IGVsZW0tPnRyYXZlcnNlUHJldmlvdXNO
b2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBOb2RlKiBuZXh0ID0gZWxlbS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOwotICAgICAgICAgICAgaWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiBlbGVt
LT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUoKSkpCi0gICAgICAg
ICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKLQotICAgICAgICAg
ICAgaWYgKGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5n
U3R5bGUoZWxlbSwgc3R5bGUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bh
bk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhlbGVtKTsKLQotICAgICAgICAgICAgLy8gSWYg
dGhlIG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGlsbCBjb250
YWluIHJlbGV2YW50Ci0gICAgICAgICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVk
IChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+KQotICAgICAgICAgICAgaWYgKGVs
ZW0tPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxGb250U3R5bGUo
c3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxCaWRpRW1iZWRk
aW5nU3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0
eWxlKHN0eWxlLmdldCgpLCBlbGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUuZ2V0KCksIGVsZW0pOwogICAgICAgICAgICAg
aWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocy5ub2RlKCkg
PT0gZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBi
ZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xNTU0LDEwICsx
NjAzLDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoYwogCiB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50ID0gc3Rh
cnQubm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFy
ZW50RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7Ci0KICAg
ICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8g
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKQEAgLTE1
NjYsMTAgKzE2MTEsNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50
ID0gZW5kLm5vZGUoKS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzQ29udGVudEVk
aXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsKLQog
ICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7CiAgICAgc3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKIApAQCAtMTU4MCw2ICsxNjIxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnNwbGl0VGV4dEVsZW1lbnQKICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUs
IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9kZS0+cGFy
ZW50KCksIHByZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEpKTsKIH0KIAorYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIWVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHls
ZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSwgUmVtb3ZlTm9uZSk7Cit9CisK
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5v
ZGUoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2NDMw
NykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIGVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlIHsKIGNsYXNz
IEFwcGx5U3R5bGVDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1Ymxp
YzoKICAgICBlbnVtIEVQcm9wZXJ0eUxldmVsIHsgUHJvcGVydHlEZWZhdWx0LCBGb3JjZUJsb2Nr
UHJvcGVydGllcyB9OworICAgIGVudW0gSW5saW5lU3R5bGVSZW1vdmFsTW9kZSB7IFJlbW92ZUF0
dHJpYnV0ZXNBbmRFbGVtZW50LCBSZW1vdmVOb25lIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBcHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0
dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQogICAgIHsK
QEAgLTcxLDEwICs3MiwxMSBAQCBwcml2YXRlOgogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVy
cwogICAgIGJvb2wgc2hvdWxkUmVtb3ZlVGV4dERlY29yYXRpb25UYWcoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVUb0FwcGx5LCBpbnQgdGV4dERlY29yYXRpb25BZGRlZEJ5VGFnKSBjb25zdDsK
ICAgICBib29sIGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5
aW5nU3R5bGUoSFRNTEVsZW1lbnQqLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAg
IGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJp
YnV0ZXNBbmRFbGVtZW50KTsKICAgICB2b2lkIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRo
b3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxGb250U3R5
bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCopOwotICAgIHZvaWQg
cmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbios
IEhUTUxFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7CisgICAgYm9vbCByZW1vdmVIVE1MRm9udFN0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJl
bW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnQpOworICAgIGJvb2wgcmVtb3Zl
SFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxF
bGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVt
ZW50KTsKKyAgICBib29sIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRl
c0FuZEVsZW1lbnQpOwogICAgIHZvaWQgcmVtb3ZlSW5saW5lU3R5bGUoUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4sIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCk7CiAgICAgYm9vbCBub2RlRnVsbHlTZWxlY3RlZChOb2RlKiwgY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVG
dWxseVVuc2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCkgY29uc3Q7CkBAIC05NSw2ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzcGxp
dFRleHRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwog
ICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOworICAgIGJvb2wgc2hvdWxk
U3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biopOwogICAgIGJvb2wgaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbik7CiAgICAgYm9vbCBtZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGlj
YWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29s
IG1lcmdlRW5kV2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmNwcAkocmV2aXNpb24gNjQzMDcpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTcGxp
dEVsZW1lbnRDb21tYW5kLmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTgsNyArNTksMTEgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpleGVjdXRl
QXBwbHkoKQogICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEuZ2V0KCksIG1fZWxl
bWVudDIuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwor
ICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgYmVjYXVz
ZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50Cisg
ICAgbV9lbGVtZW50Mi0+cmVtb3ZlQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBlYyk7Cisg
ICAgQVNTRVJUKCFlYyk7CisKICAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgbV9lbGVtZW50MS0+
YXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0sIGVjKTsKQEAgLTg4LDYgKzkzLDEwIEBAIHZvaWQgU3Bs
aXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKICAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKGNoaWxkcmVuW2ld
LmdldCgpLCByZWZDaGlsZC5nZXQoKSwgZWMpOwogCisgICAgLy8gUmVjb3ZlciB0aGUgaWQgYXR0
cmlidXRlIG9mIHRoZSBvcmlnaW5hbCBlbGVtZW50LgorICAgIGlmIChtX2VsZW1lbnQxLT5oYXNB
dHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKQorICAgICAgICBtX2VsZW1lbnQyLT5zZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIsIG1fZWxlbWVudDEtPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmlkQXR0cikpOworCiAgICAgbV9lbGVtZW50MS0+cmVtb3ZlKGVjKTsKIH0KIApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdEVsZW1lbnRDb21tYW5kIHNob3VsZG4ndCBiZSBkdXBsaWNhdGluZyBpZCBhdHRyaWJ1
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MTU2
CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGVuc3VyZSBzcGxpdHRpbmcgZWxlbWVudCBkb2Vz
bid0IHByb2R1Y2UgbXVsdGlwbGUgbm9kZXMgd2l0aCB0aGUgc2FtZSBpZC4KKworICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50
eHQ6IFJlbW92ZWQgdGhlIGR1cGxpY2F0aW9uIG9mIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQuCisg
ICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dDogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFw
aC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dDogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9vdXRkZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1
cGxpY2F0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvdW5kby9yZWRvLXN0eWxl
LWV4cGVjdGVkLnR4dDogRWRpdGluZyBkZWxlZ2F0ZXMgY2hhbmdlZC4KKwogMjAxMC0wNy0yOSAg
TWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBPbGl2ZXIgSHVudC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIw
NzM2OS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotVGhpcyB0ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0
byBmbGF0dGVuIGEgbGlzdCBjb250YWluaW5nIGEgc3ViLWxpc3QgYXQgdGhlIGVuZC4gWW91IHNo
b3VsZG4ndCBnZXQgYSBjcmFzaCBhbmQgdGhlcmUgc2hvdWxkIGJlIGEgc2luZ2xlIGxldmVsIGxp
c3QgYmVsb3cuCitUaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHN3aXRjaGlu
ZyBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQuIFlvdSBzaG91bGRuJ3Qg
Z2V0IGEgY3Jhc2guIFRoaXMgdGVzdCB1c2VkIHRvIGZsYXR0ZW4gdGhlIGxpc3QgYnV0IHRoaXMg
YmVoYXZpb3IgaXMgY29ycmVjdGVkIGluIHRoZSBidWcgNDMxMTYuCiAKIE9uZQogVHdvCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAkocmV2aXNp
b24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLTxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jh
c2ggd2hlbiB0cnlpbmcgdG8gZmxhdHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0
IHRoZSBlbmQuIFlvdSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNob3VsZCBiZSBh
IHNpbmdsZSBsZXZlbCBsaXN0IGJlbG93LjwvcD4KKzxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2gg
d2hlbiB0cnlpbmcgdG8gc3dpdGNoaW5nIGEgbGlzdCBjb250YWluaW5nIGEgc3ViLWxpc3QgYXQg
dGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaC4gVGhpcyB0ZXN0IHVzZWQgdG8gZmxh
dHRlbiB0aGUgbGlzdCBidXQgdGhpcyBiZWhhdmlvciBpcyBjb3JyZWN0ZWQgaW4gdGhlIGJ1ZyA0
MzExNi48L3A+CiA8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PG9sPjxsaT5P
bmU8L2xpPjxsaT5Ud288L2xpPjx1bD48bGk+VGhyZWU8L2xpPjxsaT5Gb3VyPC9saT48L2Rpdj4K
IDxwIGlkPSJjb25zb2xlIj48L3A+CiAKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVv
dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDQgKzQsNCBAQCBoZWxsbwogd29ybGQKIHdlYmtpdAogaXMgZ3JlYXQK
LTxibG9ja3F1b3RlIGlkPSJvdXRlciI+IGhlbGxvIDxibG9ja3F1b3RlIGlkPSJpbm5lciI+IHdv
cmxkPGJyPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtp
dC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBu
b25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZSBpZD0ib3V0ZXIiPjxibG9ja3F1b3RlIGlk
PSJpbm5lciI+IHdlYmtpdCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48
YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBpcyBncmVhdCA8L2Jsb2NrcXVvdGU+Cis8YmxvY2txdW90
ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3b3JsZDxicj48L2Js
b2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJs
b2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGlu
ZzogMHB4OyI+PGJsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IHdlYmtpdCA8L2Jsb2NrcXVvdGU+PC9i
bG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZT4gaXMgZ3JlYXQgPC9ibG9ja3F1b3Rl
PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2lu
ZGVudC1wcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDMwNykKKysrIExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDExICsyNyw5IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwgICAgICAgICBjbGFzcz0id2Vi
a2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQw
cHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKIHwgICAgICAgICA8cHJlPgotfCAgICAg
ICAgICAgaWQ9InByZS1iYXNpYyIKIHwgICAgICAgICAgICJsaW5lIHRocmVlCiAiCiB8ICAgICAg
ICAgPHByZT4KLXwgICAgICAgICAgIGlkPSJwcmUtYmFzaWMiCiB8ICAgICAgICAgICAibGluZSBm
b3VyIgogfCAgICAgICAiCiAKQEAgLTY4LDExICs2Niw5IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwg
ICAgICAgICAgICAgICAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCiB8ICAgICAg
ICAgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRp
bmc6IDBweDsiCiB8ICAgICAgICAgICAgICAgICA8cHJlPgotfCAgICAgICAgICAgICAgICAgICBp
ZD0icHJlLXRhYmxlIgogfCAgICAgICAgICAgICAgICAgICAidGFibGUgdHdvCiAiCiB8ICAgICAg
ICAgICAgICAgICA8cHJlPgotfCAgICAgICAgICAgICAgICAgICBpZD0icHJlLXRhYmxlIgogfCAg
ICAgICAgICAgICAgICAgICAidGFibGUgdGhyZWU8I3NlbGVjdGlvbi1mb2N1cz4iCiB8ICAgICAg
ICAgICAgIDx0ZD4KIHwgICAgICAgICAgICAgICAicmlnaHQgY2VsbCIKSW5kZXg6IExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2tx
dW90ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2lu
ZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0yLDQgKzIsNCBAQCBUaGlzIHRlc3RzIGluZGVudGluZyB0aGUgc2Vjb25kIHBh
cmFncmFwCiAKIGhlbGxvCiB3b3JsZAotPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBoZWxsbzxicj48
L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIg
c3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48
YmxvY2txdW90ZSBpZD0idGVzdCI+IHdvcmxkIDwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+Cis8
YmxvY2txdW90ZSBpZD0idGVzdCI+IGhlbGxvPGJyPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBj
bGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4
OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPiB3b3JsZCA8L2Jsb2Nr
cXVvdGU+PC9ibG9ja3F1b3RlPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9vdXRkZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9vdXRkZW50LXJlZ3VsYXItYmxvY2txdW90
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MzA3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9vdXRkZW50LXJlZ3VsYXItYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTQsNCArNCw0IEBAIG9uZQogdHdvCiB0aHJlZQogQmVmb3JlOiA8YmxvY2tx
dW90ZSBpZD0idGVzdCI+b25lPGJyPnR3bzxicj50aHJlZTwvYmxvY2txdW90ZT4KLUFmdGVyOiA8
YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJsb2NrcXVv
dGUgaWQ9InRlc3QiPnRocmVlPC9ibG9ja3F1b3RlPgorQWZ0ZXI6IDxibG9ja3F1b3RlIGlkPSJ0
ZXN0Ij5vbmU8YnI+PC9ibG9ja3F1b3RlPnR3bzxicj48YmxvY2txdW90ZT50aHJlZTwvYmxvY2tx
dW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1k
dXBsaWNhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zdHlsZS9zcGxpdC1lbGVtZW50LWlkLWR1cGxpY2F0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBs
aWNhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGhpcyB0
ZXN0cyBzcGxpdHRpbmcgYSBiIGVsZW1lbnQgd2l0aCBpZCBhdHRyaWJ1dGUgYnkgdW5ib2xkaW5n
IHRoZSB0ZXh0IGluc2lkZSBhbmQgZW5zdXJlcyB0aGF0IHNwbGl0dGluZyBlbGVtZW50IGRvZXNu
J3QgY3JlYXRlIHR3byBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGlkLgorCitGQUlMRUQ6IGV4cGVj
dGVkIHRvIGZpbmQgZXhhY3RseSBub2RlIHdpdGggdGhlIGlkICd0ZXN0JyBhZnRlciByZW1vdmlu
ZyBhbmNob3IgYnV0IGZvdW5kIDMgbm9kZXMKK1BBU1M6IG91dGRlbnRpbmcKK1BBU1M6IHVubGlz
dGlmeWluZworCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQt
aWQtZHVwbGljYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0
eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc3BsaXQtZWxlbWVudC1pZC1kdXBsaWNhdGlvbi5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8Ym9keT4KKzxkaXYgaWQ9ImRpdiIgY29u
dGVudGVkaXRhYmxlPgorPGEgaHJlZj0iaHR0cDovL3dlYmtpdC5vcmcvIiBpZD0iYW5jaG9yX3Rl
c3QiPmhlbGxvPGk+d29ybGQ8L2k+d2Via2l0PGI+cm9ja3M8L2I+PGVtPmJlY2F1c2Ugb2YgeW91
PC9lbT48L2E+Cis8YmxvY2txdW90ZSBpZD0iaW5kZW50X3Rlc3QiPmhlbGxvPHA+d29ybGQ8L3A+
PHA+d2Via2l0PC9wPjxwPnJvY2tzPC9wPjxwPmJlY2F1c2Ugb2YgeW91PC9wPjwvYmxvY2txdW90
ZT4KKzx1bCBpZD0ibGlzdF90ZXN0Ij48bGk+aGVsbG88L2xpPjxsaT53b3JsZDwvbGk+PGxpPndl
YmtpdDwvbGk+PGxpPnJvY2tzPC9saT48bGk+YmVjYXVzZSBvZiB5b3U8L2xpPjwvdWw+Cis8L2Rp
dj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBjb3VudE5vZGVzV2l0
aElkKG5vZGUsIGlkKQoreworICAgIHZhciBjb3VudCA9IChub2RlLmlkID09IGlkID8gMSA6IDAp
OworCisgICAgZm9yICh2YXIgaSA9IDA7IG5vZGUuY2hpbGROb2RlcyAmJiBpIDwgbm9kZS5jaGls
ZE5vZGVzLmxlbmd0aDsgaSsrKQorICAgICAgICBjb3VudCArPSBjb3VudE5vZGVzV2l0aElkKG5v
ZGUuY2hpbGROb2Rlc1tpXSwgaWQpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCitmdW5jdGlv
biBleGVjQ29tbWFuZEFuZENoZWNrRHVwbGljYXRpb24oY29tbWFuZCwgaWQsIG5hbWUpCit7Cisg
ICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZXRTdGFy
dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCksIDIpOworICAgIHJhbmdlLnNldEVuZChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCksIDQpOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5y
ZW1vdmVBbGxSYW5nZXMoKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFu
Z2UpOworCisgICAgYmVmb3JlID0gY291bnROb2Rlc1dpdGhJZChkb2N1bWVudC5ib2R5LCBpZCk7
CisgICAgaWYgKGJlZm9yZSAhPSAxKQorICAgICAgICByZXR1cm4gIkZBSUxFRDogZXhwZWN0ZWQg
dG8gZmluZCBleGFjdGx5IG5vZGUgd2l0aCB0aGUgaWQgJ3Rlc3QnIGJlZm9yZSAiICsgbmFtZSAr
ICIgYnV0IGZvdW5kICIgKyBiZWZvcmUgKyAiIG5vZGVzLjxicj4iOworCisgICAgZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIG51bGwpOworCisgICAgYWZ0ZXIgPSBjb3VudE5v
ZGVzV2l0aElkKGRvY3VtZW50LmJvZHksIGlkKTsKKyAgICBpZiAoYWZ0ZXIgIT0gMSkKKyAgICAg
ICAgcmV0dXJuICJGQUlMRUQ6IGV4cGVjdGVkIHRvIGZpbmQgZXhhY3RseSBub2RlIHdpdGggdGhl
IGlkICd0ZXN0JyBhZnRlciAiICsgbmFtZSArICIgYnV0IGZvdW5kICIgKyBhZnRlciArICIgbm9k
ZXM8YnI+IjsKKyAgICByZXR1cm4gIlBBU1M6ICIgKyBuYW1lICsgIjxicj4iOworfQorCitkb2N1
bWVudC5ib2R5LmlubmVySFRNTCArPSAiVGhpcyB0ZXN0cyBzcGxpdHRpbmcgYSBiIGVsZW1lbnQg
d2l0aCBpZCBhdHRyaWJ1dGUgYnkgdW5ib2xkaW5nIHRoZSB0ZXh0IGluc2lkZSBhbmQgIgorKyAi
ZW5zdXJlcyB0aGF0IHNwbGl0dGluZyBlbGVtZW50IGRvZXNuJ3QgY3JlYXRlIHR3byBlbGVtZW50
cyB3aXRoIHRoZSBzYW1lIGlkLjxicj48YnI+IjsKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9
IGV4ZWNDb21tYW5kQW5kQ2hlY2tEdXBsaWNhdGlvbigndW5saW5rJywgJ2FuY2hvcl90ZXN0Jywg
J3JlbW92aW5nIGFuY2hvcicpOworZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gZXhlY0NvbW1h
bmRBbmRDaGVja0R1cGxpY2F0aW9uKCdvdXRkZW50JywgJ2luZGVudF90ZXN0JywgJ291dGRlbnRp
bmcnKTsKK2RvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IGV4ZWNDb21tYW5kQW5kQ2hlY2tEdXBs
aWNhdGlvbignaW5zZXJ0dW5vcmRlcmVkbGlzdCcsICdsaXN0X3Rlc3QnLCAndW5saXN0aWZ5aW5n
Jyk7Citkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNjQzMDcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVk
by1zdHlsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkgKzEsMjUgQEAKIEVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2UgZnJvbSAw
IG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6
V2ViVmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0
aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENo
YW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2Yg
I3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAw
IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxl
Y3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246
V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlv
bgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0
ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdl
IGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0
aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
Tm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNCBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRp
b24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdl
IGZyb20gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJh
bmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCg==
</data>
<flag name="review"
          id="51297"
          type_id="1"
          status="-"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63113</attachid>
            <date>2010-07-30 15:43:43 -0700</date>
            <delta_ts>2010-07-30 16:28:56 -0700</delta_ts>
            <desc>fixed per ojan&apos;s comments</desc>
            <filename>fix27156g</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDctMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IAorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVs
ZW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSByZW1vdmVJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKTogQWRkZWQgZG9udFJl
bW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlk
aUVtYmVkZGluZ1N0eWxlKTogQWRkZWQgZG9udFJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBDYWxs
cyByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KTogUmVtb3ZlZCB0aGUgY2FsbCB0
byBzcGxpdFRleHRBdFN0YXJ0LgorICAgICAgICBCcmFuY2hpbmcgaXMgbm93IGRvbmUgaW4gYXBw
bHlJbmxpbmVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRFbmQpOiBEaXR0byBmb3Igc3BsaXRUZXh0QXRFbmQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRD
b21tYW5kOjpleGVjdXRlQXBwbHkpOiBEZWxldGVzIHRoZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUg
c2Vjb25kIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5kOjpk
b1VuYXBwbHkpOiBSZWNvdmVycyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBzZWNvbmQgZWxlbWVu
dC4KKwogMjAxMC0wNy0zMCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjQzNjIpCisrKyBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTAsNyArOTEwLDEwIEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0
aGUgc3RhcnQgbm9kZSBhbmQgY29udGFpbmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gc3Rh
cnRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3BsaXRTdGFydCA9IGlzVmFsaWRDYXJldFBvc2l0
aW9uSW5UZXh0Tm9kZShzdGFydCk7CiAgICAgaWYgKHNwbGl0U3RhcnQpIHsKLSAgICAgICAgc3Bs
aXRUZXh0RWxlbWVudEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChzaG91bGRTcGxp
dFRleHRFbGVtZW50KHN0YXJ0Lm5vZGUoKS0+cGFyZW50RWxlbWVudCgpLCBzdHlsZSkpCisgICAg
ICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRTdGFydChzdGFydCwgZW5kKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc3BsaXRUZXh0QXRTdGFydChzdGFydCwgZW5kKTsKICAgICAgICAgc3Rh
cnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAg
ICAgIHN0YXJ0RHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoc3Rh
cnQubm9kZSgpKTsKQEAgLTkxOSw3ICs5MjIsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIHNwbGl0IHRoZSBlbmQgbm9kZSBhbmQgY29udGFpbmlu
ZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbnNpZGUgb2YgaXQKICAgICBib29sIHNw
bGl0RW5kID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGVuZCk7CiAgICAgaWYgKHNw
bGl0RW5kKSB7Ci0gICAgICAgIHNwbGl0VGV4dEVsZW1lbnRBdEVuZChzdGFydCwgZW5kKTsKKyAg
ICAgICAgaWYgKHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoZW5kLm5vZGUoKS0+cGFyZW50RWxlbWVu
dCgpLCBzdHlsZSkpCisgICAgICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVu
ZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwbGl0VGV4dEF0RW5kKHN0YXJ0LCBlbmQp
OwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9z
aXRpb24oKTsKICAgICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNwYW5BbmNlc3Rv
ckZvck5vZGUoZW5kLm5vZGUoKSk7CkBAIC0xMTc2LDYgKzExODIsNDAgQEAgYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6aW1wbGljaXRseVN0eWxlZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9v
bCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVT
dHlsZVJlbW92YWxNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBBU1NFUlQo
ZWxlbWVudCk7CisKKyAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKKworICAgIGlmIChtX3N0eWxl
ZElubGluZUVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShtX3N0eWxlZElubGluZUVsZW1l
bnQtPnRhZ1FOYW1lKCkpKSB7CisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICBpZiAo
bW9kZSA9PSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpCisgICAgICAgICAgICByZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgIH0KKworICAgIGlmIChpbXBsaWNp
dGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKGVsZW1lbnQs
IHN0eWxlKSkgeworICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vZGUgPT0g
UmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKQorICAgICAgICAgICAgcmVwbGFjZVdpdGhTcGFu
T3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKGVsZW1lbnQpOworICAgIH0KKworICAgIGlmICgh
ZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gcmVtb3ZlZDsKKworICAgIC8v
IElmIHRoZSBub2RlIHdhcyBjb252ZXJ0ZWQgdG8gYSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwg
Y29udGFpbiByZWxldmFudAorICAgIC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUu
Zy4gPGIgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xkJz4pCisgICAgaWYgKHJlbW92ZUhUTUxGb250
U3R5bGUoc3R5bGUsIGVsZW1lbnQsIG1vZGUpKQorICAgICAgICByZW1vdmVkID0gdHJ1ZTsKKyAg
ICBpZiAocmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShzdHlsZSwgZWxlbWVudCwgbW9kZSkp
CisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwg
ZWxlbWVudCwgbW9kZSkpCisgICAgICAgIHJlbW92ZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHJl
bW92ZWQ7Cit9CisKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk9yUmVt
b3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComIGVsZW0pCiB7CiAgICAgYm9vbCBy
ZW1vdmVOb2RlID0gZmFsc2U7CkBAIC0xMjAwLDY1ICsxMjQwLDg0IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk8KICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0
eWxlLCBIVE1MRWxlbWVudCAqZWxlbSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhU
TUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVu
dCogZWxlbSwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzdHls
ZSk7CiAgICAgQVNTRVJUKGVsZW0pOwogCiAgICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoZm9u
dFRhZykpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJUb1Jl
bW92ZSA9IDA7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUo
ZWxlbSwgY29sb3JBdHRyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRy
aWJ1dGUoZWxlbSwgZmFjZUF0dHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVB
dHRyaWJ1dGUoZWxlbSwgc2l6ZUF0dHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmY29s
b3JBdHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
RmFtaWx5OgorICAgICAgICAgICAgYXR0clRvUmVtb3ZlID0gJmZhY2VBdHRyOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAgICAgICAgICAg
IGF0dHJUb1JlbW92ZSA9ICZzaXplQXR0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGF0dHJUb1JlbW92ZSkgeworICAgICAgICAgICAgcmVtb3ZlZCA9IHRy
dWU7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMp
CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCAqYXR0clRvUmVtb3Zl
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpc0VtcHR5Rm9udFRhZyhlbGVtKSkKKyAg
ICBpZiAoaXNFbXB0eUZvbnRUYWcoZWxlbSkgJiYgbW9kZSA9PSBSZW1vdmVBdHRyaWJ1dGVzQW5k
RWxlbWVudHMpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7CisK
KyAgICByZXR1cm4gcmVtb3ZlZDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
SFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUs
IEhUTUxFbGVtZW50ICplbGVtKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJp
ZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxF
bGVtZW50KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJU
KHN0eWxlKTsKICAgICBBU1NFUlQoZWxlbSk7CiAKICAgICBpZiAoIWVsZW0tPmhhc0F0dHJpYnV0
ZShkaXJBdHRyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkp
ICYmICFzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1vZGUgPT0g
UmVtb3ZlTm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZW1vdmVOb2RlQXR0cmli
dXRlKGVsZW0sIGRpckF0dHIpOwogCiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIGlzU3Bh
bldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuPyAgTmVlZCBhIHRlc3QuCiAgICAg
aWYgKGlzVW5zdHlsZWRTdHlsZVNwYW4oZWxlbSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4oZWxlbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBIVE1MRWxlbWVudCogZWxlbSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNT
U1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVs
ZW0sIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwog
ICAgIEFTU0VSVChlbGVtKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNs
ID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgaWYgKCFkZWNsKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwog
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHls
ZS0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQp
LmlkKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICAgICAgaWYgKHZhbHVlICYmIChwcm9wZXJ0eUlE
ICE9IENTU1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVtKSkpIHsKKyAg
ICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3Zl
Tm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJlbW92ZUNT
U1Byb3BlcnR5KGRlY2wsIHByb3BlcnR5SUQpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5SUQg
PT0gQ1NTUHJvcGVydHlVbmljb2RlQmlkaSAmJiAhZGVjbC0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQ
cm9wZXJ0eURpcmVjdGlvbikuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJlbW92ZUNTU1By
b3BlcnR5KGRlY2wsIENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKQEAgLTEyNzEsNiArMTMzMCw4IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEMKIAogICAgIGlmIChpc1Nw
YW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3BhbihlbGVtKSkKICAgICAgICAgcmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKKworICAgIHJldHVybiByZW1vdmVkOwog
fQogCiBzdGF0aWMgYm9vbCBoYXNUZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vZGUgKm5vZGUpCkBA
IC0xNDcyLDE5ICsxNTMzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5l
U3R5bAogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KG5vZGUpOwogICAgICAgICAgICAgTm9kZSogcHJldiA9IGVsZW0tPnRyYXZlcnNlUHJl
dmlvdXNOb2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBOb2RlKiBuZXh0ID0gZWxlbS0+dHJh
dmVyc2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgaWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAm
JiBlbGVtLT5oYXNUYWdOYW1lKG1fc3R5bGVkSW5saW5lRWxlbWVudC0+dGFnUU5hbWUoKSkpCi0g
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKLQotICAg
ICAgICAgICAgaWYgKGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFw
cGx5aW5nU3R5bGUoZWxlbSwgc3R5bGUuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhlbGVtKTsKLQotICAgICAgICAgICAg
Ly8gSWYgdGhlIG5vZGUgd2FzIGNvbnZlcnRlZCB0byBhIHNwYW4sIHRoZSBzcGFuIG1heSBzdGls
bCBjb250YWluIHJlbGV2YW50Ci0gICAgICAgICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSBy
ZW1vdmVkIChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+KQotICAgICAgICAgICAg
aWYgKGVsZW0tPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxGb250
U3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92ZUhUTUxCaWRp
RW1iZWRkaW5nU3R5bGUoc3R5bGUuZ2V0KCksIGVsZW0pOwotICAgICAgICAgICAgICAgIHJlbW92
ZUNTU1N0eWxlKHN0eWxlLmdldCgpLCBlbGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUuZ2V0KCksIGVsZW0pOwogICAgICAg
ICAgICAgaWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocy5u
b2RlKCkgPT0gZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3Qg
aGF2ZSBiZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xNTU0
LDEwICsxNjAzLDYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoYwog
CiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogcGFyZW50
ID0gc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+cGFyZW50RWxlbWVudCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aXNDb250ZW50
RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHNwbGl0VGV4dEF0U3RhcnQoc3RhcnQsIGVuZCk7
Ci0KICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9k
ZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgVGV4dCogdGV4
dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVD
b250YWluaW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
QEAgLTE1NjYsMTAgKzE2MTEsNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRF
bGVtZW50CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSog
cGFyZW50ID0gZW5kLm5vZGUoKS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzQ29u
dGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5k
KTsKLQogICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7CiAg
ICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKTsKIApAQCAtMTU4MCw2ICsxNjIxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQKICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFy
dE5vZGUsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9k
ZS0+cGFyZW50KCksIHByZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEpKTsKIH0KIAorYm9vbCBBcHBs
eVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFlbGVtZW50IHx8
ICFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgfHwgIWVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSB8
fCAhZWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVu
dChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSwgUmVtb3ZlTm9uZSk7
Cit9CisKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0
Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgTm9kZSogbm9kZSA9IHBvc2l0
aW9uLm5vZGUoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lv
biA2NDM2MikKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIGVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlIHsK
IGNsYXNzIEFwcGx5U3R5bGVDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsK
IHB1YmxpYzoKICAgICBlbnVtIEVQcm9wZXJ0eUxldmVsIHsgUHJvcGVydHlEZWZhdWx0LCBGb3Jj
ZUJsb2NrUHJvcGVydGllcyB9OworICAgIGVudW0gSW5saW5lU3R5bGVSZW1vdmFsTW9kZSB7IFJl
bW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cywgUmVtb3ZlTm9uZSB9OwogCiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8QXBwbHlTdHlsZUNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25D
aGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBsZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkK
ICAgICB7CkBAIC03MSwxMCArNzIsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBzdHlsZS1yZW1vdmFs
IGhlbHBlcnMKICAgICBib29sIHNob3VsZFJlbW92ZVRleHREZWNvcmF0aW9uVGFnKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlVG9BcHBseSwgaW50IHRleHREZWNvcmF0aW9uQWRkZWRCeVRhZykg
Y29uc3Q7CiAgICAgYm9vbCBpbXBsaWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdo
ZW5BcHBseWluZ1N0eWxlKEhUTUxFbGVtZW50KiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
KTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1v
dmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOwogICAgIHZvaWQgcmVwbGFjZVdpdGhTcGFuT3JSZW1v
dmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYpOwotICAgIHZvaWQgcmVtb3ZlSFRN
TEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7Ci0g
ICAgdm9pZCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUNTU1N0eWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsKKyAgICBib29sIHJlbW92ZUhUTUxG
b250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGlu
ZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOworICAgIGJv
b2wgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0
ZXNBbmRFbGVtZW50cyk7CisgICAgYm9vbCByZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92
ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG5vZGVGdWxseVNlbGVjdGVkKE5vZGUq
LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0OwogICAg
IGJvb2wgbm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKQEAgLTk1LDYgKzk3LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVu
dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAg
Ym9vbCBzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqIGVsZW0sIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKik7CiAgICAgYm9vbCBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKTsKICAgICBib29sIG1lcmdlU3RhcnRXaXRoUHJldmlv
dXNJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
OwogICAgIGJvb2wgbWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxl
bWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA2NDM2MikKKysrIFdlYkNvcmUvZWRpdGluZy9TcGxp
dEVsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlNwbGl0RWxlbWVudENvbW1hbmQuaCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01OCw3ICs1OSwxMSBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1h
bmQ6OmV4ZWN1dGVBcHBseSgpCiAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MS5n
ZXQoKSwgbV9lbGVtZW50Mi5nZXQoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
OwotICAgIAorCisgICAgLy8gRGVsZXRlIGlkIGF0dHJpYnV0ZSBmcm9tIHRoZSBzZWNvbmQgZWxl
bWVudCBiZWNhdXNlIHRoZSBzYW1lIGlkIGNhbm5vdCBiZSB1c2VkIGZvciBtb3JlIHRoYW4gb25l
IGVsZW1lbnQKKyAgICBtX2VsZW1lbnQyLT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0
dHIsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKwogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4u
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBt
X2VsZW1lbnQxLT5hcHBlbmRDaGlsZChjaGlsZHJlbltpXSwgZWMpOwpAQCAtODgsNiArOTMsMTAg
QEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb1VuYXBwbHkoKQogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUo
Y2hpbGRyZW5baV0uZ2V0KCksIHJlZkNoaWxkLmdldCgpLCBlYyk7CiAKKyAgICAvLyBSZWNvdmVy
IHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCisgICAgaWYgKG1fZWxl
bWVudDEtPmhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVu
dDItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+Z2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6aWRBdHRyKSk7CisKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwog
fQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDM3NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA3LTMwICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNwbGl0RWxlbWVudENvbW1hbmQgc2hvdWxkbid0IGJlIGR1cGxpY2F0aW5n
IGlkIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjcxNTYKKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gZW5zdXJlIHNwbGl0dGluZyBl
bGVtZW50IGRvZXNuJ3QgcHJvZHVjZSBtdWx0aXBsZSBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLgor
CisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVz
LWV4cGVjdGVkLnR4dDogUmVtb3ZlZCB0aGUgZHVwbGljYXRpb24gb2Ygbm9kZXMgd2l0aCB0aGUg
c2FtZSBpZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0
ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNv
bmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL2V4ZWNDb21tYW5kL291dGRlbnQtcmVndWxhci1ibG9ja3F1b3RlLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRp
b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3NwbGl0LWVs
ZW1lbnQtaWQtZHVwbGljYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRv
L3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0OiBFZGl0aW5nIGRlbGVnYXRlcyBjaGFuZ2VkLgorCiAy
MDEwLTA3LTMwICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQtYmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9j
a3F1b3Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MzYyKQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNCw0ICs0LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQKIGlzIGdy
ZWF0Ci08YmxvY2txdW90ZSBpZD0ib3V0ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0iaW5uZXIi
PiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3
ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRl
cjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48YmxvY2txdW90
ZSBpZD0iaW5uZXIiPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVv
dGU+PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgorPGJsb2Nr
cXVvdGUgaWQ9Im91dGVyIj4gaGVsbG8gPGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+
PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVu
dC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBh
ZGRpbmc6IDBweDsiPjxibG9ja3F1b3RlPjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9ja3F1b3Rl
PjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwvYmxvY2tx
dW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjQzNjIpCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxMSArMjcsOSBAQCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgY2xhc3M9
IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKIHwgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAg
MCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCiB8ICAgICAgICAgPHByZT4KLXwg
ICAgICAgICAgIGlkPSJwcmUtYmFzaWMiCiB8ICAgICAgICAgICAibGluZSB0aHJlZQogIgogfCAg
ICAgICAgIDxwcmU+Ci18ICAgICAgICAgICBpZD0icHJlLWJhc2ljIgogfCAgICAgICAgICAgImxp
bmUgZm91ciIKIHwgICAgICAgIgogCkBAIC02OCwxMSArNjYsOSBAQCBkb2VzIG5vdCBjcmFzaC4i
CiB8ICAgICAgICAgICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAg
ICAgICAgICAgICAgICAgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBw
YWRkaW5nOiAwcHg7IgogfCAgICAgICAgICAgICAgICAgPHByZT4KLXwgICAgICAgICAgICAgICAg
ICAgaWQ9InByZS10YWJsZSIKIHwgICAgICAgICAgICAgICAgICAgInRhYmxlIHR3bwogIgogfCAg
ICAgICAgICAgICAgICAgPHByZT4KLXwgICAgICAgICAgICAgICAgICAgaWQ9InByZS10YWJsZSIK
IHwgICAgICAgICAgICAgICAgICAgInRhYmxlIHRocmVlPCNzZWxlY3Rpb24tZm9jdXM+IgogfCAg
ICAgICAgICAgICA8dGQ+CiB8ICAgICAgICAgICAgICAgInJpZ2h0IGNlbGwiCkluZGV4OiBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJs
b2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvaW5kZW50LXNlY29uZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDY0MzYyKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFwaC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMiw0ICsyLDQgQEAgVGhpcyB0ZXN0cyBpbmRlbnRpbmcgdGhlIHNlY29u
ZCBwYXJhZ3JhcAogCiBoZWxsbwogd29ybGQKLTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88
YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVv
dGUiIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4
OyI+PGJsb2NrcXVvdGUgaWQ9InRlc3QiPiB3b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3Rl
PgorPGJsb2NrcXVvdGUgaWQ9InRlc3QiPiBoZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVv
dGUgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAg
NDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9i
bG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2Nr
cXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDM2MikKKysrIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC00LDQgKzQsNCBAQCBvbmUKIHR3bwogdGhyZWUKIEJlZm9yZTogPGJs
b2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj50d288YnI+dGhyZWU8L2Jsb2NrcXVvdGU+Ci1BZnRl
cjogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxicj48L2Jsb2NrcXVvdGU+dHdvPGJyPjxibG9j
a3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwvYmxvY2txdW90ZT4KK0FmdGVyOiA8YmxvY2txdW90ZSBp
ZD0idGVzdCI+b25lPGJyPjwvYmxvY2txdW90ZT50d288YnI+PGJsb2NrcXVvdGU+dGhyZWU8L2Js
b2NrcXVvdGU+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5
bGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NDM2MikKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
dW5kby9yZWRvLXN0eWxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyOSArMSwy
NSBAQAogRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudAogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2lu
RWRpdGluZzpXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246
V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9t
IDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpG
QUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBz
dGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0
eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
bgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90
aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAw
IG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
MiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3Rp
bGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpy
YW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmlj
YXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA0IG9mICN0ZXh0
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlk
Q2hhbmdlTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxl
Y3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63121</attachid>
            <date>2010-07-30 16:28:56 -0700</date>
            <delta_ts>2010-07-30 16:43:05 -0700</delta_ts>
            <desc>added shouldRemoveInlineStyleFromElement</desc>
            <filename>fix27156h</filename>
            <type>text/plain</type>
            <size>25827</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDctMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZCBzaG91bGRuJ3QgYmUgZHVwbGljYXRpbmcgaWQgYXR0cmlidXRlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE1NgorCisg
ICAgICAgIE1vZGlmaWVkIFNwbGl0RWxlbWVudENvbW1hbmQgdG8gZGVsZXRlIHRoZSBpZCBhdHRy
aWJ1dGUgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgd2hlbiBzcGxpdHRpbmcgYW4gZWxlbWVudC4K
KyAgICAgICAgU2luY2UgdGhpcyBjYXVzZXMgV2ViS2l0IG5vdCB0byBtZXJnZSBzcGxpdCBlbGVt
ZW50cywgYWRkZWQgc2hvdWxkU3BsaXRFbGVtZW50IHRvIEFwcGx5U3R5bGVDb21tYW5kIHdoaWNo
CisgICAgICAgIGRldGVybWluZXMgdGhlIG5lY2Vzc2l0eSBvZiBzcGxpdHRpbmcgdGhlIGVsZW1l
bnQuCisKKyAgICAgICAgVG8gc2hhcmUgY29kZSBiZXR3ZWVuIHNob3VsZFNwbGl0RWxlbWVudCBh
bmQgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCAoZXh0cmFjdGVkIGZyb20gYXBwbHlJbmxp
bmVTdHlsZSkKKyAgICAgICAgZG9udFJlbW92ZSB3YXMgYWRkZWQgYXMgdGhlIDNyZCBhcmd1bWVu
dCB0byByZW1vdmVIVE1MRm9udFN0eWxlLCByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlLCBh
bmQgcmVtb3ZlQ1NTU3R5bGUuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zdHlsZS9zcGxpdC1l
bGVtZW50LWlkLWR1cGxpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZSk6IEFkZGVkIDNyZCBhcmd1bWVudCBmb3IgcmVtb3ZlQ1NTU3R5bGUuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IENhbGxz
IHNob3VsZFNwbGl0RWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KTogRXh0cmFjdGVkIGZyb20gcmVtb3ZlSW5s
aW5lU3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkUmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6IElubGluZSBoZWxwZXIgZm9yIHJlbW92ZUlubGlu
ZVN0eWxlRnJvbUVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6
cmVtb3ZlSFRNTEZvbnRTdHlsZSk6IEFkZGVkIGRvbnRSZW1vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHlsZSk6IEFkZGVk
IGRvbnRSZW1vdmUuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
Q1NTU3R5bGUpOiBBZGRlZCBkb250UmVtb3ZlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKTogQ2FsbHMgcmVtb3ZlSW5saW5lU3R5bGVGcm9t
RWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRF
bGVtZW50QXRTdGFydCk6IFJlbW92ZWQgdGhlIGNhbGwgdG8gc3BsaXRUZXh0QXRTdGFydC4KKyAg
ICAgICAgQnJhbmNoaW5nIGlzIG5vdyBkb25lIGluIGFwcGx5SW5saW5lU3R5bGUuCisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKTogRGl0
dG8gZm9yIHNwbGl0VGV4dEF0RW5kLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OnNob3VsZFNwbGl0RWxlbWVudCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFwcGx5KTog
RGVsZXRlcyB0aGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50LgorICAgICAg
ICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KTogUmVjb3ZlcnMgdGhl
IGlkIGF0dHJpYnV0ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQuCisKIDIwMTAtMDctMzAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDY0MzYyKQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEwLDcgKzkxMCwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gc3BsaXQgdGhlIHN0YXJ0IG5vZGUgYW5kIGNvbnRh
aW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0cyBpbnNpZGUgb2YgaXQKICAgICBi
b29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoc3RhcnQpOwog
ICAgIGlmIChzcGxpdFN0YXJ0KSB7Ci0gICAgICAgIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KHN0
YXJ0LCBlbmQpOworICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChzdGFydC5ub2Rl
KCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAgICAgICAgc3BsaXRUZXh0RWxlbWVu
dEF0U3RhcnQoc3RhcnQsIGVuZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwbGl0VGV4
dEF0U3RhcnQoc3RhcnQsIGVuZCk7CiAgICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgICAgICBzdGFydER1bW15U3BhbkFuY2Vz
dG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0YXJ0Lm5vZGUoKSk7CkBAIC05MTksNyAr
OTIyLDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAv
LyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0
aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAgYm9vbCBzcGxpdEVuZCA9IGlzVmFsaWRDYXJldFBv
c2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAgIGlmIChzcGxpdEVuZCkgewotICAgICAgICBzcGxp
dFRleHRFbGVtZW50QXRFbmQoc3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChzaG91bGRTcGxpdFRl
eHRFbGVtZW50KGVuZC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUpKQorICAgICAgICAg
ICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0YXJ0LCBlbmQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzcGxpdFRleHRBdEVuZChzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFy
dFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZER1
bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGVuZC5ub2RlKCkpOwpA
QCAtMTE3Niw2ICsxMTgyLDQwIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmltcGxpY2l0bHlT
dHlsZWQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlKQor
eworICAgIEFTU0VSVChzdHlsZSk7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisgICAgYm9vbCBy
ZW1vdmVkID0gZmFsc2U7CisKKyAgICBpZiAobV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50LT50YWdRTmFtZSgpKSkgeworICAg
ICAgICByZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRl
c0FuZEVsZW1lbnRzKQorICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihl
bGVtZW50KTsKKyAgICB9CisKKyAgICBpZiAoaW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRC
ZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShlbGVtZW50LCBzdHlsZSkpIHsKKyAgICAgICAgcmVt
b3ZlZCA9IHRydWU7CisgICAgICAgIGlmIChtb2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVt
ZW50cykKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmli
dXRlcyhlbGVtZW50KTsKKyAgICB9CisKKyAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CisKKyAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVy
dGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKKyAgICAv
LyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVkIChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdo
dDogYm9sZCc+KQorICAgIGlmIChyZW1vdmVIVE1MRm9udFN0eWxlKHN0eWxlLCBlbGVtZW50LCBt
b2RlKSkKKyAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgaWYgKHJlbW92ZUhUTUxCaWRpRW1i
ZWRkaW5nU3R5bGUoc3R5bGUsIGVsZW1lbnQsIG1vZGUpKQorICAgICAgICByZW1vdmVkID0gdHJ1
ZTsKKyAgICBpZiAocmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGVsZW1lbnQsIG1vZGUpKQorICAgICAg
ICByZW1vdmVkID0gdHJ1ZTsKKworICAgIHJldHVybiByZW1vdmVkOworfQorCiB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpyZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMo
SFRNTEVsZW1lbnQqJiBlbGVtKQogewogICAgIGJvb2wgcmVtb3ZlTm9kZSA9IGZhbHNlOwpAQCAt
MTIwMCw2NSArMTI0MCw4NCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZXBsYWNlV2l0aFNw
YW5PCiAgICAgfQogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0
eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwgSFRNTEVsZW1lbnQgKmVsZW0p
Citib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0eWxlKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIElubGluZVN0eWxlUmVt
b3ZhbE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsK
IAogICAgIGlmICghZWxlbS0+aGFzTG9jYWxOYW1lKGZvbnRUYWcpKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHJlbW92ZWQgPSBm
YWxzZTsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gc3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyVG9SZW1vdmUgPSAwOwogICAgICAgICBzd2l0
Y2ggKCgqaXQpLmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAg
ICAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW0sIGNvbG9yQXR0cik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWls
eToKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW0sIGZhY2VBdHRyKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
U2l6ZToKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW0sIHNpemVBdHRy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9y
OgorICAgICAgICAgICAgYXR0clRvUmVtb3ZlID0gJmNvbG9yQXR0cjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICAgICAgICAgIGF0
dHJUb1JlbW92ZSA9ICZmYWNlQXR0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAmc2l6ZUF0
dHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdHRyVG9S
ZW1vdmUpIHsKKyAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1v
ZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKQorICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoZWxlbSwgKmF0dHJUb1JlbW92ZSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoaXNFbXB0eUZvbnRUYWcoZWxlbSkpCisgICAgaWYgKGlzRW1wdHlGb250VGFnKGVs
ZW0pICYmIG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKQogICAgICAgICByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworCisgICAgcmV0dXJuIHJlbW92ZWQ7CiB9
CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlLCBIVE1MRWxlbWVudCAqZWxlbSkKK2Jv
b2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbSwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGVs
ZW0pOwogCiAgICAgaWYgKCFlbGVtLT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSAmJiAhc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCisgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCBkaXJBdHRyKTsKIAog
ICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5z
dHlsZVN0eWxlU3Bhbj8gIE5lZWQgYSB0ZXN0LgogICAgIGlmIChpc1Vuc3R5bGVkU3R5bGVTcGFu
KGVsZW0pKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0
eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0p
Citib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92YWxN
b2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoZWxlbSk7CiAKICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IGVsZW0tPmlubGluZVN0eWxlRGVj
bCgpOwogICAgIGlmICghZGVjbCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQg
PSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPigoKml0KS5pZCgpKTsKICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGRlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7
CiAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eVdoaXRlU3Bh
Y2UgfHwgIWlzVGFiU3Bhbk5vZGUoZWxlbSkpKSB7CisgICAgICAgICAgICByZW1vdmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShkZWNsLCBwcm9wZXJ0
eUlEKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5VW5pY29kZUJp
ZGkgJiYgIWRlY2wtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShkZWNsLCBDU1NQcm9wZXJ0
eURpcmVjdGlvbik7CkBAIC0xMjcxLDYgKzEzMzAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDU1NTdHlsZShDCiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVu
c3R5bGVTdHlsZVNwYW4oZWxlbSkpCiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oZWxlbSk7CisKKyAgICByZXR1cm4gcmVtb3ZlZDsKIH0KIAogc3RhdGljIGJvb2wgaGFzVGV4
dERlY29yYXRpb25Qcm9wZXJ0eShOb2RlICpub2RlKQpAQCAtMTQ3MiwxOSArMTUzMyw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKICAgICAgICAg
ICAgIE5vZGUqIHByZXYgPSBlbGVtLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcigpOwog
ICAgICAgICAgICAgTm9kZSogbmV4dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAg
ICAgICAgIGlmIChtX3N0eWxlZElubGluZUVsZW1lbnQgJiYgZWxlbS0+aGFzVGFnTmFtZShtX3N0
eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkpKQotICAgICAgICAgICAgICAgIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbSk7Ci0KLSAgICAgICAgICAgIGlmIChpbXBsaWNpdGx5
U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKGVsZW0sIHN0eWxl
LmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91
dEF0dHJpYnV0ZXMoZWxlbSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252
ZXJ0ZWQgdG8gYSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAotICAg
ICAgICAgICAgLy8gc3R5bGVzIHdoaWNoIG11c3QgYmUgcmVtb3ZlZCAoZS5nLiA8YiBzdHlsZT0n
Zm9udC13ZWlnaHQ6IGJvbGQnPikKLSAgICAgICAgICAgIGlmIChlbGVtLT5pbkRvY3VtZW50KCkp
IHsKLSAgICAgICAgICAgICAgICByZW1vdmVIVE1MRm9udFN0eWxlKHN0eWxlLmdldCgpLCBlbGVt
KTsKLSAgICAgICAgICAgICAgICByZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKHN0eWxlLmdl
dCgpLCBlbGVtKTsKLSAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZS5nZXQoKSwg
ZWxlbSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21F
bGVtZW50KHN0eWxlLmdldCgpLCBlbGVtKTsKICAgICAgICAgICAgIGlmICghZWxlbS0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09IGVsZW0pIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxlY3Rl
ZCwgYW5kIGl0IGlzIGF0IHRoZSBzdGFydApAQCAtMTU1NCwxMCArMTYwMyw2IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGMKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKQogewotICAgIE5vZGUqIHBhcmVudCA9IHN0YXJ0Lm5vZGUoKS0+cGFyZW50
Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSB8fCAh
cGFyZW50LT5wYXJlbnRFbGVtZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBzcGxpdFRleHRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwotCiAgICAgaW50IGVuZE9mZnNldEFk
anVzdG1lbnQgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgOiAwOwogICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4o
c3RhcnQubm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CkBAIC0xNTY2LDEwICsxNjExLDYgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudAogCiB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIE5vZGUqIHBhcmVudCA9IGVuZC5ub2RlKCktPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkg
fHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICAg
ICByZXR1cm4gc3BsaXRUZXh0QXRFbmQoc3RhcnQsIGVuZCk7Ci0KICAgICBUZXh0KiB0ZXh0ID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KGVuZC5ub2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudCh0ZXh0LCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAKQEAgLTE1
ODAsNiArMTYyMSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
CiAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+
bm9kZUluZGV4KCkgKyAxKSk7CiB9CiAKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNw
bGl0VGV4dEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKQoreworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpIHx8ICFlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIWVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCkpOworfQorCiBib29sIEFwcGx5U3R5bGVDb21tYW5k
Ojppc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQogewogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNjQzNjIpCisrKyBXZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBlbnVt
IFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSB7CiBjbGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6IHB1
YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgZW51bSBFUHJvcGVydHlM
ZXZlbCB7IFByb3BlcnR5RGVmYXVsdCwgRm9yY2VCbG9ja1Byb3BlcnRpZXMgfTsKKyAgICBlbnVt
IElubGluZVN0eWxlUmVtb3ZhbE1vZGUgeyBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMsIFJl
bW92ZU5vbmUgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21tYW5kPiBj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRp
dEFjdGlvbiBhY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcywgRVByb3BlcnR5TGV2
ZWwgbGV2ZWwgPSBQcm9wZXJ0eURlZmF1bHQpCiAgICAgewpAQCAtNzEsMTAgKzcyLDEyIEBAIHBy
aXZhdGU6CiAgICAgLy8gc3R5bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBzaG91bGRSZW1v
dmVUZXh0RGVjb3JhdGlvblRhZyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVRvQXBwbHksIGlu
dCB0ZXh0RGVjb3JhdGlvbkFkZGVkQnlUYWcpIGNvbnN0OwogICAgIGJvb2wgaW1wbGljaXRseVN0
eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1MRWxlbWVudCos
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAgYm9vbCByZW1vdmVJbmxpbmVTdHls
ZUZyb21FbGVtZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJ
bmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlQXR0cmlidXRlc0FuZEVsZW1lbnRzKTsKKyAg
ICBpbmxpbmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpIHtyZXR1cm4g
cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7
fQogICAgIHZvaWQgcmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhU
TUxFbGVtZW50KiYpOwotICAgIHZvaWQgcmVtb3ZlSFRNTEZvbnRTdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVIVE1MQmlkaUVt
YmVkZGluZ1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqKTsK
LSAgICB2b2lkIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRN
TEVsZW1lbnQqKTsKKyAgICBib29sIHJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1v
dmVBdHRyaWJ1dGVzQW5kRWxlbWVudHMpOworICAgIGJvb2wgcmVtb3ZlSFRNTEJpZGlFbWJlZGRp
bmdTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5l
U3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CisgICAgYm9v
bCByZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50
KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7
CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsK
ICAgICBib29sIG5vZGVGdWxseVNlbGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0OwogICAgIGJvb2wgbm9kZUZ1bGx5VW5zZWxlY3Rl
ZChOb2RlKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25z
dDsKQEAgLTk1LDYgKzk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNwbGl0VGV4dEF0RW5kKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgdm9pZCBzcGxp
dFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAgYm9vbCBzaG91bGRTcGxpdFRleHRFbGVt
ZW50KEVsZW1lbnQqIGVsZW0sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgYm9v
bCBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KTsKICAgICBib29sIG1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIGJvb2wgbWVyZ2VFbmRXaXRo
TmV4dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lv
biA2NDM2MikKKysrIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlNwbGl0RWxlbWVudENvbW1h
bmQuaCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OCw3
ICs1OSwxMSBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmV4ZWN1dGVBcHBseSgpCiAgICAg
cGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MS5nZXQoKSwgbV9lbGVtZW50Mi5nZXQoKSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgLy8gRGVsZXRl
IGlkIGF0dHJpYnV0ZSBmcm9tIHRoZSBzZWNvbmQgZWxlbWVudCBiZWNhdXNlIHRoZSBzYW1lIGlk
IGNhbm5vdCBiZSB1c2VkIGZvciBtb3JlIHRoYW4gb25lIGVsZW1lbnQKKyAgICBtX2VsZW1lbnQy
LT5yZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIsIGVjKTsKKyAgICBBU1NFUlQoIWVj
KTsKKwogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBtX2VsZW1lbnQxLT5hcHBlbmRDaGlsZChj
aGlsZHJlbltpXSwgZWMpOwpAQCAtODgsNiArOTMsMTAgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21t
YW5kOjpkb1VuYXBwbHkoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQog
ICAgICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0uZ2V0KCksIHJlZkNo
aWxkLmdldCgpLCBlYyk7CiAKKyAgICAvLyBSZWNvdmVyIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhl
IG9yaWdpbmFsIGVsZW1lbnQuCisgICAgaWYgKG1fZWxlbWVudDEtPmhhc0F0dHJpYnV0ZShIVE1M
TmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVudDItPnNldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSk7
CisKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
NDM3NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDEwLTA3LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0RWxlbWVu
dENvbW1hbmQgc2hvdWxkbid0IGJlIGR1cGxpY2F0aW5nIGlkIGF0dHJpYnV0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxNTYKKworICAgICAgICBB
ZGRlZCBhIHRlc3QgdG8gZW5zdXJlIHNwbGl0dGluZyBlbGVtZW50IGRvZXNuJ3QgcHJvZHVjZSBt
dWx0aXBsZSBub2RlcyB3aXRoIHRoZSBzYW1lIGlkLgorCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtbmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZCB0
aGUgZHVwbGljYXRpb24gb2Ygbm9kZXMgd2l0aCB0aGUgc2FtZSBpZC4KKyAgICAgICAgKiBlZGl0
aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVv
dGUtZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL291
dGRlbnQtcmVndWxhci1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBlZGl0aW5n
L3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL3N0eWxlL3NwbGl0LWVsZW1lbnQtaWQtZHVwbGljYXRpb24uaHRt
bDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0
OiBFZGl0aW5nIGRlbGVnYXRlcyBjaGFuZ2VkLgorCiAyMDEwLTA3LTMwICBTYXRpc2ggU2FtcGF0
aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1uZXN0ZWQt
YmxvY2txdW90ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LW5lc3RlZC1ibG9ja3F1b3Rlcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDY0MzYyKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQt
bmVzdGVkLWJsb2NrcXVvdGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw0ICs0
LDQgQEAgaGVsbG8KIHdvcmxkCiB3ZWJraXQKIGlzIGdyZWF0Ci08YmxvY2txdW90ZSBpZD0ib3V0
ZXIiPiBoZWxsbyA8YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3b3JsZDxicj48L2Jsb2NrcXVvdGU+
PC9ibG9ja3F1b3RlPjxibG9ja3F1b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUi
IHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+
PGJsb2NrcXVvdGUgaWQ9Im91dGVyIj48YmxvY2txdW90ZSBpZD0iaW5uZXIiPiB3ZWJraXQgPC9i
bG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgaWQ9Im91dGVy
Ij4gaXMgZ3JlYXQgPC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9Im91dGVyIj4gaGVsbG8g
PGJsb2NrcXVvdGUgaWQ9ImlubmVyIj4gd29ybGQ8YnI+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90
ZT48YmxvY2txdW90ZSBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIiBzdHlsZT0ibWFy
Z2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiPjxibG9ja3F1b3Rl
PjxibG9ja3F1b3RlPiB3ZWJraXQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT48L2Jsb2NrcXVv
dGU+PGJsb2NrcXVvdGU+IGlzIGdyZWF0IDwvYmxvY2txdW90ZT4KSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjQzNjIpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2lu
ZGVudC1wcmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsOSBAQCBk
b2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90
ZSIKIHwgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBh
ZGRpbmc6IDBweDsiCiB8ICAgICAgICAgPHByZT4KLXwgICAgICAgICAgIGlkPSJwcmUtYmFzaWMi
CiB8ICAgICAgICAgICAibGluZSB0aHJlZQogIgogfCAgICAgICAgIDxwcmU+Ci18ICAgICAgICAg
ICBpZD0icHJlLWJhc2ljIgogfCAgICAgICAgICAgImxpbmUgZm91ciIKIHwgICAgICAgIgogCkBA
IC02OCwxMSArNjYsOSBAQCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgICAgICAgICBjbGFz
cz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgICAgICAgICAgc3R5bGU9Im1h
cmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgogfCAgICAgICAg
ICAgICAgICAgPHByZT4KLXwgICAgICAgICAgICAgICAgICAgaWQ9InByZS10YWJsZSIKIHwgICAg
ICAgICAgICAgICAgICAgInRhYmxlIHR3bwogIgogfCAgICAgICAgICAgICAgICAgPHByZT4KLXwg
ICAgICAgICAgICAgICAgICAgaWQ9InByZS10YWJsZSIKIHwgICAgICAgICAgICAgICAgICAgInRh
YmxlIHRocmVlPCNzZWxlY3Rpb24tZm9jdXM+IgogfCAgICAgICAgICAgICA8dGQ+CiB8ICAgICAg
ICAgICAgICAgInJpZ2h0IGNlbGwiCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL2luZGVudC1zZWNvbmQtcGFyYWdyYXBoLWluLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXNlY29u
ZC1wYXJhZ3JhcGgtaW4tYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MzYyKQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtc2Vjb25kLXBhcmFncmFw
aC1pbi1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw0ICsyLDQg
QEAgVGhpcyB0ZXN0cyBpbmRlbnRpbmcgdGhlIHNlY29uZCBwYXJhZ3JhcAogCiBoZWxsbwogd29y
bGQKLTxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij4gaGVsbG88YnI+PC9ibG9ja3F1b3RlPjxibG9ja3F1
b3RlIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiIHN0eWxlPSJtYXJnaW46IDAgMCAw
IDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyI+PGJsb2NrcXVvdGUgaWQ9InRlc3Qi
PiB3b3JsZCA8L2Jsb2NrcXVvdGU+PC9ibG9ja3F1b3RlPgorPGJsb2NrcXVvdGUgaWQ9InRlc3Qi
PiBoZWxsbzxicj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgY2xhc3M9IndlYmtpdC1pbmRlbnQt
YmxvY2txdW90ZSIgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRk
aW5nOiAwcHg7Ij48YmxvY2txdW90ZT4gd29ybGQgPC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4K
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJs
b2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvb3V0ZGVudC1yZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA2NDM2MikKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvb3V0ZGVudC1y
ZWd1bGFyLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDQgKzQs
NCBAQCBvbmUKIHR3bwogdGhyZWUKIEJlZm9yZTogPGJsb2NrcXVvdGUgaWQ9InRlc3QiPm9uZTxi
cj50d288YnI+dGhyZWU8L2Jsb2NrcXVvdGU+Ci1BZnRlcjogPGJsb2NrcXVvdGUgaWQ9InRlc3Qi
Pm9uZTxicj48L2Jsb2NrcXVvdGU+dHdvPGJyPjxibG9ja3F1b3RlIGlkPSJ0ZXN0Ij50aHJlZTwv
YmxvY2txdW90ZT4KK0FmdGVyOiA8YmxvY2txdW90ZSBpZD0idGVzdCI+b25lPGJyPjwvYmxvY2tx
dW90ZT50d288YnI+PGJsb2NrcXVvdGU+dGhyZWU8L2Jsb2NrcXVvdGU+CkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3VuZG8vcmVkby1zdHlsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlZG8tc3R5bGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA2NDM2MikKKysrIExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZWRvLXN0eWxlLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyOSArMSwyNSBAQAogRURJVElORyBERUxFR0FURTog
c2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudAog
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzpXZWJWaWV3RGlkQmVnaW5F
ZGl0aW5nTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3Rl
eHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAj
dGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0
eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
OldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgog
RURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BBTiA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNo
b3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0
ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3Rl
eHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpX
ZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZToobnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+
IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1Nl
bGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9t
IDAgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpG
QUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToo
bnVsbCkgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3Rp
bGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1FRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gU1BB
TiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBT
UEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxl
Y3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAyIG9mICN0ZXh0
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMiBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAw
IG9mICN0ZXh0ID4gU1BBTiA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDIgb2YgI3RleHQgPiBTUEFOID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24K
</data>
<flag name="review"
          id="51427"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>