<?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>57916</bug_id>
          
          <creation_ts>2011-04-05 21:48:42 -0700</creation_ts>
          <short_desc>Cull out most of the line boxes from the line box tree</short_desc>
          <delta_ts>2011-04-06 18:31:00 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380109</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-05 21:48:42 -0700</bug_when>
    <thetext>This bug is about implementing an optimization to avoid creating line boxes at all for most RenderInlines.  Basically barring use of more advanced features, the line box tree will end up consisting only of a root line box and &quot;leaf&quot; children like images and text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380122</commentid>
    <comment_count>1</comment_count>
      <attachid>88365</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-05 22:10:57 -0700</bug_when>
    <thetext>Created attachment 88365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380126</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-05 22:13:20 -0700</bug_when>
    <thetext>Attachment 88365 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/rendering/RenderInline.cpp:167:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/platform/graphics/FloatRect.cpp:110:  l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
Source/WebCore/platform/graphics/IntRect.cpp:109:  l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
Total errors found: 3 in 25 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>380129</commentid>
    <comment_count>3</comment_count>
      <attachid>88367</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-05 22:18:49 -0700</bug_when>
    <thetext>Created attachment 88367
Patch that passes style queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380159</commentid>
    <comment_count>4</comment_count>
      <attachid>88367</attachid>
    <who name="">mitz</who>
    <bug_when>2011-04-05 23:30:22 -0700</bug_when>
    <thetext>Comment on attachment 88367
Patch that passes style queue.

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

The change log alone warrants an r+, but I can’t r+ yet for two reasons: (1) I need an answer to my question in RenderInline::dirtyLineBoxes() and (2) I’ve reviewed everything except the four brand new functions in RenderInline.

&gt; Source/WebCore/ChangeLog:43
&gt; +        getting the side individually and wastefully doing 4 isHorizontal queries.

Typo: side

&gt; Source/WebCore/rendering/InlineBox.h:266
&gt; -    FloatRect logicalFrameRect() const { return isHorizontal() ? IntRect(m_x, m_y, m_logicalWidth, logicalHeight()) : IntRect(m_y, m_x, logicalHeight(), m_logicalWidth); }
&gt; +    FloatRect logicalFrameRect() const { return isHorizontal() ? IntRect(m_x, m_y, m_logicalWidth, logicalHeight()) : IntRect(m_y, m_x, m_logicalWidth, logicalHeight()); }

Your change log says this is a new function, but it isn’t, it’s just changed and you started using it.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:796
&gt;      logicalVisualOverflow = IntRect(logicalLeftVisualOverflow, logicalTopVisualOverflow,
&gt;                                      logicalRightVisualOverflow - logicalLeftVisualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow);

Not new code, but it would be nicer to write this as logicalVisualOverflow.unite( rect computed above ) and avoid all the max/min computations.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:51
&gt; +typedef WTF::HashMap&lt;const InlineTextBox*, IntRect&gt; InlineTextBoxMap;

Should this say “Overflow” in the name?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:52
&gt; +static InlineTextBoxMap* gTextBoxesWithOverflow = 0;

No need to initialize statics to 0.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:73
&gt; +    gTextBoxesWithOverflow-&gt;add(this, rect);

Since you’re doing add(), you may want to assert that the key isn’t already in the table.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:80
&gt; +    if (parent()-&gt;renderer() == renderer()-&gt;parent())

:-&gt;

&gt; Source/WebCore/rendering/RenderInline.cpp:183
&gt; +    bool alwaysCreateLineBoxes = (parentRenderInline &amp;&amp; parentRenderInline-&gt;alwaysCreateLineBoxes())
&gt; +                                 || (parentRenderInline &amp;&amp; parentStyle-&gt;verticalAlign() != BASELINE)
&gt; +                                 || style()-&gt;verticalAlign() != BASELINE
&gt; +                                 || style()-&gt;textEmphasisMark() != TextEmphasisMarkNone
&gt; +                                 || (checkFonts &amp;&amp; (parentStyle-&gt;font().fontMetrics().ascent() != style()-&gt;font().fontMetrics().ascent()
&gt; +                                 || parentStyle-&gt;font().fontMetrics().descent() != style()-&gt;font().fontMetrics().descent()
&gt; +                                 || parentStyle-&gt;font().fontMetrics().lineGap() != style()-&gt;font().fontMetrics().lineGap()
&gt; +                                 || parentStyle-&gt;lineHeight() != style()-&gt;lineHeight()));
&gt; +

This indentation is making Darin sad! Just use normal 4-space indentation. Maybe we need a helper function in FontMetrics that compares ascent, descent and lineGap.

&gt; Source/WebCore/rendering/RenderInline.cpp:493
&gt; +void RenderInline::culledInlineAbsoluteRects(const RenderInline* container, Vector&lt;IntRect&gt;&amp; rects, int tx, int ty)

I really wish we didn’t add more functions with “int tx, int ty” and used IntSize instead

&gt; Source/WebCore/rendering/RenderInline.cpp:530
&gt; +                                           ty + logicalTop,
&gt; +                                           childLine-&gt;logicalWidth() + childLine-&gt;marginLogicalLeft() + childLine-&gt;marginLogicalRight(),
&gt; +                                           logicalHeight);

Poor Darin

&gt; Source/WebCore/rendering/RenderInline.cpp:639
&gt; +    InlineBox* firstBox = firstLineBoxIncludingCulling();
&gt; +    if (firstBox)

You can just write
if (InlineBox* firstBox = firstLineBoxIncludingCulling())

&gt; Source/WebCore/rendering/RenderInline.cpp:648
&gt; +    InlineBox* firstBox = firstLineBoxIncludingCulling();
&gt; +    if (firstBox)

Ditto.

&gt; Source/WebCore/rendering/RenderInline.cpp:956
&gt; -    float logicalLeft = firstLineBox()-&gt;logicalLeftVisualOverflow();
&gt;      float logicalTop = firstLineBox()-&gt;logicalTopVisualOverflow(firstRootBox-&gt;lineTop());
&gt;      float logicalWidth = logicalRightSide - logicalLeftSide;
&gt;      float logicalHeight = lastLineBox()-&gt;logicalBottomVisualOverflow(lastRootBox-&gt;lineBottom()) - logicalTop;
&gt;      
&gt; -    IntRect rect = enclosingIntRect(FloatRect(logicalLeft, logicalTop, logicalWidth, logicalHeight));
&gt; +    IntRect rect = enclosingIntRect(FloatRect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight));

This should be a separate patch.

&gt; Source/WebCore/rendering/RenderInline.cpp:1251
&gt; +                    // If the child doesn&apos;t need line boxes either, then we can recur.

I am confused by this. How do we know that the child doesn’t need line boxes?

&gt; Source/WebCore/rendering/RenderInline.cpp:1355
&gt; +    else if (InlineFlowBox* curr = firstLineBox()) {
&gt; +        for (; curr; curr = curr-&gt;nextLineBox())
&gt; +            rects.append(enclosingIntRect(FloatRect(tx + curr-&gt;x(), ty + curr-&gt;y(), curr-&gt;width(), curr-&gt;height())));
&gt;      }

Can’t this just be written as
else {
    for (InlineFlowBox* curr = firstLineBox(); curr; curr = curr-&gt;nextLineBox())
…
?

&gt; Source/WebCore/rendering/RenderInline.h:26
&gt; +#include &quot;InlineFlowBox.h&quot;

Why is this needed?

&gt; Source/WebCore/rendering/RenderText.cpp:182
&gt;      if (!documentBeingDestroyed()) {

Should the documentBeingDestroyed() check be here or in destroy()?

&gt; Source/WebCore/rendering/RenderText.cpp:1315
&gt; +    float logicalLeftSide = numeric_limits&lt;int&gt;::max();
&gt; +    float logicalRightSide = numeric_limits&lt;int&gt;::min();

Why are these floats? I don’t see how they could ever be assigned a float value. If they need to be floats, then they need to be initialized to the float—not int—limits.

&gt; Source/WebCore/rendering/RenderText.cpp:1323
&gt; +    float logicalTop = firstTextBox()-&gt;logicalTopVisualOverflow();
&gt; +    float logicalWidth = logicalRightSide - logicalLeftSide;
&gt; +    float logicalHeight = lastTextBox()-&gt;logicalBottomVisualOverflow() - logicalTop;

Really not clear on the use of floats here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380179</commentid>
    <comment_count>5</comment_count>
      <attachid>88367</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-06 00:06:49 -0700</bug_when>
    <thetext>Comment on attachment 88367
Patch that passes style queue.

Marking minus while I address Dan&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380181</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-06 00:17:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:52
&gt; &gt; +static InlineTextBoxMap* gTextBoxesWithOverflow = 0;
&gt; 
&gt; No need to initialize statics to 0.
&gt; 

Yeah, knew this. I cut and pasted the HashMap typedef and declaration from an example in RenderBlock for speed, so I guess we should fix the = 0 over there. :)

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:183
&gt; &gt; +    bool alwaysCreateLineBoxes = (parentRenderInline &amp;&amp; parentRenderInline-&gt;alwaysCreateLineBoxes())
&gt; &gt; +                                 || (parentRenderInline &amp;&amp; parentStyle-&gt;verticalAlign() != BASELINE)
&gt; &gt; +                                 || style()-&gt;verticalAlign() != BASELINE
&gt; &gt; +                                 || style()-&gt;textEmphasisMark() != TextEmphasisMarkNone
&gt; &gt; +                                 || (checkFonts &amp;&amp; (parentStyle-&gt;font().fontMetrics().ascent() != style()-&gt;font().fontMetrics().ascent()
&gt; &gt; +                                 || parentStyle-&gt;font().fontMetrics().descent() != style()-&gt;font().fontMetrics().descent()
&gt; &gt; +                                 || parentStyle-&gt;font().fontMetrics().lineGap() != style()-&gt;font().fontMetrics().lineGap()
&gt; &gt; +                                 || parentStyle-&gt;lineHeight() != style()-&gt;lineHeight()));
&gt; &gt; +
&gt; 
&gt; This indentation is making Darin sad! Just use normal 4-space indentation. Maybe we need a helper function in FontMetrics that compares ascent, descent and lineGap.
&gt; 

Ok will fix the indentation.

&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:1251
&gt; &gt; +                    // If the child doesn&apos;t need line boxes either, then we can recur.
&gt; 
&gt; I am confused by this. How do we know that the child doesn’t need line boxes?
&gt; 

That comment is a cut and paste error.  I cut and pasted the loop and casts from culledInlineBoundingBox.  It doesn&apos;t apply.  I removed it.

&gt;
&gt; &gt; Source/WebCore/rendering/RenderInline.h:26
&gt; &gt; +#include &quot;InlineFlowBox.h&quot;
&gt; 
&gt; Why is this needed?
&gt; 

To inline firstLineBoxIncludingCulling() and lastLineBoxIncludingCulling().

&gt; &gt; Source/WebCore/rendering/RenderText.cpp:182
&gt; &gt;      if (!documentBeingDestroyed()) {
&gt; 
&gt; Should the documentBeingDestroyed() check be here or in destroy()?
&gt; 

I think it&apos;s fine where it is in case someone else calls the helper in the future.

&gt; &gt; Source/WebCore/rendering/RenderText.cpp:1315
&gt; &gt; +    float logicalLeftSide = numeric_limits&lt;int&gt;::max();
&gt; &gt; +    float logicalRightSide = numeric_limits&lt;int&gt;::min();
&gt; 
&gt; Why are these floats? I don’t see how they could ever be assigned a float value. If they need to be floats, then they need to be initialized to the float—not int—limits.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderText.cpp:1323
&gt; &gt; +    float logicalTop = firstTextBox()-&gt;logicalTopVisualOverflow();
&gt; &gt; +    float logicalWidth = logicalRightSide - logicalLeftSide;
&gt; &gt; +    float logicalHeight = lastTextBox()-&gt;logicalBottomVisualOverflow() - logicalTop;
&gt; 
&gt; Really not clear on the use of floats here.

None of this code should be using floats.  I cut and pasted from RenderInline::linesVisualOverflowBoundingBox and just didn&apos;t complete the conversion.  (This overflow issue was the last thing I added to the patch to fix the repaint tests.)  Will fix.

Will address all the other comments as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380513</commentid>
    <comment_count>7</comment_count>
      <attachid>88456</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-06 09:51:21 -0700</bug_when>
    <thetext>Created attachment 88456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380552</commentid>
    <comment_count>8</comment_count>
      <attachid>88456</attachid>
    <who name="">mitz</who>
    <bug_when>2011-04-06 10:20:23 -0700</bug_when>
    <thetext>Comment on attachment 88456
Patch

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

One comment below (repeated).

&gt; Source/WebCore/rendering/RenderInline.cpp:853
&gt; +        } else if (curr-&gt;isRenderInline()) {
&gt; +            // If the child doesn&apos;t need line boxes either, then we can recur.
&gt; +            RenderInline* currInline = toRenderInline(curr);
&gt; +            InlineBox* result = currInline-&gt;firstLineBoxIncludingCulling();
&gt; +            if (result)
&gt; +                return result;

The comment is mysterious because the logic is now encompasses in firstLineBoxIncludingCulling(). This whole block can be replaced with
} else if (curr-&gt;isRenderInline())
    return toRenderInline(cure)-&gt;firstLineBoxIncludingCulling();

&gt; Source/WebCore/rendering/RenderInline.cpp:880
&gt; +        } else if (curr-&gt;isRenderInline()) {
&gt; +            // If the child doesn&apos;t need line boxes either, then we can recur.
&gt; +            RenderInline* currInline = toRenderInline(curr);
&gt; +            InlineBox* result = currInline-&gt;lastLineBoxIncludingCulling();
&gt; +            if (result)
&gt; +                return result;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380654</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-04-06 11:21:20 -0700</bug_when>
    <thetext>Fixed in r83075.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380764</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 13:16:35 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/83075 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381033</commentid>
    <comment_count>11</comment_count>
      <attachid>88456</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 18:30:47 -0700</bug_when>
    <thetext>Comment on attachment 88456
Patch

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

&gt; Source/WebCore/rendering/HitTestResult.cpp:579
&gt; +    if (node-&gt;renderer()-&gt;isInline()) {

I would have reversed this so as to use early return.

&gt; Source/WebCore/rendering/RenderInline.cpp:490
&gt; +void RenderInline::culledInlineAbsoluteRects(const RenderInline* container, Vector&lt;IntRect&gt;&amp; rects, const IntSize&amp; offset)

This function is huge. :(  And contributes to the general unreadability of the line layout code :(

&gt; Source/WebCore/rendering/RenderInline.cpp:569
&gt; +void RenderInline::culledInlineAbsoluteQuads(const RenderInline* container, Vector&lt;FloatQuad&gt;&amp; quads)

There must have been a way to share more code between this and the absolute rects one.  Geez.  Sooooo much duplicated code. :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88365</attachid>
            <date>2011-04-05 22:10:57 -0700</date>
            <delta_ts>2011-04-05 22:18:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>75431</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg3IEBACisyMDExLTA0LTA1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTc5MTYKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBhbiBvcHRpbWl6YXRpb24gdG8gdGhl
IGxpbmUgYm94IHRyZWUgdG8gY3VsbCBvdXQgbW9zdCBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAg
ICAgIGxpbmUgYm94ZXMgdGhhdCBjYW4gb2NjdXIgYmV0d2VlbiB0aGUgcm9vdCBsaW5lIGJveCBh
bmQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSAoaW1hZ2VzCisgICAgICAgIGFuZCB0ZXh0KS4KKwor
ICAgICAgICBSZW5kZXJJbmxpbmVzIG5vdyBoYXZlIGEgYm9vbGVhbiBtZW1iZXIsIG1fYWx3YXlz
Q3JlYXRlTGluZUJveGVzLAorICAgICAgICB0aGF0IHN0YXJ0cyBvZmYgYXMgZmFsc2UuIE9ubHkg
aWYgaXQgZ2V0cyBmbGlwcGVkIHRvIHRydWUgd2lsbCB0aGVyZSBiZSBhbnkgbGluZSBib3hlcwor
ICAgICAgICBjcmVhdGVkIGZvciB0aGF0IFJlbmRlcklubGluZS4KKyAgICAgICAgCisgICAgICAg
ICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KToKKyAgICAgICAgQWRqdXN0IHRoZSBv
cmRlcmluZyBvZiB1cGRhdGVMYXlvdXQgY2FsbHMgdG8gbWFrZSBzdXJlIHJlY3RzIGFyZW4ndCBx
dWVyaWVkIHVubGVzcyBsYXlvdXQKKyAgICAgICAgaXMgdXAgdG8gZGF0ZS4KKworICAgICAgICAq
IHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2Ny
ZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRl
cyk6CisgICAgICAgIEFkZCBhc3NlcnRzIGluIHNwYXRpYWwgbmF2aWdhdGlvbiBjb2RlIHRvIGNh
dGNoIGFueSBmdXR1cmUgYmFkIHF1ZXJpZXMgdGhhdCBtaWdodCBiZSBtYWRlCisgICAgICAgIGZv
ciByZWN0YW5nbGVzIHdpdGhvdXQgbGF5b3V0IGJlaW5nIHVwIHRvIGRhdGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICBBZGQgYSBuZXcgdW5pdGUgZnVuY3Rpb24g
dGhhdCBpcyB1c2VmdWwgZm9yIHRoZSByZW5kZXIgdHJlZSB0byBGbG9hdFJlY3QgYW5kIEludFJl
Y3QuICBUaGlzCisgICAgICAgIHZlcnNpb24gYWxsb3dzIHJlY3QgdW5pdGVzIHRvIGhhcHBlbiBp
ZiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IGlzIG5vbnplcm8uCisKKyAgICAgICAgKiByZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KToKKyAgICAgICAgTWFrZSBzdXJlIHJlY3QtYmFz
ZWQgaGl0IHRlc3RpbmcgcHJvcGVybHkgYWRkcyBpbiBjdWxsZWQgaW5saW5lIGFuY2VzdG9ycyB0
byB0aGUgc2V0IG9mIG5vZGVzCisgICAgICAgIGlmIGNvbnRlbnQgaW5zaWRlIHRob3NlIGlubGlu
ZXMgaXMgaGl0LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsRnJhbWVSZWN0KToKKyAgICAgICAgQWRkIGEgbmV3
IGhlbHBlciBmb3Igb2J0YWluaW5nIHRoZSBsb2dpY2FsIGZyYW1lIHJlY3Qgb2YgYW4gaW5saW5l
IGJveC4gIE1vcmUgZWZmaWNpZW50IHRoYW4KKyAgICAgICAgZ2V0dGluZyB0aGUgc2lkZSBpbmRp
dmlkdWFsbHkgYW5kIHdhc3RlZnVsbHkgZG9pbmcgNCBpc0hvcml6b250YWwgcXVlcmllcy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6OmFkZFRvTGluZSk6CisgICAgICAgIGFkZFRvTGluZSBub3cgYWxzbyBj
aGVja3MgbGluZSBnYXAgaW4gdGhlIGxpbmUgYm94IHRyZWUgb3B0aW1pemF0aW9uIGNoZWNrcy4K
KyAgICAKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxP
dmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlcmZs
b3cpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgIFJld3Jp
dHRlbiB0byBhZGQgdGhlIHRleHQgYm94IG92ZXJmbG93IHRvIHRoZSB0ZXh0IGJveCBpdHNlbGYu
CisKKyAgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6ZGVzdHJveSk6CisgICAgICAgIERlc3Ryb3kgaGFzIGJlZW4g
Y2hhbmdlZCB0byBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbmQgZGVzdHJveSB0
aGUgbGluZSBib3hlcyB0aGF0CisgICAgICAgIGlzIG5vdyBjYWxsZWQgZnJvbSBvbmUgYWRkaXRp
b25hbCBzcG90LgorCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2dpY2FsT3Zl
cmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNldExvZ2ljYWxP
dmVyZmxvd1JlY3QpOgorICAgICAgICBUZXh0IGJveGVzIG5vdyBjYWNoZSB0aGVpciBvd24gb3Zl
cmZsb3cgaW4gYSBnbG9iYWwgaGFzaCB0YWJsZS4KKworICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpsaW5lSGVpZ2h0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgYXNzdW1lIHRoYXQgdGhl
IHBhcmVudCBsaW5lIGJveCdzIHJlbmRlcmVyIGlzIHRoZSBSZW5kZXJUZXh0J3MgaW1tZWRpYXRl
CisgICAgICAgIHBhcmVudCwgc2luY2UgaW50ZXJtZWRpYXRlIGxpbmUgYm94ZXMgbWF5IGhhdmUg
YmVlbiBjdWxsZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgUGFpbnQgbm93IHByb3Blcmx5IGNoZWNrcyBvbmx5IHRoZSB0ZXh0IGJveCBvdmVy
ZmxvdyBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQgbGluZSBib3gncyBvdmVyZmxvdy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cpOgorICAg
ICAgICBOZXcgYWNjZXNzb3JzIHRvIG9idGFpbiBvdmVyZmxvdyBmb3IgaW5saW5lIHRleHQgYm94
ZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKToKKyAgICAgICAgdXBkYXRlRmly
c3RMZXR0ZXIgbm93IHJlbW92ZXMgdGV4dCBib3hlcyBmcm9tIHRoZSBsaW5lIGJveCB0cmVlIGJl
Zm9yZSBpdCBkZXN0cm95cyB0aGVtLCBzaW5jZSB0aG9zZQorICAgICAgICB0ZXh0IGJveGVzIG1h
eSBub3QgaGF2ZSBhbnl0aGluZyBpbiBiZXR3ZWVuIHRoZW0gYW5kIHRoZSBibG9jayB0aGF0IGNv
bnRhaW5zIHRoZSBpbmxpbmUgZmlyc3QgbGV0dGVyCisgICAgICAgIGNvbnRhaW5lci4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIFRoZSBjdWxsaW5n
IG9wdGltaXphdGlvbiBpcyBkb25lIGhlcmUuICBPbmx5IGlmIHRoZSBSZW5kZXJJbmxpbmUgc2F5
cyB0aGF0IGJveGVzIGFyZSBhbGxvd2VkIHdpbGwgdGhleQorICAgICAgICBiZSBjcmVhdGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgor
ICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIFJlbmRlcklubGluZSBpcyB1cGRhdGVkIGhlcmUsIGlu
IGNhc2UgaXQgaXMgZGlzY292ZXJlZCB0aGF0IGxpbmUgYm94ZXMgYXJlIG5vdyBuZWVkZWQuCisg
ICAgICAgIFRoaXMgaXMgZG9uZSBiZWZvcmUgYW55IGxpbmVzIGFyZSBidWlsdC4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpSZW5kZXJJbmxpbmUpOgorICAgICAgICBUaGUgbmV3IG1fYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzIGZsYWcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgQW4gaW5p
dGlhbCB1cGRhdGUgb2YgdGhlIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGhhcHBlbnMgaGVyZSBm
b3IgdGhpbmdzIHRoYXQgY2FuIGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgKGxpa2Ug
aGF2aW5nIGEgbGF5ZXIsIGJvcmRlcnMsIHBhZGRpbmcsIG1hcmdpbnMgb3IgYmFja2dyb3VuZHMp
LiAgU29tZSBjaGVja3MgdGhhdCBkZXBlbmQgb24gZXhhbWluaW5nCisgICAgICAgIHRoZSBSZW5k
ZXJJbmxpbmUncyBwYXJlbnQgKGluY2x1ZGluZyBmaXJzdCBsaW5lIHN0eWxlcykgaGFwcGVuIGxh
dGVyIGluIGxheW91dElubGluZUNoaWxkcmVuLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIFRoZSBmdW5jdGlv
biBjYWxsZWQgYnkgbGF5b3V0SW5saW5lQ2hpbGRyZW4gdG8gY2hlY2sgcGFyZW50IGFuZCBjaGls
ZCBzdHlsZSBkaWZmZXJlbmNlcyAoZS5nLiwgZm9udCwKKyAgICAgICAgdmVydGljYWwgYWxpZ25t
ZW50LCBsaW5lIGhlaWdodCwgZXRjLikuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxl
ZElubGluZUFic29sdXRlUmVjdHMpOgorICAgICAgICBhYnNvbHV0ZVJlY3RzIGNhbGxzIGN1bGxl
ZElubGluZUFic29sdXRlUmVjdHMgd2hlbiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpcyBmYWxz
ZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyk6
CisgICAgICAgIGFic29sdXRlUXVhZHMgY2FsbHMgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyB3
aGVuIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZhbHNlLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6Om9mZnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjpvZmZzZXRUb3ApOgorICAgICAgICBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3Agbm93IGNo
ZWNrIGRlc2NlbmRhbnQgcmVuZGVyZXJzIHdoZW4gbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMg
ZmFsc2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGluZXNCb3VuZGluZ0Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5n
Qm94KToKKyAgICAgICAgbGluZUJvdW5kaW5nQm94IGNhbGxzIGN1bGxlZElubGluZUJvdW5kaW5n
Qm94IHdoZW4gbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMgZmFsc2UuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lTGFzdExpbmVCb3gpOgorICAgICAg
ICBIZWxwZXJzIHRoYXQgcmV0dXJuIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lIGJveCBkZXNjZW5k
YW50cy4gVXNlZCBieSBmaXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nIGFuZAorICAgICAgICBs
YXN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcgKHdoaWNoIGFyZSBpbiB0dXJuIGNhbGxlZCBieSBv
ZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3ApLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgorICAg
ICAgICBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3ggY2FsbHMgY3VsbGVkSW5saW5lVmlz
dWFsT3ZlcmZsb3dCb3VuZGluZ0JveCB3aGVuIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZh
bHNlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KToKKyAgICAgICAgVGhlIGluaXRpYWwgYmFpbG91dCBjaGVjayBpcyBub3cg
ZG9uZSB1c2luZyBmaXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nIGluc3RlYWQgb2YganVzdCBm
aXJzdExpbmVCb3guCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6ZGlydHlMaW5l
Qm94ZXMpOgorICAgICAgICBkaXJ0eUxpbmVCb3hlcyBub3cgY3Jhd2xzIGludG8gZGVzY2VuZGFu
dHMgdG8gZmlndXJlIG91dCB3aGljaCByb290IGxpbmVzIHRvIGRpcnR5IHdoZW4KKyAgICAgICAg
bV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMgZmFsc2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6Y3JlYXRlQW5kQXBwZW5kSW5saW5lRmxvd0JveCk6CisgICAgICAgIENsZWFy
IHRoZSBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpZiBhIGJveCBnZXRzIGFkZGVkIGFueXdheS4g
VGhpcyBoYXBwZW5zIGZvciBsZWFmIGlubGluZSBmbG93cyBhbmQgYWxzbworICAgICAgICB3aGVu
IGxpbmUtYm94LWNvbnRhaW4gaXMgc2V0IHRvIGFuIHVudXN1YWwgdmFsdWUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICBVc2Vk
IGN1bGxlZElubGluZUFic29sdXRlUmVjdHMgaW4gcGxhY2Ugb2YgdGhlIGxpbmUgYm94IHdhbGsg
d2hlbiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpcyBmYWxzZS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Zmly
c3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6Omxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyk6CisgICAgICAgIEhlbHBlcnMgdXNlZCBp
biBhIGZldyBwbGFjZXMgKGxpa2Ugb2Zmc2V0TGVmdCBhbmQgb2Zmc2V0VG9wKSwgbW9zdGx5IGlu
IHBsYWNlcyB3aGVyZSB0aGUgZXhpc3RlbmNlIG9mIGEgYm94CisgICAgICAgIGlzIGFsbCB0aGF0
IG5lZWRzIGNoZWNraW5nLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNldEFs
d2F5c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBhbmQg
c2V0dGluZyB0aGUgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgZmxhZy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lQm94TGlzdDo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQpOgorICAgICAgICBNb2RpZmll
ZCB0byB1c2UgZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyBhbmQgbGFzdExpbmVCb3hJbmNs
dWRpbmdDdWxsaW5nIHRvIGVuc3VyZSB0aGUgcmlnaHQgc2V0IG9mCisgICAgICAgIGxpbmVzIGdl
dCBkaXJ0aWVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6cmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcyk6CisgICAg
ICAgIE5ldyBoZWxwZXIgaW52b2tlZCBieSBkZXN0cm95IGFuZCBhbHNvIGZyb20gdXBkYXRlRmly
c3RMZXR0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmRlc3Ryb3kpOgorICAg
ICAgICBDaGFuZ2VkIHRvIGNhbGwgcmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcy4KKworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIEZpeGVkIHRv
IGJlIHByb3Blcmx5IHBoeXNpY2FsIGluc3RlYWQgb2YgbG9naWNhbC4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dDo6bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KToKKyAgICAg
ICAgTmV3IGltcGxlbWVudGF0aW9uIGZvciBSZW5kZXJUZXh0IHRoYXQgZ2l2ZXMgdGhlIGJvdW5k
aW5nIGJveCBvZiB0aGUgdGV4dCBib3hlcyBpbmNsdWRpbmcgb3ZlcmZsb3cgZnJvbQorICAgICAg
ICBzaGFkb3dzLCBnbHlwaHMsIHRleHQtc3Ryb2tlLCBldGMuICBVc2VkIGJ5IFJlbmRlcklubGlu
ZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveC4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpSZW5kZXJTVkdJ
bmxpbmUpOgorICAgICAgICBSZW5kZXJTVkdJbmxpbmUgYWx3YXlzIHNldHMgbV9hbHdheXNDcmVh
dGVMaW5lQm94ZXMgdG8gdHJ1ZSBzbyB0aGF0IFNWRyBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgb3B0
aW1pemF0aW9uLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoYXJhY3RlcnNJ
blRleHRCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRD
aGlsZEJveGVzKToKKyAgICAgICAgTW92ZSB0aGUgaXNJbmxpbmVGbG93Qm94IGFzc2VydHMgdG8g
YWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb250ZW50IHNraXBzLCBzaW5jZSB0aGUgZ2VuZXJhdGVkIGNv
bnRlbnQgYm94ZXMgYXJlCisgICAgICAgIG5vdyBJbmxpbmVUZXh0Qm94ZXMgKHRoZSBlbmNsb3Np
bmcgSW5saW5lRmxvd0JveGVzIGdvdCBjdWxsZWQpLgorCiAyMDExLTA0LTA1ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gODI2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5Nyw2ICs1OTcsOSBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzRGlyZWN0CiAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQt
PmZvY3VzZWROb2RlKCk7CiAgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50Owog
CisgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKyAgICAgICAgCiAgICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4K
ICAgICBJbnRSZWN0IHN0YXJ0aW5nUmVjdDsKICAgICBpZiAoZm9jdXNlZE5vZGUpIHsKQEAgLTYx
MiwxMSArNjE1LDExIEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3QK
IAogICAgIGJvb2wgY29uc3VtZWQgPSBmYWxzZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChjb250
YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGNvbnRhaW5lciktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
ICAgICAgICBjb25zdW1lZCA9IGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihj
b250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7CiAgICAgICAgIHN0YXJ0
aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwgdHJ1ZSAv
KiBpZ25vcmUgYm9yZGVyICovKTsKICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjb250YWlu
ZXIpOworICAgICAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUo
KSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgfSB3aGlsZSAoIWNvbnN1bWVk
ICYmIGNvbnRhaW5lcik7CiAKICAgICByZXR1cm4gY29uc3VtZWQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gODI2MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDYgKzMwMCw4IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlLCBGb2N1c0QK
ICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBBU1NFUlQo
IWZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSk7CisKICAgICBJbnRSZWN0IGNvbnRhaW5lclZpZXdw
b3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgLy8gV2Ugd2Fu
dCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVuLCBidXQgd2ls
bCBiZQogICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhlIHZpZXdwb3J0
IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgpAQCAtNTE3LDcgKzUxOSw3IEBAIHN0YXRpYyBJ
bnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMKIAogSW50UmVjdCBub2RlUmVjdEluQWJz
b2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikKIHsKLSAgICBB
U1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQobm9kZSAmJiBub2Rl
LT5yZW5kZXJlcigpICYmICFub2RlLT5kb2N1bWVudCgpLT52aWV3KCktPm5lZWRzTGF5b3V0KCkp
OwogCiAgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmcmFt
ZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKS0+
ZnJhbWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMjQgQEAg
dm9pZCBGbG9hdFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0UmVjdCYgbwogICAgIHNldExvY2F0aW9u
QW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KIAordm9pZCBGbG9hdFJlY3Q6OnVuaXRl
SWZOb25aZXJvKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5
IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkp
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZsb2F0IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOworICAgIGZsb2F0IHQgPSBtaW4oeSgpLCBv
dGhlci55KCkpOworICAgIGZsb2F0IHIgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAg
IGZsb2F0IGIgPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgc2V0TG9jYXRpb25B
bmRTaXplRnJvbUVkZ2VzKGwsIHQsIHIsIGIpOworfQorCiB2b2lkIEZsb2F0UmVjdDo6c2NhbGUo
ZmxvYXQgc3gsIGZsb2F0IHN5KQogewogICAgIG1fbG9jYXRpb24uc2V0WCh4KCkgKiBzeCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2
aXNpb24gODI2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgdW5pdGUoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGbG9hdFJlY3QmKTsKIAog
ICAgIC8vIE5vdGUsIHRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IEludFJlY3Q6OmNvbnRhaW5zKElu
dFBvaW50JikgZG9lczsgdGhlIGludCB2ZXJzaW9uCiAgICAgLy8gaXMgcmVhbGx5IGNoZWNraW5n
IGZvciBjb250YWlubWVudCBvZiAxeDEgcmVjdCwgYnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNl
IHdpdGggZmxvYXRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5jcHAJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDI3IEBAIHZv
aWQgSW50UmVjdDo6dW5pdGUoY29uc3QgSW50UmVjdCYgb3RoZXIKICAgICBtX3NpemUuc2V0SGVp
Z2h0KGIgLSB0KTsKIH0KIAordm9pZCBJbnRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBJbnRS
ZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4K
KyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAgICAgICAqdGhpcyA9IG90
aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGwgPSBtaW4oeCgpLCBvdGhl
ci54KCkpOworICAgIGludCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBpbnQgciA9IG1h
eChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtYXgobWF4WSgpLCBvdGhlci5t
YXhZKCkpOworCisgICAgbV9sb2NhdGlvbi5zZXRYKGwpOworICAgIG1fbG9jYXRpb24uc2V0WSh0
KTsKKyAgICBtX3NpemUuc2V0V2lkdGgociAtIGwpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQoYiAt
IHQpOworfQorCiB2b2lkIEludFJlY3Q6OnNjYWxlKGZsb2F0IHMpCiB7CiAgICAgbV9sb2NhdGlv
bi5zZXRYKChpbnQpKHgoKSAqIHMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIHZv
aWQgdW5pdGUoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3Qg
SW50UmVjdCYpOwogCiAgICAgdm9pZCBpbmZsYXRlWChpbnQgZHgpCiAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gODI2MTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAKQEAgLTU0NCw2ICs1NDUsMjAgQEAgYm9vbCBIaXRUZXN0UmVz
dWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZQogICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKTsKICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChub2RlKTsKIAor
ICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSB7CisgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gbm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wYXJlbnQoKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1JlbmRlcklubGlu
ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbm9kZXMgZm9yIGN1bGxlZCBpbmxpbmVzIGdldCBp
bmNsdWRlZC4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVy
SW5saW5lKGN1cnIpOworICAgICAgICAgICAgaWYgKGN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoY3VycklubGluZS0+dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGN1cnJJbmxpbmUt
Pm5vZGUoKSkKKyAgICAgICAgICAgICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFk
ZChjdXJySW5saW5lLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICAgICAgfQor
ICAgIH0KICAgICByZXR1cm4gIXJlY3QuY29udGFpbnMocmVjdEZvclBvaW50KHgsIHkpKTsKIH0K
IApAQCAtNTYxLDYgKzU3NiwyMCBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RC
YXNlZFRlCiAgICAgbm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIG11dGFi
bGVSZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwogCisgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCktPmlzSW5saW5lKCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBu
b2RlLT5yZW5kZXJlcigpLT5wYXJlbnQoKTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7
CisgICAgICAgICAgICBpZiAoIWN1cnItPmlzUmVuZGVySW5saW5lKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRoZSBub2RlcyBmb3IgY3VsbGVkIGlubGluZXMgZ2V0IGluY2x1ZGVkLgorICAgICAgICAg
ICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7CisgICAg
ICAgICAgICBpZiAoY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJySW5saW5l
LT52aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgY3VycklubGluZS0+bm9kZSgpKQorICAgICAgICAg
ICAgICAgIG11dGFibGVSZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKGN1cnJJbmxpbmUtPm5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAh
cmVjdC5jb250YWlucyhyZWN0Rm9yUG9pbnQoeCwgeSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4MjYxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBA
IHB1YmxpYzoKICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3VyIGV4dGVudCBpbiB0aGUg
YmxvY2sgZmxvdyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFu
ZCB3aWR0aCBmb3IgdmVydGljYWwgdGV4dC4KICAgICBpbnQgbG9naWNhbEhlaWdodCgpIGNvbnN0
OwogCi0gICAgRmxvYXRSZWN0IGxvZ2ljYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWwoKSA/IEludFJlY3QobV94LCBtX3ksIG1fbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KCkpIDogSW50UmVjdChtX3ksIG1feCwgbG9naWNhbEhlaWdodCgpLCBtX2xvZ2ljYWxXaWR0
aCk7IH0KKyAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbCgpID8gSW50UmVjdChtX3gsIG1feSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQoKSkgOiBJbnRSZWN0KG1feSwgbV94LCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCgpKTsgfQogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUg
YmFzZWxpbmVUeXBlKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBv
c2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpv
bnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KICAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3Qo
KS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gODI2MTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDcgKzk3LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5s
aW5lQm94KgogICAgIGNoaWxkLT5zZXRGaXJzdExpbmVTdHlsZUJpdChtX2ZpcnN0TGluZSk7CiAg
ICAgY2hpbGQtPnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7CiAgICAgaWYgKGNoaWxk
LT5pc1RleHQoKSkgewotICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IHRydWU7CisgICAgICAg
IGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+cGFyZW50KCkgPT0gcmVuZGVyZXIoKSkKKyAgICAgICAg
ICAgIG1faGFzVGV4dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgbV9oYXNUZXh0RGVzY2VuZGFu
dHMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKSB7CiAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY2hpbGQpLT5oYXNUZXh0RGVz
Y2VuZGFudHMoKSkKQEAgLTExMSwxMiArMTEyLDE1IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRk
VG9MaW5lKElubGluZUJveCoKICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc1JlcGxh
Y2VkKCkpCiAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVp
Z2h0QW5kQmFzZWxpbmUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0KCkp
IHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+aXNCUigpKSB7CisgICAgICAg
ICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPmlzQlIoKSB8fCBjaGlsZC0+cmVuZGVyZXIoKS0+
cGFyZW50KCkgIT0gcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHls
ZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkKLSAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGls
ZFN0eWxlLT5saW5lSGVpZ2h0KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5saW5lR2FwKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCkKICAgICAgICAgICAgICAg
ICAgICAgfHwgKHBhcmVudFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlz
Um9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJ
TkUpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxp
bmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxk
U3R5bGUtPmhhc1RleHRDb21iaW5lKCkgfHwgY2hpbGRTdHlsZS0+dGV4dEVtcGhhc2lzTWFyaygp
ICE9IFRleHRFbXBoYXNpc01hcmtOb25lKQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNoaWxkU3R5bGUtPmhhc1RleHRDb21iaW5lKCkgfHwgY2hpbGRTdHlsZS0+dGV4dEVtcGhhc2lz
TWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lKQogICAgICAgICAgICAgICAgIHNob3VsZENs
ZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPmlzQlIoKSkg
ewpAQCAtMTI4LDcgKzEzMiw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKElubGlu
ZUJveCoKICAgICAgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBjaGlsZEZsb3dCb3ggPSBzdGF0
aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY2hpbGQpOwogICAgICAgICAgICAgICAgIC8vIENoZWNr
IHRoZSBjaGlsZCdzIGJpdCwgYW5kIHRoZW4gYWxzbyBjaGVjayBmb3IgZGlmZmVyZW5jZXMgaW4g
Zm9udCwgbGluZS1oZWlnaHQsIHZlcnRpY2FsLWFsaWduCiAgICAgICAgICAgICAgICAgaWYgKCFj
aGlsZEZsb3dCb3gtPmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSB8
fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgIT0gY2hpbGRTdHls
ZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkKLSAgICAgICAgICAgICAgICAgICAgfHwg
cGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSAhPSBjaGlsZFN0eWxl
LT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWln
aHQoKSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCkKKyAgICAgICAgICAgICAgICAgICAgfHwg
cGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSAhPSBjaGlsZFN0eWxl
LT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkKKyAgICAgICAgICAgICAgICAgICAgfHwg
cGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKSAhPSBjaGlsZFN0eWxl
LT5mb250KCkuZm9udE1ldHJpY3MoKS5saW5lR2FwKCkKKyAgICAgICAgICAgICAgICAgICAgfHwg
cGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCkKICAg
ICAgICAgICAgICAgICAgICAgfHwgKHBhcmVudFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFT
RUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS0+aGFzQm9y
ZGVyKCkgfHwgY2hpbGRTdHlsZS0+aGFzUGFkZGluZygpIHx8IGNoaWxkU3R5bGUtPmhhc1RleHRD
b21iaW5lKCkpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZl
U2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CkBAIC03MzIsMTIgKzczOCwxMiBAQCBp
bmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3hTaGFkb3dWCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxM
ZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxU
b3BWaXN1YWxPdmVyZmxvdyk7CiB9CiAKLWlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRl
eHRCb3hWaXN1YWxPdmVyZmxvdyhjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIEludFJlY3QmIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdykKK2lubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hW
aXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIEludFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVy
ZmxvdykKIHsKICAgICBpZiAodGV4dEJveC0+a25vd25Ub0hhdmVOb092ZXJmbG93KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxl
KG1fZmlyc3RMaW5lKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJl
cigpLT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgCiAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuZmluZCh0ZXh0Qm94KTsK
ICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAu
ZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOwpAQCAtNzg4LDYgKzc5NCw4IEBAIGlubGlu
ZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXMKICAgICAKICAgICBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cgPSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxU
b3BWaXN1YWxPdmVyZmxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxSaWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9n
aWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHRleHRCb3gtPnNldExvZ2lj
YWxPdmVyZmxvd1JlY3QobG9naWNhbFZpc3VhbE92ZXJmbG93KTsKIH0KIAogaW5saW5lIHZvaWQg
SW5saW5lRmxvd0JveDo6YWRkUmVwbGFjZWRDaGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCog
aW5saW5lQm94LCBJbnRSZWN0JiBsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIEludFJlY3QmIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdykKQEAgLTgzNSw3ICs4NDMsOSBAQCB2b2lkIElubGluZUZsb3dCb3g6
OmNvbXB1dGVPdmVyZmxvdyhpbnQgCiAgICAgICAgICAgICBSZW5kZXJUZXh0KiBydCA9IHRvUmVu
ZGVyVGV4dCh0ZXh0LT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmIChydC0+aXNCUigpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRkVGV4dEJveFZpc3VhbE92
ZXJmbG93KHRleHQsIHRleHRCb3hEYXRhTWFwLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOworICAg
ICAgICAgICAgSW50UmVjdCB0ZXh0Qm94T3ZlcmZsb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0LT5s
b2dpY2FsRnJhbWVSZWN0KCkpKTsKKyAgICAgICAgICAgIGFkZFRleHRCb3hWaXN1YWxPdmVyZmxv
dyh0ZXh0LCB0ZXh0Qm94RGF0YU1hcCwgdGV4dEJveE92ZXJmbG93KTsKKyAgICAgICAgICAgIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy51bml0ZSh0ZXh0Qm94T3ZlcmZsb3cpOwogICAgICAgICB9IGVs
c2UgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5pc1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgICAg
ICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIp
OwogICAgICAgICAgICAgZmxvdy0+Y29tcHV0ZU92ZXJmbG93KGxpbmVUb3AsIGxpbmVCb3R0b20s
IHRleHRCb3hEYXRhTWFwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAkocmV2aXNpb24gODI2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgYWRkQm94U2hhZG93VmlzdWFsT3ZlcmZsb3coSW50UmVjdCYg
bG9naWNhbFZpc3VhbE92ZXJmbG93KTsKLSAgICB2b2lkIGFkZFRleHRCb3hWaXN1YWxPdmVyZmxv
dyhjb25zdCBJbmxpbmVUZXh0Qm94KiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
LCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOworICAgIHZvaWQgYWRkVGV4dEJveFZp
c3VhbE92ZXJmbG93KElubGluZVRleHRCb3gqLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcCYsIEludFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAgICAgdm9pZCBhZGRSZXBs
YWNlZENoaWxkT3ZlcmZsb3coY29uc3QgSW5saW5lQm94KiwgSW50UmVjdCYgbG9naWNhbExheW91
dE92ZXJmbG93LCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiA4MjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAgKzQ4LDQ5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgSW5s
aW5lVGV4dEJveCosIEludFJlY3Q+IElubGluZVRleHRCb3hNYXA7CitzdGF0aWMgSW5saW5lVGV4
dEJveE1hcCogZ1RleHRCb3hlc1dpdGhPdmVyZmxvdyA9IDA7CisKK3ZvaWQgSW5saW5lVGV4dEJv
eDo6ZGVzdHJveShSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKCFtX2tub3duVG9IYXZl
Tm9PdmVyZmxvdyAmJiBnVGV4dEJveGVzV2l0aE92ZXJmbG93KQorICAgICAgICBnVGV4dEJveGVz
V2l0aE92ZXJmbG93LT5yZW1vdmUodGhpcyk7CisgICAgSW5saW5lQm94OjpkZXN0cm95KGFyZW5h
KTsKK30KKworSW50UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2dpY2FsT3ZlcmZsb3dSZWN0KCkgY29u
c3QKK3sKKyAgICBpZiAobV9rbm93blRvSGF2ZU5vT3ZlcmZsb3cgfHwgIWdUZXh0Qm94ZXNXaXRo
T3ZlcmZsb3cpCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGxvZ2ljYWxGcmFtZVJl
Y3QoKSk7CisgICAgcmV0dXJuIGdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3ctPmdldCh0aGlzKTsKK30K
Kwordm9pZCBJbmxpbmVUZXh0Qm94OjpzZXRMb2dpY2FsT3ZlcmZsb3dSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgQVNTRVJUKCFtX2tub3duVG9IYXZlTm9PdmVyZmxvdyk7CisgICAg
aWYgKCFnVGV4dEJveGVzV2l0aE92ZXJmbG93KQorICAgICAgICBnVGV4dEJveGVzV2l0aE92ZXJm
bG93ID0gbmV3IElubGluZVRleHRCb3hNYXA7CisgICAgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdy0+
YWRkKHRoaXMsIHJlY3QpOworfQorCiBpbnQgSW5saW5lVGV4dEJveDo6YmFzZWxpbmVQb3NpdGlv
bihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25zdAogewogICAgIGlmICghaXNUZXh0KCkg
fHwgIXBhcmVudCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcGFyZW50KCktPmJh
c2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKTsKKyAgICBpZiAocGFyZW50KCktPnJlbmRlcmVy
KCkgPT0gcmVuZGVyZXIoKS0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiBwYXJlbnQoKS0+YmFz
ZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUpOworICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgpKS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5
cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGlj
YWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOwogfQogICAgIAogaW50IElubGluZVRl
eHRCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAogewotICAgIGlmICghaXNUZXh0KCkgfHwgIXBhcmVu
dCgpKQorICAgIGlmICghaXNUZXh0KCkgfHwgIXJlbmRlcmVyKCktPnBhcmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAobV9yZW5kZXJlci0+aXNCUigpKQogICAgICAgICByZXR1cm4g
dG9SZW5kZXJCUihtX3JlbmRlcmVyKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSk7Ci0gICAgcmV0
dXJuIHBhcmVudCgpLT5saW5lSGVpZ2h0KCk7CisgICAgaWYgKHBhcmVudCgpLT5yZW5kZXJlcigp
ID09IHJlbmRlcmVyKCktPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gcGFyZW50KCktPmxpbmVI
ZWlnaHQoKTsKKyAgICByZXR1cm4gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcigpLT5w
YXJlbnQoKSktPmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpv
bnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7CiB9CiAK
IGludCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Ub3AoKQpAQCAtNDM1LDcgKzQ2NCw3IEBAIHN0
YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKICAgICAgICAgOiBBZmZpbmVU
cmFuc2Zvcm0oMCwgLTEsIDEsIDAsIGJveFJlY3QueCgpIC0gYm94UmVjdC5tYXhZKCksIGJveFJl
Y3QueCgpICsgYm94UmVjdC5tYXhZKCkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHksIGludCAvKmxpbmVUb3AqLywgaW50IC8qbGluZUJvdHRvbSovKQog
ewogICAgIGlmIChpc0xpbmVCcmVhaygpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5S
b290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFIHx8CiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24gfHwgcGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8ICFtX2xlbikKQEAgLTQ0MywxNyAr
NDcyLDEwIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAg
IEFTU0VSVChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYmIHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcyk7CiAKLSAgICBpbnQgbG9naWNh
bExlZnRPdmVyZmxvdyA9IDA7Ci0gICAgaW50IGxvZ2ljYWxSaWdodE92ZXJmbG93ID0gMDsKLSAg
ICBpZiAoIWtub3duVG9IYXZlTm9PdmVyZmxvdygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUZWNo
bmljYWxseSB3ZSdyZSBwb3RlbnRpYWxseSBpbmNvcnBvcmF0aW5nIG90aGVyIHZpc3VhbCBvdmVy
ZmxvdyB0aGF0IGhhZCBub3RoaW5nIHRvIGRvIHdpdGggdXMuCi0gICAgICAgIC8vIFdvdWxkIGl0
IGJlIHNpbXBsZXIgdG8ganVzdCBjaGVjayBvdXIgb3duIHNoYWRvdyBhbmQgc3Ryb2tlIG92ZXJm
bG93IGJ5IGhhbmQgaGVyZT8KLSAgICAgICAgSW50UmVjdCBwYXJlbnRWaXN1YWxPdmVyZmxvdyA9
IHBhcmVudCgpLT5sb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20p
OwotICAgICAgICBsb2dpY2FsTGVmdE92ZXJmbG93ID0gcGFyZW50KCktPmxvZ2ljYWxMZWZ0KCkg
LSBwYXJlbnRWaXN1YWxPdmVyZmxvdy54KCk7Ci0gICAgICAgIGxvZ2ljYWxSaWdodE92ZXJmbG93
ID0gcGFyZW50VmlzdWFsT3ZlcmZsb3cubWF4WCgpIC0gcGFyZW50KCktPmxvZ2ljYWxSaWdodCgp
OwotICAgIH0KLSAgICBpbnQgbG9naWNhbFN0YXJ0ID0gbG9naWNhbExlZnQoKSAtIGxvZ2ljYWxM
ZWZ0T3ZlcmZsb3cgKyAoaXNIb3Jpem9udGFsKCkgPyB0eCA6IHR5KTsKLSAgICBpbnQgbG9naWNh
bEV4dGVudCA9IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRPdmVyZmxvdyArIGxvZ2ljYWxS
aWdodE92ZXJmbG93OworICAgIGludCBsb2dpY2FsTGVmdFNpZGUgPSBsb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93KCk7CisgICAgaW50IGxvZ2ljYWxSaWdodFNpZGUgPSBsb2dpY2FsUmlnaHRWaXN1
YWxPdmVyZmxvdygpOworICAgIGludCBsb2dpY2FsU3RhcnQgPSBsb2dpY2FsTGVmdFNpZGUgKyAo
aXNIb3Jpem9udGFsKCkgPyB0eCA6IHR5KTsKKyAgICBpbnQgbG9naWNhbEV4dGVudCA9IGxvZ2lj
YWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7CiAgICAgCiAgICAgaW50IHBhaW50RW5kID0g
aXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBwYWludEluZm8ucmVjdC5t
YXhZKCk7CiAgICAgaW50IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5y
ZWN0LngoKSA6IHBhaW50SW5mby5yZWN0LnkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gODI2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koUmVuZGVy
QXJlbmEqKTsKKwogICAgIElubGluZVRleHRCb3gqIHByZXZUZXh0Qm94KCkgY29uc3QgeyByZXR1
cm4gbV9wcmV2VGV4dEJveDsgfQogICAgIElubGluZVRleHRCb3gqIG5leHRUZXh0Qm94KCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0VGV4dEJveDsgfQogICAgIHZvaWQgc2V0TmV4dFRleHRCb3goSW5s
aW5lVGV4dEJveCogbikgeyBtX25leHRUZXh0Qm94ID0gbjsgfQpAQCAtODAsNiArODIsMTMgQEAg
cHVibGljOgogCiAgICAgYm9vbCBnZXRFbXBoYXNpc01hcmtQb3NpdGlvbihSZW5kZXJTdHlsZSos
IFRleHRFbXBoYXNpc1Bvc2l0aW9uJikgY29uc3Q7CiAKKyAgICBJbnRSZWN0IGxvZ2ljYWxPdmVy
Zmxvd1JlY3QoKSBjb25zdDsKKyAgICB2b2lkIHNldExvZ2ljYWxPdmVyZmxvd1JlY3QoY29uc3Qg
SW50UmVjdCYpOworICAgIGludCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCkueSgpOyB9CisgICAgaW50IGxvZ2ljYWxCb3R0b21W
aXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS5tYXhZ
KCk7IH0KKyAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS54KCk7IH0KKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCkubWF4WCgpOyB9
CisgICAgCiBwcml2YXRlOgogICAgIGludCBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsZWN0
aW9uQm90dG9tKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAJKHJldmlzaW9uIDgyNjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3OSw3ICs1Mzc5LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIoKQogICAgICAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5
b3V0U3RhdGUoKTsKICAgICAgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNU
ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dChjaGlsZCktPmRpcnR5TGlu
ZUJveGVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQoY2hpbGQpLT5y
ZW1vdmVBbmREZXN0cm95VGV4dEJveGVzKCk7CiAgICAgICAgICAgICAgICAgZmlyc3RMZXR0ZXIt
PnJlbW92ZUNoaWxkKGNoaWxkKTsKICAgICAgICAgICAgICAgICBuZXdGaXJzdExldHRlci0+YWRk
Q2hpbGQoY2hpbGQsIDApOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDgyNjEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNiw4ICsyMDYsMTAgQEAgSW5saW5lRmxvd0JveCogUmVuZGVy
QmxvY2s6OmNyZWF0ZUxpbmVCbwogICAgIGRvIHsKICAgICAgICAgQVNTRVJUKG9iai0+aXNSZW5k
ZXJJbmxpbmUoKSB8fCBvYmogPT0gdGhpcyk7CiAgICAgICAgIAorICAgICAgICBSZW5kZXJJbmxp
bmUqIGlubGluZUZsb3cgPSAob2JqICE9IHRoaXMpID8gdG9SZW5kZXJJbmxpbmUob2JqKSA6IDA7
CisKICAgICAgICAgLy8gR2V0IHRoZSBsYXN0IGJveCB3ZSBtYWRlIGZvciB0aGlzIHJlbmRlciBv
YmplY3QuCi0gICAgICAgIHBhcmVudEJveCA9IG9iai0+aXNSZW5kZXJJbmxpbmUoKSA/IHRvUmVu
ZGVySW5saW5lKG9iaiktPmxhc3RMaW5lQm94KCkgOiB0b1JlbmRlckJsb2NrKG9iaiktPmxhc3RM
aW5lQm94KCk7CisgICAgICAgIHBhcmVudEJveCA9IGlubGluZUZsb3cgPyBpbmxpbmVGbG93LT5s
YXN0TGluZUJveCgpIDogdG9SZW5kZXJCbG9jayhvYmopLT5sYXN0TGluZUJveCgpOwogCiAgICAg
ICAgIC8vIElmIHRoaXMgYm94IG9yIGl0cyBhbmNlc3RvciBpcyBjb25zdHJ1Y3RlZCB0aGVuIGl0
IGlzIGZyb20gYSBwcmV2aW91cyBsaW5lLCBhbmQgd2UgbmVlZAogICAgICAgICAvLyB0byBtYWtl
IGEgbmV3IGJveCBmb3Igb3VyIGxpbmUuICBJZiB0aGlzIGJveCBvciBpdHMgYW5jZXN0b3IgaXMg
dW5jb25zdHJ1Y3RlZCBidXQgaXQgaGFzCkBAIC0yMTUsNyArMjE3LDkgQEAgSW5saW5lRmxvd0Jv
eCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCbwogICAgICAgICAvLyBhcyB3ZWxsLiAgSW4gdGhp
cyBzaXR1YXRpb24gb3VyIGlubGluZSBoYXMgYWN0dWFsbHkgYmVlbiBzcGxpdCBpbiB0d28gb24K
ICAgICAgICAgLy8gdGhlIHNhbWUgbGluZSAodGhpcyBjYW4gaGFwcGVuIHdpdGggdmVyeSBmYW5j
eSBsYW5ndWFnZSBtaXh0dXJlcykuCiAgICAgICAgIGJvb2wgY29uc3RydWN0ZWROZXdCb3ggPSBm
YWxzZTsKLSAgICAgICAgaWYgKCFwYXJlbnRCb3ggfHwgcGFyZW50SXNDb25zdHJ1Y3RlZE9ySGF2
ZU5leHQocGFyZW50Qm94KSkgeworICAgICAgICBib29sIGFsbG93ZWRUb0NvbnN0cnVjdE5ld0Jv
eCA9ICFoYXNEZWZhdWx0TGluZUJveENvbnRhaW4gfHwgIWlubGluZUZsb3cgfHwgaW5saW5lRmxv
dy0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCk7CisgICAgICAgIGJvb2wgY2FuVXNlRXhpc3RpbmdQ
YXJlbnRCb3ggPSBwYXJlbnRCb3ggJiYgIXBhcmVudElzQ29uc3RydWN0ZWRPckhhdmVOZXh0KHBh
cmVudEJveCk7CisgICAgICAgIGlmIChhbGxvd2VkVG9Db25zdHJ1Y3ROZXdCb3ggJiYgIWNhblVz
ZUV4aXN0aW5nUGFyZW50Qm94KSB7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBu
ZXcgYm94IGZvciB0aGlzIHJlbmRlciBvYmplY3QuICBPbmNlCiAgICAgICAgICAgICAvLyBtYWRl
LCB3ZSBuZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KICAg
ICAgICAgICAgIElubGluZUJveCogbmV3Qm94ID0gY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIo
b2JqLCBvYmogPT0gdGhpcyk7CkBAIC0yMjgsMTkgKzIzMiwyMSBAQCBJbmxpbmVGbG93Qm94KiBS
ZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJvCiAgICAgICAgICAgICBjb25zdHJ1Y3RlZE5ld0JveCA9
IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJl
c3VsdCA9IHBhcmVudEJveDsKLQotICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgYmxvY2sg
aXRzZWxmLCB0aGVuIHxib3h8IHJlcHJlc2VudHMgdGhlIHJvb3QKLSAgICAgICAgLy8gaW5saW5l
IGJveCBmb3IgdGhlIGxpbmUsIGFuZCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgYXBwZW5kZWQgdG8g
YW55IHBhcmVudAotICAgICAgICAvLyBpbmxpbmUuCi0gICAgICAgIGlmIChjaGlsZEJveCkKLSAg
ICAgICAgICAgIHBhcmVudEJveC0+YWRkVG9MaW5lKGNoaWxkQm94KTsKKyAgICAgICAgaWYgKGNv
bnN0cnVjdGVkTmV3Qm94IHx8IGNhblVzZUV4aXN0aW5nUGFyZW50Qm94KSB7CisgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRCb3g7CisKKyAg
ICAgICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBibG9jayBpdHNlbGYsIHRoZW4gfGJveHwg
cmVwcmVzZW50cyB0aGUgcm9vdAorICAgICAgICAgICAgLy8gaW5saW5lIGJveCBmb3IgdGhlIGxp
bmUsIGFuZCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgYXBwZW5kZWQgdG8gYW55IHBhcmVudAorICAg
ICAgICAgICAgLy8gaW5saW5lLgorICAgICAgICAgICAgaWYgKGNoaWxkQm94KQorICAgICAgICAg
ICAgICAgIHBhcmVudEJveC0+YWRkVG9MaW5lKGNoaWxkQm94KTsKIAotICAgICAgICBpZiAoIWNv
bnN0cnVjdGVkTmV3Qm94IHx8IG9iaiA9PSB0aGlzKQotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoIWNvbnN0cnVjdGVkTmV3Qm94IHx8IG9iaiA9PSB0aGlzKQorICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNoaWxkQm94ID0gcGFyZW50Qm94OyAgICAgICAgCisg
ICAgICAgICAgICBjaGlsZEJveCA9IHBhcmVudEJveDsgICAgICAgIAorICAgICAgICB9CiAKICAg
ICAgICAgLy8gSWYgd2UndmUgZXhjZWVkZWQgb3VyIGxpbmUgZGVwdGgsIHRoZW4ganVtcCBzdHJh
aWdodCB0byB0aGUgcm9vdCBhbmQgc2tpcCBhbGwgdGhlIHJlbWFpbmluZwogICAgICAgICAvLyBp
bnRlcm1lZGlhdGUgaW5saW5lIGZsb3dzLgpAQCAtNjg1LDYgKzY5MSw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgby0+bGF5
b3V0SWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KG8tPmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgpICYmICFlbmRPZklubGluZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW8tPmlzVGV4dCgpKQorICAgICAgICAgICAgICAgICAgICB0
b1JlbmRlcklubGluZShvKS0+dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZ1bGxMYXlvdXQgfHwgby0+c2VsZk5lZWRzTGF5b3V0KCkpCiAgICAgICAg
ICAgICAgICAgICAgIGRpcnR5TGluZUJveGVzRm9yUmVuZGVyZXIobywgZnVsbExheW91dCk7CiAg
ICAgICAgICAgICAgICAgby0+c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDgyNjExKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC00Nyw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIFJlbmRlcklubGluZTo6UmVuZGVySW5saW5lKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5k
ZXJCb3hNb2RlbE9iamVjdChub2RlKQogICAgICwgbV9saW5lSGVpZ2h0KC0xKQorICAgICwgbV9h
bHdheXNDcmVhdGVMaW5lQm94ZXMoZmFsc2UpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1
ZSk7CiB9CkBAIC0xNDQsNiArMTQ2LDE1IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENo
YW5nZShTdHlsZUQKIAogICAgIG1fbGluZUhlaWdodCA9IC0xOwogCisgICAgaWYgKCFtX2Fsd2F5
c0NyZWF0ZUxpbmVCb3hlcykgeworICAgICAgICBib29sIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9
IGhhc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzQm94RGVjb3JhdGlvbnMoKSB8fCBzdHlsZSgp
LT5oYXNQYWRkaW5nKCkgfHwgc3R5bGUoKS0+aGFzTWFyZ2luKCkgfHwgc3R5bGUoKS0+aGFzT3V0
bGluZSgpOworICAgICAgICBpZiAob2xkU3R5bGUgJiYgYWx3YXlzQ3JlYXRlTGluZUJveGVzKSB7
CisgICAgICAgICAgICBkaXJ0eUxpbmVCb3hlcyhmYWxzZSk7CisgICAgICAgICAgICBzZXROZWVk
c0xheW91dCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hl
cyA9IGFsd2F5c0NyZWF0ZUxpbmVCb3hlczsKKyAgICB9CisKICAgICAvLyBVcGRhdGUgcHNldWRv
cyBmb3IgOmJlZm9yZSBhbmQgOmFmdGVyIG5vdy4KICAgICBpZiAoIWlzQW5vbnltb3VzKCkgJiYg
ZG9jdW1lbnQoKS0+dXNlc0JlZm9yZUFmdGVyUnVsZXMoKSkgewogICAgICAgICBjaGlsZHJlbigp
LT51cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQodGhpcywgQkVGT1JFKTsKQEAgLTE1MSw2ICsxNjIs
NDIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRAogICAgIH0KIH0K
IAordm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpCit7Cisg
ICAgLy8gT25jZSB3ZSBoYXZlIGJlZW4gdGFpbnRlZCBvbmNlLCBqdXN0IGFzc3VtZSBpdCB3aWxs
IGhhcHBlbiBhZ2Fpbi4gIFRoaXMgd2F5IGVmZmVjdHMgbGlrZSBob3ZlciBoaWdobGlnaHRpbmcg
dGhhdCBjaGFuZ2UgdGhlCisgICAgLy8gYmFja2dyb3VuZCBjb2xvciB3aWxsIG9ubHkgY2F1c2Ug
YSBsYXlvdXQgb24gdGhlIGZpcnN0IHJvbGxvdmVyLgorICAgIGlmIChtX2Fsd2F5c0NyZWF0ZUxp
bmVCb3hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gcGFyZW50KCktPnN0eWxlKCk7CisgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJbmxp
bmUgPSBwYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSA/IHRvUmVuZGVySW5saW5lKHBhcmVudCgp
KSA6IDA7CisgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUo
KTsKKyAgICBib29sIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IChwYXJlbnRSZW5kZXJJbmxpbmUg
JiYgcGFyZW50UmVuZGVySW5saW5lLT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJbmxpbmUgJiYgcGFyZW50
U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFy
aygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAoY2hlY2tGb250cyAmJiAocGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpICE9IHN0eWxlKCktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuZGVzY2VudCgpICE9IHN0eWxlKCktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2Nl
bnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmZv
bnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKSAhPSBzdHlsZSgpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5saW5lR2FwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVu
dFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5bGUoKS0+bGluZUhlaWdodCgpKSk7CisKKyAgICBp
ZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcyAmJiBjaGVja0ZvbnRzICYmIGRvY3VtZW50KCktPnVz
ZXNGaXJzdExpbmVSdWxlcygpKSB7CisgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0
IGxpbmUgc3R5bGUgYXMgd2VsbC4KKyAgICAgICAgcGFyZW50U3R5bGUgPSBwYXJlbnQoKS0+c3R5
bGUodHJ1ZSk7CisgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gc3R5bGUodHJ1ZSk7
CisgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IHBhcmVudFN0eWxlLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZvbnQoKS5mb250
TWV0cmljcygpLmRlc2NlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBw
YXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkubGluZUdhcCgpICE9IGNoaWxkU3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCk7CisgICAgfQorCisgICAgaWYgKGFsd2F5c0NyZWF0
ZUxpbmVCb3hlcykgeworICAgICAgICBkaXJ0eUxpbmVCb3hlcyhmYWxzZSk7CisgICAgICAgIG1f
YWx3YXlzQ3JlYXRlTGluZUJveGVzID0gdHJ1ZTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5s
aW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewogICAgIGlmIChjb250aW51YXRpb24oKSkKQEAgLTQyNCw5ICs0NzEsMTEgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogCiB2b2lkIFJlbmRlcklu
bGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0
eSkKIHsKLSAgICBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7Cisg
ICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAgY3VsbGVkSW5saW5lQWJz
b2x1dGVSZWN0cyh0aGlzLCByZWN0cywgdHgsIHR5KTsKKyAgICBlbHNlIGlmIChJbmxpbmVGbG93
Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCkpIHsKICAgICAgICAgZm9yICg7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3Qo
dHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+eSgpLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgY3Vy
ci0+bG9naWNhbEhlaWdodCgpKSk7CisgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5n
SW50UmVjdChGbG9hdFJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+eSgpLCBjdXJyLT53
aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVjdHMuYXBw
ZW5kKEludFJlY3QodHgsIHR5LCAwLCAwKSk7CiAKQEAgLTQ0MSwxMSArNDkwLDc2IEBAIHZvaWQg
UmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICB9CiB9CiAKK3ZvaWQgUmVu
ZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGluZSog
Y29udGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3sKKyAg
ICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBXZSB3YW50IHRvIGdldCB0aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlv
biwgYW5kIHRoZW4gdXNlIG91ciBmb250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jaworICAg
ICAgICAvLyBkaXJlY3Rpb24gKGFsaWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgor
ICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBjdXJy
Qm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBpZiAoY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpKSB7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9
IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOworICAgICAgICAgICAgICAgIGlu
dCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVy
KCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIHR5ICsgbG9naWNhbFRvcCwg
Y3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdp
blJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgbG9naWNhbFRvcCwgdHkgKyBjdXJy
Qm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dp
Y2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3Vy
ckJveC0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNs
b3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBk
b2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgorICAgICAg
ICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7Cisg
ICAgICAgICAgICBpZiAoIWN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQorICAg
ICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmN1bGxlZElubGluZUFic29sdXRlUmVjdHMoY29udGFp
bmVyLCByZWN0cywgdHgsIHR5KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5lID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94
KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZExpbmUtPnJv
b3QoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dp
Y2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExp
bmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0
eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmlj
cygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgKyBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxv
Z2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9h
dFJlY3QodHggKyBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5ICsgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxM
ZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNh
bEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGls
ZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsg
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgeworICAg
ICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7CisgICAg
ICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LT5maXJzdFRl
eHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5leHRUZXh0Qm94KCkp
IHsKKyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRUZXh0LT5y
b290KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2Fs
VG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxl
KHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJl
Y3QodHggKyBjaGlsZFRleHQtPngoKSwgdHkgKyBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2lj
YWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdCh0eCArIGxvZ2ljYWxUb3AsIHR5ICsgY2hp
bGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpOwor
ICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcklubGluZTo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7Ci0gICAgaWYgKElubGlu
ZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgeworICAgIGlmICghYWx3YXlzQ3JlYXRl
TGluZUJveGVzKCkpCisgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUXVhZHModGhpcywgcXVh
ZHMpOworICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkg
ewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKLSAg
ICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnIt
PmxvZ2ljYWxXaWR0aCgpLCBjdXJyLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgRmxv
YXRSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vy
ci0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQobG9jYWxSZWN0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTQ1NSwxOSArNTY5LDg0
IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjwKICAgICAgICAgY29u
dGludWF0aW9uKCktPmFic29sdXRlUXVhZHMocXVhZHMpOwogfQogCit2b2lkIFJlbmRlcklubGlu
ZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5l
ciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIGJvb2wgaXNIb3Jpem9udGFsID0g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRo
ZSBtYXJnaW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3VyIGZv
bnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCisgICAgICAgIC8vIGRpcmVjdGlvbiAoYWxp
Z25lZCB0byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCisgICAgICAgIGlmIChjdXJyLT5pc0Jv
eCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJy
KTsKKyAgICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94V3Jh
cHBlcigpLT5yb290KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWlu
ZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRh
aW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5t
YXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJn
aW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChs
b2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1h
cmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1h
cmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgIHF1
YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSBjaGlsZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2Ug
Y2FuIHJlY3VyLgorICAgICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5k
ZXJJbmxpbmUoY3Vycik7CisgICAgICAgICAgICBpZiAoIWN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0
ZUxpbmVCb3hlcygpKQorICAgICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmN1bGxlZElubGluZUFi
c29sdXRlUXVhZHMoY29udGFpbmVyLCBxdWFkcyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxpbmUtPmZp
cnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVC
b3goKSkgeworICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hp
bGRMaW5lLT5yb290KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9v
dEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gt
PmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29u
dGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0
ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxv
Z2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9h
dFJlY3QobG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZExpbmUtPnkoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9n
aWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAg
IGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJveCgp
OyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgeworICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsK
KyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwor
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
KyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGlmIChp
c0hvcml6b250YWwpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChjaGls
ZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNh
bEhlaWdodCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQs
IGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCiBpbnQgUmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKICAg
ICBpbnQgeCA9IFJlbmRlckJveE1vZGVsT2JqZWN0OjpvZmZzZXRMZWZ0KCk7Ci0gICAgaWYgKGZp
cnN0TGluZUJveCgpKQotICAgICAgICB4ICs9IGZpcnN0TGluZUJveCgpLT54KCk7CisgICAgSW5s
aW5lQm94KiBmaXJzdEJveCA9IGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gZmlyc3RMaW5lQm94
KCkgOiBjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKTsKKyAgICBpZiAoZmlyc3RCb3gpCisgICAg
ICAgIHggKz0gZmlyc3RCb3gtPngoKTsKICAgICByZXR1cm4geDsKIH0KIAogaW50IFJlbmRlcklu
bGluZTo6b2Zmc2V0VG9wKCkgY29uc3QKIHsKICAgICBpbnQgeSA9IFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpvZmZzZXRUb3AoKTsKLSAgICBpZiAoZmlyc3RMaW5lQm94KCkpCi0gICAgICAgIHkgKz0g
Zmlyc3RMaW5lQm94KCktPnkoKTsKKyAgICBJbmxpbmVCb3gqIGZpcnN0Qm94ID0gYWx3YXlzQ3Jl
YXRlTGluZUJveGVzKCkgPyBmaXJzdExpbmVCb3goKSA6IGN1bGxlZElubGluZUZpcnN0TGluZUJv
eCgpOworICAgIGlmIChmaXJzdEJveCkKKyAgICAgICAgeSArPSBmaXJzdEJveC0+eSgpOwogICAg
IHJldHVybiB5OwogfQogCkBAIC01NjUsNiArNzQ0LDExIEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJJbmxpbmU6OnBvc2l0aW9uRm8KIAogSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRp
bmdCb3goKSBjb25zdAogeworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFmaXJzdExpbmVCb3goKSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KGN1bGxlZElubGluZUJvdW5kaW5nQm94KHRoaXMpKTsKKyAgICB9CisKICAgICBJbnRS
ZWN0IHJlc3VsdDsKICAgICAKICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUyODk3MjE+LCBm
b3IgYW4gdW5rbm93biByZWFzb24gdGhlIGxpbmtlZCBsaXN0IGhlcmUgaXMgc29tZXRpbWVzIGlu
Y29uc2lzdGVudCwgZmlyc3QgaXMgbm9uLXplcm8gYW5kIGxhc3QgaXMgemVyby4gIFdlIGhhdmUg
YmVlbgpAQCAtNTk0LDggKzc3OCwxNjMgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91
bmRpbmdCb3goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJJbmxp
bmU6OmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVy
KSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgYm9vbCBpc0hvcml6b250YWwg
PSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQg
dGhlIG1hcmdpbiBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIg
Zm9udCBhc2NlbnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKKyAgICAgICAgLy8gZGlyZWN0aW9uIChh
bGlnbmVkIHRvIHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KKyAgICAgICAgaWYgKGN1cnItPmlz
Qm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1
cnIpOworICAgICAgICAgICAgaWYgKGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkgeworICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hX
cmFwcGVyKCktPnJvb3QoKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RC
b3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRh
aW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29u
dGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGN1cnJCb3gt
PmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2Fs
VG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgpICsgY3VyckJveC0+
bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2Fs
VG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRv
cCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRv
cCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgICAgICAvLyBJZiB0
aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1
ci4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5l
KGN1cnIpOworICAgICAgICAgICAgaWYgKCFjdXJySW5saW5lLT5hbHdheXNDcmVhdGVMaW5lQm94
ZXMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oY3VycklubGluZS0+
Y3VsbGVkSW5saW5lQm91bmRpbmdCb3goY29udGFpbmVyKSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxp
bmUtPmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4
dExpbmVCb3goKSkgeworICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94
ID0gY2hpbGRMaW5lLT5yb290KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9w
ID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJv
b3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgp
IC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
SGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5m
b250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVy
byhGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dp
Y2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRM
aW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0
KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAgICBSZW5kZXJU
ZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAgIGZvciAoSW5s
aW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJveCgpOyBjaGlsZFRl
eHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICAgICAg
ICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKKyAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94
LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJz
dExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5p
dGVJZk5vblplcm8oRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRl
eHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGxv
Z2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2lj
YWxXaWR0aCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KTsKK30KKworSW5saW5lQm94KiBSZW5kZXJJbmxpbmU6
OmN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0Cit7CisgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0
aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBm
b250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jaworICAgICAgICAvLyBkaXJlY3Rpb24gKGFs
aWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgorICAgICAgICBpZiAoY3Vyci0+aXNC
b3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBjdXJyQm94ID0gdG9SZW5kZXJCb3goY3Vy
cik7CisgICAgICAgICAgICBpZiAoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhl
IGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIu
CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShj
dXJyKTsKKyAgICAgICAgICAgIElubGluZUJveCogcmVzdWx0ID0gY3VycklubGluZS0+Zmlyc3RM
aW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4
dCgpKSB7CisgICAgICAgICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChj
dXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJyVGV4dC0+Zmlyc3RUZXh0Qm94KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnJUZXh0LT5maXJzdFRleHRCb3goKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworSW5saW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElu
bGluZUxhc3RMaW5lQm94KCkgY29uc3QKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBtYXJn
aW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3VyIGZvbnQgYXNj
ZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCisgICAgICAgIC8vIGRpcmVjdGlvbiAoYWxpZ25lZCB0
byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCisgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7
CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAg
ICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
ZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KKyAgICAg
ICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOwor
ICAgICAgICAgICAgSW5saW5lQm94KiByZXN1bHQgPSBjdXJySW5saW5lLT5sYXN0TGluZUJveElu
Y2x1ZGluZ0N1bGxpbmcoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgewor
ICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7Cisg
ICAgICAgICAgICBpZiAoY3VyclRleHQtPmxhc3RUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJUZXh0LT5sYXN0VGV4dEJveCgpOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCitJbnRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3Zl
cmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZXN1bHQoY3VsbGVkSW5s
aW5lQm91bmRpbmdCb3godGhpcykpOworICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9
IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEZvciBvdmVyZmxvdyB3ZSBqdXN0IGhhdmUg
dG8gcHJvcGFnYXRlIGJ5IGhhbmQgYW5kIHJlY29tcHV0ZSBpdCBhbGwuCisgICAgICAgIGlmIChj
dXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRl
ckJveChjdXJyKTsKKyAgICAgICAgICAgIGlmICghY3VyckJveC0+aGFzU2VsZlBhaW50aW5nTGF5
ZXIoKSAmJiBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKKyAgICAgICAgICAgICAgICBJ
bnRSZWN0IGxvZ2ljYWxSZWN0ID0gY3VyckJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZv
clByb3BhZ2F0aW9uKHN0eWxlKCkpOworICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZShjdXJyQm94LT54KCksIGN1
cnJCb3gtPnkoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhs
b2dpY2FsUmVjdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgbG9naWNhbFJlY3QubW92ZShjdXJyQm94LT55KCksIGN1cnJCb3gtPngoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhsb2dpY2FsUmVjdC50cmFuc3Bvc2Vk
UmVjdCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCisg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJy
KTsKKyAgICAgICAgICAgIGlmICghY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkp
CisgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGN1cnJJbmxpbmUtPmN1bGxl
ZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBlbHNlIGlm
ICghY3VycklubGluZS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQudW5pdGVJZk5vblplcm8oY3VycklubGluZS0+bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5k
aW5nQm94KCkpOworICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTsgT3ZlcmZsb3cgZnJvbSB0ZXh0IGJveGVzIGlzIGxvc3QuIFdlIHdpbGwg
bmVlZCB0byBjYWNoZSB0aGlzIGluZm9ybWF0aW9uIGluCisgICAgICAgICAgICAvLyBJbmxpbmVU
ZXh0Qm94ZXMuCisgICAgICAgICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4
dChjdXJyKTsKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhjdXJyVGV4dC0+bGlu
ZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIEludFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXJm
bG93Qm91bmRpbmdCb3goKSBjb25zdAogeworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVz
KCkpCisgICAgICAgIHJldHVybiBjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94
KCk7CisKICAgICBpZiAoIWZpcnN0TGluZUJveCgpIHx8ICFsYXN0TGluZUJveCgpKQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwogCkBAIC02MTAsMTIgKzk0OSwxMSBAQCBJbnRSZWN0IFJlbmRl
cklubGluZTo6bGluZXNWaXN1YWxPdmVyZmxvCiAgICAgUm9vdElubGluZUJveCogZmlyc3RSb290
Qm94ID0gZmlyc3RMaW5lQm94KCktPnJvb3QoKTsKICAgICBSb290SW5saW5lQm94KiBsYXN0Um9v
dEJveCA9IGxhc3RMaW5lQm94KCktPnJvb3QoKTsKICAgICAKLSAgICBmbG9hdCBsb2dpY2FsTGVm
dCA9IGZpcnN0TGluZUJveCgpLT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CiAgICAgZmxv
YXQgbG9naWNhbFRvcCA9IGZpcnN0TGluZUJveCgpLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3co
Zmlyc3RSb290Qm94LT5saW5lVG9wKCkpOwogICAgIGZsb2F0IGxvZ2ljYWxXaWR0aCA9IGxvZ2lj
YWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7CiAgICAgZmxvYXQgbG9naWNhbEhlaWdodCA9
IGxhc3RMaW5lQm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhsYXN0Um9vdEJveC0+
bGluZUJvdHRvbSgpKSAtIGxvZ2ljYWxUb3A7CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChGbG9hdFJlY3QobG9naWNhbExlZnQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCkpOworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoRmxvYXRSZWN0KGxvZ2ljYWxMZWZ0U2lkZSwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBs
b2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQogICAgICAgICByZWN0ID0gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAgIHJldHVybiBy
ZWN0OwpAQCAtNjI2LDcgKzk2NCw3IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3Zl
cmZsb3dSZWMKICAgICAvLyBPbmx5IHJ1bi1pbnMgYXJlIGFsbG93ZWQgaW4gaGVyZSBkdXJpbmcg
bGF5b3V0LgogICAgIEFTU0VSVCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxl
ZCgpIHx8IGlzUnVuSW4oKSk7CiAKLSAgICBpZiAoIWZpcnN0TGluZUJveCgpICYmICFjb250aW51
YXRpb24oKSkKKyAgICBpZiAoIWZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSAmJiAhY29u
dGludWF0aW9uKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICAvLyBGaW5kIG91
ciBsZWZ0bW9zdCBwb3NpdGlvbi4KQEAgLTg5NCw5ICsxMjMyLDM0IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjp1cGRhdGVIaXRUZXN0UmVzdWx0KEgKIAogdm9pZCBSZW5kZXJJbmxpbmU6OmRpcnR5TGlu
ZUJveGVzKGJvb2wgZnVsbExheW91dCkKIHsKLSAgICBpZiAoZnVsbExheW91dCkKKyAgICBpZiAo
ZnVsbExheW91dCkgewogICAgICAgICBtX2xpbmVCb3hlcy5kZWxldGVMaW5lQm94ZXMocmVuZGVy
QXJlbmEoKSk7Ci0gICAgZWxzZQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFh
bHdheXNDcmVhdGVMaW5lQm94ZXMoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGdyb3ZlbCBp
bnRvIG91ciBjaGlsZHJlbiBpbiBvcmRlciB0byBkaXJ0eSB0aGUgYXBwcm9wcmlhdGUgbGluZXMu
CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGN1cnItPmlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChjdXJyLT5pc0JveCgpICYmICFjdXJyLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAg
ICAgICAgICAgUmVuZGVyQm94KiBjdXJyQm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAg
ICAgICAgICAgaWYgKGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCktPm1hcmtEaXJ0eSgpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICghY3Vyci0+c2VsZk5lZWRzTGF5b3V0KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVu
IHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5s
aW5lID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoSW5s
aW5lRmxvd0JveCogY2hpbGRMaW5lID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94KCk7IGNoaWxk
TGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRMaW5lLT5yb290KCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJv
eCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGV4dC0+cm9vdCgpLT5tYXJrRGlydHkoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKICAg
ICAgICAgbV9saW5lQm94ZXMuZGlydHlMaW5lQm94ZXMoKTsKIH0KIApAQCAtOTA3LDYgKzEyNzAs
NyBAQCBJbmxpbmVGbG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUlubGluCiAKIElubGluZUZs
b3dCb3gqIFJlbmRlcklubGluZTo6Y3JlYXRlQW5kQXBwZW5kSW5saW5lRmxvd0JveCgpCiB7Cisg
ICAgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCk7CiAgICAgSW5saW5lRmxvd0JveCogZmxvd0Jv
eCA9IGNyZWF0ZUlubGluZUZsb3dCb3goKTsKICAgICBtX2xpbmVCb3hlcy5hcHBlbmRMaW5lQm94
KGZsb3dCb3gpOwogICAgIHJldHVybiBmbG93Qm94OwpAQCAtOTgzLDEzICsxMzQ3LDExIEBAIHZv
aWQgUmVuZGVySW5saW5lOjppbWFnZUNoYW5nZWQoV3JhcHBlZEkKIAogdm9pZCBSZW5kZXJJbmxp
bmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50
IHR5KQogewotICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewotICAgICAgICBSb290SW5saW5lQm94
KiByb290ID0gY3Vyci0+cm9vdCgpOwotICAgICAgICBpbnQgdG9wID0gbWF4KHJvb3QtPmxpbmVU
b3AoKSwgY3Vyci0+bG9naWNhbFRvcCgpKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290
LT5saW5lQm90dG9tKCksIGN1cnItPmxvZ2ljYWxCb3R0b20oKSk7Ci0gICAgICAgIEludFJlY3Qg
cmVjdCh0eCArIGN1cnItPngoKSwgdHkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0
b20gLSB0b3ApOwotICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAg
ICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHR4LCB0eSk7CisgICAg
ZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7CisgICAgICAg
IGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKKyAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0eCArIGN1cnItPngoKSwgdHkg
KyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOwogICAgIH0KIAog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0g
Y3Vyci0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMTAwMCw3ICsxMzYyLDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgICAgICAgICAgICAgIHBvcyA9IGN1cnIt
PmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+aXNCb3goKSkK
ICAgICAgICAgICAgICAgICBwb3MubW92ZSh0b1JlbmRlckJveChjdXJyKS0+eCgpLCB0b1JlbmRl
ckJveChjdXJyKS0+eSgpKTsKLSAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVjdHMocmVj
dHMsIHBvcy54KCksIHBvcy55KCkpOworICAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVj
dHMocmVjdHMsIHBvcy54KCksIHBvcy55KCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4MjYxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsNyBAQAogI2lmbmRlZiBSZW5kZXJJbmxpbmVfaAogI2RlZmluZSBSZW5kZXJJ
bmxpbmVfaAogCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRlckJv
eE1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJveExpc3QuaCIKIApAQCAtNjQs
NiArNjUsOCBAQCBwdWJsaWM6CiAKICAgICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmVCb3goKSBj
b25zdCB7IHJldHVybiBtX2xpbmVCb3hlcy5maXJzdExpbmVCb3goKTsgfQogICAgIElubGluZUZs
b3dCb3gqIGxhc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMubGFzdExpbmVC
b3goKTsgfQorICAgIElubGluZUJveCogZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIGNv
bnN0IHsgcmV0dXJuIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gZmlyc3RMaW5lQm94KCkgOiBj
dWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKTsgfQorICAgIElubGluZUJveCogbGFzdExpbmVCb3hJ
bmNsdWRpbmdDdWxsaW5nKCkgY29uc3QgeyByZXR1cm4gYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkg
PyBsYXN0TGluZUJveCgpIDogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKTsgfQogCiAgICAgdmly
dHVhbCBSZW5kZXJCb3hNb2RlbE9iamVjdCogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGNvbnRpbnVhdGlvbigpOyB9CiAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCkgY29uc3Q7CkBAIC03OCw2ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uOwogCisgICAgYm9vbCBhbHdheXNDcmVhdGVM
aW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlczsgfQorICAg
IHZvaWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hl
cyA9IHRydWU7IH0KKyAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIApAQCAtOTEsNiArOTgsMTMgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAorICAgIEZsb2F0UmVjdCBjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBS
ZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3Q7CisgICAgSW50UmVjdCBjdWxsZWRJbmxpbmVW
aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgSW5saW5lQm94KiBjdWxsZWRJ
bmxpbmVGaXJzdExpbmVCb3goKSBjb25zdDsKKyAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUxh
c3RMaW5lQm94KCkgY29uc3Q7CisgICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNv
bnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGlu
dCB0eSk7CisgICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklu
bGluZSogY29udGFpbmVyLCBWZWN0b3I8RmxvYXRRdWFkPiYpOworCiAgICAgdm9pZCBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9u
KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsK
IApAQCAtMTU0LDcgKzE2OCw4IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
IG1fY2hpbGRyZW47CiAgICAgUmVuZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7ICAgLy8gQWxs
IG9mIHRoZSBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgaW5saW5lIGZsb3cuICBGb3IgZXhh
bXBsZSwgPGk+SGVsbG88YnI+d29ybGQuPC9pPiB3aWxsIGhhdmUgdHdvIDxpPiBsaW5lIGJveGVz
LgogCi0gICAgbXV0YWJsZSBpbnQgbV9saW5lSGVpZ2h0OworICAgIG11dGFibGUgaW50IG1fbGlu
ZUhlaWdodCA6IDMxOworICAgIGJvb2wgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgOiAxOwogfTsK
IAogaW5saW5lIFJlbmRlcklubGluZSogdG9SZW5kZXJJbmxpbmUoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAJKHJldmlzaW9uIDgyNjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDggKzMxNywxMSBAQCB2b2lk
IFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJvbUNoCiAgICAgaWYgKCFjb250YWluZXIt
PnBhcmVudCgpIHx8IChjb250YWluZXItPmlzUmVuZGVyQmxvY2soKSAmJiAoY29udGFpbmVyLT5z
ZWxmTmVlZHNMYXlvdXQoKSB8fCAhY29udGFpbmVyLT5pc0Jsb2NrRmxvdygpKSkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGFpbmVyID0gY29udGFpbmVy
LT5pc1JlbmRlcklubGluZSgpID8gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKSA6IDA7CisgICAg
SW5saW5lQm94KiBmaXJzdEJveCA9IGlubGluZUNvbnRhaW5lciA/IGlubGluZUNvbnRhaW5lci0+
Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIDogZmlyc3RMaW5lQm94KCk7CisKICAgICAv
LyBJZiB3ZSBoYXZlIG5vIGZpcnN0IGxpbmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KLSAg
ICBpZiAoIWZpcnN0TGluZUJveCgpKSB7CisgICAgaWYgKCFmaXJzdEJveCkgewogICAgICAgICAv
LyBGb3IgYW4gZW1wdHkgaW5saW5lLCBnbyBhaGVhZCBhbmQgcHJvcGFnYXRlIHRoZSBjaGVjayB1
cCB0byBvdXIgcGFyZW50LCB1bmxlc3MgdGhlIHBhcmVudAogICAgICAgICAvLyBpcyBhbHJlYWR5
IGRpcnR5LgogICAgICAgICBpZiAoY29udGFpbmVyLT5pc0lubGluZSgpICYmICFjb250YWluZXIt
PnBhcmVudCgpLT5zZWxmTmVlZHNMYXlvdXQoKSkKQEAgLTM0NCwxNiArMzQ3LDE2IEBAIHZvaWQg
UmVuZGVyTGluZUJveExpc3Q6OmRpcnR5TGluZXNGcm9tQ2gKICAgICAgICAgICAgIGlmICh0ZXh0
Qm94KQogICAgICAgICAgICAgICAgIGJveCA9IHRleHRCb3gtPnJvb3QoKTsKICAgICAgICAgfSBl
bHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICBJbmxpbmVGbG93
Qm94KiBmbG93Qm94ID0gdG9SZW5kZXJJbmxpbmUoY3VyciktPmxhc3RMaW5lQm94KCk7Ci0gICAg
ICAgICAgICBpZiAoZmxvd0JveCkKLSAgICAgICAgICAgICAgICBib3ggPSBmbG93Qm94LT5yb290
KCk7CisgICAgICAgICAgICBJbmxpbmVCb3gqIGxhc3RTaWJsaW5nQm94ID0gdG9SZW5kZXJJbmxp
bmUoY3VyciktPmxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAgICAgaWYg
KGxhc3RTaWJsaW5nQm94KQorICAgICAgICAgICAgICAgIGJveCA9IGxhc3RTaWJsaW5nQm94LT5y
b290KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYm94KQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGlmICghYm94KQotICAgICAgICBib3ggPSBmaXJzdExpbmVCb3goKS0+cm9v
dCgpOworICAgICAgICBib3ggPSBmaXJzdEJveC0+cm9vdCgpOwogCiAgICAgLy8gSWYgd2UgZm91
bmQgYSBsaW5lIGJveCwgdGhlbiBkaXJ0eSBpdC4KICAgICBpZiAoYm94KSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA4MjYxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWYK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6ZGVzdHJveSgpCit2b2lkIFJlbmRlclRleHQ6
OnJlbW92ZUFuZERlc3Ryb3lUZXh0Qm94ZXMoKQogewogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rl
c3Ryb3llZCgpKSB7CiAgICAgICAgIGlmIChmaXJzdFRleHRCb3goKSkgewpAQCAtMTkyLDYgKzE5
MiwxMSBAQCB2b2lkIFJlbmRlclRleHQ6OmRlc3Ryb3koKQogICAgICAgICAgICAgcGFyZW50KCkt
PmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKHRoaXMpOwogICAgIH0KICAgICBkZWxldGVUZXh0
Qm94ZXMoKTsKK30KKwordm9pZCBSZW5kZXJUZXh0OjpkZXN0cm95KCkKK3sKKyAgICByZW1vdmVB
bmREZXN0cm95VGV4dEJveGVzKCk7CiAgICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7CiB9CiAK
QEAgLTI2OCw3ICsyNzMsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9y
aWdpCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJz
dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KHR4ICsgYm94LT54KCksIHR5ICsgYm94LT55KCksIGJveC0+bG9naWNh
bFdpZHRoKCksIGJveC0+bG9naWNhbEhlaWdodCgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChl
bmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0eCArIGJveC0+eCgpLCB0eSArIGJveC0+eSgpLCBi
b3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJz
b2x1dGVSZWN0c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMTMwMCw2ICsxMzA1
LDI5IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCgpIGMKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCitJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dC
b3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgaWYgKCFmaXJzdFRleHRCb3goKSkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmlt
YWwgbGVmdCBzaWRlIGFuZCB0aGUgbWF4aW1hbCByaWdodCBzaWRlLgorICAgIGZsb2F0IGxvZ2lj
YWxMZWZ0U2lkZSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIGZsb2F0IGxvZ2lj
YWxSaWdodFNpZGUgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICBmb3IgKElubGlu
ZVRleHRCb3gqIGN1cnIgPSBmaXJzdFRleHRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRU
ZXh0Qm94KCkpIHsKKyAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lk
ZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN1cnItPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSkp
OworICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxSaWdodFNpZGUsIHN0YXRp
Y19jYXN0PGZsb2F0PihjdXJyLT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKSk7CisgICAg
fQorICAgIAorICAgIGZsb2F0IGxvZ2ljYWxUb3AgPSBmaXJzdFRleHRCb3goKS0+bG9naWNhbFRv
cFZpc3VhbE92ZXJmbG93KCk7CisgICAgZmxvYXQgbG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0
U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKKyAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0ID0gbGFzdFRl
eHRCb3goKS0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgLSBsb2dpY2FsVG9wOworICAg
IAorICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGxvZ2ljYWxM
ZWZ0U2lkZSwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAg
aWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZWN0ID0g
cmVjdC50cmFuc3Bvc2VkUmVjdCgpOworICAgIHJldHVybiByZWN0OworfQorCiBJbnRSZWN0IFJl
bmRlclRleHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyKQogewogICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWlu
aW5nQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2
aXNpb24gODI2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0JiBtaW5XLCBmbG9hdCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNl
cyk7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OworICAg
IEludFJlY3QgbGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3Q7CiAKICAgICBG
bG9hdFBvaW50IGZpcnN0UnVuT3JpZ2luKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5YKCkg
Y29uc3Q7CkBAIC0xMjcsNiArMTI4LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wga25vd25U
b0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9rbm93
blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHM7IH0KIAorICAgIHZvaWQgcmVtb3Zl
QW5kRGVzdHJveVRleHRCb3hlcygpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFJlbmRlclNWR0lubGluZTo6UmVu
ZGVyU1ZHSW5saW5lKE5vZGUqIG4pCiAgICAgOiBSZW5kZXJJbmxpbmUobikKIHsKKyAgICBzZXRB
bHdheXNDcmVhdGVMaW5lQm94ZXMoKTsKIH0KIAogSW5saW5lRmxvd0JveCogUmVuZGVyU1ZHSW5s
aW5lOjpjcmVhdGVJbmxpbmVGbG93Qm94KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gODI2MTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxMyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91
dENoYXJhY3RlcnNJCiAgICAgICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3Rh
dGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGNoaWxkKTsKICAgICAgICAgICAgIGNoYXJhY3Rl
ckxheW91dC5sYXlvdXRJbmxpbmVUZXh0Qm94KHRleHRCb3gpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSk7Ci0KICAgICAgICAg
ICAgIC8vIFNraXAgZ2VuZXJhdGVkIGNvbnRlbnQuCiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
Y2hpbGQtPnJlbmRlcmVyKCktPm5vZGUoKTsKICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lubGlu
ZUZsb3dCb3goKSk7CisKICAgICAgICAgICAgIFNWR0lubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBz
dGF0aWNfY2FzdDxTVkdJbmxpbmVGbG93Qm94Kj4oY2hpbGQpOwogICAgICAgICAgICAgYm9vbCBp
c1RleHRQYXRoID0gbm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFBhdGhUYWcpOwogICAg
ICAgICAgICAgaWYgKGlzVGV4dFBhdGgpIHsKQEAgLTE0NiwxMiArMTQ2LDEyIEBAIHZvaWQgU1ZH
Um9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcygKICAgICAgICAgICAgIHRleHRCb3gtPnNl
dExvZ2ljYWxXaWR0aChib3hSZWN0LndpZHRoKCkpOwogICAgICAgICAgICAgdGV4dEJveC0+c2V0
TG9naWNhbEhlaWdodChib3hSZWN0LmhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChjaGlsZC0+aXNJbmxpbmVGbG93Qm94KCkpOwotCiAgICAgICAgICAgICAv
LyBTa2lwIGdlbmVyYXRlZCBjb250ZW50LgogICAgICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVy
ZXIoKS0+bm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBB
U1NFUlQoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKTsKKwogICAgICAgICAgICAgU1ZHSW5saW5l
Rmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZUZsb3dCb3gqPihjaGlsZCk7
CiAgICAgICAgICAgICBsYXlvdXRDaGlsZEJveGVzKGZsb3dCb3gpOwogCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MzAxNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDExLTA0LTA1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5MTYKKyAgICAgICAgCisgICAgICAg
IEltcGxlbWVudCBhbiBvcHRpbWl6YXRpb24gdG8gdGhlIGxpbmUgYm94IHRyZWUgdG8gY3VsbCBv
dXQgbW9zdCBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAgICAgIGxpbmUgYm94ZXMgdGhhdCBjYW4g
b2NjdXIgYmV0d2VlbiB0aGUgcm9vdCBsaW5lIGJveCBhbmQgdGhlIGxlYXZlcyBvZiB0aGUgdHJl
ZSAoaW1hZ2VzCisgICAgICAgIGFuZCB0ZXh0KS4KKworICAgICAgICBSZW5kZXJJbmxpbmVzIG5v
dyBoYXZlIGEgYm9vbGVhbiBtZW1iZXIsIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzLAorICAgICAg
ICB0aGF0IHN0YXJ0cyBvZmYgYXMgZmFsc2UuIE9ubHkgaWYgaXQgZ2V0cyBmbGlwcGVkIHRvIHRy
dWUgd2lsbCB0aGVyZSBiZSBhbnkgbGluZSBib3hlcworICAgICAgICBjcmVhdGVkIGZvciB0aGF0
IFJlbmRlcklubGluZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Jsb2NrZmxvdy90
ZXh0LW9yaWVudGF0aW9uLWJhc2ljLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC90ZXh0L2NhcGl0YWxpemUtZW1wdHktZ2VuZXJhdGVkLXN0cmluZy1leHBlY3RlZC50
eHQ6CisKIDIwMTEtMDQtMDUgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2Jsb2NrZmxvdy90ZXh0LW9yaWVudGF0aW9uLWJhc2ljLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9ja2Zsb3cvdGV4dC1v
cmllbnRhdGlvbi1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDgyNjEwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYmxvY2tmbG93L3RleHQtb3JpZW50YXRpb24tYmFzaWMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIGxheWVyIGF0ICgw
LDApIHNpemUgNzg1eDcwNAogICAgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkg
c2l6ZSA0MHgyNTQKICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDQsMSkgc2l6
ZSA0MHgyNTQKICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQ0LDEpIHdpZHRoIDI1NDogIkhl
bGxvIHdvcmxkIgotICAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDY0LDI1NCkgc2l6ZSAweDEK
KyAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MiwyNTQpIHNpemUgMHgxCiAgICAgICAgICAg
UmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM2eDE5OQogICAgICAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICg5NCwxKSBzaXplIDM2eDE5OQogICAgICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoOTQsMSkgd2lkdGggMTk5OiAiSGVsbG8gd29ybGQiCkBAIC00NCw3ICs0NCw3IEBA
IGxheWVyIGF0ICgwLDApIHNpemUgNzg1eDcwNAogICAgICAgICAgIFJlbmRlcklubGluZSB7U1BB
Tn0gYXQgKDAsMCkgc2l6ZSA0MHgyNTUKICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoNDQsMSkgc2l6ZSA0MHgyNTUKICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQ0LDEpIHdp
ZHRoIDI1NTogIkhlbGxvIHdvcmxkIgotICAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDY0LDI1
Nikgc2l6ZSAweDAKKyAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MiwyNTYpIHNpemUgMHgw
CiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM2eDE5OAogICAg
ICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5NCwxKSBzaXplIDM2eDE5OAogICAgICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoOTQsMSkgd2lkdGggMTk4OiAiSGVsbG8gd29ybGQiCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NhcGl0YWxpemUtZW1wdHktZ2Vu
ZXJhdGVkLXN0cmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2Zhc3QvdGV4dC9jYXBpdGFsaXplLWVtcHR5LWdlbmVyYXRlZC1zdHJpbmctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA4MjYxMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L3RleHQvY2FwaXRhbGl6ZS1lbXB0eS1nZW5lcmF0ZWQtc3RyaW5nLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NngxOAogICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDY6ICJMb3JlbSAiCiAgICAgICAgICAg
UmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM5eDE4Ci0gICAgICAgICAgICBSZW5k
ZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDE4CisgICAgICAgICAgICBSZW5k
ZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICg0NiwwKSBzaXplIDM5eDE4CiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0NiwwKSB3
aWR0aCAzOTogIklwc3VtIgpAQCAtMzgsNyArMzgsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyM3gxOAog
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjM6ICJMb3IiCiAgICAgICAgICAg
UmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDYyeDE4Ci0gICAgICAgICAgICBSZW5k
ZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDE4CisgICAgICAgICAgICBSZW5k
ZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgyMywwKSBzaXplIDYyeDE4CiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgyMywwKSB3
aWR0aCA2MjogImVtIElwc3VtIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88367</attachid>
            <date>2011-04-05 22:18:49 -0700</date>
            <delta_ts>2011-04-06 09:51:21 -0700</delta_ts>
            <desc>Patch that passes style queue.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>75413</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg3IEBACisyMDExLTA0LTA1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTc5MTYKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBhbiBvcHRpbWl6YXRpb24gdG8gdGhl
IGxpbmUgYm94IHRyZWUgdG8gY3VsbCBvdXQgbW9zdCBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAg
ICAgIGxpbmUgYm94ZXMgdGhhdCBjYW4gb2NjdXIgYmV0d2VlbiB0aGUgcm9vdCBsaW5lIGJveCBh
bmQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSAoaW1hZ2VzCisgICAgICAgIGFuZCB0ZXh0KS4KKwor
ICAgICAgICBSZW5kZXJJbmxpbmVzIG5vdyBoYXZlIGEgYm9vbGVhbiBtZW1iZXIsIG1fYWx3YXlz
Q3JlYXRlTGluZUJveGVzLAorICAgICAgICB0aGF0IHN0YXJ0cyBvZmYgYXMgZmFsc2UuIE9ubHkg
aWYgaXQgZ2V0cyBmbGlwcGVkIHRvIHRydWUgd2lsbCB0aGVyZSBiZSBhbnkgbGluZSBib3hlcwor
ICAgICAgICBjcmVhdGVkIGZvciB0aGF0IFJlbmRlcklubGluZS4KKyAgICAgICAgCisgICAgICAg
ICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KToKKyAgICAgICAgQWRqdXN0IHRoZSBv
cmRlcmluZyBvZiB1cGRhdGVMYXlvdXQgY2FsbHMgdG8gbWFrZSBzdXJlIHJlY3RzIGFyZW4ndCBx
dWVyaWVkIHVubGVzcyBsYXlvdXQKKyAgICAgICAgaXMgdXAgdG8gZGF0ZS4KKworICAgICAgICAq
IHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2Ny
ZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRl
cyk6CisgICAgICAgIEFkZCBhc3NlcnRzIGluIHNwYXRpYWwgbmF2aWdhdGlvbiBjb2RlIHRvIGNh
dGNoIGFueSBmdXR1cmUgYmFkIHF1ZXJpZXMgdGhhdCBtaWdodCBiZSBtYWRlCisgICAgICAgIGZv
ciByZWN0YW5nbGVzIHdpdGhvdXQgbGF5b3V0IGJlaW5nIHVwIHRvIGRhdGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICBBZGQgYSBuZXcgdW5pdGUgZnVuY3Rpb24g
dGhhdCBpcyB1c2VmdWwgZm9yIHRoZSByZW5kZXIgdHJlZSB0byBGbG9hdFJlY3QgYW5kIEludFJl
Y3QuICBUaGlzCisgICAgICAgIHZlcnNpb24gYWxsb3dzIHJlY3QgdW5pdGVzIHRvIGhhcHBlbiBp
ZiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IGlzIG5vbnplcm8uCisKKyAgICAgICAgKiByZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KToKKyAgICAgICAgTWFrZSBzdXJlIHJlY3QtYmFz
ZWQgaGl0IHRlc3RpbmcgcHJvcGVybHkgYWRkcyBpbiBjdWxsZWQgaW5saW5lIGFuY2VzdG9ycyB0
byB0aGUgc2V0IG9mIG5vZGVzCisgICAgICAgIGlmIGNvbnRlbnQgaW5zaWRlIHRob3NlIGlubGlu
ZXMgaXMgaGl0LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsRnJhbWVSZWN0KToKKyAgICAgICAgQWRkIGEgbmV3
IGhlbHBlciBmb3Igb2J0YWluaW5nIHRoZSBsb2dpY2FsIGZyYW1lIHJlY3Qgb2YgYW4gaW5saW5l
IGJveC4gIE1vcmUgZWZmaWNpZW50IHRoYW4KKyAgICAgICAgZ2V0dGluZyB0aGUgc2lkZSBpbmRp
dmlkdWFsbHkgYW5kIHdhc3RlZnVsbHkgZG9pbmcgNCBpc0hvcml6b250YWwgcXVlcmllcy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6OmFkZFRvTGluZSk6CisgICAgICAgIGFkZFRvTGluZSBub3cgYWxzbyBj
aGVja3MgbGluZSBnYXAgaW4gdGhlIGxpbmUgYm94IHRyZWUgb3B0aW1pemF0aW9uIGNoZWNrcy4K
KyAgICAKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxP
dmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3ZlcmZs
b3cpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgIFJld3Jp
dHRlbiB0byBhZGQgdGhlIHRleHQgYm94IG92ZXJmbG93IHRvIHRoZSB0ZXh0IGJveCBpdHNlbGYu
CisKKyAgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6ZGVzdHJveSk6CisgICAgICAgIERlc3Ryb3kgaGFzIGJlZW4g
Y2hhbmdlZCB0byBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbmQgZGVzdHJveSB0
aGUgbGluZSBib3hlcyB0aGF0CisgICAgICAgIGlzIG5vdyBjYWxsZWQgZnJvbSBvbmUgYWRkaXRp
b25hbCBzcG90LgorCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2dpY2FsT3Zl
cmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNldExvZ2ljYWxP
dmVyZmxvd1JlY3QpOgorICAgICAgICBUZXh0IGJveGVzIG5vdyBjYWNoZSB0aGVpciBvd24gb3Zl
cmZsb3cgaW4gYSBnbG9iYWwgaGFzaCB0YWJsZS4KKworICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpsaW5lSGVpZ2h0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgYXNzdW1lIHRoYXQgdGhl
IHBhcmVudCBsaW5lIGJveCdzIHJlbmRlcmVyIGlzIHRoZSBSZW5kZXJUZXh0J3MgaW1tZWRpYXRl
CisgICAgICAgIHBhcmVudCwgc2luY2UgaW50ZXJtZWRpYXRlIGxpbmUgYm94ZXMgbWF5IGhhdmUg
YmVlbiBjdWxsZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgUGFpbnQgbm93IHByb3Blcmx5IGNoZWNrcyBvbmx5IHRoZSB0ZXh0IGJveCBvdmVy
ZmxvdyBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQgbGluZSBib3gncyBvdmVyZmxvdy4KKworICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cpOgorICAg
ICAgICBOZXcgYWNjZXNzb3JzIHRvIG9idGFpbiBvdmVyZmxvdyBmb3IgaW5saW5lIHRleHQgYm94
ZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKToKKyAgICAgICAgdXBkYXRlRmly
c3RMZXR0ZXIgbm93IHJlbW92ZXMgdGV4dCBib3hlcyBmcm9tIHRoZSBsaW5lIGJveCB0cmVlIGJl
Zm9yZSBpdCBkZXN0cm95cyB0aGVtLCBzaW5jZSB0aG9zZQorICAgICAgICB0ZXh0IGJveGVzIG1h
eSBub3QgaGF2ZSBhbnl0aGluZyBpbiBiZXR3ZWVuIHRoZW0gYW5kIHRoZSBibG9jayB0aGF0IGNv
bnRhaW5zIHRoZSBpbmxpbmUgZmlyc3QgbGV0dGVyCisgICAgICAgIGNvbnRhaW5lci4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIFRoZSBjdWxsaW5n
IG9wdGltaXphdGlvbiBpcyBkb25lIGhlcmUuICBPbmx5IGlmIHRoZSBSZW5kZXJJbmxpbmUgc2F5
cyB0aGF0IGJveGVzIGFyZSBhbGxvd2VkIHdpbGwgdGhleQorICAgICAgICBiZSBjcmVhdGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgor
ICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIFJlbmRlcklubGluZSBpcyB1cGRhdGVkIGhlcmUsIGlu
IGNhc2UgaXQgaXMgZGlzY292ZXJlZCB0aGF0IGxpbmUgYm94ZXMgYXJlIG5vdyBuZWVkZWQuCisg
ICAgICAgIFRoaXMgaXMgZG9uZSBiZWZvcmUgYW55IGxpbmVzIGFyZSBidWlsdC4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpSZW5kZXJJbmxpbmUpOgorICAgICAgICBUaGUgbmV3IG1fYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzIGZsYWcgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgQW4gaW5p
dGlhbCB1cGRhdGUgb2YgdGhlIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGhhcHBlbnMgaGVyZSBm
b3IgdGhpbmdzIHRoYXQgY2FuIGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgKGxpa2Ug
aGF2aW5nIGEgbGF5ZXIsIGJvcmRlcnMsIHBhZGRpbmcsIG1hcmdpbnMgb3IgYmFja2dyb3VuZHMp
LiAgU29tZSBjaGVja3MgdGhhdCBkZXBlbmQgb24gZXhhbWluaW5nCisgICAgICAgIHRoZSBSZW5k
ZXJJbmxpbmUncyBwYXJlbnQgKGluY2x1ZGluZyBmaXJzdCBsaW5lIHN0eWxlcykgaGFwcGVuIGxh
dGVyIGluIGxheW91dElubGluZUNoaWxkcmVuLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIFRoZSBmdW5jdGlv
biBjYWxsZWQgYnkgbGF5b3V0SW5saW5lQ2hpbGRyZW4gdG8gY2hlY2sgcGFyZW50IGFuZCBjaGls
ZCBzdHlsZSBkaWZmZXJlbmNlcyAoZS5nLiwgZm9udCwKKyAgICAgICAgdmVydGljYWwgYWxpZ25t
ZW50LCBsaW5lIGhlaWdodCwgZXRjLikuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxl
ZElubGluZUFic29sdXRlUmVjdHMpOgorICAgICAgICBhYnNvbHV0ZVJlY3RzIGNhbGxzIGN1bGxl
ZElubGluZUFic29sdXRlUmVjdHMgd2hlbiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpcyBmYWxz
ZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyk6
CisgICAgICAgIGFic29sdXRlUXVhZHMgY2FsbHMgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyB3
aGVuIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZhbHNlLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6Om9mZnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjpvZmZzZXRUb3ApOgorICAgICAgICBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3Agbm93IGNo
ZWNrIGRlc2NlbmRhbnQgcmVuZGVyZXJzIHdoZW4gbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMg
ZmFsc2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGluZXNCb3VuZGluZ0Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5n
Qm94KToKKyAgICAgICAgbGluZUJvdW5kaW5nQm94IGNhbGxzIGN1bGxlZElubGluZUJvdW5kaW5n
Qm94IHdoZW4gbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMgZmFsc2UuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lTGFzdExpbmVCb3gpOgorICAgICAg
ICBIZWxwZXJzIHRoYXQgcmV0dXJuIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lIGJveCBkZXNjZW5k
YW50cy4gVXNlZCBieSBmaXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nIGFuZAorICAgICAgICBs
YXN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcgKHdoaWNoIGFyZSBpbiB0dXJuIGNhbGxlZCBieSBv
ZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3ApLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgorICAg
ICAgICBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3ggY2FsbHMgY3VsbGVkSW5saW5lVmlz
dWFsT3ZlcmZsb3dCb3VuZGluZ0JveCB3aGVuIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZh
bHNlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KToKKyAgICAgICAgVGhlIGluaXRpYWwgYmFpbG91dCBjaGVjayBpcyBub3cg
ZG9uZSB1c2luZyBmaXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nIGluc3RlYWQgb2YganVzdCBm
aXJzdExpbmVCb3guCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6ZGlydHlMaW5l
Qm94ZXMpOgorICAgICAgICBkaXJ0eUxpbmVCb3hlcyBub3cgY3Jhd2xzIGludG8gZGVzY2VuZGFu
dHMgdG8gZmlndXJlIG91dCB3aGljaCByb290IGxpbmVzIHRvIGRpcnR5IHdoZW4KKyAgICAgICAg
bV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMgZmFsc2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6Y3JlYXRlQW5kQXBwZW5kSW5saW5lRmxvd0JveCk6CisgICAgICAgIENsZWFy
IHRoZSBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpZiBhIGJveCBnZXRzIGFkZGVkIGFueXdheS4g
VGhpcyBoYXBwZW5zIGZvciBsZWFmIGlubGluZSBmbG93cyBhbmQgYWxzbworICAgICAgICB3aGVu
IGxpbmUtYm94LWNvbnRhaW4gaXMgc2V0IHRvIGFuIHVudXN1YWwgdmFsdWUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICBVc2Vk
IGN1bGxlZElubGluZUFic29sdXRlUmVjdHMgaW4gcGxhY2Ugb2YgdGhlIGxpbmUgYm94IHdhbGsg
d2hlbiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpcyBmYWxzZS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Zmly
c3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6Omxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyk6CisgICAgICAgIEhlbHBlcnMgdXNlZCBp
biBhIGZldyBwbGFjZXMgKGxpa2Ugb2Zmc2V0TGVmdCBhbmQgb2Zmc2V0VG9wKSwgbW9zdGx5IGlu
IHBsYWNlcyB3aGVyZSB0aGUgZXhpc3RlbmNlIG9mIGEgYm94CisgICAgICAgIGlzIGFsbCB0aGF0
IG5lZWRzIGNoZWNraW5nLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNldEFs
d2F5c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIEZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBhbmQg
c2V0dGluZyB0aGUgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgZmxhZy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lQm94TGlzdDo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQpOgorICAgICAgICBNb2RpZmll
ZCB0byB1c2UgZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyBhbmQgbGFzdExpbmVCb3hJbmNs
dWRpbmdDdWxsaW5nIHRvIGVuc3VyZSB0aGUgcmlnaHQgc2V0IG9mCisgICAgICAgIGxpbmVzIGdl
dCBkaXJ0aWVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6cmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcyk6CisgICAg
ICAgIE5ldyBoZWxwZXIgaW52b2tlZCBieSBkZXN0cm95IGFuZCBhbHNvIGZyb20gdXBkYXRlRmly
c3RMZXR0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmRlc3Ryb3kpOgorICAg
ICAgICBDaGFuZ2VkIHRvIGNhbGwgcmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcy4KKworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIEZpeGVkIHRv
IGJlIHByb3Blcmx5IHBoeXNpY2FsIGluc3RlYWQgb2YgbG9naWNhbC4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dDo6bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KToKKyAgICAg
ICAgTmV3IGltcGxlbWVudGF0aW9uIGZvciBSZW5kZXJUZXh0IHRoYXQgZ2l2ZXMgdGhlIGJvdW5k
aW5nIGJveCBvZiB0aGUgdGV4dCBib3hlcyBpbmNsdWRpbmcgb3ZlcmZsb3cgZnJvbQorICAgICAg
ICBzaGFkb3dzLCBnbHlwaHMsIHRleHQtc3Ryb2tlLCBldGMuICBVc2VkIGJ5IFJlbmRlcklubGlu
ZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveC4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpSZW5kZXJTVkdJ
bmxpbmUpOgorICAgICAgICBSZW5kZXJTVkdJbmxpbmUgYWx3YXlzIHNldHMgbV9hbHdheXNDcmVh
dGVMaW5lQm94ZXMgdG8gdHJ1ZSBzbyB0aGF0IFNWRyBpcyB1bmFmZmVjdGVkIGJ5IHRoaXMgb3B0
aW1pemF0aW9uLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoYXJhY3RlcnNJ
blRleHRCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRD
aGlsZEJveGVzKToKKyAgICAgICAgTW92ZSB0aGUgaXNJbmxpbmVGbG93Qm94IGFzc2VydHMgdG8g
YWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb250ZW50IHNraXBzLCBzaW5jZSB0aGUgZ2VuZXJhdGVkIGNv
bnRlbnQgYm94ZXMgYXJlCisgICAgICAgIG5vdyBJbmxpbmVUZXh0Qm94ZXMgKHRoZSBlbmNsb3Np
bmcgSW5saW5lRmxvd0JveGVzIGdvdCBjdWxsZWQpLgorCiAyMDExLTA0LTA1ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gODI2MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5Nyw2ICs1OTcsOSBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzRGlyZWN0CiAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQt
PmZvY3VzZWROb2RlKCk7CiAgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50Owog
CisgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKKyAgICAgICAgCiAgICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4K
ICAgICBJbnRSZWN0IHN0YXJ0aW5nUmVjdDsKICAgICBpZiAoZm9jdXNlZE5vZGUpIHsKQEAgLTYx
MiwxMSArNjE1LDExIEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3QK
IAogICAgIGJvb2wgY29uc3VtZWQgPSBmYWxzZTsKICAgICBkbyB7Ci0gICAgICAgIGlmIChjb250
YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGNvbnRhaW5lciktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
ICAgICAgICBjb25zdW1lZCA9IGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihj
b250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7CiAgICAgICAgIHN0YXJ0
aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwgdHJ1ZSAv
KiBpZ25vcmUgYm9yZGVyICovKTsKICAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjb250YWlu
ZXIpOworICAgICAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUo
KSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgfSB3aGlsZSAoIWNvbnN1bWVk
ICYmIGNvbnRhaW5lcik7CiAKICAgICByZXR1cm4gY29uc3VtZWQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gODI2MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDYgKzMwMCw4IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlLCBGb2N1c0QK
ICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBBU1NFUlQo
IWZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSk7CisKICAgICBJbnRSZWN0IGNvbnRhaW5lclZpZXdw
b3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgLy8gV2Ugd2Fu
dCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVuLCBidXQgd2ls
bCBiZQogICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhlIHZpZXdwb3J0
IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgpAQCAtNTE3LDcgKzUxOSw3IEBAIHN0YXRpYyBJ
bnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMKIAogSW50UmVjdCBub2RlUmVjdEluQWJz
b2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikKIHsKLSAgICBB
U1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQobm9kZSAmJiBub2Rl
LT5yZW5kZXJlcigpICYmICFub2RlLT5kb2N1bWVudCgpLT52aWV3KCktPm5lZWRzTGF5b3V0KCkp
OwogCiAgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmcmFt
ZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKS0+
ZnJhbWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMjQgQEAg
dm9pZCBGbG9hdFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0UmVjdCYgbwogICAgIHNldExvY2F0aW9u
QW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KIAordm9pZCBGbG9hdFJlY3Q6OnVuaXRl
SWZOb25aZXJvKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5
IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkp
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZsb2F0IGxlZnQgPSBtaW4oeCgpLCBvdGhlci54KCkpOworICAgIGZsb2F0IHRvcCA9IG1pbih5
KCksIG90aGVyLnkoKSk7CisgICAgZmxvYXQgcmlnaHQgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhY
KCkpOworICAgIGZsb2F0IGJvdHRvbSA9IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAg
ICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsK
K30KKwogdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKIHsKICAgICBt
X2xvY2F0aW9uLnNldFgoeCgpICogc3gpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3Qm
KTsKICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5v
blplcm8oY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNuJ3QgbWF0
Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQgdmVyc2lv
bgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3Qs
IGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiA4MjYxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw2ICs5NiwyNyBAQCB2b2lkIEludFJlY3Q6OnVuaXRlKGNvbnN0IEludFJl
Y3QmIG90aGVyCiAgICAgbV9zaXplLnNldEhlaWdodChiIC0gdCk7CiB9CiAKK3ZvaWQgSW50UmVj
dDo6dW5pdGVJZk5vblplcm8oY29uc3QgSW50UmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxl
IGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFv
dGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVp
Z2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGludCBsZWZ0ID0gbWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBpbnQgdG9wID0gbWlu
KHkoKSwgb3RoZXIueSgpKTsKKyAgICBpbnQgcmlnaHQgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhY
KCkpOworICAgIGludCBib3R0b20gPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAg
bV9sb2NhdGlvbi5zZXRYKGxlZnQpOworICAgIG1fbG9jYXRpb24uc2V0WSh0b3ApOworICAgIG1f
c2l6ZS5zZXRXaWR0aChyaWdodCAtIGxlZnQpOworICAgIG1fc2l6ZS5zZXRIZWlnaHQoYm90dG9t
IC0gdG9wKTsKK30KKwogdm9pZCBJbnRSZWN0OjpzY2FsZShmbG9hdCBzKQogewogICAgIG1fbG9j
YXRpb24uc2V0WCgoaW50KSh4KCkgKiBzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA4MjYxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0
NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEludFJlY3QmKTsKICAg
ICB2b2lkIHVuaXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVuaXRlSWZOb25aZXJvKGNv
bnN0IEludFJlY3QmKTsKIAogICAgIHZvaWQgaW5mbGF0ZVgoaW50IGR4KQogICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDgy
NjEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogCkBAIC01NDQsNiArNTQ1LDIwIEBAIGJvb2wgSGl0VGVz
dFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGUKICAgICBub2RlID0gbm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCk7CiAgICAgbXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQoKS5hZGQobm9kZSk7
CiAKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkgeworICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCktPnBhcmVudCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghY3Vyci0+aXNSZW5kZXJJ
bmxpbmUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5vZGVzIGZvciBjdWxsZWQgaW5saW5lcyBn
ZXQgaW5jbHVkZWQuCisgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1Jl
bmRlcklubGluZShjdXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJySW5saW5lLT5hbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGN1cnJJbmxpbmUtPnZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBjdXJySW5s
aW5lLT5ub2RlKCkpCisgICAgICAgICAgICAgICAgbXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQo
KS5hZGQoY3VycklubGluZS0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgICAg
IH0KKyAgICB9CiAgICAgcmV0dXJuICFyZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludCh4LCB5KSk7
CiB9CiAKQEAgLTU2MSw2ICs1NzYsMjAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9S
ZWN0QmFzZWRUZQogICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICBt
dXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChub2RlKTsKIAorICAgIGlmIChub2RlLT5y
ZW5kZXJlcigpLT5pc0lubGluZSgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ID0gbm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQo
KSkgeworICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1JlbmRlcklubGluZSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGUgbm9kZXMgZm9yIGN1bGxlZCBpbmxpbmVzIGdldCBpbmNsdWRlZC4KKyAgICAg
ICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOwor
ICAgICAgICAgICAgaWYgKGN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY3Vycklu
bGluZS0+dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGN1cnJJbmxpbmUtPm5vZGUoKSkKKyAgICAg
ICAgICAgICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChjdXJySW5saW5lLT5u
b2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1
cm4gIXJlY3QuY29udGFpbnMocmVjdEZvclBvaW50KHgsIHkpKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gODI2MTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw3ICsyNjMs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGxvZ2ljYWwgaGVpZ2h0IGlzIG91ciBleHRlbnQgaW4g
dGhlIGJsb2NrIGZsb3cgZGlyZWN0aW9uLCBpLmUuLCBoZWlnaHQgZm9yIGhvcml6b250YWwgdGV4
dCBhbmQgd2lkdGggZm9yIHZlcnRpY2FsIHRleHQuCiAgICAgaW50IGxvZ2ljYWxIZWlnaHQoKSBj
b25zdDsKIAotICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsKCkgPyBJbnRSZWN0KG1feCwgbV95LCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCgpKSA6IEludFJlY3QobV95LCBtX3gsIGxvZ2ljYWxIZWlnaHQoKSwgbV9sb2dpY2Fs
V2lkdGgpOyB9CisgICAgRmxvYXRSZWN0IGxvZ2ljYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVy
biBpc0hvcml6b250YWwoKSA/IEludFJlY3QobV94LCBtX3ksIG1fbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3ksIG1feCwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQoKSk7IH0KIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+YmFzZWxp
bmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhv
cml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOyB9
CiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJveE1vZGVsT2Jq
ZWN0KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRh
bExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDgy
NjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5l
KElubGluZUJveCoKICAgICBjaGlsZC0+c2V0Rmlyc3RMaW5lU3R5bGVCaXQobV9maXJzdExpbmUp
OwogICAgIGNoaWxkLT5zZXRJc0hvcml6b250YWwoaXNIb3Jpem9udGFsKCkpOwogICAgIGlmIChj
aGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgbV9oYXNUZXh0Q2hpbGRyZW4gPSB0cnVlOworICAg
ICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPnBhcmVudCgpID09IHJlbmRlcmVyKCkpCisgICAg
ICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgIG1faGFzVGV4dERlc2Nl
bmRhbnRzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSkg
ewogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGNoaWxkKS0+aGFzVGV4
dERlc2NlbmRhbnRzKCkpCkBAIC0xMTEsMTIgKzExMiwxNSBAQCB2b2lkIElubGluZUZsb3dCb3g6
OmFkZFRvTGluZShJbmxpbmVCb3gqCiAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+aXNS
ZXBsYWNlZCgpKQogICAgICAgICAgICAgc2hvdWxkQ2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGlu
ZUhlaWdodEFuZEJhc2VsaW5lID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzVGV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPmlzQlIoKSkgeworICAg
ICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc0JSKCkgfHwgY2hpbGQtPnJlbmRlcmVy
KCktPnBhcmVudCgpICE9IHJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpCi0gICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0
eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
Y2hpbGRTdHlsZS0+bGluZUhlaWdodCgpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0
eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0
eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5saW5lR2FwKCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkubGluZUdhcCgpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0
eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS0+bGluZUhlaWdodCgpCiAgICAgICAgICAg
ICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYm
ICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJB
U0VMSU5FKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNh
bWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZFN0eWxlLT5oYXNUZXh0Q29tYmluZSgpIHx8IGNoaWxkU3R5bGUtPnRleHRFbXBoYXNpc01h
cmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjaGlsZFN0eWxlLT5oYXNUZXh0Q29tYmluZSgpIHx8IGNoaWxkU3R5bGUtPnRleHRFbXBo
YXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSkKICAgICAgICAgICAgICAgICBzaG91
bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc0JS
KCkpIHsKQEAgLTEyOCw3ICsxMzIsOSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJ
bmxpbmVCb3gqCiAgICAgICAgICAgICAgICAgSW5saW5lRmxvd0JveCogY2hpbGRGbG93Qm94ID0g
c3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGNoaWxkKTsKICAgICAgICAgICAgICAgICAvLyBD
aGVjayB0aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVuY2Vz
IGluIGZvbnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgogICAgICAgICAgICAgICAgIGlm
ICghY2hpbGRGbG93Qm94LT5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5l
KCkgfHwgcGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpICE9IGNoaWxk
U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpCi0gICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRT
dHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpIHx8IHBhcmVudFN0eWxlLT5saW5l
SGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS0+bGluZUhlaWdodCgpCisgICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRT
dHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpCisgICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5saW5lR2FwKCkgIT0gY2hpbGRT
dHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkubGluZUdhcCgpCisgICAgICAgICAgICAgICAgICAg
IHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS0+bGluZUhlaWdodCgp
CiAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9
IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRTdHlsZS0+dmVydGljYWxB
bGlnbigpICE9IEJBU0VMSU5FCiAgICAgICAgICAgICAgICAgICAgIHx8IGNoaWxkU3R5bGUtPmhh
c0JvcmRlcigpIHx8IGNoaWxkU3R5bGUtPmhhc1BhZGRpbmcoKSB8fCBjaGlsZFN0eWxlLT5oYXNU
ZXh0Q29tYmluZSgpKQogICAgICAgICAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRz
SGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSB0cnVlOwpAQCAtNzMyLDEyICs3MzgsMTIg
QEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm94U2hhZG93VgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgLSBsb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBsb2dp
Y2FsVG9wVmlzdWFsT3ZlcmZsb3cpOwogfQogCi1pbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94Ojph
ZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBJbnRSZWN0JiBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cpCitpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0
Qm94VmlzdWFsT3ZlcmZsb3coSW5saW5lVGV4dEJveCogdGV4dEJveCwgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3cpCiB7CiAgICAgaWYgKHRleHRCb3gtPmtub3duVG9IYXZlTm9PdmVyZmxvdygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5z
dHlsZShtX2ZpcnN0TGluZSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+cmVu
ZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIAogICAgIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodGV4dEJv
eCk7CiAgICAgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdyA9IGl0ID09IHRleHRCb3hEYXRh
TWFwLmVuZCgpID8gMCA6ICZpdC0+c2Vjb25kLnNlY29uZDsKQEAgLTc4OCw2ICs3OTQsOCBAQCBp
bmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzCiAgICAgCiAgICAgbG9naWNh
bFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dp
Y2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3cs
IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB0ZXh0Qm94LT5zZXRM
b2dpY2FsT3ZlcmZsb3dSZWN0KGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiB9CiAKIGlubGluZSB2
b2lkIElubGluZUZsb3dCb3g6OmFkZFJlcGxhY2VkQ2hpbGRPdmVyZmxvdyhjb25zdCBJbmxpbmVC
b3gqIGlubGluZUJveCwgSW50UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBJbnRSZWN0JiBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cpCkBAIC04MzUsNyArODQzLDkgQEAgdm9pZCBJbmxpbmVGbG93
Qm94Ojpjb21wdXRlT3ZlcmZsb3coaW50IAogICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSB0
b1JlbmRlclRleHQodGV4dC0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAocnQtPmlzQlIo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZFRleHRCb3hWaXN1
YWxPdmVyZmxvdyh0ZXh0LCB0ZXh0Qm94RGF0YU1hcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsK
KyAgICAgICAgICAgIEludFJlY3QgdGV4dEJveE92ZXJmbG93KGVuY2xvc2luZ0ludFJlY3QodGV4
dC0+bG9naWNhbEZyYW1lUmVjdCgpKSk7CisgICAgICAgICAgICBhZGRUZXh0Qm94VmlzdWFsT3Zl
cmZsb3codGV4dCwgdGV4dEJveERhdGFNYXAsIHRleHRCb3hPdmVyZmxvdyk7CisgICAgICAgICAg
ICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cudW5pdGUodGV4dEJveE92ZXJmbG93KTsKICAgICAgICAg
fSBlbHNlICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAg
ICAgICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihj
dXJyKTsKICAgICAgICAgICAgIGZsb3ctPmNvbXB1dGVPdmVyZmxvdyhsaW5lVG9wLCBsaW5lQm90
dG9tLCB0ZXh0Qm94RGF0YU1hcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgJKHJldmlzaW9uIDgyNjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGFkZEJveFNoYWRvd1Zpc3VhbE92ZXJmbG93KEludFJl
Y3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7Ci0gICAgdm9pZCBhZGRUZXh0Qm94VmlzdWFsT3Zl
cmZsb3coY29uc3QgSW5saW5lVGV4dEJveCosIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwJiwgSW50UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKKyAgICB2b2lkIGFkZFRleHRC
b3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94KiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXAmLCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQgYWRk
UmVwbGFjZWRDaGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCosIEludFJlY3QmIGxvZ2ljYWxM
YXlvdXRPdmVyZmxvdywgSW50UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gODI2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIwICs0OCw0OSBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0
IElubGluZVRleHRCb3gqLCBJbnRSZWN0PiBJbmxpbmVUZXh0Qm94TWFwOworc3RhdGljIElubGlu
ZVRleHRCb3hNYXAqIGdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3cgPSAwOworCit2b2lkIElubGluZVRl
eHRCb3g6OmRlc3Ryb3koUmVuZGVyQXJlbmEqIGFyZW5hKQoreworICAgIGlmICghbV9rbm93blRv
SGF2ZU5vT3ZlcmZsb3cgJiYgZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykKKyAgICAgICAgZ1RleHRC
b3hlc1dpdGhPdmVyZmxvdy0+cmVtb3ZlKHRoaXMpOworICAgIElubGluZUJveDo6ZGVzdHJveShh
cmVuYSk7Cit9CisKK0ludFJlY3QgSW5saW5lVGV4dEJveDo6bG9naWNhbE92ZXJmbG93UmVjdCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fa25vd25Ub0hhdmVOb092ZXJmbG93IHx8ICFnVGV4dEJveGVz
V2l0aE92ZXJmbG93KQorICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChsb2dpY2FsRnJh
bWVSZWN0KCkpOworICAgIHJldHVybiBnVGV4dEJveGVzV2l0aE92ZXJmbG93LT5nZXQodGhpcyk7
Cit9CisKK3ZvaWQgSW5saW5lVGV4dEJveDo6c2V0TG9naWNhbE92ZXJmbG93UmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVCghbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3cpOwor
ICAgIGlmICghZ1RleHRCb3hlc1dpdGhPdmVyZmxvdykKKyAgICAgICAgZ1RleHRCb3hlc1dpdGhP
dmVyZmxvdyA9IG5ldyBJbmxpbmVUZXh0Qm94TWFwOworICAgIGdUZXh0Qm94ZXNXaXRoT3ZlcmZs
b3ctPmFkZCh0aGlzLCByZWN0KTsKK30KKwogaW50IElubGluZVRleHRCb3g6OmJhc2VsaW5lUG9z
aXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSkgY29uc3QKIHsKICAgICBpZiAoIWlzVGV4
dCgpIHx8ICFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBhcmVudCgp
LT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSk7CisgICAgaWYgKHBhcmVudCgpLT5yZW5k
ZXJlcigpID09IHJlbmRlcmVyKCktPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gcGFyZW50KCkt
PmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKTsKKyAgICByZXR1cm4gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChyZW5kZXJlcigpLT5wYXJlbnQoKSktPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxp
bmVUeXBlLCBtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsKIH0KICAgICAKIGludCBJbmxp
bmVUZXh0Qm94OjpsaW5lSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoIWlzVGV4dCgpIHx8ICFw
YXJlbnQoKSkKKyAgICBpZiAoIWlzVGV4dCgpIHx8ICFyZW5kZXJlcigpLT5wYXJlbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG1fcmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAgcmV0
dXJuIHRvUmVuZGVyQlIobV9yZW5kZXJlciktPmxpbmVIZWlnaHQobV9maXJzdExpbmUpOwotICAg
IHJldHVybiBwYXJlbnQoKS0+bGluZUhlaWdodCgpOworICAgIGlmIChwYXJlbnQoKS0+cmVuZGVy
ZXIoKSA9PSByZW5kZXJlcigpLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5s
aW5lSGVpZ2h0KCk7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIo
KS0+cGFyZW50KCkpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhv
cml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOwog
fQogCiBpbnQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKCkKQEAgLTQzNSw3ICs0NjQsNyBA
QCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjCiAgICAgICAgIDogQWZm
aW5lVHJhbnNmb3JtKDAsIC0xLCAxLCAwLCBib3hSZWN0LngoKSAtIGJveFJlY3QubWF4WSgpLCBi
b3hSZWN0LngoKSArIGJveFJlY3QubWF4WSgpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCBsaW5lVG9wLCBp
bnQgbGluZUJvdHRvbSkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5LCBpbnQgLypsaW5lVG9wKi8sIGludCAvKmxpbmVCb3R0b20q
LykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAhcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSB8fAogICAgICAgICBtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCAhbV9sZW4pCkBAIC00NDMs
MTcgKzQ3MiwxMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAK
ICAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSAmJiBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpOwogCi0gICAgaW50IGxv
Z2ljYWxMZWZ0T3ZlcmZsb3cgPSAwOwotICAgIGludCBsb2dpY2FsUmlnaHRPdmVyZmxvdyA9IDA7
Ci0gICAgaWYgKCFrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkgewotICAgICAgICAvLyBGSVhNRTog
VGVjaG5pY2FsbHkgd2UncmUgcG90ZW50aWFsbHkgaW5jb3Jwb3JhdGluZyBvdGhlciB2aXN1YWwg
b3ZlcmZsb3cgdGhhdCBoYWQgbm90aGluZyB0byBkbyB3aXRoIHVzLgotICAgICAgICAvLyBXb3Vs
ZCBpdCBiZSBzaW1wbGVyIHRvIGp1c3QgY2hlY2sgb3VyIG93biBzaGFkb3cgYW5kIHN0cm9rZSBv
dmVyZmxvdyBieSBoYW5kIGhlcmU/Ci0gICAgICAgIEludFJlY3QgcGFyZW50VmlzdWFsT3ZlcmZs
b3cgPSBwYXJlbnQoKS0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90
dG9tKTsKLSAgICAgICAgbG9naWNhbExlZnRPdmVyZmxvdyA9IHBhcmVudCgpLT5sb2dpY2FsTGVm
dCgpIC0gcGFyZW50VmlzdWFsT3ZlcmZsb3cueCgpOwotICAgICAgICBsb2dpY2FsUmlnaHRPdmVy
ZmxvdyA9IHBhcmVudFZpc3VhbE92ZXJmbG93Lm1heFgoKSAtIHBhcmVudCgpLT5sb2dpY2FsUmln
aHQoKTsKLSAgICB9Ci0gICAgaW50IGxvZ2ljYWxTdGFydCA9IGxvZ2ljYWxMZWZ0KCkgLSBsb2dp
Y2FsTGVmdE92ZXJmbG93ICsgKGlzSG9yaXpvbnRhbCgpID8gdHggOiB0eSk7Ci0gICAgaW50IGxv
Z2ljYWxFeHRlbnQgPSBsb2dpY2FsV2lkdGgoKSArIGxvZ2ljYWxMZWZ0T3ZlcmZsb3cgKyBsb2dp
Y2FsUmlnaHRPdmVyZmxvdzsKKyAgICBpbnQgbG9naWNhbExlZnRTaWRlID0gbG9naWNhbExlZnRW
aXN1YWxPdmVyZmxvdygpOworICAgIGludCBsb2dpY2FsUmlnaHRTaWRlID0gbG9naWNhbFJpZ2h0
VmlzdWFsT3ZlcmZsb3coKTsKKyAgICBpbnQgbG9naWNhbFN0YXJ0ID0gbG9naWNhbExlZnRTaWRl
ICsgKGlzSG9yaXpvbnRhbCgpID8gdHggOiB0eSk7CisgICAgaW50IGxvZ2ljYWxFeHRlbnQgPSBs
b2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOwogICAgIAogICAgIGludCBwYWludEVu
ZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJl
Y3QubWF4WSgpOwogICAgIGludCBwYWludFN0YXJ0ID0gaXNIb3Jpem9udGFsKCkgPyBwYWludElu
Zm8ucmVjdC54KCkgOiBwYWludEluZm8ucmVjdC55KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDgyNjExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
OCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFJl
bmRlckFyZW5hKik7CisKICAgICBJbmxpbmVUZXh0Qm94KiBwcmV2VGV4dEJveCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJldlRleHRCb3g7IH0KICAgICBJbmxpbmVUZXh0Qm94KiBuZXh0VGV4dEJveCgp
IGNvbnN0IHsgcmV0dXJuIG1fbmV4dFRleHRCb3g7IH0KICAgICB2b2lkIHNldE5leHRUZXh0Qm94
KElubGluZVRleHRCb3gqIG4pIHsgbV9uZXh0VGV4dEJveCA9IG47IH0KQEAgLTgwLDYgKzgyLDEz
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrUG9zaXRpb24oUmVuZGVyU3R5
bGUqLCBUZXh0RW1waGFzaXNQb3NpdGlvbiYpIGNvbnN0OwogCisgICAgSW50UmVjdCBsb2dpY2Fs
T3ZlcmZsb3dSZWN0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2dpY2FsT3ZlcmZsb3dSZWN0KGNv
bnN0IEludFJlY3QmKTsKKyAgICBpbnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVjdCgpLnkoKTsgfQorICAgIGludCBsb2dpY2FsQm90
dG9tVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCku
bWF4WSgpOyB9CisgICAgaW50IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCkueCgpOyB9CisgICAgaW50IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVjdCgpLm1heFgo
KTsgfQorICAgIAogcHJpdmF0ZToKICAgICBpbnQgc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IHNl
bGVjdGlvbkJvdHRvbSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA4MjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNzksNyArNTM3OSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAgICAgICAgIHZpZXcoKS0+ZGlzYWJs
ZUxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0TGV0dGVyLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
PmlzVGV4dCgpKQotICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQoY2hpbGQpLT5kaXJ0
eUxpbmVCb3hlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KGNoaWxk
KS0+cmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygpOwogICAgICAgICAgICAgICAgIGZpcnN0TGV0
dGVyLT5yZW1vdmVDaGlsZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIt
PmFkZENoaWxkKGNoaWxkLCAwKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA4
MjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOCArMjA2LDEwIEBAIElubGluZUZsb3dCb3gqIFJl
bmRlckJsb2NrOjpjcmVhdGVMaW5lQm8KICAgICBkbyB7CiAgICAgICAgIEFTU0VSVChvYmotPmlz
UmVuZGVySW5saW5lKCkgfHwgb2JqID09IHRoaXMpOwogICAgICAgICAKKyAgICAgICAgUmVuZGVy
SW5saW5lKiBpbmxpbmVGbG93ID0gKG9iaiAhPSB0aGlzKSA/IHRvUmVuZGVySW5saW5lKG9iaikg
OiAwOworCiAgICAgICAgIC8vIEdldCB0aGUgbGFzdCBib3ggd2UgbWFkZSBmb3IgdGhpcyByZW5k
ZXIgb2JqZWN0LgotICAgICAgICBwYXJlbnRCb3ggPSBvYmotPmlzUmVuZGVySW5saW5lKCkgPyB0
b1JlbmRlcklubGluZShvYmopLT5sYXN0TGluZUJveCgpIDogdG9SZW5kZXJCbG9jayhvYmopLT5s
YXN0TGluZUJveCgpOworICAgICAgICBwYXJlbnRCb3ggPSBpbmxpbmVGbG93ID8gaW5saW5lRmxv
dy0+bGFzdExpbmVCb3goKSA6IHRvUmVuZGVyQmxvY2sob2JqKS0+bGFzdExpbmVCb3goKTsKIAog
ICAgICAgICAvLyBJZiB0aGlzIGJveCBvciBpdHMgYW5jZXN0b3IgaXMgY29uc3RydWN0ZWQgdGhl
biBpdCBpcyBmcm9tIGEgcHJldmlvdXMgbGluZSwgYW5kIHdlIG5lZWQKICAgICAgICAgLy8gdG8g
bWFrZSBhIG5ldyBib3ggZm9yIG91ciBsaW5lLiAgSWYgdGhpcyBib3ggb3IgaXRzIGFuY2VzdG9y
IGlzIHVuY29uc3RydWN0ZWQgYnV0IGl0IGhhcwpAQCAtMjE1LDcgKzIxNyw5IEBAIElubGluZUZs
b3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm8KICAgICAgICAgLy8gYXMgd2VsbC4gIElu
IHRoaXMgc2l0dWF0aW9uIG91ciBpbmxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gc3BsaXQgaW4gdHdv
IG9uCiAgICAgICAgIC8vIHRoZSBzYW1lIGxpbmUgKHRoaXMgY2FuIGhhcHBlbiB3aXRoIHZlcnkg
ZmFuY3kgbGFuZ3VhZ2UgbWl4dHVyZXMpLgogICAgICAgICBib29sIGNvbnN0cnVjdGVkTmV3Qm94
ID0gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyZW50Qm94IHx8IHBhcmVudElzQ29uc3RydWN0ZWRP
ckhhdmVOZXh0KHBhcmVudEJveCkpIHsKKyAgICAgICAgYm9vbCBhbGxvd2VkVG9Db25zdHJ1Y3RO
ZXdCb3ggPSAhaGFzRGVmYXVsdExpbmVCb3hDb250YWluIHx8ICFpbmxpbmVGbG93IHx8IGlubGlu
ZUZsb3ctPmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOworICAgICAgICBib29sIGNhblVzZUV4aXN0
aW5nUGFyZW50Qm94ID0gcGFyZW50Qm94ICYmICFwYXJlbnRJc0NvbnN0cnVjdGVkT3JIYXZlTmV4
dChwYXJlbnRCb3gpOworICAgICAgICBpZiAoYWxsb3dlZFRvQ29uc3RydWN0TmV3Qm94ICYmICFj
YW5Vc2VFeGlzdGluZ1BhcmVudEJveCkgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtl
IGEgbmV3IGJveCBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LiAgT25jZQogICAgICAgICAgICAgLy8g
bWFkZSwgd2UgbmVlZCB0byBwbGFjZSBpdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUu
CiAgICAgICAgICAgICBJbmxpbmVCb3gqIG5ld0JveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRl
cmVyKG9iaiwgb2JqID09IHRoaXMpOwpAQCAtMjI4LDE5ICsyMzIsMjEgQEAgSW5saW5lRmxvd0Jv
eCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCbwogICAgICAgICAgICAgY29uc3RydWN0ZWROZXdC
b3ggPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICByZXN1bHQgPSBwYXJlbnRCb3g7Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGJs
b2NrIGl0c2VsZiwgdGhlbiB8Ym94fCByZXByZXNlbnRzIHRoZSByb290Ci0gICAgICAgIC8vIGlu
bGluZSBib3ggZm9yIHRoZSBsaW5lLCBhbmQgaXQgZG9lc24ndCBoYXZlIHRvIGJlIGFwcGVuZGVk
IHRvIGFueSBwYXJlbnQKLSAgICAgICAgLy8gaW5saW5lLgotICAgICAgICBpZiAoY2hpbGRCb3gp
Ci0gICAgICAgICAgICBwYXJlbnRCb3gtPmFkZFRvTGluZShjaGlsZEJveCk7CisgICAgICAgIGlm
IChjb25zdHJ1Y3RlZE5ld0JveCB8fCBjYW5Vc2VFeGlzdGluZ1BhcmVudEJveCkgeworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50Qm94Owor
CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgYmxvY2sgaXRzZWxmLCB0aGVuIHxi
b3h8IHJlcHJlc2VudHMgdGhlIHJvb3QKKyAgICAgICAgICAgIC8vIGlubGluZSBib3ggZm9yIHRo
ZSBsaW5lLCBhbmQgaXQgZG9lc24ndCBoYXZlIHRvIGJlIGFwcGVuZGVkIHRvIGFueSBwYXJlbnQK
KyAgICAgICAgICAgIC8vIGlubGluZS4KKyAgICAgICAgICAgIGlmIChjaGlsZEJveCkKKyAgICAg
ICAgICAgICAgICBwYXJlbnRCb3gtPmFkZFRvTGluZShjaGlsZEJveCk7CiAKLSAgICAgICAgaWYg
KCFjb25zdHJ1Y3RlZE5ld0JveCB8fCBvYmogPT0gdGhpcykKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKCFjb25zdHJ1Y3RlZE5ld0JveCB8fCBvYmogPT0gdGhpcykKKyAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjaGlsZEJveCA9IHBhcmVudEJveDsgICAgICAg
IAorICAgICAgICAgICAgY2hpbGRCb3ggPSBwYXJlbnRCb3g7ICAgICAgICAKKyAgICAgICAgfQog
CiAgICAgICAgIC8vIElmIHdlJ3ZlIGV4Y2VlZGVkIG91ciBsaW5lIGRlcHRoLCB0aGVuIGp1bXAg
c3RyYWlnaHQgdG8gdGhlIHJvb3QgYW5kIHNraXAgYWxsIHRoZSByZW1haW5pbmcKICAgICAgICAg
Ly8gaW50ZXJtZWRpYXRlIGlubGluZSBmbG93cy4KQEAgLTY4NSw2ICs2OTEsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgIG8t
PmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IGlmIChvLT5pc1RleHQoKSB8fCAoby0+aXNSZW5kZXJJbmxpbmUoKSAmJiAhZW5kT2ZJbmxpbmUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFvLT5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJJbmxpbmUobyktPnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOwogICAg
ICAgICAgICAgICAgIGlmIChmdWxsTGF5b3V0IHx8IG8tPnNlbGZOZWVkc0xheW91dCgpKQogICAg
ICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVyKG8sIGZ1bGxMYXlvdXQp
OwogICAgICAgICAgICAgICAgIG8tPnNldE5lZWRzTGF5b3V0KGZhbHNlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA4MjYxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtNDcsNiArNDgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBSZW5kZXJJbmxpbmU6OlJlbmRlcklubGluZShOb2RlKiBub2RlKQogICAgIDog
UmVuZGVyQm94TW9kZWxPYmplY3Qobm9kZSkKICAgICAsIG1fbGluZUhlaWdodCgtMSkKKyAgICAs
IG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzKGZhbHNlKQogewogICAgIHNldENoaWxkcmVuSW5saW5l
KHRydWUpOwogfQpAQCAtMTQ0LDYgKzE0NiwxNSBAQCB2b2lkIFJlbmRlcklubGluZTo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVECiAKICAgICBtX2xpbmVIZWlnaHQgPSAtMTsKIAorICAgIGlmICghbV9h
bHdheXNDcmVhdGVMaW5lQm94ZXMpIHsKKyAgICAgICAgYm9vbCBhbHdheXNDcmVhdGVMaW5lQm94
ZXMgPSBoYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc0JveERlY29yYXRpb25zKCkgfHwgc3R5
bGUoKS0+aGFzUGFkZGluZygpIHx8IHN0eWxlKCktPmhhc01hcmdpbigpIHx8IHN0eWxlKCktPmhh
c091dGxpbmUoKTsKKyAgICAgICAgaWYgKG9sZFN0eWxlICYmIGFsd2F5c0NyZWF0ZUxpbmVCb3hl
cykgeworICAgICAgICAgICAgZGlydHlMaW5lQm94ZXMoZmFsc2UpOworICAgICAgICAgICAgc2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hbHdheXNDcmVhdGVMaW5l
Qm94ZXMgPSBhbHdheXNDcmVhdGVMaW5lQm94ZXM7CisgICAgfQorCiAgICAgLy8gVXBkYXRlIHBz
ZXVkb3MgZm9yIDpiZWZvcmUgYW5kIDphZnRlciBub3cuCiAgICAgaWYgKCFpc0Fub255bW91cygp
ICYmIGRvY3VtZW50KCktPnVzZXNCZWZvcmVBZnRlclJ1bGVzKCkpIHsKICAgICAgICAgY2hpbGRy
ZW4oKS0+dXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50KHRoaXMsIEJFRk9SRSk7CkBAIC0xNTEsNiAr
MTYyLDQyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICB9
CiB9CiAKK3ZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoKQor
eworICAgIC8vIE9uY2Ugd2UgaGF2ZSBiZWVuIHRhaW50ZWQgb25jZSwganVzdCBhc3N1bWUgaXQg
d2lsbCBoYXBwZW4gYWdhaW4uIFRoaXMgd2F5IGVmZmVjdHMgbGlrZSBob3ZlciBoaWdobGlnaHRp
bmcgdGhhdCBjaGFuZ2UgdGhlCisgICAgLy8gYmFja2dyb3VuZCBjb2xvciB3aWxsIG9ubHkgY2F1
c2UgYSBsYXlvdXQgb24gdGhlIGZpcnN0IHJvbGxvdmVyLgorICAgIGlmIChtX2Fsd2F5c0NyZWF0
ZUxpbmVCb3hlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gcGFyZW50KCktPnN0eWxlKCk7CisgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJ
bmxpbmUgPSBwYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSA/IHRvUmVuZGVySW5saW5lKHBhcmVu
dCgpKSA6IDA7CisgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01v
ZGUoKTsKKyAgICBib29sIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IChwYXJlbnRSZW5kZXJJbmxp
bmUgJiYgcGFyZW50UmVuZGVySW5saW5lLT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRSZW5kZXJJbmxpbmUgJiYgcGFy
ZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3R5bGUoKS0+dGV4dEVtcGhhc2lz
TWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAocGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpICE9IHN0eWxlKCktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IHN0eWxlKCktPmZvbnQoKS5mb250TWV0cmljcygpLmRl
c2NlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUt
PmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKSAhPSBzdHlsZSgpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5saW5lR2FwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBh
cmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gc3R5bGUoKS0+bGluZUhlaWdodCgpKSk7CisKKyAg
ICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcyAmJiBjaGVja0ZvbnRzICYmIGRvY3VtZW50KCkt
PnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CisgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZp
cnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KKyAgICAgICAgcGFyZW50U3R5bGUgPSBwYXJlbnQoKS0+
c3R5bGUodHJ1ZSk7CisgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gc3R5bGUodHJ1
ZSk7CisgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IHBhcmVudFN0eWxlLT5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRTdHls
ZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZvbnQoKS5m
b250TWV0cmljcygpLmRlc2NlbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkubGluZUdhcCgpICE9IGNoaWxkU3R5
bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQo
KSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCk7CisgICAgfQorCisgICAgaWYgKGFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcykgeworICAgICAgICBkaXJ0eUxpbmVCb3hlcyhmYWxzZSk7CisgICAgICAg
IG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gdHJ1ZTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVy
SW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQogewogICAgIGlmIChjb250aW51YXRpb24oKSkKQEAgLTQyNCw5ICs0NzEsMTEg
QEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogCiB2b2lkIFJlbmRl
cklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGlu
dCB0eSkKIHsKLSAgICBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7
CisgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAgY3VsbGVkSW5saW5l
QWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgdHgsIHR5KTsKKyAgICBlbHNlIGlmIChJbmxpbmVG
bG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCkpIHsKICAgICAgICAgZm9yICg7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKEludFJl
Y3QodHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+eSgpLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwg
Y3Vyci0+bG9naWNhbEhlaWdodCgpKSk7CisgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9z
aW5nSW50UmVjdChGbG9hdFJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+eSgpLCBjdXJy
LT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVjdHMu
YXBwZW5kKEludFJlY3QodHgsIHR5LCAwLCAwKSk7CiAKQEAgLTQ0MSwxMSArNDkwLDc2IEBAIHZv
aWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICB9CiB9CiAKK3ZvaWQg
UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGlu
ZSogY29udGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3sK
KyAgICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAvLyBXZSB3YW50IHRvIGdldCB0aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVj
dGlvbiwgYW5kIHRoZW4gdXNlIG91ciBmb250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jawor
ICAgICAgICAvLyBkaXJlY3Rpb24gKGFsaWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUp
LgorICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBj
dXJyQm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBpZiAoY3VyckJveC0+aW5s
aW5lQm94V3JhcHBlcigpKSB7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJv
eCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOworICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRl
cmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5l
U3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIHR5ICsgbG9naWNhbFRv
cCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1h
cmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgbG9naWNhbFRvcCwgdHkgKyBj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBs
b2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsg
Y3VyckJveC0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChl
bmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjaGls
ZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgorICAg
ICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7
CisgICAgICAgICAgICBpZiAoIWN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQor
ICAgICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmN1bGxlZElubGluZUFic29sdXRlUmVjdHMoY29u
dGFpbmVyLCByZWN0cywgdHgsIHR5KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5lID0gY3VycklubGluZS0+Zmlyc3RMaW5l
Qm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZExpbmUt
PnJvb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5s
b2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJz
dExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXIt
PnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KHR4ICsgY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgKyBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdp
bkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBG
bG9hdFJlY3QodHggKyBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5ICsgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2lj
YWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgp
ICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgewor
ICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7Cisg
ICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LT5maXJz
dFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5leHRUZXh0Qm94
KCkpIHsKKyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRUZXh0
LT5yb290KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dp
Y2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExp
bmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0
eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9h
dFJlY3QodHggKyBjaGlsZFRleHQtPngoKSwgdHkgKyBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdCh0eCArIGxvZ2ljYWxUb3AsIHR5ICsg
Y2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCkp
OworICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcklubGlu
ZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7Ci0gICAgaWYgKElu
bGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgeworICAgIGlmICghYWx3YXlzQ3Jl
YXRlTGluZUJveGVzKCkpCisgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUXVhZHModGhpcywg
cXVhZHMpOworICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3go
KSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsK
LSAgICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1
cnItPmxvZ2ljYWxXaWR0aCgpLCBjdXJyLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAg
RmxvYXRSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwg
Y3Vyci0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0
ZVF1YWQobG9jYWxSZWN0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTQ1NSwxOSArNTY5
LDg0IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjwKICAgICAgICAg
Y29udGludWF0aW9uKCktPmFic29sdXRlUXVhZHMocXVhZHMpOwogfQogCit2b2lkIFJlbmRlcklu
bGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRh
aW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0
IHRoZSBtYXJnaW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3Vy
IGZvbnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCisgICAgICAgIC8vIGRpcmVjdGlvbiAo
YWxpZ25lZCB0byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCisgICAgICAgIGlmIChjdXJyLT5p
c0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChj
dXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT5yb290KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290
Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250
YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94
LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5t
YXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVj
dChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gt
Pm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gt
Pm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAg
IHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4g
d2UgY2FuIHJlY3VyLgorICAgICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9S
ZW5kZXJJbmxpbmUoY3Vycik7CisgICAgICAgICAgICBpZiAoIWN1cnJJbmxpbmUtPmFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcygpKQorICAgICAgICAgICAgICAgIGN1cnJJbmxpbmUtPmN1bGxlZElubGlu
ZUFic29sdXRlUXVhZHMoY29udGFpbmVyLCBxdWFkcyk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxpbmUt
PmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExp
bmVCb3goKSkgeworICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0g
Y2hpbGRMaW5lLT5yb290KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
cm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVp
Z2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdp
bkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBG
bG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZExpbmUtPnkoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+
bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExp
bmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZHMuYXBw
ZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAg
ICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAg
ICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJv
eCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkgewor
ICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3Qo
KTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3Ao
KSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGlm
IChpc0hvcml6b250YWwpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChj
aGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9n
aWNhbEhlaWdodCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWln
aHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsK
ICAgICBpbnQgeCA9IFJlbmRlckJveE1vZGVsT2JqZWN0OjpvZmZzZXRMZWZ0KCk7Ci0gICAgaWYg
KGZpcnN0TGluZUJveCgpKQotICAgICAgICB4ICs9IGZpcnN0TGluZUJveCgpLT54KCk7CisgICAg
SW5saW5lQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKTsKKyAg
ICBpZiAoZmlyc3RCb3gpCisgICAgICAgIHggKz0gZmlyc3RCb3gtPngoKTsKICAgICByZXR1cm4g
eDsKIH0KIAogaW50IFJlbmRlcklubGluZTo6b2Zmc2V0VG9wKCkgY29uc3QKIHsKICAgICBpbnQg
eSA9IFJlbmRlckJveE1vZGVsT2JqZWN0OjpvZmZzZXRUb3AoKTsKLSAgICBpZiAoZmlyc3RMaW5l
Qm94KCkpCi0gICAgICAgIHkgKz0gZmlyc3RMaW5lQm94KCktPnkoKTsKKyAgICBJbmxpbmVCb3gq
IGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgIGlmIChmaXJz
dEJveCkKKyAgICAgICAgeSArPSBmaXJzdEJveC0+eSgpOwogICAgIHJldHVybiB5OwogfQogCkBA
IC01NjUsNiArNzQ0LDExIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJJbmxpbmU6OnBvc2l0aW9u
Rm8KIAogSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKSBjb25zdAogewor
ICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpIHsKKyAgICAgICAgQVNTRVJUKCFmaXJz
dExpbmVCb3goKSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1bGxlZElubGlu
ZUJvdW5kaW5nQm94KHRoaXMpKTsKKyAgICB9CisKICAgICBJbnRSZWN0IHJlc3VsdDsKICAgICAK
ICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUyODk3MjE+LCBmb3IgYW4gdW5rbm93biByZWFz
b24gdGhlIGxpbmtlZCBsaXN0IGhlcmUgaXMgc29tZXRpbWVzIGluY29uc2lzdGVudCwgZmlyc3Qg
aXMgbm9uLXplcm8gYW5kIGxhc3QgaXMgemVyby4gIFdlIGhhdmUgYmVlbgpAQCAtNTk0LDggKzc3
OCwxNjMgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJv
dW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAoreworICAgIEZs
b2F0UmVjdCByZXN1bHQ7CisgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAo
Y3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIG1hcmdpbiBib3ggaW4g
dGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIgZm9udCBhc2NlbnQvZGVzY2Vu
dCBpbiB0aGUgYmxvY2sKKyAgICAgICAgLy8gZGlyZWN0aW9uIChhbGlnbmVkIHRvIHRoZSByb290
IGJveCdzIGJhc2VsaW5lKS4KKyAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAg
ICAgIFJlbmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1cnIpOworICAgICAgICAgICAg
aWYgKGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsK
KyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwor
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIo
KS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0
aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9n
aWNhbEhlaWdodCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxp
bmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0
LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFy
Z2luQm90dG9tKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5p
c1JlbmRlcklubGluZSgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBu
ZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgIFJl
bmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOworICAgICAgICAg
ICAgaWYgKCFjdXJySW5saW5lLT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oY3VycklubGluZS0+Y3VsbGVkSW5saW5lQm91bmRp
bmdCb3goY29udGFpbmVyKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBm
b3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxpbmUtPmZpcnN0TGluZUJveCgp
OyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgeworICAg
ICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290
KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNh
bFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5l
U3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHls
ZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVy
LT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hpbGRM
aW5lLT54KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkg
KyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0
ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExp
bmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNh
bFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxSaWdodCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRv
UmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRU
ZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNo
aWxkVGV4dC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHls
ZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
SGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5m
b250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRS
ZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgp
LCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4
dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
cmVzdWx0KTsKK30KKworSW5saW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0
TGluZUJveCgpIGNvbnN0Cit7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENo
aWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChj
dXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGdldCB0aGUgbWFyZ2luIGJveCBpbiB0
aGUgaW5saW5lIGRpcmVjdGlvbiwgYW5kIHRoZW4gdXNlIG91ciBmb250IGFzY2VudC9kZXNjZW50
IGluIHRoZSBibG9jaworICAgICAgICAvLyBkaXJlY3Rpb24gKGFsaWduZWQgdG8gdGhlIHJvb3Qg
Ym94J3MgYmFzZWxpbmUpLgorICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgeworICAgICAgICAg
ICAgUmVuZGVyQm94KiBjdXJyQm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBp
ZiAoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNS
ZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVl
ZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCisgICAgICAgICAgICBSZW5k
ZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKKyAgICAgICAgICAg
IElubGluZUJveCogcmVzdWx0ID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3Vs
bGluZygpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAg
IGlmIChjdXJyVGV4dC0+Zmlyc3RUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnJUZXh0LT5maXJzdFRleHRCb3goKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKworSW5saW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUxhc3RMaW5lQm94KCkg
Y29uc3QKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBtYXJnaW4gYm94IGluIHRoZSBpbmxp
bmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ugb3VyIGZvbnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhl
IGJsb2NrCisgICAgICAgIC8vIGRpcmVjdGlvbiAoYWxpZ25lZCB0byB0aGUgcm9vdCBib3gncyBi
YXNlbGluZSkuCisgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5k
ZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJy
Qm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJCb3gt
PmlubGluZUJveFdyYXBwZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklu
bGluZSgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUg
Ym94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgIFJlbmRlcklubGlu
ZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOworICAgICAgICAgICAgSW5saW5l
Qm94KiByZXN1bHQgPSBjdXJySW5saW5lLT5sYXN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKTsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgUmVuZGVy
VGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7CisgICAgICAgICAgICBpZiAoY3Vy
clRleHQtPmxhc3RUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJUZXh0LT5s
YXN0VGV4dEJveCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitJbnRS
ZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgp
IGNvbnN0Cit7CisgICAgSW50UmVjdCByZXN1bHQoY3VsbGVkSW5saW5lQm91bmRpbmdCb3godGhp
cykpOworICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgIC8vIEZvciBvdmVyZmxvdyB3ZSBqdXN0IGhhdmUgdG8gcHJvcGFnYXRlIGJ5IGhh
bmQgYW5kIHJlY29tcHV0ZSBpdCBhbGwuCisgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAg
ICAgICAgIGlmICghY3VyckJveC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjdXJyQm94LT5p
bmxpbmVCb3hXcmFwcGVyKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0
ID0gY3VyckJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHN0eWxl
KCkpOworICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbG9naWNhbFJlY3QubW92ZShjdXJyQm94LT54KCksIGN1cnJCb3gtPnkoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhsb2dpY2FsUmVjdCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92
ZShjdXJyQm94LT55KCksIGN1cnJCb3gtPngoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bml0ZUlmTm9uWmVybyhsb2dpY2FsUmVjdC50cmFuc3Bvc2VkUmVjdCgpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5k
ZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBs
aW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCisgICAgICAgICAgICBSZW5kZXJJ
bmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKKyAgICAgICAgICAgIGlm
ICghY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0LnVuaXRlSWZOb25aZXJvKGN1cnJJbmxpbmUtPmN1bGxlZElubGluZVZpc3VhbE92ZXJm
bG93Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBlbHNlIGlmICghY3VycklubGluZS0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblpl
cm8oY3VycklubGluZS0+bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOworICAgICAg
ICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTsgT3Zl
cmZsb3cgZnJvbSB0ZXh0IGJveGVzIGlzIGxvc3QuIFdlIHdpbGwgbmVlZCB0byBjYWNoZSB0aGlz
IGluZm9ybWF0aW9uIGluCisgICAgICAgICAgICAvLyBJbmxpbmVUZXh0Qm94ZXMuCisgICAgICAg
ICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhjdXJyVGV4dC0+bGluZXNWaXN1YWxPdmVyZmxvd0Jv
dW5kaW5nQm94KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEludFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBj
b25zdAogeworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgIHJldHVy
biBjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCk7CisKICAgICBpZiAoIWZp
cnN0TGluZUJveCgpIHx8ICFsYXN0TGluZUJveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwogCkBAIC02MTAsMTIgKzk0OSwxMSBAQCBJbnRSZWN0IFJlbmRlcklubGluZTo6bGluZXNWaXN1
YWxPdmVyZmxvCiAgICAgUm9vdElubGluZUJveCogZmlyc3RSb290Qm94ID0gZmlyc3RMaW5lQm94
KCktPnJvb3QoKTsKICAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCA9IGxhc3RMaW5lQm94
KCktPnJvb3QoKTsKICAgICAKLSAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IGZpcnN0TGluZUJveCgp
LT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CiAgICAgZmxvYXQgbG9naWNhbFRvcCA9IGZp
cnN0TGluZUJveCgpLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coZmlyc3RSb290Qm94LT5saW5l
VG9wKCkpOwogICAgIGZsb2F0IGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dp
Y2FsTGVmdFNpZGU7CiAgICAgZmxvYXQgbG9naWNhbEhlaWdodCA9IGxhc3RMaW5lQm94KCktPmxv
Z2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhsYXN0Um9vdEJveC0+bGluZUJvdHRvbSgpKSAtIGxv
Z2ljYWxUb3A7CiAgICAgCi0gICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9h
dFJlY3QobG9naWNhbExlZnQsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCkpOworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGxvZ2lj
YWxMZWZ0U2lkZSwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAg
ICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZWN0
ID0gcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwogICAgIHJldHVybiByZWN0OwpAQCAtNjI2LDcgKzk2
NCw3IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWMKICAgICAvLyBP
bmx5IHJ1bi1pbnMgYXJlIGFsbG93ZWQgaW4gaGVyZSBkdXJpbmcgbGF5b3V0LgogICAgIEFTU0VS
VCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpIHx8IGlzUnVuSW4oKSk7
CiAKLSAgICBpZiAoIWZpcnN0TGluZUJveCgpICYmICFjb250aW51YXRpb24oKSkKKyAgICBpZiAo
IWZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSAmJiAhY29udGludWF0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICAvLyBGaW5kIG91ciBsZWZ0bW9zdCBwb3NpdGlv
bi4KQEAgLTg5NCw5ICsxMjMyLDM0IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVIaXRUZXN0
UmVzdWx0KEgKIAogdm9pZCBSZW5kZXJJbmxpbmU6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExh
eW91dCkKIHsKLSAgICBpZiAoZnVsbExheW91dCkKKyAgICBpZiAoZnVsbExheW91dCkgewogICAg
ICAgICBtX2xpbmVCb3hlcy5kZWxldGVMaW5lQm94ZXMocmVuZGVyQXJlbmEoKSk7Ci0gICAgZWxz
ZQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94
ZXMoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGdyb3ZlbCBpbnRvIG91ciBjaGlsZHJlbiBp
biBvcmRlciB0byBkaXJ0eSB0aGUgYXBwcm9wcmlhdGUgbGluZXMuCisgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjdXJyLT5pc0Jv
eCgpICYmICFjdXJyLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94
KiBjdXJyQm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJC
b3gtPmlubGluZUJveFdyYXBwZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY3VyckJveC0+aW5s
aW5lQm94V3JhcHBlcigpLT5yb290KCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgfSBlbHNl
IGlmICghY3Vyci0+c2VsZk5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
ci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hp
bGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5kZXJJbmxp
bmUoY3Vycik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY2hpbGRM
aW5lID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94KCk7IGNoaWxkTGluZTsgY2hpbGRMaW5lID0g
Y2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRM
aW5lLT5yb290KCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
ci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQg
PSB0b1JlbmRlclRleHQoY3Vycik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4
dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZpcnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNo
aWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRCb3goKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkVGV4dC0+cm9vdCgpLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKICAgICAgICAgbV9saW5lQm94ZXMu
ZGlydHlMaW5lQm94ZXMoKTsKIH0KIApAQCAtOTA3LDYgKzEyNzAsNyBAQCBJbmxpbmVGbG93Qm94
KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUlubGluCiAKIElubGluZUZsb3dCb3gqIFJlbmRlcklubGlu
ZTo6Y3JlYXRlQW5kQXBwZW5kSW5saW5lRmxvd0JveCgpCiB7CisgICAgc2V0QWx3YXlzQ3JlYXRl
TGluZUJveGVzKCk7CiAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IGNyZWF0ZUlubGluZUZs
b3dCb3goKTsKICAgICBtX2xpbmVCb3hlcy5hcHBlbmRMaW5lQm94KGZsb3dCb3gpOwogICAgIHJl
dHVybiBmbG93Qm94OwpAQCAtOTgzLDEzICsxMzQ3LDExIEBAIHZvaWQgUmVuZGVySW5saW5lOjpp
bWFnZUNoYW5nZWQoV3JhcHBlZEkKIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewotICAgIGZvciAo
SW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+
bmV4dExpbmVCb3goKSkgewotICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9v
dCgpOwotICAgICAgICBpbnQgdG9wID0gbWF4KHJvb3QtPmxpbmVUb3AoKSwgY3Vyci0+bG9naWNh
bFRvcCgpKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290LT5saW5lQm90dG9tKCksIGN1
cnItPmxvZ2ljYWxCb3R0b20oKSk7Ci0gICAgICAgIEludFJlY3QgcmVjdCh0eCArIGN1cnItPngo
KSwgdHkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOwotICAgICAg
ICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOwor
ICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgIGN1bGxlZElubGluZUFi
c29sdXRlUmVjdHModGhpcywgcmVjdHMsIHR4LCB0eSk7CisgICAgZWxzZSBpZiAoSW5saW5lRmxv
d0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7CisgICAgICAgIGZvciAoOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dExpbmVCb3goKSkKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KEZsb2F0UmVjdCh0eCArIGN1cnItPngoKSwgdHkgKyBjdXJyLT55KCksIGN1cnIt
PndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOwogICAgIH0KIAogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmco
KSkgewpAQCAtMTAwMCw3ICsxMzYyLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmlu
Z1JlY3RzKFZlYwogICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgp
OwogICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+aXNCb3goKSkKICAgICAgICAgICAgICAgICBw
b3MubW92ZSh0b1JlbmRlckJveChjdXJyKS0+eCgpLCB0b1JlbmRlckJveChjdXJyKS0+eSgpKTsK
LSAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIHBvcy54KCksIHBvcy55
KCkpOworICAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIHBvcy54KCks
IHBvcy55KCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA4MjYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAog
I2lmbmRlZiBSZW5kZXJJbmxpbmVfaAogI2RlZmluZSBSZW5kZXJJbmxpbmVfaAogCisjaW5jbHVk
ZSAiSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGluZUJveExpc3QuaCIKIApAQCAtNjQsNiArNjUsOCBAQCBwdWJsaWM6
CiAKICAgICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xp
bmVCb3hlcy5maXJzdExpbmVCb3goKTsgfQogICAgIElubGluZUZsb3dCb3gqIGxhc3RMaW5lQm94
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMubGFzdExpbmVCb3goKTsgfQorICAgIElubGlu
ZUJveCogZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIGNvbnN0IHsgcmV0dXJuIGFsd2F5
c0NyZWF0ZUxpbmVCb3hlcygpID8gZmlyc3RMaW5lQm94KCkgOiBjdWxsZWRJbmxpbmVGaXJzdExp
bmVCb3goKTsgfQorICAgIElubGluZUJveCogbGFzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nKCkg
Y29uc3QgeyByZXR1cm4gYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgPyBsYXN0TGluZUJveCgpIDog
Y3VsbGVkSW5saW5lTGFzdExpbmVCb3goKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRpbnVhdGlv
bigpOyB9CiAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkgY29u
c3Q7CkBAIC03OCw2ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0
Q29udGludWF0aW9uOwogCisgICAgYm9vbCBhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSBjb25zdCB7
IHJldHVybiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlczsgfQorICAgIHZvaWQgc2V0QWx3YXlzQ3Jl
YXRlTGluZUJveGVzKCkgeyBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IHRydWU7IH0KKyAgICB2
b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKIApAQCAtOTEsNiArOTgsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIEZs
b2F0UmVjdCBjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRh
aW5lcikgY29uc3Q7CisgICAgSW50UmVjdCBjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5k
aW5nQm94KCkgY29uc3Q7CisgICAgSW5saW5lQm94KiBjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3go
KSBjb25zdDsKKyAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUxhc3RMaW5lQm94KCkgY29uc3Q7
CisgICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGluZSog
Y29udGFpbmVyLCBWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9pZCBj
dWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBW
ZWN0b3I8RmxvYXRRdWFkPiYpOworCiAgICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJl
bmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKIApAQCAtMTU0LDcgKzE2OCw4
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAg
UmVuZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7ICAgLy8gQWxsIG9mIHRoZSBsaW5lIGJveGVz
IGNyZWF0ZWQgZm9yIHRoaXMgaW5saW5lIGZsb3cuICBGb3IgZXhhbXBsZSwgPGk+SGVsbG88YnI+
d29ybGQuPC9pPiB3aWxsIGhhdmUgdHdvIDxpPiBsaW5lIGJveGVzLgogCi0gICAgbXV0YWJsZSBp
bnQgbV9saW5lSGVpZ2h0OworICAgIG11dGFibGUgaW50IG1fbGluZUhlaWdodCA6IDMxOworICAg
IGJvb2wgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgOiAxOwogfTsKIAogaW5saW5lIFJlbmRlcklu
bGluZSogdG9SZW5kZXJJbmxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDgy
NjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE3LDggKzMxNywxMSBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0
OjpkaXJ0eUxpbmVzRnJvbUNoCiAgICAgaWYgKCFjb250YWluZXItPnBhcmVudCgpIHx8IChjb250
YWluZXItPmlzUmVuZGVyQmxvY2soKSAmJiAoY29udGFpbmVyLT5zZWxmTmVlZHNMYXlvdXQoKSB8
fCAhY29udGFpbmVyLT5pc0Jsb2NrRmxvdygpKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFJl
bmRlcklubGluZSogaW5saW5lQ29udGFpbmVyID0gY29udGFpbmVyLT5pc1JlbmRlcklubGluZSgp
ID8gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKSA6IDA7CisgICAgSW5saW5lQm94KiBmaXJzdEJv
eCA9IGlubGluZUNvbnRhaW5lciA/IGlubGluZUNvbnRhaW5lci0+Zmlyc3RMaW5lQm94SW5jbHVk
aW5nQ3VsbGluZygpIDogZmlyc3RMaW5lQm94KCk7CisKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGZp
cnN0IGxpbmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KLSAgICBpZiAoIWZpcnN0TGluZUJv
eCgpKSB7CisgICAgaWYgKCFmaXJzdEJveCkgewogICAgICAgICAvLyBGb3IgYW4gZW1wdHkgaW5s
aW5lLCBnbyBhaGVhZCBhbmQgcHJvcGFnYXRlIHRoZSBjaGVjayB1cCB0byBvdXIgcGFyZW50LCB1
bmxlc3MgdGhlIHBhcmVudAogICAgICAgICAvLyBpcyBhbHJlYWR5IGRpcnR5LgogICAgICAgICBp
ZiAoY29udGFpbmVyLT5pc0lubGluZSgpICYmICFjb250YWluZXItPnBhcmVudCgpLT5zZWxmTmVl
ZHNMYXlvdXQoKSkKQEAgLTM0NCwxNiArMzQ3LDE2IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6
OmRpcnR5TGluZXNGcm9tQ2gKICAgICAgICAgICAgIGlmICh0ZXh0Qm94KQogICAgICAgICAgICAg
ICAgIGJveCA9IHRleHRCb3gtPnJvb3QoKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1Jl
bmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gdG9S
ZW5kZXJJbmxpbmUoY3VyciktPmxhc3RMaW5lQm94KCk7Ci0gICAgICAgICAgICBpZiAoZmxvd0Jv
eCkKLSAgICAgICAgICAgICAgICBib3ggPSBmbG93Qm94LT5yb290KCk7CisgICAgICAgICAgICBJ
bmxpbmVCb3gqIGxhc3RTaWJsaW5nQm94ID0gdG9SZW5kZXJJbmxpbmUoY3VyciktPmxhc3RMaW5l
Qm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAgICAgaWYgKGxhc3RTaWJsaW5nQm94KQor
ICAgICAgICAgICAgICAgIGJveCA9IGxhc3RTaWJsaW5nQm94LT5yb290KCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoYm94KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICgh
Ym94KQotICAgICAgICBib3ggPSBmaXJzdExpbmVCb3goKS0+cm9vdCgpOworICAgICAgICBib3gg
PSBmaXJzdEJveC0+cm9vdCgpOwogCiAgICAgLy8gSWYgd2UgZm91bmQgYSBsaW5lIGJveCwgdGhl
biBkaXJ0eSBpdC4KICAgICBpZiAoYm94KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA4MjYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZv
aWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWYKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyVGV4dDo6ZGVzdHJveSgpCit2b2lkIFJlbmRlclRleHQ6OnJlbW92ZUFuZERlc3Ryb3lU
ZXh0Qm94ZXMoKQogewogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAg
ICAgIGlmIChmaXJzdFRleHRCb3goKSkgewpAQCAtMTkyLDYgKzE5MiwxMSBAQCB2b2lkIFJlbmRl
clRleHQ6OmRlc3Ryb3koKQogICAgICAgICAgICAgcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hh
bmdlZENoaWxkKHRoaXMpOwogICAgIH0KICAgICBkZWxldGVUZXh0Qm94ZXMoKTsKK30KKwordm9p
ZCBSZW5kZXJUZXh0OjpkZXN0cm95KCkKK3sKKyAgICByZW1vdmVBbmREZXN0cm95VGV4dEJveGVz
KCk7CiAgICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7CiB9CiAKQEAgLTI2OCw3ICsyNzMsNyBA
QCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpCiB2b2lkIFJlbmRlclRl
eHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkp
CiB7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4
ICsgYm94LT54KCksIHR5ICsgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCksIGJveC0+bG9n
aWNhbEhlaWdodCgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdCh0eCArIGJveC0+eCgpLCB0eSArIGJveC0+eSgpLCBib3gtPndpZHRoKCksIGJveC0+
aGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdl
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJv
b2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMTMwMCw2ICsxMzA1LDI5IEBAIEludFJlY3QgUmVu
ZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCgpIGMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitJ
bnRSZWN0IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgaWYgKCFmaXJzdFRleHRCb3goKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
KworICAgIC8vIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIG1pbmltYWwgbGVmdCBzaWRlIGFuZCB0
aGUgbWF4aW1hbCByaWdodCBzaWRlLgorICAgIGZsb2F0IGxvZ2ljYWxMZWZ0U2lkZSA9IG51bWVy
aWNfbGltaXRzPGludD46Om1heCgpOworICAgIGZsb2F0IGxvZ2ljYWxSaWdodFNpZGUgPSBudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBm
aXJzdFRleHRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKKyAgICAg
ICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGN1cnItPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSkpOworICAgICAgICBsb2dpY2Fs
UmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxSaWdodFNpZGUsIHN0YXRpY19jYXN0PGZsb2F0PihjdXJy
LT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKSk7CisgICAgfQorICAgIAorICAgIGZsb2F0
IGxvZ2ljYWxUb3AgPSBmaXJzdFRleHRCb3goKS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCk7
CisgICAgZmxvYXQgbG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0
U2lkZTsKKyAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0ID0gbGFzdFRleHRCb3goKS0+bG9naWNhbEJv
dHRvbVZpc3VhbE92ZXJmbG93KCkgLSBsb2dpY2FsVG9wOworICAgIAorICAgIEludFJlY3QgcmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGxvZ2ljYWxMZWZ0U2lkZSwgbG9naWNhbFRv
cCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgaWYgKCFzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZWN0ID0gcmVjdC50cmFuc3Bvc2VkUmVj
dCgpOworICAgIHJldHVybiByZWN0OworfQorCiBJbnRSZWN0IFJlbmRlclRleHQ6OmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKQogewogICAgIFJlbmRlck9iamVjdCogY2IgPSBjb250YWluaW5nQmxvY2soKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gODI2MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBt
aW5XLCBmbG9hdCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcyk7CiAKICAgICB2aXJ0dWFs
IEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIEludFJlY3QgbGluZXNWaXN1
YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3Q7CiAKICAgICBGbG9hdFBvaW50IGZpcnN0UnVu
T3JpZ2luKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5YKCkgY29uc3Q7CkBAIC0xMjcsNiAr
MTI4LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wga25vd25Ub0hhdmVOb092ZXJmbG93QW5k
Tm9GYWxsYmFja0ZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dB
bmROb0ZhbGxiYWNrRm9udHM7IH0KIAorICAgIHZvaWQgcmVtb3ZlQW5kRGVzdHJveVRleHRCb3hl
cygpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5jcHAJKHJldmlzaW9uIDgyNjEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIFJlbmRlclNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUq
IG4pCiAgICAgOiBSZW5kZXJJbmxpbmUobikKIHsKKyAgICBzZXRBbHdheXNDcmVhdGVMaW5lQm94
ZXMoKTsKIH0KIAogSW5saW5lRmxvd0JveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbmxpbmVG
bG93Qm94KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmNwcAkocmV2aXNpb24gODI2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMg
KzEwMywxMyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dENoYXJhY3RlcnNJCiAgICAg
ICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5l
VGV4dEJveCo+KGNoaWxkKTsKICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5sYXlvdXRJbmxp
bmVUZXh0Qm94KHRleHRCb3gpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJU
KGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSk7Ci0KICAgICAgICAgICAgIC8vIFNraXAgZ2VuZXJh
dGVkIGNvbnRlbnQuCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gY2hpbGQtPnJlbmRlcmVyKCkt
Pm5vZGUoKTsKICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAorICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSk7CisKICAg
ICAgICAgICAgIFNWR0lubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxp
bmVGbG93Qm94Kj4oY2hpbGQpOwogICAgICAgICAgICAgYm9vbCBpc1RleHRQYXRoID0gbm9kZS0+
aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFBhdGhUYWcpOwogICAgICAgICAgICAgaWYgKGlzVGV4
dFBhdGgpIHsKQEAgLTE0NiwxMiArMTQ2LDEyIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5
b3V0Q2hpbGRCb3hlcygKICAgICAgICAgICAgIHRleHRCb3gtPnNldExvZ2ljYWxXaWR0aChib3hS
ZWN0LndpZHRoKCkpOwogICAgICAgICAgICAgdGV4dEJveC0+c2V0TG9naWNhbEhlaWdodChib3hS
ZWN0LmhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjaGls
ZC0+aXNJbmxpbmVGbG93Qm94KCkpOwotCiAgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBj
b250ZW50LgogICAgICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+bm9kZSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmlzSW5s
aW5lRmxvd0JveCgpKTsKKwogICAgICAgICAgICAgU1ZHSW5saW5lRmxvd0JveCogZmxvd0JveCA9
IHN0YXRpY19jYXN0PFNWR0lubGluZUZsb3dCb3gqPihjaGlsZCk7CiAgICAgICAgICAgICBsYXlv
dXRDaGlsZEJveGVzKGZsb3dCb3gpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MzAxNikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEx
LTA0LTA1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc5MTYKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBhbiBvcHRp
bWl6YXRpb24gdG8gdGhlIGxpbmUgYm94IHRyZWUgdG8gY3VsbCBvdXQgbW9zdCBvZiB0aGUgaW50
ZXJtZWRpYXRlCisgICAgICAgIGxpbmUgYm94ZXMgdGhhdCBjYW4gb2NjdXIgYmV0d2VlbiB0aGUg
cm9vdCBsaW5lIGJveCBhbmQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSAoaW1hZ2VzCisgICAgICAg
IGFuZCB0ZXh0KS4KKworICAgICAgICBSZW5kZXJJbmxpbmVzIG5vdyBoYXZlIGEgYm9vbGVhbiBt
ZW1iZXIsIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzLAorICAgICAgICB0aGF0IHN0YXJ0cyBvZmYg
YXMgZmFsc2UuIE9ubHkgaWYgaXQgZ2V0cyBmbGlwcGVkIHRvIHRydWUgd2lsbCB0aGVyZSBiZSBh
bnkgbGluZSBib3hlcworICAgICAgICBjcmVhdGVkIGZvciB0aGF0IFJlbmRlcklubGluZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2Jsb2NrZmxvdy90ZXh0LW9yaWVudGF0aW9uLWJh
c2ljLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2NhcGl0
YWxpemUtZW1wdHktZ2VuZXJhdGVkLXN0cmluZy1leHBlY3RlZC50eHQ6CisKIDIwMTEtMDQtMDUg
IENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jsb2NrZmxvdy90
ZXh0LW9yaWVudGF0aW9uLWJhc2ljLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9ja2Zsb3cvdGV4dC1vcmllbnRhdGlvbi1iYXNpYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDgyNjEwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvYmxvY2tmbG93L3RleHQtb3JpZW50YXRpb24tYmFzaWMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNzg1eDcwNAog
ICAgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0MHgyNTQKICAgICAg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDQsMSkgc2l6ZSA0MHgyNTQKICAgICAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDQ0LDEpIHdpZHRoIDI1NDogIkhlbGxvIHdvcmxkIgotICAgICAg
ICAgIFJlbmRlckJSIHtCUn0gYXQgKDY0LDI1NCkgc2l6ZSAweDEKKyAgICAgICAgICBSZW5kZXJC
UiB7QlJ9IGF0ICg1MiwyNTQpIHNpemUgMHgxCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFO
fSBhdCAoMCwwKSBzaXplIDM2eDE5OQogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICg5NCwxKSBzaXplIDM2eDE5OQogICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoOTQsMSkgd2lk
dGggMTk5OiAiSGVsbG8gd29ybGQiCkBAIC00NCw3ICs0NCw3IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgNzg1eDcwNAogICAgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0
MHgyNTUKICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNDQsMSkgc2l6ZSA0MHgy
NTUKICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQ0LDEpIHdpZHRoIDI1NTogIkhlbGxvIHdv
cmxkIgotICAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDY0LDI1Nikgc2l6ZSAweDAKKyAgICAg
ICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MiwyNTYpIHNpemUgMHgwCiAgICAgICAgICAgUmVuZGVy
SW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM2eDE5OAogICAgICAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICg5NCwxKSBzaXplIDM2eDE5OAogICAgICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoOTQsMSkgd2lkdGggMTk4OiAiSGVsbG8gd29ybGQiCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC90ZXh0L2NhcGl0YWxpemUtZW1wdHktZ2VuZXJhdGVkLXN0cmluZy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdGV4
dC9jYXBpdGFsaXplLWVtcHR5LWdlbmVyYXRlZC1zdHJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA4MjYxMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvY2FwaXRhbGl6
ZS1lbXB0eS1nZW5lcmF0ZWQtc3RyaW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NngxOAogICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggNDY6ICJMb3JlbSAiCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFO
fSBhdCAoMCwwKSBzaXplIDM5eDE4Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRl
ZCkgYXQgKDAsMCkgc2l6ZSAweDE4CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRl
ZCkgYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwwKSBz
aXplIDB4MAogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0NiwwKSBzaXplIDM5
eDE4CiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0NiwwKSB3aWR0aCAzOTogIklwc3VtIgpA
QCAtMzgsNyArMzgsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyM3gxOAogICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMjM6ICJMb3IiCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFO
fSBhdCAoMCwwKSBzaXplIDYyeDE4Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRl
ZCkgYXQgKDAsMCkgc2l6ZSAweDE4CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRl
ZCkgYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwwKSBz
aXplIDB4MAogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyMywwKSBzaXplIDYy
eDE4CiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgyMywwKSB3aWR0aCA2MjogImVtIElwc3Vt
Igo=
</data>
<flag name="review"
          id="80863"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88456</attachid>
            <date>2011-04-06 09:51:21 -0700</date>
            <delta_ts>2011-04-06 18:30:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>74936</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDI1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg2IEBACisyMDExLTA0LTA1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTc5MTYKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBhbiBvcHRpbWl6YXRpb24gdG8gdGhl
IGxpbmUgYm94IHRyZWUgdG8gY3VsbCBvdXQgbW9zdCBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAg
ICAgIGxpbmUgYm94ZXMgdGhhdCBjYW4gb2NjdXIgYmV0d2VlbiB0aGUgcm9vdCBsaW5lIGJveCBh
bmQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSAoaW1hZ2VzCisgICAgICAgIGFuZCB0ZXh0KS4KKwor
ICAgICAgICBSZW5kZXJJbmxpbmVzIG5vdyBoYXZlIGEgYm9vbGVhbiBtZW1iZXIsIG1fYWx3YXlz
Q3JlYXRlTGluZUJveGVzLAorICAgICAgICB0aGF0IHN0YXJ0cyBvZmYgYXMgZmFsc2UuIE9ubHkg
aWYgaXQgZ2V0cyBmbGlwcGVkIHRvIHRydWUgd2lsbCB0aGVyZSBiZSBhbnkgbGluZSBib3hlcwor
ICAgICAgICBjcmVhdGVkIGZvciB0aGF0IFJlbmRlcklubGluZS4KKyAgICAgICAgCisgICAgICAg
ICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KToKKyAgICAgICAgQWRqdXN0IHRoZSBv
cmRlcmluZyBvZiB1cGRhdGVMYXlvdXQgY2FsbHMgdG8gbWFrZSBzdXJlIHJlY3RzIGFyZW4ndCBx
dWVyaWVkIHVubGVzcyBsYXlvdXQKKyAgICAgICAgaXMgdXAgdG8gZGF0ZS4KKworICAgICAgICAq
IHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2Ny
ZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRl
cyk6CisgICAgICAgIEFkZCBhc3NlcnRzIGluIHNwYXRpYWwgbmF2aWdhdGlvbiBjb2RlIHRvIGNh
dGNoIGFueSBmdXR1cmUgYmFkIHF1ZXJpZXMgdGhhdCBtaWdodCBiZSBtYWRlCisgICAgICAgIGZv
ciByZWN0YW5nbGVzIHdpdGhvdXQgbGF5b3V0IGJlaW5nIHVwIHRvIGRhdGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRSZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRSZWN0Ojp1bml0ZUlmTm9uWmVybyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICBBZGQgYSBuZXcgdW5pdGUgZnVuY3Rpb24g
dGhhdCBpcyB1c2VmdWwgZm9yIHRoZSByZW5kZXIgdHJlZSB0byBGbG9hdFJlY3QgYW5kIEludFJl
Y3QuICBUaGlzCisgICAgICAgIHZlcnNpb24gYWxsb3dzIHJlY3QgdW5pdGVzIHRvIGhhcHBlbiBp
ZiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IGlzIG5vbnplcm8uCisKKyAgICAgICAgKiByZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KToKKyAgICAgICAgTWFrZSBzdXJlIHJlY3QtYmFz
ZWQgaGl0IHRlc3RpbmcgcHJvcGVybHkgYWRkcyBpbiBjdWxsZWQgaW5saW5lIGFuY2VzdG9ycyB0
byB0aGUgc2V0IG9mIG5vZGVzCisgICAgICAgIGlmIGNvbnRlbnQgaW5zaWRlIHRob3NlIGlubGlu
ZXMgaXMgaGl0LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94Ojpsb2dpY2FsRnJhbWVSZWN0KToKKyAgICAgICAgRml4IGEgYnVn
IGluIHRoaXMgZnVuY3Rpb24gZm9yIG9idGFpbmluZyB0aGUgbG9naWNhbCBmcmFtZSByZWN0IG9m
IGFuIGlubGluZSBib3guCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUpOgorICAgICAgICBh
ZGRUb0xpbmUgbm93IGFsc28gY2hlY2tzIGxpbmUgZ2FwIGluIHRoZSBsaW5lIGJveCB0cmVlIG9w
dGltaXphdGlvbiBjaGVja3MuCisgICAgCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxv
d0JveDo6Y29tcHV0ZU92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oOgorICAgICAgICBSZXdyaXR0ZW4gdG8gYWRkIHRoZSB0ZXh0IGJveCBvdmVyZmxvdyB0byB0
aGUgdGV4dCBib3ggaXRzZWxmLgorCisgICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmRlc3Ryb3kpOgorICAgICAg
ICBEZXN0cm95IGhhcyBiZWVuIGNoYW5nZWQgdG8gY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBy
ZW1vdmUgYW5kIGRlc3Ryb3kgdGhlIGxpbmUgYm94ZXMgdGhhdAorICAgICAgICBpcyBub3cgY2Fs
bGVkIGZyb20gb25lIGFkZGl0aW9uYWwgc3BvdC4KKworICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6bG9naWNhbE92ZXJmbG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpzZXRMb2dpY2FsT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgVGV4dCBib3hlcyBub3cg
Y2FjaGUgdGhlaXIgb3duIG92ZXJmbG93IGluIGEgZ2xvYmFsIGhhc2ggdGFibGUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bGluZUhlaWdodCk6CisgICAgICAgIENoYW5nZWQgdG8g
bm90IGFzc3VtZSB0aGF0IHRoZSBwYXJlbnQgbGluZSBib3gncyByZW5kZXJlciBpcyB0aGUgUmVu
ZGVyVGV4dCdzIGltbWVkaWF0ZQorICAgICAgICBwYXJlbnQsIHNpbmNlIGludGVybWVkaWF0ZSBs
aW5lIGJveGVzIG1heSBoYXZlIGJlZW4gY3VsbGVkLgorCisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIFBhaW50IG5vdyBwcm9wZXJseSBjaGVja3Mgb25s
eSB0aGUgdGV4dCBib3ggb3ZlcmZsb3cgaW5zdGVhZCBvZiB0aGUgcGFyZW50IGxpbmUgYm94J3Mg
b3ZlcmZsb3cuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxv
dyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KToKKyAgICAgICAgTmV3IGFjY2Vzc29ycyB0byBvYnRhaW4gb3ZlcmZsb3cg
Zm9yIGlubGluZSB0ZXh0IGJveGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcik6
CisgICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyIG5vdyByZW1vdmVzIHRleHQgYm94ZXMgZnJvbSB0
aGUgbGluZSBib3ggdHJlZSBiZWZvcmUgaXQgZGVzdHJveXMgdGhlbSwgc2luY2UgdGhvc2UKKyAg
ICAgICAgdGV4dCBib3hlcyBtYXkgbm90IGhhdmUgYW55dGhpbmcgaW4gYmV0d2VlbiB0aGVtIGFu
ZCB0aGUgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgaW5saW5lIGZpcnN0IGxldHRlcgorICAgICAg
ICBjb250YWluZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMpOgor
ICAgICAgICBUaGUgY3VsbGluZyBvcHRpbWl6YXRpb24gaXMgZG9uZSBoZXJlLiAgT25seSBpZiB0
aGUgUmVuZGVySW5saW5lIHNheXMgdGhhdCBib3hlcyBhcmUgYWxsb3dlZCB3aWxsIHRoZXkKKyAg
ICAgICAgYmUgY3JlYXRlZC4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgVGhlIHN0YXRlIG9mIHRoZSBSZW5kZXJJbmxpbmUg
aXMgdXBkYXRlZCBoZXJlLCBpbiBjYXNlIGl0IGlzIGRpc2NvdmVyZWQgdGhhdCBsaW5lIGJveGVz
IGFyZSBub3cgbmVlZGVkLgorICAgICAgICBUaGlzIGlzIGRvbmUgYmVmb3JlIGFueSBsaW5lcyBh
cmUgYnVpbHQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6UmVuZGVySW5saW5lKToKKyAgICAgICAgVGhlIG5l
dyBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBmbGFnIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjb25z
dHJ1Y3Rvci4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5n
ZSk6CisgICAgICAgIEFuIGluaXRpYWwgdXBkYXRlIG9mIHRoZSBtX2Fsd2F5c0NyZWF0ZUxpbmVC
b3hlcyBoYXBwZW5zIGhlcmUgZm9yIHRoaW5ncyB0aGF0IGNhbiBiZSBjaGVja2VkIGltbWVkaWF0
ZWx5CisgICAgICAgIChsaWtlIGhhdmluZyBhIGxheWVyLCBib3JkZXJzLCBwYWRkaW5nLCBtYXJn
aW5zIG9yIGJhY2tncm91bmRzKS4gIFNvbWUgY2hlY2tzIHRoYXQgZGVwZW5kIG9uIGV4YW1pbmlu
ZworICAgICAgICB0aGUgUmVuZGVySW5saW5lJ3MgcGFyZW50IChpbmNsdWRpbmcgZmlyc3QgbGlu
ZSBzdHlsZXMpIGhhcHBlbiBsYXRlciBpbiBsYXlvdXRJbmxpbmVDaGlsZHJlbi4KKworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMpOgor
ICAgICAgICBUaGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGxheW91dElubGluZUNoaWxkcmVuIHRvIGNo
ZWNrIHBhcmVudCBhbmQgY2hpbGQgc3R5bGUgZGlmZmVyZW5jZXMgKGUuZy4sIGZvbnQsCisgICAg
ICAgIHZlcnRpY2FsIGFsaWdubWVudCwgbGluZSBoZWlnaHQsIGV0Yy4pLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKToKKyAgICAgICAgYWJzb2x1
dGVSZWN0cyBjYWxscyBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzIHdoZW4gbV9hbHdheXNDcmVh
dGVMaW5lQm94ZXMgaXMgZmFsc2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6
YWJzb2x1dGVRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxlZElu
bGluZUFic29sdXRlUXVhZHMpOgorICAgICAgICBhYnNvbHV0ZVF1YWRzIGNhbGxzIGN1bGxlZElu
bGluZUFic29sdXRlUXVhZHMgd2hlbiBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyBpcyBmYWxzZS4K
KworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpvZmZzZXRMZWZ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6b2Zmc2V0VG9wKToKKyAgICAgICAgb2Zmc2V0TGVmdCBh
bmQgb2Zmc2V0VG9wIG5vdyBjaGVjayBkZXNjZW5kYW50IHJlbmRlcmVycyB3aGVuIG1fYWx3YXlz
Q3JlYXRlTGluZUJveGVzIGlzIGZhbHNlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmxpbmVzQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpj
dWxsZWRJbmxpbmVCb3VuZGluZ0JveCk6CisgICAgICAgIGxpbmVCb3VuZGluZ0JveCBjYWxscyBj
dWxsZWRJbmxpbmVCb3VuZGluZ0JveCB3aGVuIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZh
bHNlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0
TGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUxh
c3RMaW5lQm94KToKKyAgICAgICAgSGVscGVycyB0aGF0IHJldHVybiB0aGUgZmlyc3QgYW5kIGxh
c3QgbGluZSBib3ggZGVzY2VuZGFudHMuIFVzZWQgYnkgZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3Vs
bGluZyBhbmQKKyAgICAgICAgbGFzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nICh3aGljaCBhcmUg
aW4gdHVybiBjYWxsZWQgYnkgb2Zmc2V0TGVmdCBhbmQgb2Zmc2V0VG9wKS4KKworICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5n
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGluZXNWaXN1YWxPdmVyZmxv
d0JvdW5kaW5nQm94KToKKyAgICAgICAgbGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94IGNh
bGxzIGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3ggd2hlbiBtX2Fsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcyBpcyBmYWxzZS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5l
OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIFRoZSBpbml0aWFsIGJh
aWxvdXQgY2hlY2sgaXMgbm93IGRvbmUgdXNpbmcgZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGlu
ZyBpbnN0ZWFkIG9mIGp1c3QgZmlyc3RMaW5lQm94LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbmxpbmU6OmRpcnR5TGluZUJveGVzKToKKyAgICAgICAgZGlydHlMaW5lQm94ZXMgbm93IGNy
YXdscyBpbnRvIGRlc2NlbmRhbnRzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcm9vdCBsaW5lcyB0byBk
aXJ0eSB3aGVuCisgICAgICAgIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGlzIGZhbHNlLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwcGVuZElubGluZUZsb3dC
b3gpOgorICAgICAgICBDbGVhciB0aGUgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaWYgYSBib3gg
Z2V0cyBhZGRlZCBhbnl3YXkuIFRoaXMgaGFwcGVucyBmb3IgbGVhZiBpbmxpbmUgZmxvd3MgYW5k
IGFsc28KKyAgICAgICAgd2hlbiBsaW5lLWJveC1jb250YWluIGlzIHNldCB0byBhbiB1bnVzdWFs
IHZhbHVlLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgVXNlZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzIGluIHBsYWNlIG9m
IHRoZSBsaW5lIGJveCB3YWxrIHdoZW4gbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgaXMgZmFsc2Uu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjpsYXN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcpOgorICAg
ICAgICBIZWxwZXJzIHVzZWQgaW4gYSBmZXcgcGxhY2VzIChsaWtlIG9mZnNldExlZnQgYW5kIG9m
ZnNldFRvcCksIG1vc3RseSBpbiBwbGFjZXMgd2hlcmUgdGhlIGV4aXN0ZW5jZSBvZiBhIGJveAor
ICAgICAgICBpcyBhbGwgdGhhdCBuZWVkcyBjaGVja2luZy4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjphbHdheXNDcmVhdGVMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpzZXRBbHdheXNDcmVhdGVMaW5lQm94ZXMpOgorICAgICAgICBGdW5jdGlv
bnMgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIGZs
YWcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6OmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxk
KToKKyAgICAgICAgTW9kaWZpZWQgdG8gdXNlIGZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcg
YW5kIGxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZyB0byBlbnN1cmUgdGhlIHJpZ2h0IHNldCBv
ZgorICAgICAgICBsaW5lcyBnZXQgZGlydGllZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnJlbW92ZUFuZERlc3Ry
b3lUZXh0Qm94ZXMpOgorICAgICAgICBOZXcgaGVscGVyIGludm9rZWQgYnkgZGVzdHJveSBhbmQg
YWxzbyBmcm9tIHVwZGF0ZUZpcnN0TGV0dGVyLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0OjpkZXN0cm95KToKKyAgICAgICAgQ2hhbmdlZCB0byBjYWxsIHJlbW92ZUFuZERlc3Ryb3lU
ZXh0Qm94ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUmVjdHMp
OgorICAgICAgICBGaXhlZCB0byBiZSBwcm9wZXJseSBwaHlzaWNhbCBpbnN0ZWFkIG9mIGxvZ2lj
YWwuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dC
b3VuZGluZ0JveCk6CisgICAgICAgIE5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgUmVuZGVyVGV4dCB0
aGF0IGdpdmVzIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHRleHQgYm94ZXMgaW5jbHVkaW5nIG92
ZXJmbG93IGZyb20KKyAgICAgICAgc2hhZG93cywgZ2x5cGhzLCB0ZXh0LXN0cm9rZSwgZXRjLiAg
VXNlZCBieSBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdC
b3guCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKToKKyAgICAgICAgUmVuZGVyU1ZHSW5saW5lIGFsd2F5
cyBzZXRzIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzIHRvIHRydWUgc28gdGhhdCBTVkcgaXMgdW5h
ZmZlY3RlZCBieSB0aGlzIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94
OjpsYXlvdXRDaGFyYWN0ZXJzSW5UZXh0Qm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9v
dElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcyk6CisgICAgICAgIE1vdmUgdGhlIGlzSW5saW5l
Rmxvd0JveCBhc3NlcnRzIHRvIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29udGVudCBza2lwcywgc2lu
Y2UgdGhlIGdlbmVyYXRlZCBjb250ZW50IGJveGVzIGFyZQorICAgICAgICBub3cgSW5saW5lVGV4
dEJveGVzICh0aGUgZW5jbG9zaW5nIElubGluZUZsb3dCb3hlcyBnb3QgY3VsbGVkKS4KKwogMjAx
MS0wNC0wNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw2ICs1OTcsOSBAQCBib29s
IEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0CiAgICAgTm9kZSogZm9jdXNlZE5v
ZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZvY3VzZWROb2RlKCk7CiAgICAgTm9kZSogY29udGFpbmVy
ID0gZm9jdXNlZERvY3VtZW50OwogCisgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUo
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgCiAgICAgLy8gRmlndXJlIG91
dCB0aGUgc3RhcnRpbmcgcmVjdC4KICAgICBJbnRSZWN0IHN0YXJ0aW5nUmVjdDsKICAgICBpZiAo
Zm9jdXNlZE5vZGUpIHsKQEAgLTYxMiwxMSArNjE1LDExIEBAIGJvb2wgRm9jdXNDb250cm9sbGVy
OjphZHZhbmNlRm9jdXNEaXJlY3QKIAogICAgIGJvb2wgY29uc3VtZWQgPSBmYWxzZTsKICAgICBk
byB7Ci0gICAgICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICBjb25zdW1lZCA9IGFkdmFuY2VGb2N1c0RpcmVj
dGlvbmFsbHlJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBl
dmVudCk7CiAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5h
dGVzKGNvbnRhaW5lciwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKICAgICAgICAgY29udGFp
bmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rp
b24oZGlyZWN0aW9uLCBjb250YWluZXIpOworICAgICAgICBpZiAoY29udGFpbmVyICYmIGNvbnRh
aW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAg
ICAgfSB3aGlsZSAoIWNvbnN1bWVkICYmIGNvbnRhaW5lcik7CiAKICAgICByZXR1cm4gY29uc3Vt
ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2
aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCw4IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVj
dChOb2RlKiBub2RlLCBGb2N1c0QKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKKyAgICBBU1NFUlQoIWZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSk7CisKICAgICBJ
bnRSZWN0IGNvbnRhaW5lclZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CiAgICAgLy8gV2Ugd2FudCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRs
eSBvZmYgc2NyZWVuLCBidXQgd2lsbCBiZQogICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xs
LiBBZGp1c3QgdGhlIHZpZXdwb3J0IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgpAQCAtNTE3
LDcgKzUxOSw3IEBAIHN0YXRpYyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMKIAog
SW50UmVjdCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGln
bm9yZUJvcmRlcikKIHsKLSAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKyAg
ICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmICFub2RlLT5kb2N1bWVudCgpLT52
aWV3KCktPm5lZWRzTGF5b3V0KCkpOwogCiAgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkp
CiAgICAgICAgIHJldHVybiBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihub2RlKS0+ZnJhbWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDgzMDI1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsMjQgQEAgdm9pZCBGbG9hdFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0UmVj
dCYgbwogICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KIAor
dm9pZCBGbG9hdFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7
CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhl
ci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
d2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGZsb2F0IGxlZnQgPSBtaW4oeCgpLCBvdGhlci54KCkpOwor
ICAgIGZsb2F0IHRvcCA9IG1pbih5KCksIG90aGVyLnkoKSk7CisgICAgZmxvYXQgcmlnaHQgPSBt
YXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIGZsb2F0IGJvdHRvbSA9IG1heChtYXhZKCks
IG90aGVyLm1heFkoKSk7CisKKyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwg
dG9wLCByaWdodCwgYm90dG9tKTsKK30KKwogdm9pZCBGbG9hdFJlY3Q6OnNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkKIHsKICAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogc3gpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDgz
MDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludGVy
c2VjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICAvLyBO
b3RlLCB0aGlzIGRvZXNuJ3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYp
IGRvZXM7IHRoZSBpbnQgdmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29u
dGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZs
b2F0cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRNZXRyaWNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udE1l
dHJpY3MuaAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250TWV0cmljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMSBAQCBwdWJs
aWM6CiAgICAgaW50IGxpbmVHYXAoKSBjb25zdCB7IHJldHVybiBscm91bmRmKG1fbGluZUdhcCk7
IH0KICAgICBpbnQgbGluZVNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBscm91bmRmKG1fbGluZVNw
YWNpbmcpOyB9CiAKKyAgICBib29sIGhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2Fw
KGNvbnN0IEZvbnRNZXRyaWNzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
c2NlbnQoKSA9PSBvdGhlci5hc2NlbnQoKSAmJiBkZXNjZW50KCkgPT0gb3RoZXIuZGVzY2VudCgp
ICYmIGxpbmVHYXAoKSA9PSBvdGhlci5saW5lR2FwKCk7CisgICAgfQorCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9uIDgzMDI1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDI3IEBAIHZvaWQgSW50UmVjdDo6dW5pdGUoY29uc3QgSW50UmVjdCYgb3RoZXIK
ICAgICBtX3NpemUuc2V0SGVpZ2h0KGIgLSB0KTsKIH0KIAordm9pZCBJbnRSZWN0Ojp1bml0ZUlm
Tm9uWmVybyhjb25zdCBJbnRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3Bl
Y2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdo
dCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgewor
ICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50
IGxlZnQgPSBtaW4oeCgpLCBvdGhlci54KCkpOworICAgIGludCB0b3AgPSBtaW4oeSgpLCBvdGhl
ci55KCkpOworICAgIGludCByaWdodCA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAg
aW50IGJvdHRvbSA9IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICBtX2xvY2F0aW9u
LnNldFgobGVmdCk7CisgICAgbV9sb2NhdGlvbi5zZXRZKHRvcCk7CisgICAgbV9zaXplLnNldFdp
ZHRoKHJpZ2h0IC0gbGVmdCk7CisgICAgbV9zaXplLnNldEhlaWdodChib3R0b20gLSB0b3ApOwor
fQorCiB2b2lkIEludFJlY3Q6OnNjYWxlKGZsb2F0IHMpCiB7CiAgICAgbV9sb2NhdGlvbi5zZXRY
KChpbnQpKHgoKSAqIHMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbnRSZWN0LmgJKHJldmlzaW9uIDgzMDI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgdW5p
dGUoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgSW50UmVj
dCYpOwogCiAgICAgdm9pZCBpbmZsYXRlWChpbnQgZHgpCiAgICAgewpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAKQEAgLTU0NCw2ICs1NDUsMjAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZQogICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KTsKICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChub2RlKTsKIAorICAgIGlm
IChub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjdXJyID0gbm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1JlbmRlcklubGluZSgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbm9kZXMgZm9yIGN1bGxlZCBpbmxpbmVzIGdldCBpbmNsdWRl
ZC4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5l
KGN1cnIpOworICAgICAgICAgICAgaWYgKGN1cnJJbmxpbmUtPmFsd2F5c0NyZWF0ZUxpbmVCb3hl
cygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoY3VycklubGluZS0+dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGN1cnJJbmxpbmUtPm5vZGUo
KSkKKyAgICAgICAgICAgICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpLmFkZChjdXJy
SW5saW5lLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICAgICAgfQorICAgIH0K
ICAgICByZXR1cm4gIXJlY3QuY29udGFpbnMocmVjdEZvclBvaW50KHgsIHkpKTsKIH0KIApAQCAt
NTYxLDYgKzU3NiwyMCBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRl
CiAgICAgbm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIG11dGFibGVSZWN0
QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwogCisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkt
PmlzSW5saW5lKCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5y
ZW5kZXJlcigpLT5wYXJlbnQoKTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWN1cnItPmlzUmVuZGVySW5saW5lKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
ZSBub2RlcyBmb3IgY3VsbGVkIGlubGluZXMgZ2V0IGluY2x1ZGVkLgorICAgICAgICAgICAgUmVu
ZGVySW5saW5lKiBjdXJySW5saW5lID0gdG9SZW5kZXJJbmxpbmUoY3Vycik7CisgICAgICAgICAg
ICBpZiAoY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJySW5saW5lLT52aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgY3VycklubGluZS0+bm9kZSgpKQorICAgICAgICAgICAgICAg
IG11dGFibGVSZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKGN1cnJJbmxpbmUtPm5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAhcmVjdC5j
b250YWlucyhyZWN0Rm9yUG9pbnQoeCwgeSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4MzAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDcgKzI2Myw3IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3VyIGV4dGVudCBpbiB0aGUgYmxvY2sg
ZmxvdyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFuZCB3aWR0
aCBmb3IgdmVydGljYWwgdGV4dC4KICAgICBpbnQgbG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0g
ICAgRmxvYXRSZWN0IGxvZ2ljYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250
YWwoKSA/IEludFJlY3QobV94LCBtX3ksIG1fbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkp
IDogSW50UmVjdChtX3ksIG1feCwgbG9naWNhbEhlaWdodCgpLCBtX2xvZ2ljYWxXaWR0aCk7IH0K
KyAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbCgpID8gSW50UmVjdChtX3gsIG1feSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQo
KSkgOiBJbnRSZWN0KG1feSwgbV94LCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsg
fQogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxp
bmVUeXBlKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9u
KGJhc2VsaW5lVHlwZSwgbV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExp
bmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KICAgICB2aXJ0
dWFsIGludCBsaW5lSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGlu
ZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94
KgogICAgIGNoaWxkLT5zZXRGaXJzdExpbmVTdHlsZUJpdChtX2ZpcnN0TGluZSk7CiAgICAgY2hp
bGQtPnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7CiAgICAgaWYgKGNoaWxkLT5pc1Rl
eHQoKSkgewotICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IHRydWU7CisgICAgICAgIGlmIChj
aGlsZC0+cmVuZGVyZXIoKS0+cGFyZW50KCkgPT0gcmVuZGVyZXIoKSkKKyAgICAgICAgICAgIG1f
aGFzVGV4dENoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgbV9oYXNUZXh0RGVzY2VuZGFudHMgPSB0
cnVlOwogICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKSB7CiAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY2hpbGQpLT5oYXNUZXh0RGVzY2VuZGFu
dHMoKSkKQEAgLTExMSwxMiArMTEyLDEzIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5l
KElubGluZUJveCoKICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkp
CiAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5k
QmFzZWxpbmUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0KCkpIHsKLSAg
ICAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+aXNCUigpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAhPSBjaGls
ZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKQotICAgICAgICAgICAgICAgICAg
ICB8fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IGNoaWxk
U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSB8fCBwYXJlbnRTdHlsZS0+bGlu
ZUhlaWdodCgpICE9IGNoaWxkU3R5bGUtPmxpbmVIZWlnaHQoKQorICAgICAgICAgICAgaWYgKGNo
aWxkLT5yZW5kZXJlcigpLT5pc0JSKCkgfHwgY2hpbGQtPnJlbmRlcmVyKCktPnBhcmVudCgpICE9
IHJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5mb250KCku
Zm9udE1ldHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0
eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50
U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCkKICAgICAgICAg
ICAgICAgICAgICAgfHwgKHBhcmVudFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUg
JiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0g
QkFTRUxJTkUpCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZl
U2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkU3R5bGUtPmhhc1RleHRDb21iaW5lKCkgfHwgY2hpbGRTdHlsZS0+dGV4dEVtcGhhc2lz
TWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lKQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGNoaWxkU3R5bGUtPmhhc1RleHRDb21iaW5lKCkgfHwgY2hpbGRTdHlsZS0+dGV4dEVt
cGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lKQogICAgICAgICAgICAgICAgIHNo
b3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCktPmlz
QlIoKSkgewpAQCAtMTI3LDggKzEyOSw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5l
KElubGluZUJveCoKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNJbmxpbmVGbG93Qm94KCkpOwog
ICAgICAgICAgICAgICAgIElubGluZUZsb3dCb3gqIGNoaWxkRmxvd0JveCA9IHN0YXRpY19jYXN0
PElubGluZUZsb3dCb3gqPihjaGlsZCk7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGNo
aWxkJ3MgYml0LCBhbmQgdGhlbiBhbHNvIGNoZWNrIGZvciBkaWZmZXJlbmNlcyBpbiBmb250LCBs
aW5lLWhlaWdodCwgdmVydGljYWwtYWxpZ24KLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkRmxv
d0JveC0+ZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpIHx8IHBhcmVu
dFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKQotICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnRT
dHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZvbnQo
KS5mb250TWV0cmljcygpLmRlc2NlbnQoKSB8fCBwYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpICE9
IGNoaWxkU3R5bGUtPmxpbmVIZWlnaHQoKQorICAgICAgICAgICAgICAgIGlmICghY2hpbGRGbG93
Qm94LT5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkKKyAgICAgICAg
ICAgICAgICAgICAgfHwgIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVu
dGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJp
Y3MoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCkKICAgICAgICAgICAgICAgICAgICAgfHwgKHBhcmVu
dFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgp
KSB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAg
ICAgICAgICAgfHwgY2hpbGRTdHlsZS0+aGFzQm9yZGVyKCkgfHwgY2hpbGRTdHlsZS0+aGFzUGFk
ZGluZygpIHx8IGNoaWxkU3R5bGUtPmhhc1RleHRDb21iaW5lKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9
IHRydWU7CkBAIC03MzIsMTIgKzczNSwxMiBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94Ojph
ZGRCb3hTaGFkb3dWCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2Fs
UmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxC
b3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7CiB9CiAKLWlu
bGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhjb25zdCBJ
bmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYg
dGV4dEJveERhdGFNYXAsIEludFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdykKK2lubGluZSB2
b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94
KiB0ZXh0Qm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFN
YXAsIEludFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdykKIHsKICAgICBpZiAodGV4dEJveC0+
a25vd25Ub0hhdmVOb092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0ZXh0Qm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSk7CiAg
ICAgCiAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0g
dGV4dEJveERhdGFNYXAuZmluZCh0ZXh0Qm94KTsKICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92
ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vj
b25kOwpAQCAtNzg4LDYgKzc5MSw4IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRl
eHRCb3hWaXMKICAgICAKICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cgPSBJbnRSZWN0KGxvZ2lj
YWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93IC0g
bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93IC0g
bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgIHRleHRCb3gtPnNldExvZ2ljYWxPdmVyZmxvd1JlY3QobG9naWNhbFZpc3Vh
bE92ZXJmbG93KTsKIH0KIAogaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkUmVwbGFjZWRD
aGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCogaW5saW5lQm94LCBJbnRSZWN0JiBsb2dpY2Fs
TGF5b3V0T3ZlcmZsb3csIEludFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdykKQEAgLTgzNSw3
ICs4NDAsOSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVPdmVyZmxvdyhpbnQgCiAgICAg
ICAgICAgICBSZW5kZXJUZXh0KiBydCA9IHRvUmVuZGVyVGV4dCh0ZXh0LT5yZW5kZXJlcigpKTsK
ICAgICAgICAgICAgIGlmIChydC0+aXNCUigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgYWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KHRleHQsIHRleHRCb3hEYXRhTWFw
LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOworICAgICAgICAgICAgSW50UmVjdCB0ZXh0Qm94T3Zl
cmZsb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0LT5sb2dpY2FsRnJhbWVSZWN0KCkpKTsKKyAgICAg
ICAgICAgIGFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyh0ZXh0LCB0ZXh0Qm94RGF0YU1hcCwgdGV4
dEJveE92ZXJmbG93KTsKKyAgICAgICAgICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy51bml0ZSh0
ZXh0Qm94T3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5p
c1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3Rh
dGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpOwogICAgICAgICAgICAgZmxvdy0+Y29tcHV0
ZU92ZXJmbG93KGxpbmVUb3AsIGxpbmVCb3R0b20sIHRleHRCb3hEYXRhTWFwKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gODMwMjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgYWRkQm94
U2hhZG93VmlzdWFsT3ZlcmZsb3coSW50UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKLSAg
ICB2b2lkIGFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhjb25zdCBJbmxpbmVUZXh0Qm94KiwgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cpOworICAgIHZvaWQgYWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gq
LCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYsIEludFJlY3QmIGxvZ2ljYWxWaXN1
YWxPdmVyZmxvdyk7CiAgICAgdm9pZCBhZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3QgSW5s
aW5lQm94KiwgSW50UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBJbnRSZWN0JiBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cpOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4MzAyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjAg
KzQ4LDQ5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgSW5saW5lVGV4dEJveCosIEludFJlY3Q+IElubGlu
ZVRleHRCb3hPdmVyZmxvd01hcDsKK3N0YXRpYyBJbmxpbmVUZXh0Qm94T3ZlcmZsb3dNYXAqIGdU
ZXh0Qm94ZXNXaXRoT3ZlcmZsb3c7CisKK3ZvaWQgSW5saW5lVGV4dEJveDo6ZGVzdHJveShSZW5k
ZXJBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKCFtX2tub3duVG9IYXZlTm9PdmVyZmxvdyAmJiBn
VGV4dEJveGVzV2l0aE92ZXJmbG93KQorICAgICAgICBnVGV4dEJveGVzV2l0aE92ZXJmbG93LT5y
ZW1vdmUodGhpcyk7CisgICAgSW5saW5lQm94OjpkZXN0cm95KGFyZW5hKTsKK30KKworSW50UmVj
dCBJbmxpbmVUZXh0Qm94Ojpsb2dpY2FsT3ZlcmZsb3dSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9rbm93blRvSGF2ZU5vT3ZlcmZsb3cgfHwgIWdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3cpCisgICAg
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGxvZ2ljYWxGcmFtZVJlY3QoKSk7CisgICAgcmV0
dXJuIGdUZXh0Qm94ZXNXaXRoT3ZlcmZsb3ctPmdldCh0aGlzKTsKK30KKwordm9pZCBJbmxpbmVU
ZXh0Qm94OjpzZXRMb2dpY2FsT3ZlcmZsb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgQVNTRVJUKCFtX2tub3duVG9IYXZlTm9PdmVyZmxvdyk7CisgICAgaWYgKCFnVGV4dEJveGVz
V2l0aE92ZXJmbG93KQorICAgICAgICBnVGV4dEJveGVzV2l0aE92ZXJmbG93ID0gbmV3IElubGlu
ZVRleHRCb3hPdmVyZmxvd01hcDsKKyAgICBnVGV4dEJveGVzV2l0aE92ZXJmbG93LT5hZGQodGhp
cywgcmVjdCk7Cit9CisKIGludCBJbmxpbmVUZXh0Qm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRC
YXNlbGluZSBiYXNlbGluZVR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1RleHQoKSB8fCAhcGFy
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBwYXJlbnQoKS0+YmFzZWxpbmVQ
b3NpdGlvbihiYXNlbGluZVR5cGUpOworICAgIGlmIChwYXJlbnQoKS0+cmVuZGVyZXIoKSA9PSBy
ZW5kZXJlcigpLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5iYXNlbGluZVBv
c2l0aW9uKGJhc2VsaW5lVHlwZSk7CisgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
cmVuZGVyZXIoKS0+cGFyZW50KCkpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9m
aXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUs
IFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7CiB9CiAgICAgCiBpbnQgSW5saW5lVGV4dEJveDo6
bGluZUhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1RleHQoKSB8fCAhcGFyZW50KCkpCisg
ICAgaWYgKCFpc1RleHQoKSB8fCAhcmVuZGVyZXIoKS0+cGFyZW50KCkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIGlmIChtX3JlbmRlcmVyLT5pc0JSKCkpCiAgICAgICAgIHJldHVybiB0b1JlbmRl
ckJSKG1fcmVuZGVyZXIpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lKTsKLSAgICByZXR1cm4gcGFy
ZW50KCktPmxpbmVIZWlnaHQoKTsKKyAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCkgPT0gcmVu
ZGVyZXIoKS0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiBwYXJlbnQoKS0+bGluZUhlaWdodCgp
OworICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgp
KS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsKIH0KIAogaW50IElu
bGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCkBAIC00MzUsNyArNDY0LDcgQEAgc3RhdGljIGlu
bGluZSBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb24oYwogICAgICAgICA6IEFmZmluZVRyYW5zZm9y
bSgwLCAtMSwgMSwgMCwgYm94UmVjdC54KCkgLSBib3hSZWN0Lm1heFkoKSwgYm94UmVjdC54KCkg
KyBib3hSZWN0Lm1heFkoKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0
b20pCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSwgaW50IC8qbGluZVRvcCovLCBpbnQgLypsaW5lQm90dG9tKi8pCiB7CiAgICAg
aWYgKGlzTGluZUJyZWFrKCkgfHwgIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVu
ZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUg
fHwKICAgICAgICAgbV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbiB8fCBwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgIW1fbGVuKQpAQCAtNDQzLDE3ICs0NzIsMTAg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAgQVNTRVJU
KHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUgJiYgcGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKTsKIAotICAgIGludCBsb2dpY2FsTGVmdE92
ZXJmbG93ID0gMDsKLSAgICBpbnQgbG9naWNhbFJpZ2h0T3ZlcmZsb3cgPSAwOwotICAgIGlmICgh
a25vd25Ub0hhdmVOb092ZXJmbG93KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5
IHdlJ3JlIHBvdGVudGlhbGx5IGluY29ycG9yYXRpbmcgb3RoZXIgdmlzdWFsIG92ZXJmbG93IHRo
YXQgaGFkIG5vdGhpbmcgdG8gZG8gd2l0aCB1cy4KLSAgICAgICAgLy8gV291bGQgaXQgYmUgc2lt
cGxlciB0byBqdXN0IGNoZWNrIG91ciBvd24gc2hhZG93IGFuZCBzdHJva2Ugb3ZlcmZsb3cgYnkg
aGFuZCBoZXJlPwotICAgICAgICBJbnRSZWN0IHBhcmVudFZpc3VhbE92ZXJmbG93ID0gcGFyZW50
KCktPmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSk7Ci0gICAg
ICAgIGxvZ2ljYWxMZWZ0T3ZlcmZsb3cgPSBwYXJlbnQoKS0+bG9naWNhbExlZnQoKSAtIHBhcmVu
dFZpc3VhbE92ZXJmbG93LngoKTsKLSAgICAgICAgbG9naWNhbFJpZ2h0T3ZlcmZsb3cgPSBwYXJl
bnRWaXN1YWxPdmVyZmxvdy5tYXhYKCkgLSBwYXJlbnQoKS0+bG9naWNhbFJpZ2h0KCk7Ci0gICAg
fQotICAgIGludCBsb2dpY2FsU3RhcnQgPSBsb2dpY2FsTGVmdCgpIC0gbG9naWNhbExlZnRPdmVy
ZmxvdyArIChpc0hvcml6b250YWwoKSA/IHR4IDogdHkpOwotICAgIGludCBsb2dpY2FsRXh0ZW50
ID0gbG9naWNhbFdpZHRoKCkgKyBsb2dpY2FsTGVmdE92ZXJmbG93ICsgbG9naWNhbFJpZ2h0T3Zl
cmZsb3c7CisgICAgaW50IGxvZ2ljYWxMZWZ0U2lkZSA9IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3coKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0U2lkZSA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJm
bG93KCk7CisgICAgaW50IGxvZ2ljYWxTdGFydCA9IGxvZ2ljYWxMZWZ0U2lkZSArIChpc0hvcml6
b250YWwoKSA/IHR4IDogdHkpOworICAgIGludCBsb2dpY2FsRXh0ZW50ID0gbG9naWNhbFJpZ2h0
U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKICAgICAKICAgICBpbnQgcGFpbnRFbmQgPSBpc0hvcml6
b250YWwoKSA/IHBhaW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0Lm1heFkoKTsK
ICAgICBpbnQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QueCgp
IDogcGFpbnRJbmZvLnJlY3QueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCShyZXZpc2lvbiA4MzAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSop
OworCiAgICAgSW5saW5lVGV4dEJveCogcHJldlRleHRCb3goKSBjb25zdCB7IHJldHVybiBtX3By
ZXZUZXh0Qm94OyB9CiAgICAgSW5saW5lVGV4dEJveCogbmV4dFRleHRCb3goKSBjb25zdCB7IHJl
dHVybiBtX25leHRUZXh0Qm94OyB9CiAgICAgdm9pZCBzZXROZXh0VGV4dEJveChJbmxpbmVUZXh0
Qm94KiBuKSB7IG1fbmV4dFRleHRCb3ggPSBuOyB9CkBAIC04MCw2ICs4MiwxMyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKFJlbmRlclN0eWxlKiwgVGV4dEVt
cGhhc2lzUG9zaXRpb24mKSBjb25zdDsKIAorICAgIEludFJlY3QgbG9naWNhbE92ZXJmbG93UmVj
dCgpIGNvbnN0OworICAgIHZvaWQgc2V0TG9naWNhbE92ZXJmbG93UmVjdChjb25zdCBJbnRSZWN0
Jik7CisgICAgaW50IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIGxv
Z2ljYWxPdmVyZmxvd1JlY3QoKS55KCk7IH0KKyAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVjdCgpLm1heFkoKTsgfQor
ICAgIGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNh
bE92ZXJmbG93UmVjdCgpLngoKTsgfQorICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS5tYXhYKCk7IH0KKyAgICAK
IHByaXZhdGU6CiAgICAgaW50IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBzZWxlY3Rpb25Cb3R0
b20oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Mzc5LDcgKzUzNzksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1
cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0
ZSgpOwogICAgICAgICAgICAgd2hpbGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRl
ci0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0KGNoaWxkKS0+ZGlydHlMaW5lQm94ZXMo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dChjaGlsZCktPnJlbW92ZUFu
ZERlc3Ryb3lUZXh0Qm94ZXMoKTsKICAgICAgICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3Zl
Q2hpbGQoY2hpbGQpOwogICAgICAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChj
aGlsZCwgMCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA3LDggKzIwNywxMCBAQCBJbmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6
Y3JlYXRlTGluZUJvCiAgICAgZG8gewogICAgICAgICBBU1NFUlQob2JqLT5pc1JlbmRlcklubGlu
ZSgpIHx8IG9iaiA9PSB0aGlzKTsKICAgICAgICAgCisgICAgICAgIFJlbmRlcklubGluZSogaW5s
aW5lRmxvdyA9IChvYmogIT0gdGhpcykgPyB0b1JlbmRlcklubGluZShvYmopIDogMDsKKwogICAg
ICAgICAvLyBHZXQgdGhlIGxhc3QgYm94IHdlIG1hZGUgZm9yIHRoaXMgcmVuZGVyIG9iamVjdC4K
LSAgICAgICAgcGFyZW50Qm94ID0gb2JqLT5pc1JlbmRlcklubGluZSgpID8gdG9SZW5kZXJJbmxp
bmUob2JqKS0+bGFzdExpbmVCb3goKSA6IHRvUmVuZGVyQmxvY2sob2JqKS0+bGFzdExpbmVCb3go
KTsKKyAgICAgICAgcGFyZW50Qm94ID0gaW5saW5lRmxvdyA/IGlubGluZUZsb3ctPmxhc3RMaW5l
Qm94KCkgOiB0b1JlbmRlckJsb2NrKG9iaiktPmxhc3RMaW5lQm94KCk7CiAKICAgICAgICAgLy8g
SWYgdGhpcyBib3ggb3IgaXRzIGFuY2VzdG9yIGlzIGNvbnN0cnVjdGVkIHRoZW4gaXQgaXMgZnJv
bSBhIHByZXZpb3VzIGxpbmUsIGFuZCB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIG1ha2UgYSBuZXcg
Ym94IGZvciBvdXIgbGluZS4gIElmIHRoaXMgYm94IG9yIGl0cyBhbmNlc3RvciBpcyB1bmNvbnN0
cnVjdGVkIGJ1dCBpdCBoYXMKQEAgLTIxNiw3ICsyMTgsOSBAQCBJbmxpbmVGbG93Qm94KiBSZW5k
ZXJCbG9jazo6Y3JlYXRlTGluZUJvCiAgICAgICAgIC8vIGFzIHdlbGwuICBJbiB0aGlzIHNpdHVh
dGlvbiBvdXIgaW5saW5lIGhhcyBhY3R1YWxseSBiZWVuIHNwbGl0IGluIHR3byBvbgogICAgICAg
ICAvLyB0aGUgc2FtZSBsaW5lICh0aGlzIGNhbiBoYXBwZW4gd2l0aCB2ZXJ5IGZhbmN5IGxhbmd1
YWdlIG1peHR1cmVzKS4KICAgICAgICAgYm9vbCBjb25zdHJ1Y3RlZE5ld0JveCA9IGZhbHNlOwot
ICAgICAgICBpZiAoIXBhcmVudEJveCB8fCBwYXJlbnRJc0NvbnN0cnVjdGVkT3JIYXZlTmV4dChw
YXJlbnRCb3gpKSB7CisgICAgICAgIGJvb2wgYWxsb3dlZFRvQ29uc3RydWN0TmV3Qm94ID0gIWhh
c0RlZmF1bHRMaW5lQm94Q29udGFpbiB8fCAhaW5saW5lRmxvdyB8fCBpbmxpbmVGbG93LT5hbHdh
eXNDcmVhdGVMaW5lQm94ZXMoKTsKKyAgICAgICAgYm9vbCBjYW5Vc2VFeGlzdGluZ1BhcmVudEJv
eCA9IHBhcmVudEJveCAmJiAhcGFyZW50SXNDb25zdHJ1Y3RlZE9ySGF2ZU5leHQocGFyZW50Qm94
KTsKKyAgICAgICAgaWYgKGFsbG93ZWRUb0NvbnN0cnVjdE5ld0JveCAmJiAhY2FuVXNlRXhpc3Rp
bmdQYXJlbnRCb3gpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIG5ldyBib3gg
Zm9yIHRoaXMgcmVuZGVyIG9iamVjdC4gIE9uY2UKICAgICAgICAgICAgIC8vIG1hZGUsIHdlIG5l
ZWQgdG8gcGxhY2UgaXQgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAg
ICAgSW5saW5lQm94KiBuZXdCb3ggPSBjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcihvYmosIG9i
aiA9PSB0aGlzKTsKQEAgLTIyOSwxOSArMjMzLDIxIEBAIElubGluZUZsb3dCb3gqIFJlbmRlckJs
b2NrOjpjcmVhdGVMaW5lQm8KICAgICAgICAgICAgIGNvbnN0cnVjdGVkTmV3Qm94ID0gdHJ1ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmVzdWx0ID0g
cGFyZW50Qm94OwotCi0gICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBibG9jayBpdHNlbGYs
IHRoZW4gfGJveHwgcmVwcmVzZW50cyB0aGUgcm9vdAotICAgICAgICAvLyBpbmxpbmUgYm94IGZv
ciB0aGUgbGluZSwgYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBhcHBlbmRlZCB0byBhbnkgcGFy
ZW50Ci0gICAgICAgIC8vIGlubGluZS4KLSAgICAgICAgaWYgKGNoaWxkQm94KQotICAgICAgICAg
ICAgcGFyZW50Qm94LT5hZGRUb0xpbmUoY2hpbGRCb3gpOworICAgICAgICBpZiAoY29uc3RydWN0
ZWROZXdCb3ggfHwgY2FuVXNlRXhpc3RpbmdQYXJlbnRCb3gpIHsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcmVudEJveDsKKworICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGJsb2NrIGl0c2VsZiwgdGhlbiB8Ym94fCByZXByZXNl
bnRzIHRoZSByb290CisgICAgICAgICAgICAvLyBpbmxpbmUgYm94IGZvciB0aGUgbGluZSwgYW5k
IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBhcHBlbmRlZCB0byBhbnkgcGFyZW50CisgICAgICAgICAg
ICAvLyBpbmxpbmUuCisgICAgICAgICAgICBpZiAoY2hpbGRCb3gpCisgICAgICAgICAgICAgICAg
cGFyZW50Qm94LT5hZGRUb0xpbmUoY2hpbGRCb3gpOwogCi0gICAgICAgIGlmICghY29uc3RydWN0
ZWROZXdCb3ggfHwgb2JqID09IHRoaXMpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmICghY29uc3RydWN0ZWROZXdCb3ggfHwgb2JqID09IHRoaXMpCisgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgY2hpbGRCb3ggPSBwYXJlbnRCb3g7ICAgICAgICAKKyAgICAgICAg
ICAgIGNoaWxkQm94ID0gcGFyZW50Qm94OyAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAv
LyBJZiB3ZSd2ZSBleGNlZWRlZCBvdXIgbGluZSBkZXB0aCwgdGhlbiBqdW1wIHN0cmFpZ2h0IHRv
IHRoZSByb290IGFuZCBza2lwIGFsbCB0aGUgcmVtYWluaW5nCiAgICAgICAgIC8vIGludGVybWVk
aWF0ZSBpbmxpbmUgZmxvd3MuCkBAIC03NTQsNiArNzYwLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5l
ZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNU
ZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgeworICAgICAg
ICAgICAgICAgIGlmICghby0+aXNUZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVy
SW5saW5lKG8pLT51cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoKTsKICAgICAgICAgICAgICAg
ICBpZiAoZnVsbExheW91dCB8fCBvLT5zZWxmTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgICAg
ICAgICAgZGlydHlMaW5lQm94ZXNGb3JSZW5kZXJlcihvLCBmdWxsTGF5b3V0KTsKICAgICAgICAg
ICAgICAgICBvLT5zZXROZWVkc0xheW91dChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKQEAgLTQ3LDYgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
UmVuZGVySW5saW5lOjpSZW5kZXJJbmxpbmUoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJveE1v
ZGVsT2JqZWN0KG5vZGUpCiAgICAgLCBtX2xpbmVIZWlnaHQoLTEpCisgICAgLCBtX2Fsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcyhmYWxzZSkKIHsKICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKIH0K
QEAgLTE0NCw2ICsxNDYsMTUgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRAogCiAgICAgbV9saW5lSGVpZ2h0ID0gLTE7CiAKKyAgICBpZiAoIW1fYWx3YXlzQ3JlYXRl
TGluZUJveGVzKSB7CisgICAgICAgIGJvb2wgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gaGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNCb3hEZWNvcmF0aW9ucygpIHx8IHN0eWxlKCktPmhhc1Bh
ZGRpbmcoKSB8fCBzdHlsZSgpLT5oYXNNYXJnaW4oKSB8fCBzdHlsZSgpLT5oYXNPdXRsaW5lKCk7
CisgICAgICAgIGlmIChvbGRTdHlsZSAmJiBhbHdheXNDcmVhdGVMaW5lQm94ZXMpIHsKKyAgICAg
ICAgICAgIGRpcnR5TGluZUJveGVzKGZhbHNlKTsKKyAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0
KHRydWUpOworICAgICAgICB9CisgICAgICAgIG1fYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gYWx3
YXlzQ3JlYXRlTGluZUJveGVzOworICAgIH0KKwogICAgIC8vIFVwZGF0ZSBwc2V1ZG9zIGZvciA6
YmVmb3JlIGFuZCA6YWZ0ZXIgbm93LgogICAgIGlmICghaXNBbm9ueW1vdXMoKSAmJiBkb2N1bWVu
dCgpLT51c2VzQmVmb3JlQWZ0ZXJSdWxlcygpKSB7CiAgICAgICAgIGNoaWxkcmVuKCktPnVwZGF0
ZUJlZm9yZUFmdGVyQ29udGVudCh0aGlzLCBCRUZPUkUpOwpAQCAtMTUxLDYgKzE2MiwzOSBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgfQogfQogCit2b2lk
IFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKCkKK3sKKyAgICAvLyBP
bmNlIHdlIGhhdmUgYmVlbiB0YWludGVkIG9uY2UsIGp1c3QgYXNzdW1lIGl0IHdpbGwgaGFwcGVu
IGFnYWluLiBUaGlzIHdheSBlZmZlY3RzIGxpa2UgaG92ZXIgaGlnaGxpZ2h0aW5nIHRoYXQgY2hh
bmdlIHRoZQorICAgIC8vIGJhY2tncm91bmQgY29sb3Igd2lsbCBvbmx5IGNhdXNlIGEgbGF5b3V0
IG9uIHRoZSBmaXJzdCByb2xsb3Zlci4KKyAgICBpZiAobV9hbHdheXNDcmVhdGVMaW5lQm94ZXMp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHBhcmVu
dCgpLT5zdHlsZSgpOworICAgIFJlbmRlcklubGluZSogcGFyZW50UmVuZGVySW5saW5lID0gcGFy
ZW50KCktPmlzUmVuZGVySW5saW5lKCkgPyB0b1JlbmRlcklubGluZShwYXJlbnQoKSkgOiAwOwor
ICAgIGJvb2wgY2hlY2tGb250cyA9IGRvY3VtZW50KCktPmluTm9RdWlya3NNb2RlKCk7CisgICAg
Ym9vbCBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAocGFyZW50UmVuZGVySW5saW5lICYmIHBhcmVu
dFJlbmRlcklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgIHx8IChwYXJl
bnRSZW5kZXJJbmxpbmUgJiYgcGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElO
RSkKKyAgICAgICAgfHwgc3R5bGUoKS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCisgICAg
ICAgIHx8IHN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9u
ZQorICAgICAgICB8fCAoY2hlY2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1l
dHJpY3MoKS5oYXNJZGVudGljYWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChzdHlsZSgpLT5mb250
KCkuZm9udE1ldHJpY3MoKSkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBzdHlsZSgpLT5saW5lSGVpZ2h0KCkpKTsKKworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJv
eGVzICYmIGNoZWNrRm9udHMgJiYgZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsK
KyAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxsLgor
ICAgICAgICBwYXJlbnRTdHlsZSA9IHBhcmVudCgpLT5zdHlsZSh0cnVlKTsKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBzdHlsZSh0cnVlKTsKKyAgICAgICAgYWx3YXlzQ3JlYXRl
TGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5oYXNJZGVudGlj
YWxBc2NlbnREZXNjZW50QW5kTGluZUdhcChjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3Mo
KSkKKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmxpbmVHYXAo
KSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5saW5lR2FwKCkKKyAgICAgICAg
fHwgY2hpbGRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCisgICAgICAgIHx8IHBh
cmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS0+bGluZUhlaWdodCgpOworICAg
IH0KKworICAgIGlmIChhbHdheXNDcmVhdGVMaW5lQm94ZXMpIHsKKyAgICAgICAgZGlydHlMaW5l
Qm94ZXMoZmFsc2UpOworICAgICAgICBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9IHRydWU7Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBpZiAoY29udGludWF0aW9u
KCkpCkBAIC00MjQsOSArNDY4LDExIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludChQYWludElu
Zm8mIHBhaW4KIAogdm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKElubGluZUZsb3dCb3gqIGN1
cnIgPSBmaXJzdExpbmVCb3goKSkgeworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkp
CisgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIEludFNpemUo
dHgsIHR5KSk7CisgICAgZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJv
eCgpKSB7CiAgICAgICAgIGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkK
LSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4ICsgY3Vyci0+eCgpLCB0eSArIGN1
cnItPnkoKSwgY3Vyci0+bG9naWNhbFdpZHRoKCksIGN1cnItPmxvZ2ljYWxIZWlnaHQoKSkpOwor
ICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHR4ICsg
Y3Vyci0+eCgpLCB0eSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkp
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgMCwg
MCkpOwogCkBAIC00NDEsMTEgKzQ4Nyw3NiBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVS
ZWN0cyhWZWN0b3I8CiAgICAgfQogfQogCit2b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5l
QWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEludFJl
Y3Q+JiByZWN0cywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQoreworICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8g
Z2V0IHRoZSBtYXJnaW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQgdGhlbiB1c2Ug
b3VyIGZvbnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCisgICAgICAgIC8vIGRpcmVjdGlv
biAoYWxpZ25lZCB0byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCisgICAgICAgIGlmIChjdXJy
LT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJv
eChjdXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsK
KyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpLT5yb290KCk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBy
b290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBj
b250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9
IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsK
KyAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjdXJyQm94LT5pbmxpbmVCb3hXcmFw
cGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9n
aWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJC
b3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsg
bG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigp
LT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVp
Z2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKTsK
KyAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgp
KSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMg
ZWl0aGVyLCB0aGVuIHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3Vy
cklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOworICAgICAgICAgICAgaWYgKCFjdXJySW5s
aW5lLT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAgICAgICAgICBjdXJySW5saW5l
LT5jdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnRhaW5lciwgcmVjdHMsIG9mZnNldCk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNo
aWxkTGluZSA9IGN1cnJJbmxpbmUtPmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGlu
ZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgeworICAgICAgICAgICAgICAgICAgICBSb290
SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CisgICAgICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJl
bmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChv
ZmZzZXQud2lkdGgoKSArIGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
TGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGxv
Z2ljYWxUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2Fs
V2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFy
Z2luTG9naWNhbFJpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhl
aWdodCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmhlaWdodCgpICsgY2hpbGRMaW5lLT55KCkgLSBj
aGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9naWNhbEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUt
PmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRM
aW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlY3RzLmFw
cGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgeworICAgICAgICAg
ICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0b1JlbmRlclRleHQoY3Vycik7CisgICAgICAgICAg
ICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9IGN1cnJUZXh0LT5maXJzdFRleHRCb3go
KTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRleHQtPm5leHRUZXh0Qm94KCkpIHsKKyAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRUZXh0LT5yb290KCk7
CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkg
KyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsK
KyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zm
c2V0LndpZHRoKCkgKyBjaGlsZFRleHQtPngoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRv
cCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0
LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjaGlsZFRleHQtPnkoKSwg
bG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAg
ICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKIHsKLSAgICBpZiAoSW5saW5lRmxvd0JveCogY3Vy
ciA9IGZpcnN0TGluZUJveCgpKSB7CisgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkK
KyAgICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyh0aGlzLCBxdWFkcyk7CisgICAgZWxz
ZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgIGZv
ciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewotICAgICAgICAgICAgRmxv
YXRSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vyci0+bG9naWNhbFdpZHRo
KCksIGN1cnItPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxS
ZWN0KGN1cnItPngoKSwgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSk7
CiAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3Qp
KTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNDU1LDE5ICs1NjYsODIgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPAogICAgICAgICBjb250aW51YXRpb24oKS0+
YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiB9CiAKK3ZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxp
bmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8Rmxv
YXRRdWFkPiYgcXVhZHMpCit7CisgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIG1hcmdpbiBib3gg
aW4gdGhlIGlubGluZSBkaXJlY3Rpb24sIGFuZCB0aGVuIHVzZSBvdXIgZm9udCBhc2NlbnQvZGVz
Y2VudCBpbiB0aGUgYmxvY2sKKyAgICAgICAgLy8gZGlyZWN0aW9uIChhbGlnbmVkIHRvIHRoZSBy
b290IGJveCdzIGJhc2VsaW5lKS4KKyAgICAgICAgaWYgKGN1cnItPmlzQm94KCkpIHsKKyAgICAg
ICAgICAgIFJlbmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1cnIpOworICAgICAgICAg
ICAgaWYgKGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgIFJv
b3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3Qo
KTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3Ao
KSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGlm
IChpc0hvcml6b250YWwpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwg
bG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1
cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGN1
cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxv
Z2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBj
dXJyQm94LT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxv
Y2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCisg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUgPSB0b1JlbmRlcklubGluZShjdXJy
KTsKKyAgICAgICAgICAgIGlmICghY3VycklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkp
CisgICAgICAgICAgICAgICAgY3VycklubGluZS0+Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhj
b250YWluZXIsIHF1YWRzKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZv
ciAoSW5saW5lRmxvd0JveCogY2hpbGRMaW5lID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94KCk7
IGNoaWxkTGluZTsgY2hpbGRMaW5lID0gY2hpbGRMaW5lLT5uZXh0TGluZUJveCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2Fs
VG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxl
KHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXIt
PnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmhlaWdodCgpOworICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dp
Y2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0
UmVjdChsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+
eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSAr
IGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChyZXN1bHQpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsK
KyAgICAgICAgICAgIFJlbmRlclRleHQqIGN1cnJUZXh0ID0gdG9SZW5kZXJUZXh0KGN1cnIpOwor
ICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjaGlsZFRleHQgPSBjdXJyVGV4dC0+Zmly
c3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0LT5uZXh0VGV4dEJv
eCgpKSB7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4
dC0+cm9vdCgpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9n
aWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RM
aW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXIt
PnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmhlaWdodCgpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxv
YXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9n
aWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJJbmxpbmU6Om9mZnNldExlZnQoKSBj
b25zdAogewogICAgIGludCB4ID0gUmVuZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldExlZnQoKTsK
LSAgICBpZiAoZmlyc3RMaW5lQm94KCkpCi0gICAgICAgIHggKz0gZmlyc3RMaW5lQm94KCktPngo
KTsKKyAgICBpZiAoSW5saW5lQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveEluY2x1ZGluZ0N1
bGxpbmcoKSkKKyAgICAgICAgeCArPSBmaXJzdEJveC0+eCgpOwogICAgIHJldHVybiB4OwogfQog
CiBpbnQgUmVuZGVySW5saW5lOjpvZmZzZXRUb3AoKSBjb25zdAogewogICAgIGludCB5ID0gUmVu
ZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldFRvcCgpOwotICAgIGlmIChmaXJzdExpbmVCb3goKSkK
LSAgICAgICAgeSArPSBmaXJzdExpbmVCb3goKS0+eSgpOworICAgIGlmIChJbmxpbmVCb3gqIGZp
cnN0Qm94ID0gZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpKQorICAgICAgICB5ICs9IGZp
cnN0Qm94LT55KCk7CiAgICAgcmV0dXJuIHk7CiB9CiAKQEAgLTU2NSw2ICs3MzksMTEgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25GbwogCiBJbnRSZWN0IFJlbmRlcklu
bGluZTo6bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CisgICAgaWYgKCFhbHdheXNDcmVhdGVM
aW5lQm94ZXMoKSkgeworICAgICAgICBBU1NFUlQoIWZpcnN0TGluZUJveCgpKTsKKyAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3VsbGVkSW5saW5lQm91bmRpbmdCb3godGhpcykpOwor
ICAgIH0KKwogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIFNlZSA8cmRhcjovL3By
b2JsZW0vNTI4OTcyMT4sIGZvciBhbiB1bmtub3duIHJlYXNvbiB0aGUgbGlua2VkIGxpc3QgaGVy
ZSBpcyBzb21ldGltZXMgaW5jb25zaXN0ZW50LCBmaXJzdCBpcyBub24temVybyBhbmQgbGFzdCBp
cyB6ZXJvLiAgV2UgaGF2ZSBiZWVuCkBAIC01OTQsMjggKzc3MywxODIgQEAgSW50UmVjdCBSZW5k
ZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Zs
b2F0UmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRl
cklubGluZSogY29udGFpbmVyKSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAg
Ym9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0g
Y3Vyci0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBnZXQgdGhlIG1hcmdpbiBib3ggaW4gdGhlIGlubGluZSBkaXJlY3Rpb24s
IGFuZCB0aGVuIHVzZSBvdXIgZm9udCBhc2NlbnQvZGVzY2VudCBpbiB0aGUgYmxvY2sKKyAgICAg
ICAgLy8gZGlyZWN0aW9uIChhbGlnbmVkIHRvIHRoZSByb290IGJveCdzIGJhc2VsaW5lKS4KKyAg
ICAgICAgaWYgKGN1cnItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveCogY3VyckJv
eCA9IHRvUmVuZGVyQm94KGN1cnIpOworICAgICAgICAgICAgaWYgKGN1cnJCb3gtPmlubGluZUJv
eFdyYXBwZXIoKSkgeworICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKKyAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigp
LT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBs
b2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8o
RmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFy
Z2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2lu
TGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJv
KEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAt
IGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSAr
IGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVy
LCB0aGVuIHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGlu
ZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOworICAgICAgICAgICAgaWYgKCFjdXJySW5saW5lLT5h
bHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5v
blplcm8oY3VycklubGluZS0+Y3VsbGVkSW5saW5lQm91bmRpbmdCb3goY29udGFpbmVyKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNo
aWxkTGluZSA9IGN1cnJJbmxpbmUtPmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGlu
ZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgeworICAgICAgICAgICAgICAgICAgICBSb290
SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CisgICAgICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJl
bmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0
aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5M
b2dpY2FsUmlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZExpbmUtPnkoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExl
ZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExp
bmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7
CisgICAgICAgICAgICBSZW5kZXJUZXh0KiBjdXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsK
KyAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogY2hpbGRUZXh0ID0gY3VyclRleHQtPmZp
cnN0VGV4dEJveCgpOyBjaGlsZFRleHQ7IGNoaWxkVGV4dCA9IGNoaWxkVGV4dC0+bmV4dFRleHRC
b3goKSkgeworICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRl
eHQtPnJvb3QoKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxv
Z2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0
TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVy
LT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgp
LCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJ
Zk5vblplcm8oRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVp
Z2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVzdWx0KTsKK30KKworSW5s
aW5lQm94KiBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0Cit7
CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBXZSB3YW50IHRvIGdldCB0aGUgbWFyZ2luIGJveCBpbiB0aGUgaW5saW5lIGRpcmVjdGlv
biwgYW5kIHRoZW4gdXNlIG91ciBmb250IGFzY2VudC9kZXNjZW50IGluIHRoZSBibG9jaworICAg
ICAgICAvLyBkaXJlY3Rpb24gKGFsaWduZWQgdG8gdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUpLgor
ICAgICAgICBpZiAoY3Vyci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBjdXJy
Qm94ID0gdG9SZW5kZXJCb3goY3Vycik7CisgICAgICAgICAgICBpZiAoY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyQm94LT5pbmxpbmVCb3hX
cmFwcGVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewor
ICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhl
ciwgdGhlbiB3ZSBjYW4gcmVjdXIuCisgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxp
bmUgPSB0b1JlbmRlcklubGluZShjdXJyKTsKKyAgICAgICAgICAgIElubGluZUJveCogcmVzdWx0
ID0gY3VycklubGluZS0+Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7CisgICAgICAgICAgICBSZW5kZXJUZXh0KiBjdXJy
VGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJyVGV4dC0+Zmly
c3RUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJUZXh0LT5maXJzdFRleHRC
b3goKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworSW5saW5lQm94KiBS
ZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUxhc3RMaW5lQm94KCkgY29uc3QKK3sKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIFdl
IHdhbnQgdG8gZ2V0IHRoZSBtYXJnaW4gYm94IGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLCBhbmQg
dGhlbiB1c2Ugb3VyIGZvbnQgYXNjZW50L2Rlc2NlbnQgaW4gdGhlIGJsb2NrCisgICAgICAgIC8v
IGRpcmVjdGlvbiAoYWxpZ25lZCB0byB0aGUgcm9vdCBib3gncyBiYXNlbGluZSkuCisgICAgICAg
IGlmIChjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0
b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAgICAgIGlmIChjdXJyQm94LT5pbmxpbmVCb3hXcmFw
cGVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIo
KTsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAg
ICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBuZWVkIGxpbmUgYm94ZXMgZWl0aGVyLCB0aGVu
IHdlIGNhbiByZWN1ci4KKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRv
UmVuZGVySW5saW5lKGN1cnIpOworICAgICAgICAgICAgSW5saW5lQm94KiByZXN1bHQgPSBjdXJy
SW5saW5lLT5sYXN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBlbHNlIGlm
IChjdXJyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgUmVuZGVyVGV4dCogY3VyclRleHQgPSB0
b1JlbmRlclRleHQoY3Vycik7CisgICAgICAgICAgICBpZiAoY3VyclRleHQtPmxhc3RUZXh0Qm94
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJUZXh0LT5sYXN0VGV4dEJveCgpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IFJlbmRlcklubGluZTo6
Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZXN1bHQoY3VsbGVkSW5saW5lQm91bmRpbmdCb3godGhpcykpOworICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEZvciBv
dmVyZmxvdyB3ZSBqdXN0IGhhdmUgdG8gcHJvcGFnYXRlIGJ5IGhhbmQgYW5kIHJlY29tcHV0ZSBp
dCBhbGwuCisgICAgICAgIGlmIChjdXJyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJC
b3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAgICAgIGlmICghY3VyckJv
eC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gY3VyckJveC0+bG9naWNh
bFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHN0eWxlKCkpOworICAgICAgICAgICAg
ICAgIGlmIChpc0hvcml6b250YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3Qu
bW92ZShjdXJyQm94LT54KCksIGN1cnJCb3gtPnkoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bml0ZUlmTm9uWmVybyhsb2dpY2FsUmVjdCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZShjdXJyQm94LT55KCksIGN1
cnJCb3gtPngoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhs
b2dpY2FsUmVjdC50cmFuc3Bvc2VkUmVjdCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwg
dGhlbiB3ZSBjYW4gcmVjdXIuCisgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGN1cnJJbmxpbmUg
PSB0b1JlbmRlcklubGluZShjdXJyKTsKKyAgICAgICAgICAgIGlmICghY3VycklubGluZS0+YWx3
YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25a
ZXJvKGN1cnJJbmxpbmUtPmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSk7
CisgICAgICAgICAgICBlbHNlIGlmICghY3VycklubGluZS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oY3VycklubGluZS0+bGlu
ZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOworICAgICAgICB9IGVsc2UgaWYgKGN1cnIt
PmlzVGV4dCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTsgT3ZlcmZsb3cgZnJvbSB0ZXh0IGJv
eGVzIGlzIGxvc3QuIFdlIHdpbGwgbmVlZCB0byBjYWNoZSB0aGlzIGluZm9ybWF0aW9uIGluCisg
ICAgICAgICAgICAvLyBJbmxpbmVUZXh0Qm94ZXMuCisgICAgICAgICAgICBSZW5kZXJUZXh0KiBj
dXJyVGV4dCA9IHRvUmVuZGVyVGV4dChjdXJyKTsKKyAgICAgICAgICAgIHJlc3VsdC51bml0ZUlm
Tm9uWmVybyhjdXJyVGV4dC0+bGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEludFJlY3QgUmVuZGVySW5s
aW5lOjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogeworICAgIGlmICgh
YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCisgICAgICAgIHJldHVybiBjdWxsZWRJbmxpbmVWaXN1
YWxPdmVyZmxvd0JvdW5kaW5nQm94KCk7CisKICAgICBpZiAoIWZpcnN0TGluZUJveCgpIHx8ICFs
YXN0TGluZUJveCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgLy8gUmV0dXJu
IHRoZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0
IHNpZGUuCi0gICAgZmxvYXQgbG9naWNhbExlZnRTaWRlID0gbnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7Ci0gICAgZmxvYXQgbG9naWNhbFJpZ2h0U2lkZSA9IG51bWVyaWNfbGltaXRzPGludD46
Om1pbigpOworICAgIGludCBsb2dpY2FsTGVmdFNpZGUgPSBudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0U2lkZSA9IG51bWVyaWNfbGltaXRzPGludD46Om1p
bigpOwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewotICAgICAgICBsb2dpY2FsTGVmdFNpZGUg
PSBtaW4obG9naWNhbExlZnRTaWRlLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3Vyci0+bG9naWNhbExl
ZnRWaXN1YWxPdmVyZmxvdygpKSk7Ci0gICAgICAgIGxvZ2ljYWxSaWdodFNpZGUgPSBtYXgobG9n
aWNhbFJpZ2h0U2lkZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN1cnItPmxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93KCkpKTsKKyAgICAgICAgbG9naWNhbExlZnRTaWRlID0gbWluKGxvZ2ljYWxMZWZ0
U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgbG9naWNh
bFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1
YWxPdmVyZmxvdygpKTsKICAgICB9CiAKICAgICBSb290SW5saW5lQm94KiBmaXJzdFJvb3RCb3gg
PSBmaXJzdExpbmVCb3goKS0+cm9vdCgpOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RSb290Qm94
ID0gbGFzdExpbmVCb3goKS0+cm9vdCgpOwogICAgIAotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0ID0g
Zmlyc3RMaW5lQm94KCktPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKTsKLSAgICBmbG9hdCBs
b2dpY2FsVG9wID0gZmlyc3RMaW5lQm94KCktPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhmaXJz
dFJvb3RCb3gtPmxpbmVUb3AoKSk7Ci0gICAgZmxvYXQgbG9naWNhbFdpZHRoID0gbG9naWNhbFJp
Z2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKLSAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0ID0gbGFz
dExpbmVCb3goKS0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KGxhc3RSb290Qm94LT5saW5l
Qm90dG9tKCkpIC0gbG9naWNhbFRvcDsKKyAgICBpbnQgbG9naWNhbFRvcCA9IGZpcnN0TGluZUJv
eCgpLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coZmlyc3RSb290Qm94LT5saW5lVG9wKCkpOwor
ICAgIGludCBsb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRl
OworICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gbGFzdExpbmVCb3goKS0+bG9naWNhbEJvdHRvbVZp
c3VhbE92ZXJmbG93KGxhc3RSb290Qm94LT5saW5lQm90dG9tKCkpIC0gbG9naWNhbFRvcDsKICAg
ICAKLSAgICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChsb2dpY2Fs
TGVmdCwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CisgICAgSW50
UmVjdCByZWN0KGxvZ2ljYWxMZWZ0U2lkZSwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KTsKICAgICBpZiAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CiAgICAgICAgIHJlY3QgPSByZWN0LnRyYW5zcG9zZWRSZWN0KCk7CiAgICAgcmV0dXJuIHJlY3Q7
CkBAIC02MjYsNyArOTU5LDcgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmNsaXBwZWRPdmVyZmxv
d1JlYwogICAgIC8vIE9ubHkgcnVuLWlucyBhcmUgYWxsb3dlZCBpbiBoZXJlIGR1cmluZyBsYXlv
dXQuCiAgICAgQVNTRVJUKCF2aWV3KCkgfHwgIXZpZXcoKS0+bGF5b3V0U3RhdGVFbmFibGVkKCkg
fHwgaXNSdW5JbigpKTsKIAotICAgIGlmICghZmlyc3RMaW5lQm94KCkgJiYgIWNvbnRpbnVhdGlv
bigpKQorICAgIGlmICghZmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpICYmICFjb250aW51
YXRpb24oKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIC8vIEZpbmQgb3VyIGxl
ZnRtb3N0IHBvc2l0aW9uLgpAQCAtODk0LDkgKzEyMjcsMzMgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSAogCiB2b2lkIFJlbmRlcklubGluZTo6ZGlydHlMaW5lQm94
ZXMoYm9vbCBmdWxsTGF5b3V0KQogewotICAgIGlmIChmdWxsTGF5b3V0KQorICAgIGlmIChmdWxs
TGF5b3V0KSB7CiAgICAgICAgIG1fbGluZUJveGVzLmRlbGV0ZUxpbmVCb3hlcyhyZW5kZXJBcmVu
YSgpKTsKLSAgICBlbHNlCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFsd2F5
c0NyZWF0ZUxpbmVCb3hlcygpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gZ3JvdmVsIGludG8g
b3VyIGNoaWxkcmVuIGluIG9yZGVyIHRvIGRpcnR5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcy4KKyAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGlu
Z09yUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGN1cnItPmlzQm94KCkgJiYgIWN1cnItPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJCb3gqIGN1cnJCb3ggPSB0b1JlbmRlckJveChjdXJyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpKQorICAgICAgICAgICAgICAgICAg
ICBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKS0+bWFya0RpcnR5KCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFjdXJyLT5zZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFJlbmRlcklubGluZSogY3VycklubGluZSA9IHRvUmVuZGVySW5saW5lKGN1cnIpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGNoaWxkTGluZSA9IGN1cnJJbmxpbmUt
PmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxkTGluZSA9IGNoaWxkTGluZS0+bmV4dExp
bmVCb3goKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+cm9vdCgpLT5tYXJr
RGlydHkoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzVGV4dCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIGN1cnJUZXh0ID0gdG9SZW5kZXJUZXh0KGN1
cnIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGNoaWxkVGV4dCA9
IGN1cnJUZXh0LT5maXJzdFRleHRCb3goKTsgY2hpbGRUZXh0OyBjaGlsZFRleHQgPSBjaGlsZFRl
eHQtPm5leHRUZXh0Qm94KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRleHQtPnJv
b3QoKS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlCiAgICAgICAgIG1fbGluZUJveGVzLmRpcnR5TGluZUJveGVzKCk7
CiB9CiAKQEAgLTkwNyw2ICsxMjY0LDcgQEAgSW5saW5lRmxvd0JveCogUmVuZGVySW5saW5lOjpj
cmVhdGVJbmxpbgogCiBJbmxpbmVGbG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwcGVu
ZElubGluZUZsb3dCb3goKQogeworICAgIHNldEFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOwogICAg
IElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSBjcmVhdGVJbmxpbmVGbG93Qm94KCk7CiAgICAgbV9s
aW5lQm94ZXMuYXBwZW5kTGluZUJveChmbG93Qm94KTsKICAgICByZXR1cm4gZmxvd0JveDsKQEAg
LTk4MywxMyArMTM0MSwxMSBAQCB2b2lkIFJlbmRlcklubGluZTo6aW1hZ2VDaGFuZ2VkKFdyYXBw
ZWRJCiAKIHZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1
cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsK
LSAgICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IGN1cnItPnJvb3QoKTsKLSAgICAgICAgaW50
IHRvcCA9IG1heChyb290LT5saW5lVG9wKCksIGN1cnItPmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAg
IGludCBib3R0b20gPSBtaW4ocm9vdC0+bGluZUJvdHRvbSgpLCBjdXJyLT5sb2dpY2FsQm90dG9t
KCkpOwotICAgICAgICBJbnRSZWN0IHJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgdG9wLCBjdXJy
LT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKLSAgICAgICAgaWYgKCFyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKKyAgICBpZiAoIWFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcygpKQorICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMs
IHJlY3RzLCBJbnRTaXplKHR4LCB0eSkpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKElubGlu
ZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRM
aW5lQm94KCkpCisgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9h
dFJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJy
LT5oZWlnaHQoKSkpKTsKICAgICB9CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZp
cnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKQEAgLTEwMDAs
NyArMTM1Niw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWMKICAg
ICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKGN1cnItPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgcG9zLm1vdmUodG9SZW5k
ZXJCb3goY3VyciktPngoKSwgdG9SZW5kZXJCb3goY3VyciktPnkoKSk7Ci0gICAgICAgICAgIGN1
cnItPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBwb3MueCgpLCBwb3MueSgpKTsKKyAgICAgICAg
ICAgIGN1cnItPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBwb3MueCgpLCBwb3MueSgpKTsKICAg
ICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZm5kZWYgUmVuZGVy
SW5saW5lX2gKICNkZWZpbmUgUmVuZGVySW5saW5lX2gKIAorI2luY2x1ZGUgIklubGluZUZsb3dC
b3guaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpbmVCb3hMaXN0LmgiCiAKQEAgLTY0LDYgKzY1LDggQEAgcHVibGljOgogCiAgICAgSW5saW5l
Rmxvd0JveCogZmlyc3RMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3RM
aW5lQm94KCk7IH0KICAgICBJbmxpbmVGbG93Qm94KiBsYXN0TGluZUJveCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUJveGVzLmxhc3RMaW5lQm94KCk7IH0KKyAgICBJbmxpbmVCb3gqIGZpcnN0TGlu
ZUJveEluY2x1ZGluZ0N1bGxpbmcoKSBjb25zdCB7IHJldHVybiBhbHdheXNDcmVhdGVMaW5lQm94
ZXMoKSA/IGZpcnN0TGluZUJveCgpIDogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCk7IH0KKyAg
ICBJbmxpbmVCb3gqIGxhc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIGNvbnN0IHsgcmV0dXJu
IGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpID8gbGFzdExpbmVCb3goKSA6IGN1bGxlZElubGluZUxh
c3RMaW5lQm94KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHZpcnR1
YWxDb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBjb250aW51YXRpb24oKTsgfQogICAgIFJl
bmRlcklubGluZSogaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpIGNvbnN0OwpAQCAtNzgsNiAr
ODEsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51
YXRpb247CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbjsK
IAorICAgIGJvb2wgYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdh
eXNDcmVhdGVMaW5lQm94ZXM7IH0KKyAgICB2b2lkIHNldEFsd2F5c0NyZWF0ZUxpbmVCb3hlcygp
IHsgbV9hbHdheXNDcmVhdGVMaW5lQm94ZXMgPSB0cnVlOyB9CisgICAgdm9pZCB1cGRhdGVBbHdh
eXNDcmVhdGVMaW5lQm94ZXMoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKQEAgLTkxLDYgKzk4LDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJJbmxpbmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdFJlY3QgY3VsbGVk
SW5saW5lQm91bmRpbmdCb3goY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0Owor
ICAgIEludFJlY3QgY3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0
OworICAgIElubGluZUJveCogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3Q7CisgICAg
SW5saW5lQm94KiBjdWxsZWRJbmxpbmVMYXN0TGluZUJveCgpIGNvbnN0OworICAgIHZvaWQgY3Vs
bGVkSW5saW5lQWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVj
dG9yPEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgY3VsbGVkSW5saW5lQWJz
b2x1dGVRdWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVh
ZD4mKTsKKwogICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAKQEAgLTE1NCw3ICsxNjgsOCBAQCBwcml2YXRlOgog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hM
aXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0
aGlzIGlubGluZSBmbG93LiAgRm9yIGV4YW1wbGUsIDxpPkhlbGxvPGJyPndvcmxkLjwvaT4gd2ls
bCBoYXZlIHR3byA8aT4gbGluZSBib3hlcy4KIAotICAgIG11dGFibGUgaW50IG1fbGluZUhlaWdo
dDsKKyAgICBtdXRhYmxlIGludCBtX2xpbmVIZWlnaHQgOiAzMTsKKyAgICBib29sIG1fYWx3YXlz
Q3JlYXRlTGluZUJveGVzIDogMTsKIH07CiAKIGlubGluZSBSZW5kZXJJbmxpbmUqIHRvUmVuZGVy
SW5saW5lKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA4MzAyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNyw4ICszMTcsMTEgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6ZGlydHlMaW5lc0Zy
b21DaAogICAgIGlmICghY29udGFpbmVyLT5wYXJlbnQoKSB8fCAoY29udGFpbmVyLT5pc1JlbmRl
ckJsb2NrKCkgJiYgKGNvbnRhaW5lci0+c2VsZk5lZWRzTGF5b3V0KCkgfHwgIWNvbnRhaW5lci0+
aXNCbG9ja0Zsb3coKSkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBSZW5kZXJJbmxpbmUqIGlu
bGluZUNvbnRhaW5lciA9IGNvbnRhaW5lci0+aXNSZW5kZXJJbmxpbmUoKSA/IHRvUmVuZGVySW5s
aW5lKGNvbnRhaW5lcikgOiAwOworICAgIElubGluZUJveCogZmlyc3RCb3ggPSBpbmxpbmVDb250
YWluZXIgPyBpbmxpbmVDb250YWluZXItPmZpcnN0TGluZUJveEluY2x1ZGluZ0N1bGxpbmcoKSA6
IGZpcnN0TGluZUJveCgpOworCiAgICAgLy8gSWYgd2UgaGF2ZSBubyBmaXJzdCBsaW5lIGJveCwg
dGhlbiBqdXN0IGJhaWwgZWFybHkuCi0gICAgaWYgKCFmaXJzdExpbmVCb3goKSkgeworICAgIGlm
ICghZmlyc3RCb3gpIHsKICAgICAgICAgLy8gRm9yIGFuIGVtcHR5IGlubGluZSwgZ28gYWhlYWQg
YW5kIHByb3BhZ2F0ZSB0aGUgY2hlY2sgdXAgdG8gb3VyIHBhcmVudCwgdW5sZXNzIHRoZSBwYXJl
bnQKICAgICAgICAgLy8gaXMgYWxyZWFkeSBkaXJ0eS4KICAgICAgICAgaWYgKGNvbnRhaW5lci0+
aXNJbmxpbmUoKSAmJiAhY29udGFpbmVyLT5wYXJlbnQoKS0+c2VsZk5lZWRzTGF5b3V0KCkpCkBA
IC0zNDQsMTYgKzM0NywxNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpkaXJ0eUxpbmVzRnJv
bUNoCiAgICAgICAgICAgICBpZiAodGV4dEJveCkKICAgICAgICAgICAgICAgICBib3ggPSB0ZXh0
Qm94LT5yb290KCk7CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHRvUmVuZGVySW5saW5lKGN1
cnIpLT5sYXN0TGluZUJveCgpOwotICAgICAgICAgICAgaWYgKGZsb3dCb3gpCi0gICAgICAgICAg
ICAgICAgYm94ID0gZmxvd0JveC0+cm9vdCgpOworICAgICAgICAgICAgSW5saW5lQm94KiBsYXN0
U2libGluZ0JveCA9IHRvUmVuZGVySW5saW5lKGN1cnIpLT5sYXN0TGluZUJveEluY2x1ZGluZ0N1
bGxpbmcoKTsKKyAgICAgICAgICAgIGlmIChsYXN0U2libGluZ0JveCkKKyAgICAgICAgICAgICAg
ICBib3ggPSBsYXN0U2libGluZ0JveC0+cm9vdCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGJveCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoIWJveCkKLSAgICAgICAg
Ym94ID0gZmlyc3RMaW5lQm94KCktPnJvb3QoKTsKKyAgICAgICAgYm94ID0gZmlyc3RCb3gtPnJv
b3QoKTsKIAogICAgIC8vIElmIHdlIGZvdW5kIGEgbGluZSBib3gsIHRoZW4gZGlydHkgaXQuCiAg
ICAgaWYgKGJveCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFJlbmRlclRleHQ6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRleHQ6OmRl
c3Ryb3koKQordm9pZCBSZW5kZXJUZXh0OjpyZW1vdmVBbmREZXN0cm95VGV4dEJveGVzKCkKIHsK
ICAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICBpZiAoZmlyc3RU
ZXh0Qm94KCkpIHsKQEAgLTE5Miw2ICsxOTIsMTEgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZXN0cm95
KCkKICAgICAgICAgICAgIHBhcmVudCgpLT5kaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCh0aGlz
KTsKICAgICB9CiAgICAgZGVsZXRlVGV4dEJveGVzKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGV4dDo6
ZGVzdHJveSgpCit7CisgICAgcmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygpOwogICAgIFJlbmRl
ck9iamVjdDo6ZGVzdHJveSgpOwogfQogCkBAIC0yNjgsNyArMjczLDcgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBSZW5kZXJUZXh0OjpvcmlnaQogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQogewogICAgIGZvciAo
SW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0
VGV4dEJveCgpKQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCArIGJveC0+eCgpLCB0
eSArIGJveC0+eSgpLCBib3gtPmxvZ2ljYWxXaWR0aCgpLCBib3gtPmxvZ2ljYWxIZWlnaHQoKSkp
OworICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodHggKyBi
b3gtPngoKSwgdHkgKyBib3gtPnkoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKSkpOwog
fQogCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZShWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCkKQEAgLTEzMDAsNiArMTMwNSwyOSBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVz
Qm91bmRpbmdCb3goKSBjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSW50UmVjdCBSZW5kZXJU
ZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmICgh
Zmlyc3RUZXh0Qm94KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBSZXR1
cm4gdGhlIHdpZHRoIG9mIHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGltYWwgcmln
aHQgc2lkZS4KKyAgICBpbnQgbG9naWNhbExlZnRTaWRlID0gbnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7CisgICAgaW50IGxvZ2ljYWxSaWdodFNpZGUgPSBudW1lcmljX2xpbWl0czxpbnQ+Ojpt
aW4oKTsKKyAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBmaXJzdFRleHRCb3goKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgbG9naWNhbExlZnRTaWRl
ID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygp
KTsKKyAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJy
LT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKTsKKyAgICB9CisgICAgCisgICAgaW50IGxv
Z2ljYWxUb3AgPSBmaXJzdFRleHRCb3goKS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCk7Cisg
ICAgaW50IGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7
CisgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBsYXN0VGV4dEJveCgpLT5sb2dpY2FsQm90dG9tVmlz
dWFsT3ZlcmZsb3coKSAtIGxvZ2ljYWxUb3A7CisgICAgCisgICAgSW50UmVjdCByZWN0KGxvZ2lj
YWxMZWZ0U2lkZSwgbG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICBpZiAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJlY3Qg
PSByZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKIEludFJlY3Qg
UmVuZGVyVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjYiA9IGNvbnRh
aW5pbmdCbG9jaygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShy
ZXZpc2lvbiA4MzAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQmIG1pblcsIGZsb2F0JiBtYXhXLCBib29sJiBzdHJpcEZyb250U3Bh
Y2VzKTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7Cisg
ICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdDsKIAogICAg
IEZsb2F0UG9pbnQgZmlyc3RSdW5PcmlnaW4oKSBjb25zdDsKICAgICBmbG9hdCBmaXJzdFJ1blgo
KSBjb25zdDsKQEAgLTEyNyw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBrbm93
blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMoKSBjb25zdCB7IHJldHVybiBtX2tu
b3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250czsgfQogCisgICAgdm9pZCByZW1v
dmVBbmREZXN0cm95VGV4dEJveGVzKCk7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24gODMwMjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyU1ZHSW5saW5lOjpS
ZW5kZXJTVkdJbmxpbmUoTm9kZSogbikKICAgICA6IFJlbmRlcklubGluZShuKQogeworICAgIHNl
dEFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpOwogfQogCiBJbmxpbmVGbG93Qm94KiBSZW5kZXJTVkdJ
bmxpbmU6OmNyZWF0ZUlubGluZUZsb3dCb3goKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA4MzAyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMywxMyArMTAzLDEzIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5
b3V0Q2hhcmFjdGVyc0kKICAgICAgICAgICAgIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSBz
dGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oY2hpbGQpOwogICAgICAgICAgICAgY2hhcmFj
dGVyTGF5b3V0LmxheW91dElubGluZVRleHRCb3godGV4dEJveCk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKTsKLQogICAgICAg
ICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgY29udGVudC4KICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBjaGlsZC0+cmVuZGVyZXIoKS0+bm9kZSgpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmlzSW5s
aW5lRmxvd0JveCgpKTsKKwogICAgICAgICAgICAgU1ZHSW5saW5lRmxvd0JveCogZmxvd0JveCA9
IHN0YXRpY19jYXN0PFNWR0lubGluZUZsb3dCb3gqPihjaGlsZCk7CiAgICAgICAgICAgICBib29s
IGlzVGV4dFBhdGggPSBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0UGF0aFRhZyk7CiAg
ICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkgewpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgdm9pZCBT
VkdSb290SW5saW5lQm94OjpsYXlvdXRDaGlsZEJveGVzKAogICAgICAgICAgICAgdGV4dEJveC0+
c2V0TG9naWNhbFdpZHRoKGJveFJlY3Qud2lkdGgoKSk7CiAgICAgICAgICAgICB0ZXh0Qm94LT5z
ZXRMb2dpY2FsSGVpZ2h0KGJveFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSk7Ci0KICAgICAgICAgICAg
IC8vIFNraXAgZ2VuZXJhdGVkIGNvbnRlbnQuCiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5yZW5k
ZXJlcigpLT5ub2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAg
IEFTU0VSVChjaGlsZC0+aXNJbmxpbmVGbG93Qm94KCkpOworCiAgICAgICAgICAgICBTVkdJbmxp
bmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lRmxvd0JveCo+KGNoaWxk
KTsKICAgICAgICAgICAgIGxheW91dENoaWxkQm94ZXMoZmxvd0JveCk7CiAKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jsb2NrZmxvdy90ZXh0LW9yaWVudGF0aW9uLWJhc2lj
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9ibG9ja2Zsb3cvdGV4dC1vcmllbnRhdGlvbi1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDgzMDI1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYmxvY2tmbG93L3RleHQt
b3JpZW50YXRpb24tYmFzaWMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNzg1eDcwNAogICAgICAgICAgIFJlbmRlcklubGlu
ZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0MHgyNTQKICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoNDQsMSkgc2l6ZSA0MHgyNTQKICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQ0
LDEpIHdpZHRoIDI1NDogIkhlbGxvIHdvcmxkIgotICAgICAgICAgIFJlbmRlckJSIHtCUn0gYXQg
KDY0LDI1NCkgc2l6ZSAweDEKKyAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MiwyNTQpIHNp
emUgMHgxCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM2eDE5
OQogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5NCwxKSBzaXplIDM2eDE5OQog
ICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoOTQsMSkgd2lkdGggMTk5OiAiSGVsbG8gd29ybGQi
CkBAIC00NCw3ICs0NCw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNzg1eDcwNAogICAgICAgICAg
IFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA0MHgyNTUKICAgICAgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoNDQsMSkgc2l6ZSA0MHgyNTUKICAgICAgICAgICAgICAgdGV4
dCBydW4gYXQgKDQ0LDEpIHdpZHRoIDI1NTogIkhlbGxvIHdvcmxkIgotICAgICAgICAgIFJlbmRl
ckJSIHtCUn0gYXQgKDY0LDI1Nikgc2l6ZSAweDAKKyAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0
ICg1MiwyNTYpIHNpemUgMHgwCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCww
KSBzaXplIDM2eDE5OAogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg5NCwxKSBz
aXplIDM2eDE5OAogICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoOTQsMSkgd2lkdGggMTk4OiAi
SGVsbG8gd29ybGQiCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L2Nh
cGl0YWxpemUtZW1wdHktZ2VuZXJhdGVkLXN0cmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC9jYXBpdGFsaXplLWVtcHR5LWdl
bmVyYXRlZC1zdHJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA4MzAyNSkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L3RleHQvY2FwaXRhbGl6ZS1lbXB0eS1nZW5lcmF0ZWQtc3Ry
aW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQCBsYXllciBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MCkgc2l6ZSA0NngxOAogICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDY6ICJM
b3JlbSAiCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDM5eDE4
Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDE4
CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDAK
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0NiwwKSBzaXplIDM5eDE4CiAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICg0NiwwKSB3aWR0aCAzOTogIklwc3VtIgpAQCAtMzgsNyArMzgsNyBAQCBsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAyM3gxOAogICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjM6
ICJMb3IiCiAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDYyeDE4
Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDE4
CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKGdlbmVyYXRlZCkgYXQgKDAsMCkgc2l6ZSAweDAK
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyMywwKSBzaXplIDYyeDE4CiAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgyMywwKSB3aWR0aCA2MjogImVtIElwc3VtIgo=
</data>
<flag name="review"
          id="80954"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>