<?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>69966</bug_id>
          
          <creation_ts>2011-10-12 15:12:52 -0700</creation_ts>
          <short_desc>Eliminate separate RenderStyle for visited link style</short_desc>
          <delta_ts>2011-10-17 23:42:09 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>482778</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-12 15:12:52 -0700</bug_when>
    <thetext>There are only a few properties that can apply to visited links and they can be part of the regular style. Many things will get simpler when the separate RenderStyle for visited links is eliminated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483038</commentid>
    <comment_count>1</comment_count>
      <attachid>110806</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-13 00:21:34 -0700</bug_when>
    <thetext>Created attachment 110806
patch

After this style recalc for visited link changes is unnecessary too and can be removed later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483039</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-13 00:25:13 -0700</bug_when>
    <thetext>Attachment 110806 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSStyleApplyProperty.cpp:243:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/rendering/style/StyleInheritedData.cpp:63:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 2 in 21 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>483045</commentid>
    <comment_count>3</comment_count>
      <attachid>110806</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-10-13 00:56:20 -0700</bug_when>
    <thetext>Comment on attachment 110806
patch

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

Great patch, some comments though leading to r-:

&gt; Source/WebCore/css/CSSStyleApplyProperty.cpp:243
&gt; +        if (m_default &amp;&amp; !color.isValid()) {
&gt; +            applyColorValue(selector, (selector-&gt;parentStyle()-&gt;*m_default)());
&gt; +        } else

Unnecessary braces.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2178
&gt; +        for (int i = startIndex; i &lt;= endIndex; i++) {

Micro optimization: ++i.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2191
&gt; +    for (int i = startIndex; i &lt;= endIndex; i++)        

Ditto.

&gt; Source/WebCore/css/SVGCSSStyleSelector.cpp:235
&gt; -                svgstyle-&gt;setFillPaint(svgParentStyle-&gt;fillPaintType(), svgParentStyle-&gt;fillPaintColor(), svgParentStyle-&gt;fillPaintUri());
&gt; +                APPLY_VISITED_LINK_VALID_PAINT(setFillPaint, setVisitedLinkFillPaint, svgParentStyle-&gt;fillPaintType(), svgParentStyle-&gt;fillPaintColor(), svgParentStyle-&gt;fillPaintUri());

Ok, as this APPLY_VISITED_LINK_VALID_PAINT macro is actually only used for two properties: fill &amp; stroke, I&apos;d propose to create two setFillPaint/setStrokePaint methods that replace this macro alltogether.
I&apos;d be fine with the macro usage, if it would help to replace dozens of this kind of functions, but as it&apos;s only about two, I&apos;d rather avoid creating a new macro.

&gt; Source/WebCore/css/SVGCSSStyleSelector.cpp:239
&gt; -                svgstyle-&gt;setFillPaint(SVGRenderStyle::initialFillPaintType(), SVGRenderStyle::initialFillPaintColor(), SVGRenderStyle::initialFillPaintUri());
&gt; +                APPLY_VISITED_LINK_VALID_PAINT(setFillPaint, setVisitedLinkFillPaint, SVGRenderStyle::initialFillPaintType(), SVGRenderStyle::initialFillPaintColor(), SVGRenderStyle::initialFillPaintUri());

Another general concern: For SVGs fill/stroke properties you also need an URI, beside the color &amp; paint type. The rest of the patch indicates you&apos;re not passing on a URI to the SVGRenderStyle, so this would only work for simple colors, not for other paint servers like gradients/patterns.

From IRC discussion the result is that this is already broken in trunk. It makes sense to still pass around the uris here, as only the rendering code then needs an adjustment to take into account complex paint uris for SVG.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:1121
&gt; +Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) const

I dislike the bool usage, please replace it by an enum containing &quot;UseVisitedLinkStye&quot; / &quot;UseRegularStyle&quot; or sth. along the lines, because....

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:1178
&gt; +    Color unvisitedColor = colorIncludingFallback(colorProperty, false);

... this is awkward to read on the call site! Passing sth. like &quot;DontUseVisitedStyle&quot; or &quot;UseRegularStyleOnly&quot; (whatever :-) is much easier to read and follow.

&gt; Source/WebCore/rendering/style/SVGRenderStyleDefs.cpp:66
&gt; +        &amp;&amp; visitedLinkPaintColor == other.visitedLinkPaintColor;

An URI is missing for the visitedLinkPaintUri.

&gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:84
&gt; +        SVGPaint::SVGPaintType visitedPaintType = applyToFill ? svgStyle-&gt;visitedLinkFillPaintType() : svgStyle-&gt;visitedLinkStrokePaintType();

Could you file a bug report that SVGs visited style handling ignores complex paint servers and add that bug url with a FIXME here.
Then we can fix the rendering seperated and fully fix visited link styles for SVG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483065</commentid>
    <comment_count>4</comment_count>
      <attachid>110813</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-13 01:51:46 -0700</bug_when>
    <thetext>Created attachment 110813
updated patch

- Added (currently unused) visitedLinkFill/StrokePaintUri component to SVG style for completeness
- Got rid of the macro in favor of doing the applying to the right style in SVGRenderStyle::setFill/StrokePaint()
- Cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483069</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-13 02:06:50 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I dislike the bool usage, please replace it by an enum containing &quot;UseVisitedLinkStye&quot; / &quot;UseRegularStyle&quot; or sth. along the lines, because....

As discussed, I didn&apos;t do this. It is a private helper and usage is clear from the context.

&gt; Could you file a bug report that SVGs visited style handling ignores complex paint servers and add that bug url with a FIXME here.
&gt; Then we can fix the rendering seperated and fully fix visited link styles for SVG.

https://bugs.webkit.org/show_bug.cgi?id=70006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485208</commentid>
    <comment_count>6</comment_count>
      <attachid>110813</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-10-17 09:21:55 -0700</bug_when>
    <thetext>Comment on attachment 110813
updated patch

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

&gt; Source/WebCore/css/CSSStyleSelector.h:176
&gt; +    Color getColorFromPrimitiveValue(CSSPrimitiveValue*, bool forVisitedLink = false) const;

I thought we hate bool params? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485210</commentid>
    <comment_count>7</comment_count>
      <attachid>110813</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-10-17 09:24:21 -0700</bug_when>
    <thetext>Comment on attachment 110813
updated patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485405</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-17 12:48:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97638</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485721</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 18:38:41 -0700</bug_when>
    <thetext>It appears that this patch caused 3 printing tests to hit assertions on Snow Leopard:
http://build.webkit.org/results/SnowLeopard%20Intel%20Debug%20(Tests)/r97638%20(2608)/results.html

A stack trace sample:
0   com.apple.WebCore             	0x0000000101383c23 WebCore::Node::getFlag(WebCore::Node::NodeFlags) const + 15 (Node.h:636)
1   com.apple.WebCore             	0x000000010144c2da WebCore::Node::isLink() const + 26 (Node.h:301)
2   com.apple.WebCore             	0x0000000101464b26 void WebCore::CSSStyleSelector::applyDeclarations&lt;true&gt;(bool, int, int) + 52 (CSSStyleSelector.cpp:2177)
3   com.apple.WebCore             	0x0000000101446641 WebCore::CSSStyleSelector::styleForPage(int) + 363 (CSSStyleSelector.cpp:1476)
4   com.apple.WebCore             	0x00000001014bc079 WebCore::Document::styleForPage(int) + 43 (Document.cpp:1694)
5   com.apple.WebCore             	0x00000001014bc562 WebCore::Document::isPageBoxVisible(int) + 32 (Document.cpp:1714)
6   com.apple.WebCore             	0x0000000101da5853 WebCore::PrintContext::isPageBoxVisible(WebCore::Frame*, int) + 35 (PrintContext.cpp:291)
7   com.apple.WebKit              	0x0000000100c5b7ee -[WebFrame(WebKitDebug) isPageBoxVisible:] + 68 (WebCoreStatistics.mm:293)
8   DumpRenderTree                	0x000000010002d3c3 LayoutTestController::isPageBoxVisible(int) const + 43 (LayoutTestControllerMac.mm:316)
9   DumpRenderTree                	0x00000001000245aa isPageBoxVisibleCallback(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 116 (LayoutTestController.cpp:946)
10  com.apple.JavaScriptCore      	0x00000001002c3fad JSC::JSCallbackFunction::call(JSC::ExecState*) + 301 (JSCallbackFunction.cpp:73)
11  com.apple.JavaScriptCore      	0x00000001002ac656 cti_op_call_NotJSFunction + 425 (JITStubs.cpp:2322)
12  com.apple.JavaScriptCore      	0x00000001002a4e13 jscGeneratedNativeCode + 0 (JITStubs.cpp:945)
13  com.apple.JavaScriptCore      	0x0000000100283574 JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) + 86 (JITCode.h:103)
14  com.apple.JavaScriptCore      	0x000000010027c9eb JSC::Interpreter::execute(JSC::EvalExecutable*, JSC::ExecState*, JSC::JSValue, int, JSC::ScopeChainNode*) + 1799 (Interpreter.cpp:1295)
15  com.apple.JavaScriptCore      	0x000000010027fbdf JSC::Interpreter::callEval(JSC::ExecState*, JSC::RegisterFile*, JSC::Register*, int, int) + 887 (Interpreter.cpp:463)
16  com.apple.JavaScriptCore      	0x00000001002a80f2 cti_op_call_eval + 490 (JITStubs.cpp:3433)
17  com.apple.JavaScriptCore      	0x00000001002a4e13 jscGeneratedNativeCode + 0 (JITStubs.cpp:945)
18  com.apple.JavaScriptCore      	0x0000000100283574 JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*) + 86 (JITCode.h:103)
19  com.apple.JavaScriptCore      	0x000000010027ef11 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) + 3361 (Interpreter.cpp:897)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485795</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 22:02:17 -0700</bug_when>
    <thetext>These tests are also crashing on release builds:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485802</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-17 22:05:08 -0700</bug_when>
    <thetext>Lion:
http://build.webkit.org/results/Lion%20Intel%20Debug%20(Tests)/r97701%20(1009)/results.html

Qt:
http://build.webkit.org/results/Qt%20Linux%20Release/r97703%20(38636)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485851</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-17 23:42:09 -0700</bug_when>
    <thetext>The printing test crash was fixed in http://trac.webkit.org/changeset/97724</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110806</attachid>
            <date>2011-10-13 00:21:34 -0700</date>
            <delta_ts>2011-10-13 01:51:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>visited-link-render-style-5.patch</filename>
            <type>text/plain</type>
            <size>54231</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTEtMTAtMTMgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02OTk2NgorICAgICAgICBFbGltaW5hdGUgc2VwYXJhdGUgUmVu
ZGVyU3R5bGUgZm9yIHZpc2l0ZWQgbGluayBzdHlsZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBvbmx5IGEgZmV3IHByb3BlcnRpZXMg
dGhhdCBjYW4gYXBwbHkgdG8gdmlzaXRlZCBsaW5rcyBhbmQgdGhleSBjYW4KKyAgICAgICAgYmUg
cGFydCBvZiB0aGUgcmVndWxhciBzdHlsZS4gTWFueSB0aGluZ3Mgd2lsbCBnZXQgc2ltcGxlciB3
aGVuIHRoZSBzZXBhcmF0ZSAKKyAgICAgICAgUmVuZGVyU3R5bGUgZm9yIHZpc2l0ZWQgbGlua3Mg
aXMgZWxpbWluYXRlZC4KKyAgICAgICAgCisgICAgICAgIC0gQWRkIHZhbGlkIHZpc2l0ZWQgbGlu
ayBwcm9wZXJ0aWVzIGFzIHNlcGFyYXRlIGZpZWxkcyB0byBSZW5kZXJTdHlsZS4gVGhlICAKKyAg
ICAgICAgICB2aXNpdGVkTGlua0NvbG9yIGdvZXMgdG8gaW5oZXJpdGVkLCBldmVyeXRoaW5nIGVs
c2UgZ29lcyB0byByYXJlIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgLSBNYWtlIFJlbmRlclN0
eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IoKSBnZXQgdGhlIHZpc2l0ZWQgc3R5bGUgZnJvbSB0
aGUgbmV3IGZpZWxkcy4KKyAgICAgICAgLSBBcyBWSVNJVEVEX0xJTksgcHNldWRvIHN0eWxlIGRv
ZXNuJ3QgZXhpc3RzIGFueW1vcmUsIHJlbW92ZSBhbGwgY29kZSBkZWFsaW5nIHdpdGggaXQuCisg
ICAgICAgIC0gTWFrZSBDU1NTdHlsZVNlbGVjdG9yIGFuZCBBcHBseVByb3BlcnR5Q29sb3IgYXBw
bHkgdGhlIHZpc2l0ZWQgbGluayBzdHlsZSB0byB0aGUKKyAgICAgICAgICBuZXdseSBhZGRlZCBm
aWVsZHMgaW5zdGVhZCBvZiBhIHNlcGFyYXRlIFJlbmRlclN0eWxlLgorICAgICAgICAtIFNhbWUg
dGhpbmcgd2l0aCBTVkdSZW5kZXJTdHlsZSwgU1ZHQ1NTU3R5bGVTZWxlY3Rvci4KKyAgICAgICAg
LSBGaXh1cCB0aGUgU1ZHIHZpc2l0ZWQgbGluayBzdHlsZSBjb2RlIHRvIHVzZSB0aGUgbmV3IGZp
ZWxkcy4KKworICAgICAgICBUaGlzIGlzIH4xNSUgcHJvZ3Jlc3Npb24gaW4gc3R5bGVGb3JFbGVt
ZW50IHBlcmZvcm1hbmNlIG92ZXIgdGhlIEhUTUw1IHNwZWMgbG9hZC4KKworICAgICAgICAqIGNz
cy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNvbG9yOjpBcHBseVByb3BlcnR5Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvbG9yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Q29sb3I6OmFwcGx5Q29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlE
ZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURl
Y2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkp
OgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Z2V0Q2FjaGVk
UHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNvbG9ySW5jbHVk
aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBl
bmRlbnRDb2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExpbmtDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5r
Qm9yZGVyTGVmdENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRW
aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVk
RmxhZ3M6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1
bGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExp
bmtUZXh0RW1waGFzaXNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6
c2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRl
ZEZsYWdzOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtGaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyU3R5bGU6OnZpc2l0ZWRMaW5rRmlsbFBhaW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtGaWxsUGFpbnRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtTdHJva2VQYWludFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnRDb2xvcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUZpbGxEYXRhOjpTdHlsZUZpbGxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlRmlsbERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTdHJva2VEYXRhOjpTdHlsZVN0cm9rZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVT
dHJva2VEYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU1ZHUmVu
ZGVyU3R5bGVEZWZzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUluaGVyaXRlZERhdGE6OlN0eWxlSW5o
ZXJpdGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUluaGVyaXRlZERhdGE6Om9wZXJh
dG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVNdWx0aUNvbERhdGE6OlN0eWxlTXVsdGlDb2xEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlTXVsdGlDb2xEYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVxdWVzdFBhaW50aW5nUmVzb3VyY2UpOgorCiAyMDExLTEwLTEyICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFzcyBQYXJzZWQg
QWNjZXB0IEF0dHJpYnV0ZSBNSU1FIFR5cGVzIHRvIFdlYktpdCBDbGllbnRzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAkocmV2aXNpb24gOTcy
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI0LDkgKzIyNCwxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBjb25z
dCBDb2xvciYgKFJlbmRlclN0eWxlOjoqRGVmYXVsdEZ1bmN0aW9uKSgpIGNvbnN0OwogICAgIHR5
cGVkZWYgQ29sb3IgKCpJbml0aWFsRnVuY3Rpb24pKCk7CiAKLSAgICBBcHBseVByb3BlcnR5Q29s
b3IoR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIERlZmF1bHRG
dW5jdGlvbiBkZWZhdWx0RnVuY3Rpb24sIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rpb24g
PSAwKQorICAgIEFwcGx5UHJvcGVydHlDb2xvcihHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIFNldHRl
ckZ1bmN0aW9uIHNldHRlciwgU2V0dGVyRnVuY3Rpb24gdmlzaXRlZExpbmtTZXR0ZXIsIERlZmF1
bHRGdW5jdGlvbiBkZWZhdWx0RnVuY3Rpb24sIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rp
b24gPSAwKQogICAgICAgICA6IG1fZ2V0dGVyKGdldHRlcikKICAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgICAgICwgbV92aXNpdGVkTGlua1NldHRlcih2aXNpdGVkTGlua1NldHRlcikK
ICAgICAgICAgLCBtX2RlZmF1bHQoZGVmYXVsdEZ1bmN0aW9uKQogICAgICAgICAsIG1faW5pdGlh
bChpbml0aWFsRnVuY3Rpb24pCiAgICAgewpAQCAtMjM1LDE2ICsyMzYsMTcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IpIGNvbnN0CiAgICAgeworICAgICAgICAvLyBWaXNpdGVkIGxpbmsgc3R5
bGUgY2FuIG5ldmVyIGV4cGxpY2l0bHkgaW5oZXJpdCBmcm9tIHBhcmVudCB2aXNpdGVkIGxpbmsg
c3R5bGUgc28gbm8gc2VwYXJhdGUgZ2V0dGVycyBhcmUgbmVlZGVkLgogICAgICAgICBjb25zdCBD
b2xvciYgY29sb3IgPSAoc2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPiptX2dldHRlcikoKTsKLSAg
ICAgICAgaWYgKG1fZGVmYXVsdCAmJiAhY29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgKHNl
bGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKChzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+Km1f
ZGVmYXVsdCkoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUo
KS0+Km1fc2V0dGVyKShjb2xvcik7CisgICAgICAgIGlmIChtX2RlZmF1bHQgJiYgIWNvbG9yLmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgYXBwbHlDb2xvclZhbHVlKHNlbGVjdG9yLCAoc2VsZWN0
b3ItPnBhcmVudFN0eWxlKCktPiptX2RlZmF1bHQpKCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzZWxlY3RvciwgY29sb3IpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvcikg
Y29uc3QKICAgICB7Ci0gICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKShtX2lu
aXRpYWwgPyBtX2luaXRpYWwoKSA6IENvbG9yKCkpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUo
c2VsZWN0b3IsIG1faW5pdGlhbCA/IG1faW5pdGlhbCgpIDogQ29sb3IoKSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGFwcGx5VmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIENT
U1ZhbHVlKiB2YWx1ZSkgY29uc3QKQEAgLTI1NSwxMiArMjU3LDI1IEBAIHByaXZhdGU6CiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVu
dCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikK
ICAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHNlbGVjdG9yKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKHNlbGVjdG9yLT5nZXRD
b2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkp
CisgICAgICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKHNlbGVjdG9y
LT5nZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIGlmIChzZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
ICYmIG1fdmlzaXRlZExpbmtTZXR0ZXIpCisgICAgICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHls
ZSgpLT4qbV92aXNpdGVkTGlua1NldHRlcikoc2VsZWN0b3ItPmdldENvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCB0cnVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdm9pZCBhcHBseUNvbG9yVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0
IENvbG9yJiBjb2xvcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+YXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc2VsZWN0b3ItPnN0eWxlKCkt
PiptX3NldHRlcikoY29sb3IpOworICAgICAgICBpZiAoc2VsZWN0b3ItPmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiBtX3Zpc2l0ZWRMaW5rU2V0dGVyKQorICAgICAgICAgICAg
KHNlbGVjdG9yLT5zdHlsZSgpLT4qbV92aXNpdGVkTGlua1NldHRlcikoY29sb3IpOwogICAgIH0K
IAogICAgIEdldHRlckZ1bmN0aW9uIG1fZ2V0dGVyOwogICAgIFNldHRlckZ1bmN0aW9uIG1fc2V0
dGVyOworICAgIFNldHRlckZ1bmN0aW9uIG1fdmlzaXRlZExpbmtTZXR0ZXI7CiAgICAgRGVmYXVs
dEZ1bmN0aW9uIG1fZGVmYXVsdDsKICAgICBJbml0aWFsRnVuY3Rpb24gbV9pbml0aWFsOwogfTsK
QEAgLTg5Myw3ICs5MDgsNyBAQCBDU1NTdHlsZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQ
cm9wCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCiAgICAg
ICAgbV9wcm9wZXJ0eU1hcFtpXSA9IDA7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxJbmhlcml0RnJvbVBhcmVudD4oJlJl
bmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgMCwgUmVuZGVyU3R5bGU6
OmluaXRpYWxDb2xvcikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNvbG9y
LCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPEluaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6
OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0NvbG9yLCAwLCBSZW5kZXJTdHlsZTo6aW5pdGlhbENvbG9yKSk7CiAgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5RGlyZWN0aW9uLCBuZXcgQXBwbHlQcm9wZXJ0eURpcmVjdGlv
bigmUmVuZGVyU3R5bGU6OmRpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24sIFJl
bmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9uKSk7CiAKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgbmV3IEFwcGx5UHJvcGVydHlGaWxsTGF5
ZXI8RUZpbGxBdHRhY2htZW50PihDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBCYWNr
Z3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywKQEAgLTk1NCwxMSArOTY5LDExIEBAIENTU1N0
eWxlQXBwbHlQcm9wZXJ0eTo6Q1NTU3R5bGVBcHBseVByb3AKICAgICAgICAgICAgICAgICAgICAg
JkZpbGxMYXllcjo6aXNSZXBlYXRZU2V0LCAmRmlsbExheWVyOjpyZXBlYXRZLCAmRmlsbExheWVy
OjpzZXRSZXBlYXRZLCAmRmlsbExheWVyOjpjbGVhclJlcGVhdFksICZGaWxsTGF5ZXI6OmluaXRp
YWxGaWxsUmVwZWF0WSwgJkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRZKSk7CiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwgbmV3IEFwcGx5
UHJvcGVydHlFeHBhbmRpbmc8U3VwcHJlc3NWYWx1ZT4ocHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFgpLCBwcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WSkpKTsKIAotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50Pigm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5k
Q29sb3IsIDApKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVu
ZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRv
bUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJp
dEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIG5ldyBBcHBseVByb3BlcnR5
Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3Ip
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgbmV3
IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OmJv
cmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5
bGU6OmNvbG9yKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgMCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBuZXcgQXBw
bHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6Ym9yZGVy
Qm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpjb2xv
cikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwg
bmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29s
b3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9y
LCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHls
ZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvcikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclRvcENv
bG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJT
dHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpj
b2xvcikpOwogCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5
bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGU+KCZSZW5kZXJTdHlsZTo6
Ym9yZGVyVG9wU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wU3R5bGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwgbmV3IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJT
dHlsZT4oJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclJpZ2h0U3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKSk7CkBAIC0x
MDE2LDE3ICsxMDMxLDE3IEBAIENTU1N0eWxlQXBwbHlQcm9wZXJ0eTo6Q1NTU3R5bGVBcHBseVBy
b3AKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBuZXcgQXBw
bHlQcm9wZXJ0eUZvbnRXZWlnaHQoKSk7CiAKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlPdXRsaW5lU3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RXhwYW5kaW5nPEV4cGFuZFZhbHVl
PihuZXcgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8T3V0bGluZUlzQXV0bz4oJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8pLCBuZXcgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8RUJvcmRlclN0eWxlPigmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxl
KSkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgbmV3
IEFwcGx5UHJvcGVydHlDb2xvcjxJbmhlcml0RnJvbVBhcmVudD4oJlJlbmRlclN0eWxlOjpvdXRs
aW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bG9yKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBu
ZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPEluaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6Om91
dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IpKTsKICAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCBuZXcgQXBwbHlQcm9w
ZXJ0eUNvbXB1dGVMZW5ndGg8aW50PigmUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZU9m
ZnNldCkpOwogCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBu
ZXcgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92ZXJmbG93PigmUmVuZGVyU3R5bGU6Om92ZXJmbG93
WCwgJlJlbmRlclN0eWxlOjpzZXRPdmVyZmxvd1gsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE92ZXJm
bG93WCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WSwgbmV3
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvdz4oJlJlbmRlclN0eWxlOjpvdmVyZmxvd1ks
ICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dZLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdmVyZmxv
d1kpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVyZmxvdywgbmV3IEFw
cGx5UHJvcGVydHlFeHBhbmRpbmc8RXhwYW5kVmFsdWU+KHByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eU92ZXJmbG93WCksIHByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WSkpKTsK
IAotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
ciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5
bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Y29sb3IpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXNDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRG
cm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OnRleHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFRleHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgbmV3IEFwcGx5UHJv
cGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xv
ciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5
bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Y29sb3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJv
bVBhcmVudD4oJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNv
bG9yLCAgJlJlbmRlclN0eWxlOjpjb2xvcikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5v
SW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VGV4dEVtcGhhc2lzQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExp
bmtUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIG5ldyBBcHBseVByb3Bl
cnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRl
ZExpbmtUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBuZXcgQXBwbHlQcm9w
ZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOwogCiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VG9wLCBuZXcgQXBwbHlQcm9wZXJ0eUxlbmd0
aDxBdXRvRW5hYmxlZD4oJlJlbmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlSaWdodCwgbmV3IEFwcGx5UHJvcGVydHlMZW5ndGg8QXV0b0VuYWJsZWQ+KCZSZW5k
ZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbE9mZnNldCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gOTcyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsOCBAQCBDU1NTdHlsZVNlbGVjdG9y
OjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxl
cyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgLCBtX3NhbWVPcmlnaW5Pbmx5KGZhbHNl
KQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQp
KQorICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKKyAgICAsIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKICAgICAsIG1fYXBwbHlQcm9wZXJ0
eShDU1NTdHlsZUFwcGx5UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpKQog
ewogICAgIEVsZW1lbnQqIHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC0x
MDg1LDIyICsxMDg3LDkgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rv
cgogCiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAotICAgIGlmIChtX3Bh
cmVudFN0eWxlKSB7CisgICAgaWYgKG1fcGFyZW50U3R5bGUpCiAgICAgICAgIG1fc3R5bGUtPmlu
aGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9yIGxpbmtz
IGFuZCBlbGVtZW50cyBpbnNpZGUgbGlua3Mgd2UgY29tcHV0ZSBib3RoIHRoZSByZWd1bGFyIGFu
ZCB2aXNpdGVkIHN0eWxlLgotICAgICAgICAvLyBGSVhNRTogVmlzaXRlZCBsaW5rIHN0eWxlIGRv
ZXNuJ3QgbmVlZCBhIHNlcGFyYXRlIFJlbmRlclN0eWxlLiBUaGUgZmV3IHByb3BlcnRpZXMgYWxs
b3dlZCBzaG91bGQgYmUgcGFydCBvZiB0aGUgcmVndWxhciBSZW5kZXJTdHlsZSBpbnN0ZWFkLgot
ICAgICAgICBpZiAoZS0+aXNMaW5rKCkpIHsKLSAgICAgICAgICAgIG1fdmlzaXRlZExpbmtTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZShtX3N0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIG1fdmlz
aXRlZExpbmtQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGU7Ci0gICAgICAgIH0gZWxzZSBpZiAo
bV9wYXJlbnRTdHlsZS0+aW5zaWRlTGluaygpKSB7Ci0gICAgICAgICAgICBtX3Zpc2l0ZWRMaW5r
UGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVE
X0xJTkspOwotICAgICAgICAgICAgaWYgKCFtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUpCi0gICAg
ICAgICAgICAgICAgbV92aXNpdGVkTGlua1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZTsKLSAg
ICAgICAgICAgIG1fdmlzaXRlZExpbmtTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIG1fdmlzaXRlZExpbmtTdHlsZS0+aW5oZXJpdEZyb20obV92aXNpdGVkTGlua1Bh
cmVudFN0eWxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7CisgICAgZWxzZSB7CiAgICAgICAg
IG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOwogICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRz
IGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50
IHN0eWxlLgogICAgICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKDApOwpAQCAtMTI4NiwyMyAr
MTI3NSw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICBp
ZiAobV9zdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKICAgICAgICAgbV9zdHls
ZS0+c2V0VW5pcXVlKCk7CiAKLSAgICBpZiAobV92aXNpdGVkTGlua1N0eWxlKSB7Ci0gICAgICAg
IC8vIENvcHkgYW55IHBzZXVkbyBiaXRzIHRoYXQgdGhlIHZpc2l0ZWQgc3R5bGUgaGFzIHRvIHRo
ZSBwcmltYXJ5IHN0eWxlIHNvIHRoYXQgcHNldWRvCi0gICAgICAgIC8vIGVsZW1lbnQgc3R5bGVz
IHdpbGwgY29udGludWUgdG8gd29yayBmb3IgcHNldWRvIGVsZW1lbnRzIGluc2lkZSA6dmlzaXRl
ZCBsaW5rcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBwc2V1ZG8gPSBGSVJTVF9QVUJMSUNfUFNF
VURPSUQ7IHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEOyArK3BzZXVkbykgewotICAg
ICAgICAgICAgaWYgKG1fdmlzaXRlZExpbmtTdHlsZS0+aGFzUHNldWRvU3R5bGUoc3RhdGljX2Nh
c3Q8UHNldWRvSWQ+KHBzZXVkbykpKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc1Bz
ZXVkb1N0eWxlKHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8pKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9lbGVtZW50TGlua1N0YXRlID09IEluc2lkZVVudmlzaXRlZExpbmspCi0gICAg
ICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUgPSAwOyAvLyBXZSBtYWRlIHRoZSBzdHlsZSB0byBh
dm9pZCB0aW1pbmcgYXR0YWNrcy4gSnVzdCB0aHJvdyBpdCBhd2F5IG5vdyB0aGF0IHdlIGRpZCB0
aGF0LCBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0LgotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEFkZCB0aGUgdmlzaXRlZCBzdHlsZSBvZmYgdGhlIG1haW4gc3R5bGUuCi0gICAgICAgICAg
ICBtX3Zpc2l0ZWRMaW5rU3R5bGUtPnNldFN0eWxlVHlwZShWSVNJVEVEX0xJTkspOwotICAgICAg
ICAgICAgbV9zdHlsZS0+YWRkQ2FjaGVkUHNldWRvU3R5bGUobV92aXNpdGVkTGlua1N0eWxlLnJl
bGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV92aXNpdGVkTGlua1BhcmVudFN0eWxlID0g
MDsKLSAgICB9Ci0KICAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4
dCByZXNvbHZlLgogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCkBAIC0xNDI0LDE4ICsx
Mzk2LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIGlu
aXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7CiAgICAgbV9zdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAKLSAgICBpZiAobV9wYXJlbnRTdHlsZSkgewor
ICAgIGlmIChtX3BhcmVudFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3Bh
cmVudFN0eWxlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBsaW5rcyBhbmQgZWxlbWVudHMg
aW5zaWRlIGxpbmtzIHdlIGNvbXB1dGUgYm90aCB0aGUgcmVndWxhciBhbmQgdmlzaXRlZCBzdHls
ZS4KLSAgICAgICAgaWYgKG1fcGFyZW50U3R5bGUtPmluc2lkZUxpbmsoKSkgewotICAgICAgICAg
ICAgbV92aXNpdGVkTGlua1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+Z2V0Q2FjaGVkUHNl
dWRvU3R5bGUoVklTSVRFRF9MSU5LKTsKLSAgICAgICAgICAgIGlmICghbV92aXNpdGVkTGlua1Bh
cmVudFN0eWxlKQotICAgICAgICAgICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSA9IG1f
cGFyZW50U3R5bGU7Ci0gICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUtPmluaGVyaXRGcm9t
KG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSk7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICAvLyBT
aW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJp
bnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhv
c2UgcnVsZXMuCkBAIC0xNDg5LDEzICsxNDUxLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3RvcgogCiAgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNl
ZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7Ci0KLSAgICAvLyBIYW5n
IG91ciB2aXNpdGVkIHN0eWxlIG9mZiBtX3N0eWxlLgotICAgIGlmIChtX3Zpc2l0ZWRMaW5rU3R5
bGUpIHsKLSAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlLT5zZXRTdHlsZVR5cGUoVklTSVRFRF9M
SU5LKTsKLSAgICAgICAgbV9zdHlsZS0+YWRkQ2FjaGVkUHNldWRvU3R5bGUobV92aXNpdGVkTGlu
a1N0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSA9IDA7
Ci0gICAgfQogICAgICAgICAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KICAgICByZXR1
cm4gbV9zdHlsZS5yZWxlYXNlKCk7CkBAIC0xNzQ2LDcgKzE3MDEsNiBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlCiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6dXBk
YXRlRm9udCgpCiB7Ci0gICAgQVNTRVJUKG1fc3R5bGUgIT0gbV92aXNpdGVkTGlua1N0eWxlKTsK
ICAgICBpZiAoIW1fZm9udERpcnR5KQogICAgICAgICByZXR1cm47CiAKQEAgLTIyMDMsOCArMjE1
Nyw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbigKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxh
dGVyCiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3R5bGUgPT0gbV92aXNpdGVkTGlua1N0eWxlKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBtX2xpbmVIZWlnaHRW
YWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KQEAgLTIyMjIsMjMgKzIxNzQsMjIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseURlY2xhcmF0aW9ucwogICAgIGlmIChzdGFydEluZGV4ID09IC0xKQogICAgICAgICByZXR1
cm47CiAKLSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7
Ci0gICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uID0g
bV9tYXRjaGVkRGVjbHNbaV0uc3R5bGVEZWNsYXJhdGlvbjsKLSAgICAgICAgaWYgKG1fdmlzaXRl
ZExpbmtTdHlsZSAmJiBtX21hdGNoZWREZWNsc1tpXS5saW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTdHlsZSBzaG91
bGQgYmUgcGFzc2VkIHRvIGFwcGx5UHJvcGVydHkgYXMgYW4gYXJndW1lbnQsIG5vdCBhcyBhIG1l
bWJlci4KLSAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc2F2ZWRTdHlsZSA9IG1fc3R5
bGUucmVsZWFzZSgpOwotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHNhdmVkUGFyZW50U3R5bGUg
PSBtX3BhcmVudFN0eWxlOwotICAgICAgICAgICAgbV9zdHlsZSA9IG1fdmlzaXRlZExpbmtTdHls
ZTsKLSAgICAgICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFwcGx5RGVjbGFyYXRpb248YXBwbHlGaXJzdD4o
c3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRhbnQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX3N0eWxlID0gc2F2ZWRTdHlsZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtX3BhcmVudFN0
eWxlID0gc2F2ZWRQYXJlbnRTdHlsZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9tYXRjaGVk
RGVjbHNbaV0ubGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKQorICAg
IGlmIChtX2VsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBzdGFydElu
ZGV4OyBpIDw9IGVuZEluZGV4OyBpKyspIHsKKyAgICAgICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uID0gbV9tYXRjaGVkRGVjbHNbaV0uc3R5bGVEZWNs
YXJhdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRE
ZWNsc1tpXS5saW5rTWF0Y2hUeXBlOworICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJl
IG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5n
ZXMgaW4gbWFueSBwbGFjZXMuCisgICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKKyAgICAg
ICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKwogICAgICAgICAgICAgYXBwbHlEZWNs
YXJhdGlvbjxhcHBseUZpcnN0PihzdHlsZURlY2xhcmF0aW9uLCBpc0ltcG9ydGFudCk7ICAgICAg
ICAKKyAgICAgICAgfQorICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRy
dWU7CisgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9
IGVuZEluZGV4OyBpKyspICAgICAgICAKKyAgICAgICAgYXBwbHlEZWNsYXJhdGlvbjxhcHBseUZp
cnN0PihtX21hdGNoZWREZWNsc1tpXS5zdHlsZURlY2xhcmF0aW9uLCBpc0ltcG9ydGFudCk7CiB9
CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMs
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSkKQEAgLTI0MjMsNyArMjM3NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAmJiB2YWx1ZVR5cGUg
PT0gQ1NTVmFsdWU6OkNTU19JTkhFUklUOwogICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWVUeXBl
ID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCB8fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZVR5cGUg
PT0gQ1NTVmFsdWU6OkNTU19JTkhFUklUKTsKIAotICAgIGlmIChtX3N0eWxlID09IG1fdmlzaXRl
ZExpbmtTdHlsZSAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CisgICAgaWYg
KCFhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIWFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAg
ICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkg
dGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTQ5NjYsNyArNDkxNyw3IEBAIHN0YXRpYyBDb2xvciBjb2xvckZvckNTU1ZhbHVlKGludCBjc3NW
YWwKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Db2xvcihj
c3NWYWx1ZUlkKTsKIH0KIAotQ29sb3IgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlKSBjb25zdAorQ29s
b3IgQ1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAogewog
ICAgIENvbG9yIGNvbDsKICAgICBpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KTsKQEAgLTQ5NzQsNyArNDkyNSw3IEBAIENvbG9yIENTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9y
RnJvbVByaW0KICAgICAgICAgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0VGV4dCkKICAgICAg
ICAgICAgIGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CiAgICAgICAg
IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0TGluaykKLSAgICAgICAgICAgIGNvbCA9
IG1fZWxlbWVudC0+aXNMaW5rKCkgJiYgbV9zdHlsZSA9PSBtX3Zpc2l0ZWRMaW5rU3R5bGUgPyBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgICAgICBjb2wgPSAobV9lbGVtZW50LT5pc0xp
bmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpc2l0ZWRM
aW5rQ29sb3IoKSA6IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgICAg
IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0QWN0aXZlbGluaykKICAgICAgICAgICAg
IGNvbCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgICAg
IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDk3MjQ4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTcz
LDcgKzE3Myw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMo
KTsKIAotICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlKikgY29uc3Q7CisgICAgQ29sb3IgZ2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCiAgICAg
Ym9vbCBoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsK
IApAQCAtMjYwLDYgKzI2MCw5IEBAIHB1YmxpYzoKIAogICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1h
Z2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKICAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIAorICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGU7IH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZ
ZXRBdmFpbGFibGU7CkBAIC0zMzQsOSArMzM3LDcgQEAgcHJpdmF0ZToKICAgICBTZWxlY3RvckNo
ZWNrZXIgbV9jaGVja2VyOwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwotICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV92aXNpdGVkTGlua1N0eWxlOwogICAgIFJlbmRlclN0eWxl
KiBtX3BhcmVudFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5
bGU7CiAgICAgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKICAgICBFbGVtZW50KiBt
X2VsZW1lbnQ7CiAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwpAQCAtMzUxLDYg
KzM1Miw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Kj4gbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsczsKICAgICBWZWN0b3I8TWVkaWFRdWVy
eVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAorICAgIGJv
b2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CisgICAgYm9vbCBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBt
X2FwcGx5UHJvcGVydHk7CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlQXBwbHlQcm9w
ZXJ0eTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCwxMiBAQCBpZiAoaXNJbml0aWFsKSB7
IFwKICAgICByZXR1cm47IFwKIH0KIAorI2RlZmluZSBBUFBMWV9WSVNJVEVEX0xJTktfVkFMSURf
UEFJTlQoc2V0dGVyLCB2aXNpdGVkU2V0dGVyLCB0eXBlLCBjb2xvciwgdXJsKSBcCitpZiAoYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpIFwKKyAgICBzdmdzdHlsZS0+c2V0dGVyKHR5cGUs
IGNvbG9yLCB1cmwpOyBcCitpZiAoYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKSBc
CisgICAgc3Znc3R5bGUtPnZpc2l0ZWRTZXR0ZXIodHlwZSwgY29sb3IpOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBmbG9hdCByb3VuZFRvTmVhcmVzdEdseXBoT3JpZW50YXRpb25B
bmdsZShmbG9hdCBhbmdsZSkKQEAgLTIyNiwxNiArMjMyLDE2IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlTVkdQcm9wZXJ0eSgKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5o
ZXJpdCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRT
dHlsZSA9IG1fcGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5
bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgp
KTsKKyAgICAgICAgICAgICAgICBBUFBMWV9WSVNJVEVEX0xJTktfVkFMSURfUEFJTlQoc2V0Rmls
bFBhaW50LCBzZXRWaXNpdGVkTGlua0ZpbGxQYWludCwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWlu
dFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxl
LT5maWxsUGFpbnRVcmkoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNW
R1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxGaWxsUGFpbnRVcmkoKSk7CisgICAgICAgICAgICAgICAgQVBQTFlfVklTSVRFRF9MSU5L
X1ZBTElEX1BBSU5UKHNldEZpbGxQYWludCwgc2V0VmlzaXRlZExpbmtGaWxsUGFpbnQsIFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlh
bEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1Bh
aW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCkp
OworICAgICAgICAgICAgICAgIEFQUExZX1ZJU0lURURfTElOS19WQUxJRF9QQUlOVChzZXRGaWxs
UGFpbnQsIHNldFZpc2l0ZWRMaW5rRmlsbFBhaW50LCBzdmdQYWludC0+cGFpbnRUeXBlKCksIGNv
bG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQ
YWludC0+dXJpKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI0MywxNiArMjQ5LDE2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQ
cm9wZXJ0eSgKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAg
ICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IG1fcGFyZW50
U3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBh
aW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0
cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VXJpKCkpOworICAg
ICAgICAgICAgICAgIEFQUExZX1ZJU0lURURfTElOS19WQUxJRF9QQUlOVChzZXRTdHJva2VQYWlu
dCwgc2V0VmlzaXRlZExpbmtTdHJva2VQYWludCwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHls
ZS0+c3Ryb2tlUGFpbnRVcmkoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlw
ZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpKTsKKyAgICAgICAgICAgICAgICBBUFBMWV9W
SVNJVEVEX0xJTktfVkFMSURfUEFJTlQoc2V0U3Ryb2tlUGFpbnQsIHNldFZpc2l0ZWRMaW5rU3Ry
b2tlUGFpbnQsIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZVBhaW50VXJpKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAg
ICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWlu
dFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgbV9zdHlsZS0+Y29s
b3IoKSksIHN2Z1BhaW50LT51cmkoKSk7CisgICAgICAgICAgICAgICAgQVBQTFlfVklTSVRFRF9M
SU5LX1ZBTElEX1BBSU5UKHNldFN0cm9rZVBhaW50LCBzZXRWaXNpdGVkTGlua1N0cm9rZVBhaW50
LCBzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFp
bnQsIG1fc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDE3LDExICsxMDE3LDcgQEAgYm9vbCBFbGVtZW50Ojpwc2V1ZG9TdHls
ZUNhY2hlSXNJbnZhbGlkKAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGVTaXplOyAr
K2kpIHsKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdQc2V1ZG9TdHlsZTsKICAgICAg
ICAgUHNldWRvSWQgcHNldWRvSWQgPSBwc2V1ZG9TdHlsZUNhY2hlLT5hdChpKS0+c3R5bGVUeXBl
KCk7Ci0gICAgICAgIGlmIChwc2V1ZG9JZCA9PSBWSVNJVEVEX0xJTkspIHsKLSAgICAgICAgICAg
IG5ld1BzZXVkb1N0eWxlID0gIG5ld1N0eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJVEVE
X0xJTkspOyAvLyBUaGlzIHBzZXVkby1zdHlsZSB3YXMgYWdncmVzc2l2ZWx5IGNvbXB1dGVkIGFs
cmVhZHkgd2hlbiB3ZSBmaXJzdCBjYWxsZWQgc3R5bGVGb3JFbGVtZW50IG9uIHRoZSBuZXcgc3R5
bGUuCi0gICAgICAgICAgICBpZiAoIW5ld1BzZXVkb1N0eWxlIHx8ICpuZXdQc2V1ZG9TdHlsZSAh
PSAqcHNldWRvU3R5bGVDYWNoZS0+YXQoaSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0gZWxzZSBpZiAocHNldWRvSWQgPT0gRklSU1RfTElORSB8fCBwc2V1ZG9JZCA9
PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkKKyAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJUlNUX0xJ
TkUgfHwgcHNldWRvSWQgPT0gRklSU1RfTElORV9JTkhFUklURUQpCiAgICAgICAgICAgICBuZXdQ
c2V1ZG9TdHlsZSA9IHJlbmRlcmVyKCktPnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUobmV3U3R5bGUp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdQc2V1ZG9TdHlsZSA9IHJlbmRlcmVyKCkt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQsIG5ld1N0eWxlLCBuZXdTdHlsZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJ
KHJldmlzaW9uIDk3MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsMTEgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGUoUHNldQogCiBSZW5kZXJTdHlsZSogUmVuZGVyU3R5
bGU6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBpZCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoc3R5bGVUeXBlKCkgIT0gVklTSVRFRF9MSU5LKTsKLQogICAgIGlmICghbV9jYWNoZWRQc2V1
ZG9TdHlsZXMgfHwgIW1fY2FjaGVkUHNldWRvU3R5bGVzLT5zaXplKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgaWYgKHN0eWxlVHlwZSgpICE9IE5PUFNFVURPKSB7Ci0gICAgICAgIGlmIChw
aWQgPT0gVklTSVRFRF9MSU5LKQotICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVkUHNldWRvU3R5
bGVzLT5hdCgwKS0+c3R5bGVUeXBlKCkgPT0gVklTSVRFRF9MSU5LID8gbV9jYWNoZWRQc2V1ZG9T
dHlsZXMtPmF0KDApLmdldCgpIDogMDsKKyAgICBpZiAoc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8p
IAogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY2FjaGVkUHNldWRvU3R5bGVzLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZW5kZXJTdHls
ZSogcHNldWRvU3R5bGUgPSBtX2NhY2hlZFBzZXVkb1N0eWxlcy0+YXQoaSkuZ2V0KCk7CkBAIC0x
MTIzLDQ2ICsxMTE4LDQ2IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmdldFNoYWRvd1ZlcnRpY2FsRXh0
ZW4KICAgICB9CiB9CiAKLUNvbG9yIFJlbmRlclN0eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWNr
KGludCBjb2xvclByb3BlcnR5KSBjb25zdAorQ29sb3IgUmVuZGVyU3R5bGU6OmNvbG9ySW5jbHVk
aW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHksIGJvb2wgdmlzaXRlZExpbmspIGNvbnN0CiB7
CiAgICAgQ29sb3IgcmVzdWx0OwogICAgIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSA9IEJOT05F
OwogICAgIHN3aXRjaCAoY29sb3JQcm9wZXJ0eSkgewogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3I6Ci0gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kQ29sb3IoKTsgLy8gQmFja2dy
b3VuZCBjb2xvciBkb2Vzbid0IGZhbGwgYmFjay4KKyAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5r
ID8gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IgOiBi
YWNrZ3JvdW5kQ29sb3IoKTsgLy8gQmFja2dyb3VuZCBjb2xvciBkb2Vzbid0IGZhbGwgYmFjay4K
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgICAgICByZXN1bHQgPSBi
b3JkZXJMZWZ0Q29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0gdmlzaXRlZExpbmsgPyByYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV92aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciA6IGJvcmRlckxlZnRD
b2xvcigpOwogICAgICAgICBib3JkZXJTdHlsZSA9IGJvcmRlckxlZnRTdHlsZSgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAg
cmVzdWx0ID0gYm9yZGVyUmlnaHRDb2xvcigpOworICAgICAgICByZXN1bHQgPSB2aXNpdGVkTGlu
ayA/IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Zpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciA6
IGJvcmRlclJpZ2h0Q29sb3IoKTsKICAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJSaWdodFN0
eWxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xv
cjoKLSAgICAgICAgcmVzdWx0ID0gYm9yZGVyVG9wQ29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0g
dmlzaXRlZExpbmsgPyByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV92aXNpdGVkTGlua0JvcmRlclRv
cENvbG9yIDogYm9yZGVyVG9wQ29sb3IoKTsKICAgICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJU
b3BTdHlsZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tQ29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IGJvcmRlckJvdHRvbUNvbG9yKCk7CisgICAgICAg
IHJlc3VsdCA9IHZpc2l0ZWRMaW5rID8gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdmlzaXRlZExp
bmtCb3JkZXJCb3R0b21Db2xvciA6IGJvcmRlckJvdHRvbUNvbG9yKCk7CiAgICAgICAgIGJvcmRl
clN0eWxlID0gYm9yZGVyQm90dG9tU3R5bGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICByZXN1bHQgPSBjb2xvcigpOworICAgICAgICByZXN1
bHQgPSB2aXNpdGVkTGluayA/IGluaGVyaXRlZC0+dmlzaXRlZExpbmtDb2xvciA6IGNvbG9yKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAg
ICAgIHJlc3VsdCA9IG91dGxpbmVDb2xvcigpOworICAgICAgICByZXN1bHQgPSB2aXNpdGVkTGlu
ayA/IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Zpc2l0ZWRMaW5rT3V0bGluZUNvbG9yIDogb3V0
bGluZUNvbG9yKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlQ29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IGNvbHVtblJ1bGVDb2xvcigpOworICAg
ICAgICByZXN1bHQgPSB2aXNpdGVkTGluayA/IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRp
Q29sLT5tX3Zpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yIDogY29sdW1uUnVsZUNvbG9yKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xv
cjoKLSAgICAgICAgcmVzdWx0ID0gdGV4dEVtcGhhc2lzQ29sb3IoKTsKKyAgICAgICAgcmVzdWx0
ID0gdmlzaXRlZExpbmsgPyByYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0RW1waGFz
aXNDb2xvciA6IHRleHRFbXBoYXNpc0NvbG9yKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgotICAgICAgICByZXN1bHQgPSB0ZXh0Rmls
bENvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHZpc2l0ZWRMaW5rID8gcmFyZUluaGVyaXRlZERh
dGEtPnZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciA6IHRleHRGaWxsQ29sb3IoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICAg
ICAgcmVzdWx0ID0gdGV4dFN0cm9rZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHZpc2l0ZWRM
aW5rID8gcmFyZUluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yIDogdGV4
dFN0cm9rZUNvbG9yKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE3MCwyNSArMTE2NSwyMSBAQCBDb2xvciBSZW5kZXJT
dHlsZTo6Y29sb3JJbmNsdWRpbmdGYWxsYmFjCiAgICAgfQogCiAgICAgaWYgKCFyZXN1bHQuaXNW
YWxpZCgpKSB7Ci0gICAgICAgIGlmIChib3JkZXJTdHlsZSA9PSBJTlNFVCB8fCBib3JkZXJTdHls
ZSA9PSBPVVRTRVQgfHwgYm9yZGVyU3R5bGUgPT0gUklER0UgfHwgYm9yZGVyU3R5bGUgPT0gR1JP
T1ZFKQorICAgICAgICBpZiAoIXZpc2l0ZWRMaW5rICYmIChib3JkZXJTdHlsZSA9PSBJTlNFVCB8
fCBib3JkZXJTdHlsZSA9PSBPVVRTRVQgfHwgYm9yZGVyU3R5bGUgPT0gUklER0UgfHwgYm9yZGVy
U3R5bGUgPT0gR1JPT1ZFKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXRSR0IoMjM4LCAyMzgsIDIz
OCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbG9yKCk7CisgICAgICAg
ICAgICByZXN1bHQgPSB2aXNpdGVkTGluayA/IGluaGVyaXRlZC0+dmlzaXRlZExpbmtDb2xvciA6
IGNvbG9yKCk7CiAgICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ29sb3IgUmVuZGVy
U3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29sb3JQcm9wZXJ0eSkgY29uc3QKIHsK
LSAgICBDb2xvciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soY29sb3JQ
cm9wZXJ0eSk7CisgICAgQ29sb3IgdW52aXNpdGVkQ29sb3IgPSBjb2xvckluY2x1ZGluZ0ZhbGxi
YWNrKGNvbG9yUHJvcGVydHksIGZhbHNlKTsKICAgICBpZiAoaW5zaWRlTGluaygpICE9IEluc2lk
ZVZpc2l0ZWRMaW5rKQogICAgICAgICByZXR1cm4gdW52aXNpdGVkQ29sb3I7CiAKLSAgICBSZW5k
ZXJTdHlsZSogdmlzaXRlZFN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoVklTSVRFRF9MSU5L
KTsKLSAgICBpZiAoIXZpc2l0ZWRTdHlsZSkKLSAgICAgICAgcmV0dXJuIHVudmlzaXRlZENvbG9y
OwotICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRTdHlsZS0+Y29sb3JJbmNsdWRpbmdG
YWxsYmFjayhjb2xvclByb3BlcnR5KTsKKyAgICBDb2xvciB2aXNpdGVkQ29sb3IgPSBjb2xvcklu
Y2x1ZGluZ0ZhbGxiYWNrKGNvbG9yUHJvcGVydHksIHRydWUpOwogCiAgICAgLy8gRklYTUU6IFRl
Y2huaWNhbGx5IHNvbWVvbmUgY291bGQgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBjb2xvciB0cmFu
c3BhcmVudCwgYnV0IGZvciBub3cgd2UnbGwganVzdAogICAgIC8vIGFzc3VtZSB0aGF0IGlmIHRo
ZSBiYWNrZ3JvdW5kIGNvbG9yIGlzIHRyYW5zcGFyZW50IHRoYXQgaXQgd2Fzbid0IHNldC4gTm90
ZSB0aGF0IGl0J3Mgd2VpcmQgdGhhdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0ODMsNiAr
MTQ4MywxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGlu
aXRpYWxGaWx0ZXIoKSB7IERFRklORV9TVEFUSUNfTE9DQUwoRmlsdGVyT3BlcmF0aW9ucywgb3Bz
LCAoKSk7IHJldHVybiBvcHM7IH0KICNlbmRpZgogcHJpdmF0ZToKKyAgICB2b2lkIHNldFZpc2l0
ZWRMaW5rQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihpbmhlcml0ZWQsIHZpc2l0ZWRM
aW5rQ29sb3IsIHYpIH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdmlzaXRlZExp
bmtCYWNrZ3JvdW5kQ29sb3IsIHYpIH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyTGVm
dENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1f
dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsIHYpIH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5r
Qm9yZGVyUmlnaHRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0
ZWREYXRhLCBtX3Zpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciwgdikgfQorICAgIHZvaWQgc2V0
VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHJh
cmVOb25Jbmhlcml0ZWREYXRhLCBtX3Zpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsIHYpIH0K
KyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsg
U0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV92aXNpdGVkTGlua0JvcmRlclRvcENvbG9y
LCB2KSB9CisgICAgdm9pZCBzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvcihjb25zdCBDb2xvciYg
dikgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3Zpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCB2KSB9CisgICAgdm9pZCBzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcihjb25zdCBD
b2xvciYgdikgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX211bHRp
Q29sLCBtX3Zpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCB2KSB9CisgICAgdm9pZCBzZXRWaXNp
dGVkTGlua1RleHRFbXBoYXNpc0NvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZUlu
aGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29sb3IsIHYpIH0KKyAgICB2b2lk
IHNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHJh
cmVJbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua1RleHRGaWxsQ29sb3IsIHYpIH0KKyAgICB2b2lk
IHNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIo
cmFyZUluaGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCB2KSB9CisKICAg
ICB2b2lkIGluaGVyaXRVbmljb2RlQmlkaUZyb20oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudCkg
eyBub25pbmhlcml0ZWRfZmxhZ3MuX3VuaWNvZGVCaWRpID0gcGFyZW50LT5ub25pbmhlcml0ZWRf
ZmxhZ3MuX3VuaWNvZGVCaWRpOyB9CiAgICAgdm9pZCBnZXRTaGFkb3dFeHRlbnQoY29uc3QgU2hh
ZG93RGF0YSosIExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYgcmlnaHQsIExheW91dFVuaXQm
IGJvdHRvbSwgTGF5b3V0VW5pdCYgbGVmdCkgY29uc3Q7CiAgICAgdm9pZCBnZXRTaGFkb3dIb3Jp
em9udGFsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRV
bml0JiByaWdodCkgY29uc3Q7CkBAIC0xNTIxLDcgKzE1MzMsNyBAQCBwcml2YXRlOgogICAgIGNv
bnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERh
dGEtPnRleHRGaWxsQ29sb3I7IH0KICAgICBjb25zdCBDb2xvciYgdGV4dFN0cm9rZUNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQogICAg
IAotICAgIENvbG9yIGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHkpIGNv
bnN0OworICAgIENvbG9yIGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHks
IGJvb2wgdmlzaXRlZExpbmspIGNvbnN0OwogCiAjaWYgRU5BQkxFKFNWRykKICAgICBjb25zdCBD
b2xvciYgc3RvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS0+c3RvcENvbG9yKCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0
YW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZUNvbnN0YW50cy5oCShyZXZpc2lvbiA5NzI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw3ICs3NSw3IEBAIGVudW0gUHNldWRvSWQgewogICAgIE5PUFNFVURPLCBGSVJTVF9MSU5FLCBG
SVJTVF9MRVRURVIsIEJFRk9SRSwgQUZURVIsIFNFTEVDVElPTiwgRklSU1RfTElORV9JTkhFUklU
RUQsIFNDUk9MTEJBUiwKICAgICAvLyBJbnRlcm5hbCBJRHMgZm9sbG93OgogICAgIFNDUk9MTEJB
Ul9USFVNQiwgU0NST0xMQkFSX0JVVFRPTiwgU0NST0xMQkFSX1RSQUNLLCBTQ1JPTExCQVJfVFJB
Q0tfUElFQ0UsIFNDUk9MTEJBUl9DT1JORVIsIFJFU0laRVIsCi0gICAgSU5QVVRfTElTVF9CVVRU
T04sIFZJU0lURURfTElOSywKKyAgICBJTlBVVF9MSVNUX0JVVFRPTiwKICAgICBBRlRFUl9MQVNU
X0lOVEVSTkFMX1BTRVVET0lELAogICAgIEZVTExfU0NSRUVOLCBGVUxMX1NDUkVFTl9ET0NVTUVO
VCwgRlVMTF9TQ1JFRU5fQU5DRVNUT1IsIEFOSU1BVElOR19GVUxMX1NDUkVFTl9UUkFOU0lUSU9O
LAogICAgIEZJUlNUX1BVQkxJQ19QU0VVRE9JRCA9IEZJUlNUX0xJTkUsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkocmV2aXNpb24g
OTcyNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGlm
ICghKGZpbGwtPnBhaW50VXJpID09IHVyaSkpCiAgICAgICAgICAgICBmaWxsLmFjY2VzcygpLT5w
YWludFVyaSA9IHVyaTsKICAgICB9CisgICAgCisgICAgdm9pZCBzZXRWaXNpdGVkTGlua0ZpbGxQ
YWludChTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHR5cGUsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAg
ICB7CisgICAgICAgIGlmICghKGZpbGwtPnBhaW50VHlwZSA9PSB0eXBlKSkKKyAgICAgICAgICAg
IGZpbGwuYWNjZXNzKCktPnZpc2l0ZWRMaW5rUGFpbnRUeXBlID0gdHlwZTsKKyAgICAgICAgaWYg
KCEoZmlsbC0+cGFpbnRDb2xvciA9PSBjb2xvcikpCisgICAgICAgICAgICBmaWxsLmFjY2Vzcygp
LT52aXNpdGVkTGlua1BhaW50Q29sb3IgPSBjb2xvcjsKKyAgICB9CiAKICAgICB2b2lkIHNldFN0
cm9rZU9wYWNpdHkoZmxvYXQgb2JqKQogICAgIHsKQEAgLTE3OCw2ICsxODYsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgc3Ryb2tlLmFjY2VzcygpLT5wYWludFVyaSA9IHVyaTsKICAgICB9CiAK
KyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnQoU1ZHUGFpbnQ6OlNWR1BhaW50VHlw
ZSB0eXBlLCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBpZiAoIShzdHJva2Ut
PnBhaW50VHlwZSA9PSB0eXBlKSkKKyAgICAgICAgICAgIHN0cm9rZS5hY2Nlc3MoKS0+dmlzaXRl
ZExpbmtQYWludFR5cGUgPSB0eXBlOworICAgICAgICBpZiAoIShzdHJva2UtPnBhaW50Q29sb3Ig
PT0gY29sb3IpKQorICAgICAgICAgICAgc3Ryb2tlLmFjY2VzcygpLT52aXNpdGVkTGlua1BhaW50
Q29sb3IgPSBjb2xvcjsKKyAgICB9CisKICAgICB2b2lkIHNldFN0cm9rZURhc2hBcnJheShjb25z
dCBWZWN0b3I8U1ZHTGVuZ3RoPiYgb2JqKQogICAgIHsKICAgICAgICAgaWYgKCEoc3Ryb2tlLT5k
YXNoQXJyYXkgPT0gb2JqKSkKQEAgLTMyNyw2ICszNDMsMTEgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBtYXJrZXJTdGFydFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkUmVzb3VyY2Vz
LT5tYXJrZXJTdGFydDsgfQogICAgIFN0cmluZyBtYXJrZXJNaWRSZXNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZFJlc291cmNlcy0+bWFya2VyTWlkOyB9CiAgICAgU3RyaW5nIG1hcmtl
ckVuZFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkUmVzb3VyY2VzLT5tYXJrZXJF
bmQ7IH0KKyAgICAKKyAgICBjb25zdCBTVkdQYWludDo6U1ZHUGFpbnRUeXBlJiB2aXNpdGVkTGlu
a0ZpbGxQYWludFR5cGUoKSBjb25zdCB7IHJldHVybiBmaWxsLT52aXNpdGVkTGlua1BhaW50VHlw
ZTsgfQorICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua0ZpbGxQYWludENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gZmlsbC0+dmlzaXRlZExpbmtQYWludENvbG9yOyB9CisgICAgY29uc3QgU1ZHUGFp
bnQ6OlNWR1BhaW50VHlwZSYgdmlzaXRlZExpbmtTdHJva2VQYWludFR5cGUoKSBjb25zdCB7IHJl
dHVybiBzdHJva2UtPnZpc2l0ZWRMaW5rUGFpbnRUeXBlOyB9CisgICAgY29uc3QgQ29sb3ImIHZp
c2l0ZWRMaW5rU3Ryb2tlUGFpbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN0cm9rZS0+dmlzaXRl
ZExpbmtQYWludENvbG9yOyB9CiAKICAgICAvLyBjb252ZW5pZW5jZQogICAgIGJvb2wgaGFzQ2xp
cHBlcigpIGNvbnN0IHsgcmV0dXJuICFjbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJT
dHlsZURlZnMuY3BwCShyZXZpc2lvbiA5NzI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw4IEBAIFN0eWxlRmlsbERhdGE6OlN0eWxlRmlsbERhdGEoKQogICAgICwgcGFpbnRUeXBlKFNW
R1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpKQogICAgICwgcGFpbnRDb2xvcihT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCkpCiAgICAgLCBwYWludFVyaShT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpKQorICAgICwgdmlzaXRlZExpbmtQ
YWludFR5cGUoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSkKKyAgICAs
IHZpc2l0ZWRMaW5rUGFpbnRDb2xvcihTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENv
bG9yKCkpCiB7CiB9CiAKQEAgLTQ5LDYgKzUxLDggQEAgU3R5bGVGaWxsRGF0YTo6U3R5bGVGaWxs
RGF0YShjb25zdCBTdHlsZQogICAgICwgcGFpbnRUeXBlKG90aGVyLnBhaW50VHlwZSkKICAgICAs
IHBhaW50Q29sb3Iob3RoZXIucGFpbnRDb2xvcikKICAgICAsIHBhaW50VXJpKG90aGVyLnBhaW50
VXJpKQorICAgICwgdmlzaXRlZExpbmtQYWludFR5cGUob3RoZXIudmlzaXRlZExpbmtQYWludFR5
cGUpCisgICAgLCB2aXNpdGVkTGlua1BhaW50Q29sb3Iob3RoZXIudmlzaXRlZExpbmtQYWludENv
bG9yKQogewogfQogCkBAIC01Nyw3ICs2MSw5IEBAIGJvb2wgU3R5bGVGaWxsRGF0YTo6b3BlcmF0
b3I9PShjb25zdCBTdHkKICAgICByZXR1cm4gb3BhY2l0eSA9PSBvdGhlci5vcGFjaXR5IAogICAg
ICAgICAmJiBwYWludFR5cGUgPT0gb3RoZXIucGFpbnRUeXBlCiAgICAgICAgICYmIHBhaW50Q29s
b3IgPT0gb3RoZXIucGFpbnRDb2xvcgotICAgICAgICAmJiBwYWludFVyaSA9PSBvdGhlci5wYWlu
dFVyaTsKKyAgICAgICAgJiYgcGFpbnRVcmkgPT0gb3RoZXIucGFpbnRVcmkKKyAgICAgICAgJiYg
dmlzaXRlZExpbmtQYWludFR5cGUgPT0gb3RoZXIudmlzaXRlZExpbmtQYWludFR5cGUKKyAgICAg
ICAgJiYgdmlzaXRlZExpbmtQYWludENvbG9yID09IG90aGVyLnZpc2l0ZWRMaW5rUGFpbnRDb2xv
cjsKIH0KIAogU3R5bGVTdHJva2VEYXRhOjpTdHlsZVN0cm9rZURhdGEoKQpAQCAtNjksNiArNzUs
OCBAQCBTdHlsZVN0cm9rZURhdGE6OlN0eWxlU3Ryb2tlRGF0YSgpCiAgICAgLCBwYWludFR5cGUo
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSkKICAgICAsIHBhaW50Q29s
b3IoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCkpCiAgICAgLCBwYWlu
dFVyaShTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCkpCisgICAgLCB2aXNp
dGVkTGlua1BhaW50VHlwZShTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgp
KQorICAgICwgdmlzaXRlZExpbmtQYWludENvbG9yKFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlUGFpbnRDb2xvcigpKQogewogfQogCkBAIC04Miw2ICs5MCw4IEBAIFN0eWxlU3Ryb2tlRGF0
YTo6U3R5bGVTdHJva2VEYXRhKGNvbnN0IFMKICAgICAsIHBhaW50VHlwZShvdGhlci5wYWludFR5
cGUpCiAgICAgLCBwYWludENvbG9yKG90aGVyLnBhaW50Q29sb3IpCiAgICAgLCBwYWludFVyaShv
dGhlci5wYWludFVyaSkKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRUeXBlKG90aGVyLnZpc2l0ZWRM
aW5rUGFpbnRUeXBlKQorICAgICwgdmlzaXRlZExpbmtQYWludENvbG9yKG90aGVyLnZpc2l0ZWRM
aW5rUGFpbnRDb2xvcikKIHsKIH0KIApAQCAtOTQsNyArMTA0LDkgQEAgYm9vbCBTdHlsZVN0cm9r
ZURhdGE6Om9wZXJhdG9yPT0oY29uc3QgUwogICAgICAgICAmJiBkYXNoQXJyYXkgPT0gb3RoZXIu
ZGFzaEFycmF5CiAgICAgICAgICYmIHBhaW50VHlwZSA9PSBvdGhlci5wYWludFR5cGUKICAgICAg
ICAgJiYgcGFpbnRDb2xvciA9PSBvdGhlci5wYWludENvbG9yCi0gICAgICAgICYmIHBhaW50VXJp
ID09IG90aGVyLnBhaW50VXJpOworICAgICAgICAmJiBwYWludFVyaSA9PSBvdGhlci5wYWludFVy
aQorICAgICAgICAmJiB2aXNpdGVkTGlua1BhaW50VHlwZSA9PSBvdGhlci52aXNpdGVkTGlua1Bh
aW50VHlwZQorICAgICAgICAmJiB2aXNpdGVkTGlua1BhaW50Q29sb3IgPT0gb3RoZXIudmlzaXRl
ZExpbmtQYWludENvbG9yOwogfQogCiBTdHlsZVN0b3BEYXRhOjpTdHlsZVN0b3BEYXRhKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5
bGVEZWZzLmgJKHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHBh
aW50VHlwZTsKICAgICAgICAgQ29sb3IgcGFpbnRDb2xvcjsKICAgICAgICAgU3RyaW5nIHBhaW50
VXJpOworICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHZpc2l0ZWRMaW5rUGFpbnRUeXBl
OworICAgICAgICBDb2xvciB2aXNpdGVkTGlua1BhaW50Q29sb3I7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBTdHlsZUZpbGxEYXRhKCk7CkBAIC0xMzAsNiArMTMyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHBhaW50VHlwZTsKICAgICAg
ICAgQ29sb3IgcGFpbnRDb2xvcjsKICAgICAgICAgU3RyaW5nIHBhaW50VXJpOworICAgICAgICBT
VkdQYWludDo6U1ZHUGFpbnRUeXBlIHZpc2l0ZWRMaW5rUGFpbnRUeXBlOworICAgICAgICBDb2xv
ciB2aXNpdGVkTGlua1BhaW50Q29sb3I7CiAKICAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAg
IFN0eWxlU3Ryb2tlRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDk3MjQxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgU3R5bGVJbmhlcml0ZWREYXRhOjpTdHlsZUlu
aGVyaXRlZERhdGEoKQogICAgICwgbGluZV9oZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpCiAgICAgLCBsaXN0X3N0eWxlX2ltYWdlKFJlbmRlclN0eWxlOjppbml0aWFsTGlz
dFN0eWxlSW1hZ2UoKSkKICAgICAsIGNvbG9yKFJlbmRlclN0eWxlOjppbml0aWFsQ29sb3IoKSkK
KyAgICAsIHZpc2l0ZWRMaW5rQ29sb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDb2xvcigpKQogewog
fQogCkBAIC00OCw2ICs0OSw3IEBAIFN0eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZWRE
YXRhKGMKICAgICAsIGxpc3Rfc3R5bGVfaW1hZ2Uoby5saXN0X3N0eWxlX2ltYWdlKQogICAgICwg
Zm9udChvLmZvbnQpCiAgICAgLCBjb2xvcihvLmNvbG9yKQorICAgICwgdmlzaXRlZExpbmtDb2xv
cihvLnZpc2l0ZWRMaW5rQ29sb3IpCiB7CiB9CiAKQEAgLTU4LDYgKzYwLDcgQEAgYm9vbCBTdHls
ZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29ucwogICAgICAgICBTdHlsZUltYWdlOjppbWFn
ZXNFcXVpdmFsZW50KGxpc3Rfc3R5bGVfaW1hZ2UuZ2V0KCksIG8ubGlzdF9zdHlsZV9pbWFnZS5n
ZXQoKSkgJiYKICAgICAgICAgZm9udCA9PSBvLmZvbnQgJiYKICAgICAgICAgY29sb3IgPT0gby5j
b2xvciAmJgorICAgICAgICB2aXNpdGVkTGlua0NvbG9yID09IG8udmlzaXRlZExpbmtDb2xvciAm
JgogICAgICAgICBob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3Jk
ZXJfc3BhY2luZyAmJgogICAgICAgICB2ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyA9PSBvLnZlcnRp
Y2FsX2JvcmRlcl9zcGFjaW5nOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAkocmV2aXNpb24gOTcyNDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogCiAgICAgRm9udCBmb250OwogICAg
IENvbG9yIGNvbG9yOworICAgIENvbG9yIHZpc2l0ZWRMaW5rQ29sb3I7CiAKIHByaXZhdGU6CiAg
ICAgU3R5bGVJbmhlcml0ZWREYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpQ29sRGF0YS5jcHAJKHJldmlzaW9uIDk3MjQxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBTdHlsZU11bHRpQ29sRGF0YTo6U3R5bGVN
dWx0aUNvbERhdGEoY29uCiAgICAgLCBtX2NvdW50KG8ubV9jb3VudCkKICAgICAsIG1fZ2FwKG8u
bV9nYXApCiAgICAgLCBtX3J1bGUoby5tX3J1bGUpCisgICAgLCBtX3Zpc2l0ZWRMaW5rQ29sdW1u
UnVsZUNvbG9yKG8ubV92aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcikKICAgICAsIG1fYXV0b1dp
ZHRoKG8ubV9hdXRvV2lkdGgpCiAgICAgLCBtX2F1dG9Db3VudChvLm1fYXV0b0NvdW50KQogICAg
ICwgbV9ub3JtYWxHYXAoby5tX25vcm1hbEdhcCkKQEAgLTU5LDcgKzYwLDcgQEAgU3R5bGVNdWx0
aUNvbERhdGE6OlN0eWxlTXVsdGlDb2xEYXRhKGNvbgogYm9vbCBTdHlsZU11bHRpQ29sRGF0YTo6
b3BlcmF0b3I9PShjb25zdCBTdHlsZU11bHRpQ29sRGF0YSYgbykgY29uc3QKIHsKICAgICByZXR1
cm4gbV93aWR0aCA9PSBvLm1fd2lkdGggJiYgbV9jb3VudCA9PSBvLm1fY291bnQgJiYgbV9nYXAg
PT0gby5tX2dhcAotICAgICAgICAgICAmJiBtX3J1bGUgPT0gby5tX3J1bGUgJiYgbV9icmVha0Jl
Zm9yZSA9PSBvLm1fYnJlYWtCZWZvcmUKKyAgICAgICAgICAgJiYgbV9ydWxlID09IG8ubV9ydWxl
ICYmIG1fdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IgPT0gby5tX3Zpc2l0ZWRMaW5rQ29sdW1u
UnVsZUNvbG9yICYmIG1fYnJlYWtCZWZvcmUgPT0gby5tX2JyZWFrQmVmb3JlCiAgICAgICAgICAg
ICYmIG1fYXV0b1dpZHRoID09IG8ubV9hdXRvV2lkdGggJiYgbV9hdXRvQ291bnQgPT0gby5tX2F1
dG9Db3VudCAmJiBtX25vcm1hbEdhcCA9PSBvLm1fbm9ybWFsR2FwCiAgICAgICAgICAgICYmIG1f
Y29sdW1uU3BhbiA9PSBvLm1fY29sdW1uU3BhbiAmJiBtX2JyZWFrQWZ0ZXIgPT0gby5tX2JyZWFr
QWZ0ZXIgJiYgbV9icmVha0luc2lkZSA9PSBvLm1fYnJlYWtJbnNpZGU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaAko
cmV2aXNpb24gOTcyNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVN
dWx0aUNvbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgc2hvcnQgbV9jb3VudDsKICAgICBmbG9hdCBtX2dhcDsKICAgICBCb3JkZXJW
YWx1ZSBtX3J1bGU7CisgICAgQ29sb3IgbV92aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcjsKIAog
ICAgIGJvb2wgbV9hdXRvV2lkdGggOiAxOwogICAgIGJvb2wgbV9hdXRvQ291bnQgOiAxOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVJbmhlcml0ZWREYXRhLmNwcAkocmV2aXNpb24gOTcyNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDkgQEAgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlSW5oZXJp
dAogICAgICwgdGV4dFN0cm9rZVdpZHRoKG8udGV4dFN0cm9rZVdpZHRoKQogICAgICwgdGV4dEZp
bGxDb2xvcihvLnRleHRGaWxsQ29sb3IpCiAgICAgLCB0ZXh0RW1waGFzaXNDb2xvcihvLnRleHRF
bXBoYXNpc0NvbG9yKQorICAgICwgdmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3Ioby52aXNpdGVk
TGlua1RleHRTdHJva2VDb2xvcikKKyAgICAsIHZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvcihvLnZp
c2l0ZWRMaW5rVGV4dEZpbGxDb2xvcikKKyAgICAsIHZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29s
b3Ioby52aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yKQogICAgICwgdGV4dFNoYWRvdyhvLnRl
eHRTaGFkb3cgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqby50ZXh0U2hhZG93KSkgOiBudWxs
cHRyKQogICAgICwgaGlnaGxpZ2h0KG8uaGlnaGxpZ2h0KQogICAgICwgY3Vyc29yRGF0YShvLmN1
cnNvckRhdGEpCkBAIC0xMjMsNiArMTI2LDkgQEAgYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWREYXRh
OjpvcGVyYXRvcj09KAogICAgICAgICAmJiB0ZXh0U3Ryb2tlV2lkdGggPT0gby50ZXh0U3Ryb2tl
V2lkdGgKICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciA9PSBvLnRleHRGaWxsQ29sb3IKICAgICAg
ICAgJiYgdGV4dEVtcGhhc2lzQ29sb3IgPT0gby50ZXh0RW1waGFzaXNDb2xvcgorICAgICAgICAm
JiB2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciA9PSBvLnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNv
bG9yCisgICAgICAgICYmIHZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciA9PSBvLnZpc2l0ZWRMaW5r
VGV4dEZpbGxDb2xvcgorICAgICAgICAmJiB2aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yID09
IG8udmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvcgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgICAgICYmIHRhcEhpZ2hsaWdodENvbG9yID09IG8udGFwSGlnaGxpZ2h0Q29sb3IKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVy
aXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oCShyZXZpc2lvbiA5NzI0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDEwIEBAIHB1YmxpYzoKICAgICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGg7
CiAgICAgQ29sb3IgdGV4dEZpbGxDb2xvcjsKICAgICBDb2xvciB0ZXh0RW1waGFzaXNDb2xvcjsK
KyAgICAKKyAgICBDb2xvciB2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvcjsKKyAgICBDb2xvciB2
aXNpdGVkTGlua1RleHRGaWxsQ29sb3I7CisgICAgQ29sb3IgdmlzaXRlZExpbmtUZXh0RW1waGFz
aXNDb2xvcjsgICAgCiAKICAgICBPd25QdHI8U2hhZG93RGF0YT4gdGV4dFNoYWRvdzsgLy8gT3Vy
IHRleHQgc2hhZG93IGluZm9ybWF0aW9uIGZvciBzaGFkb3dlZCB0ZXh0IGRyYXdpbmcuCiAgICAg
QXRvbWljU3RyaW5nIGhpZ2hsaWdodDsgLy8gQXBwbGUtc3BlY2lmaWMgZXh0ZW5zaW9uIGZvciBj
dXN0b20gaGlnaGxpZ2h0IHJlbmRlcmluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAJ
KHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBA
IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkkKICAgICAsIG1fbWFzayhG
aWxsTGF5ZXIoTWFza0ZpbGxMYXllcikpCiAgICAgLCBtX3BhZ2VTaXplKCkKICAgICAsIG1fd3Jh
cFNoYXBlKFJlbmRlclN0eWxlOjppbml0aWFsV3JhcFNoYXBlKCkpCisgICAgLCBtX3Zpc2l0ZWRM
aW5rQmFja2dyb3VuZENvbG9yKFJlbmRlclN0eWxlOjppbml0aWFsQmFja2dyb3VuZENvbG9yKCkp
CiAgICAgLCBtX2Zsb3dUaHJlYWQoUmVuZGVyU3R5bGU6OmluaXRpYWxGbG93VGhyZWFkKCkpCiAg
ICAgLCBtX3JlZ2lvblRocmVhZChSZW5kZXJTdHlsZTo6aW5pdGlhbFJlZ2lvblRocmVhZCgpKQog
ICAgICwgbV9yZWdpb25JbmRleChSZW5kZXJTdHlsZTo6aW5pdGlhbFJlZ2lvbkluZGV4KCkpCkBA
IC05OCw2ICs5OSwxMiBAQCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25J
CiAgICAgLCBtX21hc2tCb3hJbWFnZShvLm1fbWFza0JveEltYWdlKQogICAgICwgbV9wYWdlU2l6
ZShvLm1fcGFnZVNpemUpCiAgICAgLCBtX3dyYXBTaGFwZShvLm1fd3JhcFNoYXBlKQorICAgICwg
bV92aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcihvLm1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29s
b3IpCisgICAgLCBtX3Zpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKG8ubV92aXNpdGVkTGlua0JhY2tn
cm91bmRDb2xvcikKKyAgICAsIG1fdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3Ioby5tX3Zpc2l0
ZWRMaW5rQm9yZGVyTGVmdENvbG9yKQorICAgICwgbV92aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29s
b3Ioby5tX3Zpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvcikKKyAgICAsIG1fdmlzaXRlZExpbmtC
b3JkZXJUb3BDb2xvcihvLm1fdmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvcikKKyAgICAsIG1fdmlz
aXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcihvLm1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xv
cikKICAgICAsIG1fZmxvd1RocmVhZChvLm1fZmxvd1RocmVhZCkKICAgICAsIG1fcmVnaW9uVGhy
ZWFkKG8ubV9yZWdpb25UaHJlYWQpCiAgICAgLCBtX3JlZ2lvbkluZGV4KG8ubV9yZWdpb25JbmRl
eCkKQEAgLTE3Niw2ICsxODMsMTIgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpv
cGVyYXRvcgogICAgICAgICAmJiAobV9yZWdpb25JbmRleCA9PSBvLm1fcmVnaW9uSW5kZXgpCiAg
ICAgICAgICYmIChtX3JlZ2lvbk92ZXJmbG93ID09IG8ubV9yZWdpb25PdmVyZmxvdykKICAgICAg
ICAgJiYgKG1fd3JhcFNoYXBlID09IG8ubV93cmFwU2hhcGUpCisgICAgICAgICYmIG1fdmlzaXRl
ZExpbmtCYWNrZ3JvdW5kQ29sb3IgPT0gby5tX3Zpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yCisg
ICAgICAgICYmIG1fdmlzaXRlZExpbmtPdXRsaW5lQ29sb3IgPT0gby5tX3Zpc2l0ZWRMaW5rT3V0
bGluZUNvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IgPT0gby5t
X3Zpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtCb3Jk
ZXJSaWdodENvbG9yID09IG8ubV92aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IKKyAgICAgICAg
JiYgbV92aXNpdGVkTGlua0JvcmRlclRvcENvbG9yID09IG8ubV92aXNpdGVkTGlua0JvcmRlclRv
cENvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciA9PSBvLm1f
dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcgogICAgICAgICAmJiAobV9yZWdpb25CcmVha0Fm
dGVyID09IG8ubV9yZWdpb25CcmVha0FmdGVyKQogICAgICAgICAmJiAobV9yZWdpb25CcmVha0Jl
Zm9yZSA9PSBvLm1fcmVnaW9uQnJlYWtCZWZvcmUpCiAgICAgICAgICYmIChtX3JlZ2lvbkJyZWFr
SW5zaWRlID09IG8ubV9yZWdpb25CcmVha0luc2lkZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
LmgJKHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwx
MyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoU2l6ZSBtX3BhZ2VTaXplOwogCiAgICAgUmVmUHRyPENT
U1dyYXBTaGFwZT4gbV93cmFwU2hhcGU7CisgICAgCisgICAgQ29sb3IgbV92aXNpdGVkTGlua0Jh
Y2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX3Zpc2l0ZWRMaW5rT3V0bGluZUNvbG9yOworICAg
IENvbG9yIG1fdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3I7CisgICAgQ29sb3IgbV92aXNpdGVk
TGlua0JvcmRlclJpZ2h0Q29sb3I7CisgICAgQ29sb3IgbV92aXNpdGVkTGlua0JvcmRlclRvcENv
bG9yOworICAgIENvbG9yIG1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcjsKIAogICAgIEF0
b21pY1N0cmluZyBtX2Zsb3dUaHJlYWQ7CiAgICAgQXRvbWljU3RyaW5nIG1fcmVnaW9uVGhyZWFk
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk3MjQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwx
MSBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiByZXF1ZXN0CiAgICAgfQogCiAg
ICAgaWYgKHN0eWxlLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlVmlzaXRlZExpbmspIHsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHZpc2l0ZWRTdHlsZSA9IHN0eWxlLT5nZXRDYWNoZWRQc2V1ZG9TdHls
ZShWSVNJVEVEX0xJTkspOwotICAgICAgICBBU1NFUlQodmlzaXRlZFN0eWxlKTsKLQotICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnVmlzaXRlZFN0eWxlID0gdmlzaXRlZFN0eWxlLT5z
dmdTdHlsZSgpOwotICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHZpc2l0ZWRQYWludFR5
cGUgPSBhcHBseVRvRmlsbCA/IHN2Z1Zpc2l0ZWRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpIDogc3Zn
VmlzaXRlZFN0eWxlLT5zdHJva2VQYWludFR5cGUoKTsKKyAgICAgICAgU1ZHUGFpbnQ6OlNWR1Bh
aW50VHlwZSB2aXNpdGVkUGFpbnRUeXBlID0gYXBwbHlUb0ZpbGwgPyBzdmdTdHlsZS0+dmlzaXRl
ZExpbmtGaWxsUGFpbnRUeXBlKCkgOiBzdmdTdHlsZS0+dmlzaXRlZExpbmtTdHJva2VQYWludFR5
cGUoKTsKIAogICAgICAgICAvLyBGb3IgU1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IsICdjb2xv
cicgYWxyZWFkeSBjb250YWlucyB0aGUgJ3Zpc2l0ZWRDb2xvcicuCiAgICAgICAgIGlmICh2aXNp
dGVkUGFpbnRUeXBlIDwgU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX05PTkUgJiYgdmlzaXRl
ZFBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpIHsKLSAg
ICAgICAgICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkQ29sb3IgPSBhcHBseVRvRmlsbCA/IHN2Z1Zp
c2l0ZWRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSA6IHN2Z1Zpc2l0ZWRTdHlsZS0+c3Ryb2tlUGFp
bnRDb2xvcigpOworICAgICAgICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IGFwcGx5
VG9GaWxsID8gc3ZnU3R5bGUtPnZpc2l0ZWRMaW5rRmlsbFBhaW50Q29sb3IoKSA6IHN2Z1N0eWxl
LT52aXNpdGVkTGlua1N0cm9rZVBhaW50Q29sb3IoKTsKICAgICAgICAgICAgIGlmICh2aXNpdGVk
Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbG9yID0gQ29sb3IodmlzaXRlZENv
bG9yLnJlZCgpLCB2aXNpdGVkQ29sb3IuZ3JlZW4oKSwgdmlzaXRlZENvbG9yLmJsdWUoKSwgY29s
b3IuYWxwaGEoKSk7CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="108422"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110813</attachid>
            <date>2011-10-13 01:51:46 -0700</date>
            <delta_ts>2011-10-17 09:24:21 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>visited-link-render-style-6.patch</filename>
            <type>text/plain</type>
            <size>56884</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTEtMTAtMTMgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02OTk2NgorICAgICAgICBFbGltaW5hdGUgc2VwYXJhdGUgUmVu
ZGVyU3R5bGUgZm9yIHZpc2l0ZWQgbGluayBzdHlsZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBvbmx5IGEgZmV3IHByb3BlcnRpZXMg
dGhhdCBjYW4gYXBwbHkgdG8gdmlzaXRlZCBsaW5rcyBhbmQgdGhleSBjYW4KKyAgICAgICAgYmUg
cGFydCBvZiB0aGUgcmVndWxhciBzdHlsZS4gTWFueSB0aGluZ3Mgd2lsbCBnZXQgc2ltcGxlciB3
aGVuIHRoZSBzZXBhcmF0ZSAKKyAgICAgICAgUmVuZGVyU3R5bGUgZm9yIHZpc2l0ZWQgbGlua3Mg
aXMgZWxpbWluYXRlZC4KKyAgICAgICAgCisgICAgICAgIC0gQWRkIHZhbGlkIHZpc2l0ZWQgbGlu
ayBwcm9wZXJ0aWVzIGFzIHNlcGFyYXRlIGZpZWxkcyB0byBSZW5kZXJTdHlsZS4gVGhlICAKKyAg
ICAgICAgICB2aXNpdGVkTGlua0NvbG9yIGdvZXMgdG8gaW5oZXJpdGVkLCBldmVyeXRoaW5nIGVs
c2UgZ29lcyB0byByYXJlIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgLSBNYWtlIFJlbmRlclN0
eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IoKSBnZXQgdGhlIHZpc2l0ZWQgc3R5bGUgZnJvbSB0
aGUgbmV3IGZpZWxkcy4KKyAgICAgICAgLSBBcyBWSVNJVEVEX0xJTksgcHNldWRvIHN0eWxlIGRv
ZXNuJ3QgZXhpc3RzIGFueW1vcmUsIHJlbW92ZSBhbGwgY29kZSBkZWFsaW5nIHdpdGggaXQuCisg
ICAgICAgIC0gTWFrZSBDU1NTdHlsZVNlbGVjdG9yIGFuZCBBcHBseVByb3BlcnR5Q29sb3IgYXBw
bHkgdGhlIHZpc2l0ZWQgbGluayBzdHlsZSB0byB0aGUKKyAgICAgICAgICBuZXdseSBhZGRlZCBm
aWVsZHMgaW5zdGVhZCBvZiBhIHNlcGFyYXRlIFJlbmRlclN0eWxlLgorICAgICAgICAtIFNhbWUg
dGhpbmcgd2l0aCBTVkdSZW5kZXJTdHlsZSwgU1ZHQ1NTU3R5bGVTZWxlY3Rvci4KKyAgICAgICAg
LSBGaXh1cCB0aGUgU1ZHIHZpc2l0ZWQgbGluayBzdHlsZSBjb2RlIHRvIHVzZSB0aGUgbmV3IGZp
ZWxkcy4KKworICAgICAgICBUaGlzIGlzIH4xNSUgcHJvZ3Jlc3Npb24gaW4gc3R5bGVGb3JFbGVt
ZW50IHBlcmZvcm1hbmNlIG92ZXIgdGhlIEhUTUw1IHNwZWMgbG9hZC4KKworICAgICAgICAqIGNz
cy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNvbG9yOjpBcHBseVByb3BlcnR5Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUNvbG9yOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Q29sb3I6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlDb2xvcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Q29sb3I6OmFwcGx5Q29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlE
ZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURl
Y2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkp
OgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Z2V0Q2FjaGVk
UHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNvbG9ySW5jbHVk
aW5nRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBl
bmRlbnRDb2xvcik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExpbmtDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5r
Qm9yZGVyTGVmdENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRW
aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVk
RmxhZ3M6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1
bGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0VmlzaXRlZExp
bmtUZXh0RW1waGFzaXNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6
c2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRl
ZEZsYWdzOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtGaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyU3R5bGU6OnZpc2l0ZWRMaW5rRmlsbFBhaW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtGaWxsUGFpbnRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtTdHJva2VQYWludFR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnRDb2xvcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUZpbGxEYXRhOjpTdHlsZUZpbGxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlRmlsbERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTdHJva2VEYXRhOjpTdHlsZVN0cm9rZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVT
dHJva2VEYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU1ZHUmVu
ZGVyU3R5bGVEZWZzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVk
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUluaGVyaXRlZERhdGE6OlN0eWxlSW5o
ZXJpdGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUluaGVyaXRlZERhdGE6Om9wZXJh
dG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVNdWx0aUNvbERhdGE6OlN0eWxlTXVsdGlDb2xEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlTXVsdGlDb2xEYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVxdWVzdFBhaW50aW5nUmVzb3VyY2UpOgorCiAyMDExLTEwLTEzICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI4OTkx
NSk6IDxpbnB1dCB0eXBlPWVtYWlsIG11bHRpcGxlPiBkb24ndCBzaG93IHRoZSBkZWZhdWx0IHZh
bHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNw
cAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVBy
b3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDkgKzIyNCwxMCBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqRGVmYXVsdEZ1bmN0aW9uKSgp
IGNvbnN0OwogICAgIHR5cGVkZWYgQ29sb3IgKCpJbml0aWFsRnVuY3Rpb24pKCk7CiAKLSAgICBB
cHBseVByb3BlcnR5Q29sb3IoR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBTZXR0ZXJGdW5jdGlvbiBz
ZXR0ZXIsIERlZmF1bHRGdW5jdGlvbiBkZWZhdWx0RnVuY3Rpb24sIEluaXRpYWxGdW5jdGlvbiBp
bml0aWFsRnVuY3Rpb24gPSAwKQorICAgIEFwcGx5UHJvcGVydHlDb2xvcihHZXR0ZXJGdW5jdGlv
biBnZXR0ZXIsIFNldHRlckZ1bmN0aW9uIHNldHRlciwgU2V0dGVyRnVuY3Rpb24gdmlzaXRlZExp
bmtTZXR0ZXIsIERlZmF1bHRGdW5jdGlvbiBkZWZhdWx0RnVuY3Rpb24sIEluaXRpYWxGdW5jdGlv
biBpbml0aWFsRnVuY3Rpb24gPSAwKQogICAgICAgICA6IG1fZ2V0dGVyKGdldHRlcikKICAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgICAgICwgbV92aXNpdGVkTGlua1NldHRlcih2aXNp
dGVkTGlua1NldHRlcikKICAgICAgICAgLCBtX2RlZmF1bHQoZGVmYXVsdEZ1bmN0aW9uKQogICAg
ICAgICAsIG1faW5pdGlhbChpbml0aWFsRnVuY3Rpb24pCiAgICAgewpAQCAtMjM1LDE2ICsyMzYs
MTcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IpIGNvbnN0CiAgICAgeworICAgICAgICAvLyBW
aXNpdGVkIGxpbmsgc3R5bGUgY2FuIG5ldmVyIGV4cGxpY2l0bHkgaW5oZXJpdCBmcm9tIHBhcmVu
dCB2aXNpdGVkIGxpbmsgc3R5bGUgc28gbm8gc2VwYXJhdGUgZ2V0dGVycyBhcmUgbmVlZGVkLgog
ICAgICAgICBjb25zdCBDb2xvciYgY29sb3IgPSAoc2VsZWN0b3ItPnBhcmVudFN0eWxlKCktPipt
X2dldHRlcikoKTsKICAgICAgICAgaWYgKG1fZGVmYXVsdCAmJiAhY29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgKHNlbGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKChzZWxlY3Rvci0+cGFy
ZW50U3R5bGUoKS0+Km1fZGVmYXVsdCkoKSk7CisgICAgICAgICAgICBhcHBseUNvbG9yVmFsdWUo
c2VsZWN0b3IsIChzZWxlY3Rvci0+cGFyZW50U3R5bGUoKS0+Km1fZGVmYXVsdCkoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKShjb2xv
cik7CisgICAgICAgICAgICBhcHBseUNvbG9yVmFsdWUoc2VsZWN0b3IsIGNvbG9yKTsKICAgICB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IpIGNvbnN0CiAgICAgewotICAgICAgICAoc2VsZWN0b3ItPnN0eWxlKCktPiptX3Nl
dHRlcikobV9pbml0aWFsID8gbV9pbml0aWFsKCkgOiBDb2xvcigpKTsKKyAgICAgICAgYXBwbHlD
b2xvclZhbHVlKHNlbGVjdG9yLCBtX2luaXRpYWwgPyBtX2luaXRpYWwoKSA6IENvbG9yKCkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0CkBAIC0yNTUsMTIgKzI1NywyNSBAQCBwcml2
YXRlOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKGluaGVyaXRDb2xv
ckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVDdXJy
ZW50Y29sb3IpCiAgICAgICAgICAgICBhcHBseUluaGVyaXRWYWx1ZShzZWxlY3Rvcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVyKShzZWxl
Y3Rvci0+Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fc2V0dGVy
KShzZWxlY3Rvci0+Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIGZh
bHNlKSk7CisgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSAmJiBtX3Zpc2l0ZWRMaW5rU2V0dGVyKQorICAgICAgICAgICAgICAgIChzZWxl
Y3Rvci0+c3R5bGUoKS0+Km1fdmlzaXRlZExpbmtTZXR0ZXIpKHNlbGVjdG9yLT5nZXRDb2xvckZy
b21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgdHJ1ZSkpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgYXBwbHlDb2xvclZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc2VsZWN0
b3ItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgKHNlbGVjdG9y
LT5zdHlsZSgpLT4qbV9zZXR0ZXIpKGNvbG9yKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgJiYgbV92aXNpdGVkTGlua1NldHRlcikKKyAg
ICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1fdmlzaXRlZExpbmtTZXR0ZXIpKGNvbG9y
KTsKICAgICB9CiAKICAgICBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsKICAgICBTZXR0ZXJGdW5j
dGlvbiBtX3NldHRlcjsKKyAgICBTZXR0ZXJGdW5jdGlvbiBtX3Zpc2l0ZWRMaW5rU2V0dGVyOwog
ICAgIERlZmF1bHRGdW5jdGlvbiBtX2RlZmF1bHQ7CiAgICAgSW5pdGlhbEZ1bmN0aW9uIG1faW5p
dGlhbDsKIH07CkBAIC04OTMsNyArOTA4LDcgQEAgQ1NTU3R5bGVBcHBseVByb3BlcnR5OjpDU1NT
dHlsZUFwcGx5UHJvcAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsg
KytpKQogICAgICAgIG1fcHJvcGVydHlNYXBbaV0gPSAwOwogCi0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5Q29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8SW5oZXJpdEZyb21Q
YXJlbnQ+KCZSZW5kZXJTdHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsIDAsIFJl
bmRlclN0eWxlOjppbml0aWFsQ29sb3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxJbmhlcml0RnJvbVBhcmVudD4oJlJl
bmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgICZSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtDb2xvciwgMCwgUmVuZGVyU3R5bGU6OmluaXRpYWxDb2xvcikpOwogICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eURpcmVjdGlvbiwgbmV3IEFwcGx5UHJvcGVy
dHlEaXJlY3Rpb24oJlJlbmRlclN0eWxlOjpkaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6c2V0RGly
ZWN0aW9uLCBSZW5kZXJTdHlsZTo6aW5pdGlhbERpcmVjdGlvbikpOwogCiAgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIG5ldyBBcHBseVByb3Bl
cnR5RmlsbExheWVyPEVGaWxsQXR0YWNobWVudD4oQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNo
bWVudCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5k
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsCkBAIC05NTQsMTEgKzk2OSwx
MSBAQCBDU1NTdHlsZUFwcGx5UHJvcGVydHk6OkNTU1N0eWxlQXBwbHlQcm9wCiAgICAgICAgICAg
ICAgICAgICAgICZGaWxsTGF5ZXI6OmlzUmVwZWF0WVNldCwgJkZpbGxMYXllcjo6cmVwZWF0WSwg
JkZpbGxMYXllcjo6c2V0UmVwZWF0WSwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRZLCAmRmlsbExh
eWVyOjppbml0aWFsRmlsbFJlcGVhdFksICZDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsUmVwZWF0
WSkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQs
IG5ldyBBcHBseVByb3BlcnR5RXhwYW5kaW5nPFN1cHByZXNzVmFsdWU+KHByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYKSwgcHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFkpKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJv
bVBhcmVudD4oJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
QmFja2dyb3VuZENvbG9yLCAwKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBh
cmVudD4oJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xv
cjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBuZXcgQXBw
bHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6Ym9yZGVy
UmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5
bGU6OmNvbG9yKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9w
Q29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJlbmRl
clN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwg
JlJlbmRlclN0eWxlOjpjb2xvcikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFy
ZW50PigmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNr
Z3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3Is
IDApKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xv
ciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5
bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJT
dHlsZTo6Y29sb3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJM
ZWZ0Q29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJl
bmRlclN0eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVy
U3R5bGU6OmNvbG9yKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50Pigm
UmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmln
aHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6Y29sb3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50
PigmUmVuZGVyU3R5bGU6OmJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRv
cENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Y29sb3IpKTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJv
cmRlclRvcFN0eWxlLCBuZXcgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlPigmUmVu
ZGVyU3R5bGU6OmJvcmRlclRvcFN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFN0eWxl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSkpOwogICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsIG5ldyBBcHBseVByb3BlcnR5RGVmYXVs
dDxFQm9yZGVyU3R5bGU+KCZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRTdHlsZSwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJSaWdodFN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZSkpOwpAQCAtMTAxNiwxNyArMTAzMSwxNyBAQCBDU1NTdHlsZUFwcGx5UHJvcGVydHk6OkNTU1N0
eWxlQXBwbHlQcm9wCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgbmV3IEFwcGx5UHJvcGVydHlGb250V2VpZ2h0KCkpOwogCiAgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5T3V0bGluZVN0eWxlLCBuZXcgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZzxF
eHBhbmRWYWx1ZT4obmV3IEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8+KCZSZW5k
ZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHls
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvKSwgbmV3IEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZT4oJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5
bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3JkZXJTdHlsZSkpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5l
Q29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8SW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJT
dHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRl
clN0eWxlOjpjb2xvcikpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxp
bmVDb2xvciwgbmV3IEFwcGx5UHJvcGVydHlDb2xvcjxJbmhlcml0RnJvbVBhcmVudD4oJlJlbmRl
clN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9y
KSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZU9mZnNldCwgbmV3
IEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPGludD4oJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zm
c2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVPZmZzZXQpKTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92
ZXJmbG93WCwgbmV3IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvdz4oJlJlbmRlclN0eWxl
OjpvdmVyZmxvd1gsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dYLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPdmVyZmxvd1gpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVy
Zmxvd1ksIG5ldyBBcHBseVByb3BlcnR5RGVmYXVsdDxFT3ZlcmZsb3c+KCZSZW5kZXJTdHlsZTo6
b3ZlcmZsb3dZLCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93WSwgJlJlbmRlclN0eWxlOjppbml0
aWFsT3ZlcmZsb3dZKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3ZlcmZs
b3csIG5ldyBBcHBseVByb3BlcnR5RXhwYW5kaW5nPEV4cGFuZFZhbHVlPihwcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlPdmVyZmxvd1gpLCBwcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVy
Zmxvd1kpKSk7CiAKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4o
JlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVs
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8
Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIG5l
dyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4oJlJlbmRlclN0eWxlOjp0
ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHls
ZTo6Y29sb3IpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0
U3Ryb2tlQ29sb3IsIG5ldyBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudD4o
JlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFN0cm9r
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBuZXcgQXBwbHlQcm9wZXJ0eUNvbG9yPE5v
SW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Nv
bHVtblJ1bGVDb2xvciwgICZSZW5kZXJTdHlsZTo6Y29sb3IpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvciwgbmV3IEFwcGx5UHJvcGVy
dHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OnRleHRFbXBoYXNpc0Nv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCBuZXcg
QXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQ+KCZSZW5kZXJTdHlsZTo6dGV4
dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcikpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgbmV3
IEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50PigmUmVuZGVyU3R5bGU6OnRl
eHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3Ip
KTsKIAogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRvcCwgbmV3IEFwcGx5UHJv
cGVydHlMZW5ndGg8QXV0b0VuYWJsZWQ+KCZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6
OnNldFRvcCwgJlJlbmRlclN0eWxlOjppbml0aWFsT2Zmc2V0KSk7CiAgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5UmlnaHQsIG5ldyBBcHBseVByb3BlcnR5TGVuZ3RoPEF1dG9FbmFi
bGVkPigmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDggQEAgQ1NTU3R5
bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICwgbV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICwgbV9zYW1lT3JpZ2lu
T25seShmYWxzZSkKICAgICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRl
KGRvY3VtZW50KSkKKyAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisg
ICAgLCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAgICAgLCBtX2Fw
cGx5UHJvcGVydHkoQ1NTU3R5bGVBcHBseVByb3BlcnR5OjpzaGFyZWRDU1NTdHlsZUFwcGx5UHJv
cGVydHkoKSkKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVu
dCgpOwpAQCAtMTA4NSwyMiArMTA4Nyw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0
eWxlU2VsZWN0b3IKIAogICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKLSAg
ICBpZiAobV9wYXJlbnRTdHlsZSkgeworICAgIGlmIChtX3BhcmVudFN0eWxlKQogICAgICAgICBt
X3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEZvciBsaW5rcyBhbmQgZWxlbWVudHMgaW5zaWRlIGxpbmtzIHdlIGNvbXB1dGUgYm90aCB0aGUg
cmVndWxhciBhbmQgdmlzaXRlZCBzdHlsZS4KLSAgICAgICAgLy8gRklYTUU6IFZpc2l0ZWQgbGlu
ayBzdHlsZSBkb2Vzbid0IG5lZWQgYSBzZXBhcmF0ZSBSZW5kZXJTdHlsZS4gVGhlIGZldyBwcm9w
ZXJ0aWVzIGFsbG93ZWQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJlZ3VsYXIgUmVuZGVyU3R5bGUg
aW5zdGVhZC4KLSAgICAgICAgaWYgKGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICBtX3Zpc2l0
ZWRMaW5rU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobV9zdHlsZS5nZXQoKSk7Ci0gICAgICAg
ICAgICBtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUgPSBtX3BhcmVudFN0eWxlOwotICAgICAgICB9
IGVsc2UgaWYgKG1fcGFyZW50U3R5bGUtPmluc2lkZUxpbmsoKSkgewotICAgICAgICAgICAgbV92
aXNpdGVkTGlua1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+Z2V0Q2FjaGVkUHNldWRvU3R5
bGUoVklTSVRFRF9MSU5LKTsKLSAgICAgICAgICAgIGlmICghbV92aXNpdGVkTGlua1BhcmVudFN0
eWxlKQotICAgICAgICAgICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSA9IG1fcGFyZW50
U3R5bGU7Ci0gICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rU3R5bGUtPmluaGVyaXRGcm9tKG1fdmlz
aXRlZExpbmtQYXJlbnRTdHlsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeworICAgIGVsc2Ug
ewogICAgICAgICBtX3BhcmVudFN0eWxlID0gc3R5bGUoKTsKICAgICAgICAgLy8gTWFrZSBzdXJl
IG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20g
b3VyIHBhcmVudCBzdHlsZS4KICAgICAgICAgbV9zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKQEAg
LTEyODYsMjMgKzEyNzUsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVj
dG9yCiAgICAgaWYgKG1fc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCiAgICAg
ICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwogCi0gICAgaWYgKG1fdmlzaXRlZExpbmtTdHlsZSkg
ewotICAgICAgICAvLyBDb3B5IGFueSBwc2V1ZG8gYml0cyB0aGF0IHRoZSB2aXNpdGVkIHN0eWxl
IGhhcyB0byB0aGUgcHJpbWFyeSBzdHlsZSBzbyB0aGF0IHBzZXVkbwotICAgICAgICAvLyBlbGVt
ZW50IHN0eWxlcyB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgZm9yIHBzZXVkbyBlbGVtZW50cyBpbnNp
ZGUgOnZpc2l0ZWQgbGlua3MuCi0gICAgICAgIGZvciAodW5zaWduZWQgcHNldWRvID0gRklSU1Rf
UFVCTElDX1BTRVVET0lEOyBwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRDsgKytwc2V1
ZG8pIHsKLSAgICAgICAgICAgIGlmIChtX3Zpc2l0ZWRMaW5rU3R5bGUtPmhhc1BzZXVkb1N0eWxl
KHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG8pKSkKLSAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZWxlbWVudExpbmtTdGF0ZSA9PSBJbnNpZGVVbnZpc2l0ZWRM
aW5rKQotICAgICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlID0gMDsgLy8gV2UgbWFkZSB0aGUg
c3R5bGUgdG8gYXZvaWQgdGltaW5nIGF0dGFja3MuIEp1c3QgdGhyb3cgaXQgYXdheSBub3cgdGhh
dCB3ZSBkaWQgdGhhdCwgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdC4KLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBBZGQgdGhlIHZpc2l0ZWQgc3R5bGUgb2ZmIHRoZSBtYWluIHN0eWxlLgot
ICAgICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlLT5zZXRTdHlsZVR5cGUoVklTSVRFRF9MSU5L
KTsKLSAgICAgICAgICAgIG1fc3R5bGUtPmFkZENhY2hlZFBzZXVkb1N0eWxlKG1fdmlzaXRlZExp
bmtTdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fdmlzaXRlZExpbmtQYXJl
bnRTdHlsZSA9IDA7Ci0gICAgfQotCiAgICAgaW5pdEVsZW1lbnQoMCk7IC8vIENsZWFyIG91dCBm
b3IgdGhlIG5leHQgcmVzb2x2ZS4KIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgpAQCAt
MTQyNCwxOCArMTM5Niw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3IKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwogICAg
IG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgCi0gICAgaWYgKG1fcGFyZW50
U3R5bGUpIHsKKyAgICBpZiAobV9wYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJp
dEZyb20obV9wYXJlbnRTdHlsZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgbGlua3MgYW5k
IGVsZW1lbnRzIGluc2lkZSBsaW5rcyB3ZSBjb21wdXRlIGJvdGggdGhlIHJlZ3VsYXIgYW5kIHZp
c2l0ZWQgc3R5bGUuCi0gICAgICAgIGlmIChtX3BhcmVudFN0eWxlLT5pbnNpZGVMaW5rKCkpIHsK
LSAgICAgICAgICAgIG1fdmlzaXRlZExpbmtQYXJlbnRTdHlsZSA9IG1fcGFyZW50U3R5bGUtPmdl
dENhY2hlZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7Ci0gICAgICAgICAgICBpZiAoIW1fdmlz
aXRlZExpbmtQYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICBtX3Zpc2l0ZWRMaW5rUGFyZW50
U3R5bGUgPSBtX3BhcmVudFN0eWxlOwotICAgICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV92aXNpdGVkTGlua1N0eWxlLT5p
bmhlcml0RnJvbShtX3Zpc2l0ZWRMaW5rUGFyZW50U3R5bGUpOwotICAgICAgICB9Ci0gICAgfQog
CiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3Vy
IHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwog
ICAgIC8vIHRob3NlIHJ1bGVzLgpAQCAtMTQ4OSwxMyArMTQ1MSw2IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2Vz
IHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwotCi0g
ICAgLy8gSGFuZyBvdXIgdmlzaXRlZCBzdHlsZSBvZmYgbV9zdHlsZS4KLSAgICBpZiAobV92aXNp
dGVkTGlua1N0eWxlKSB7Ci0gICAgICAgIG1fdmlzaXRlZExpbmtTdHlsZS0+c2V0U3R5bGVUeXBl
KFZJU0lURURfTElOSyk7Ci0gICAgICAgIG1fc3R5bGUtPmFkZENhY2hlZFBzZXVkb1N0eWxlKG1f
dmlzaXRlZExpbmtTdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICBtX3Zpc2l0ZWRMaW5rUGFyZW50
U3R5bGUgPSAwOwotICAgIH0KICAgICAgICAgCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUu
CiAgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwpAQCAtMTc0Niw3ICsxNzAxLDYgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQogCiB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OnVwZGF0ZUZvbnQoKQogewotICAgIEFTU0VSVChtX3N0eWxlICE9IG1fdmlzaXRlZExp
bmtTdHlsZSk7CiAgICAgaWYgKCFtX2ZvbnREaXJ0eSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MjAzLDggKzIxNTcsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24o
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5l
LWhlaWdodCBsYXRlcgogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGlu
ZUhlaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChtX3N0eWxlID09IG1fdmlzaXRlZExpbmtT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgbV9s
aW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CkBAIC0yMjIyLDIzICsyMTc0LDIyIEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMKICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5k
ZXg7IGkrKykgewotICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNs
YXJhdGlvbiA9IG1fbWF0Y2hlZERlY2xzW2ldLnN0eWxlRGVjbGFyYXRpb247Ci0gICAgICAgIGlm
IChtX3Zpc2l0ZWRMaW5rU3R5bGUgJiYgbV9tYXRjaGVkRGVjbHNbaV0ubGlua01hdGNoVHlwZSAm
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
U3R5bGUgc2hvdWxkIGJlIHBhc3NlZCB0byBhcHBseVByb3BlcnR5IGFzIGFuIGFyZ3VtZW50LCBu
b3QgYXMgYSBtZW1iZXIuCi0gICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHNhdmVkU3R5
bGUgPSBtX3N0eWxlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzYXZlZFBh
cmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZTsKLSAgICAgICAgICAgIG1fc3R5bGUgPSBtX3Zpc2l0
ZWRMaW5rU3R5bGU7Ci0gICAgICAgICAgICBtX3BhcmVudFN0eWxlID0gbV92aXNpdGVkTGlua1Bh
cmVudFN0eWxlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFw
cGx5Rmlyc3Q+KHN0eWxlRGVjbGFyYXRpb24sIGlzSW1wb3J0YW50KTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9zdHlsZSA9IHNhdmVkU3R5bGUucmVsZWFzZSgpOwotICAgICAgICAgICAg
bV9wYXJlbnRTdHlsZSA9IHNhdmVkUGFyZW50U3R5bGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fbWF0Y2hlZERlY2xzW2ldLmxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
TGluaykKKyAgICBpZiAobV9lbGVtZW50LT5pc0xpbmsoKSkgeworICAgICAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CisgICAgICAgICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IG1fbWF0Y2hlZERlY2xzW2ld
LnN0eWxlRGVjbGFyYXRpb247CisgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0g
bV9tYXRjaGVkRGVjbHNbaV0ubGlua01hdGNoVHlwZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCB3b3VsZCBiZSBuaWNlciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1
aXJlcyBjaGFuZ2VzIGluIG1hbnkgcGxhY2VzLgorICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExp
bms7CisgICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5r
TWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisKICAgICAgICAgICAg
IGFwcGx5RGVjbGFyYXRpb248YXBwbHlGaXJzdD4oc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRh
bnQpOyAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUgPSB0cnVlOworICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBmb3IgKGludCBpID0gc3RhcnRJ
bmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSAgICAgICAgCisgICAgICAgIGFwcGx5RGVjbGFyYXRp
b248YXBwbHlGaXJzdD4obV9tYXRjaGVkRGVjbHNbaV0uc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBv
cnRhbnQpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVT
ZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCkBAIC0yNDIzLDcgKzIzNzQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5UHJvcGVydHkoaW50CiAgICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVudE5vZGUgJiYg
dmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVDsKICAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlVHlwZSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwgfHwgKCFtX3BhcmVudE5vZGUgJiYg
dmFsdWVUeXBlID09IENTU1ZhbHVlOjpDU1NfSU5IRVJJVCk7CiAKLSAgICBpZiAobV9zdHlsZSA9
PSBtX3Zpc2l0ZWRMaW5rU3R5bGUgJiYgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkg
eworICAgIGlmICghYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlk
KSkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGll
ZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC00OTQwLDcgKzQ4OTEsNyBAQCBzdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1
ZShpbnQgY3NzVmFsCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lz
dGVtQ29sb3IoY3NzVmFsdWVJZCk7CiB9CiAKLUNvbG9yIENTU1N0eWxlU2VsZWN0b3I6OmdldENv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSkg
Y29uc3QKK0NvbG9yIENTU1N0eWxlU2VsZWN0b3I6OmdldENvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykg
Y29uc3QKIHsKICAgICBDb2xvciBjb2w7CiAgICAgaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCk7CkBAIC00OTQ4LDcgKzQ4OTksNyBAQCBDb2xvciBDU1NTdHlsZVNlbGVjdG9y
OjpnZXRDb2xvckZyb21QcmltCiAgICAgICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdFRl
eHQpCiAgICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigp
OwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdExpbmspCi0gICAgICAg
ICAgICBjb2wgPSBtX2VsZW1lbnQtPmlzTGluaygpICYmIG1fc3R5bGUgPT0gbV92aXNpdGVkTGlu
a1N0eWxlID8gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgICAgICAgICAgY29sID0gKG1fZWxl
bWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT52aXNpdGVkTGlua0NvbG9yKCkgOiBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmxpbmtDb2xvcigp
OwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbmspCiAg
ICAgICAgICAgICBjb2wgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigp
OwogICAgICAgICBlbHNlIGlmIChpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9y
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiA5NzM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKCk7CiAKLSAgICBDb2xvciBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZSopIGNvbnN0OworICAgIENvbG9yIGdldENvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25z
dDsKIAogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3Q7CiAKQEAgLTI2MCw2ICsyNjAsOSBAQCBwdWJsaWM6CiAKICAgICBTdHlsZUltYWdl
KiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAgICAgU3R5bGVJbWFnZSog
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsK
KyAgICAKKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlOyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBz
X3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtMzM0LDkgKzMzNyw3IEBAIHByaXZhdGU6CiAgICAg
U2VsZWN0b3JDaGVja2VyIG1fY2hlY2tlcjsKIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9z
dHlsZTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fdmlzaXRlZExpbmtTdHlsZTsKICAgICBS
ZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV92aXNpdGVkTGlu
a1BhcmVudFN0eWxlOwogICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CiAgICAg
RWxlbWVudCogbV9lbGVtZW50OwogICAgIFN0eWxlZEVsZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsK
QEAgLTM1MSw2ICszNTIsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbio+IG1fYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHM7CiAgICAgVmVjdG9y
PE1lZGlhUXVlcnlSZXN1bHQqPiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7
CiAKKyAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAgIGJvb2wgbV9h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQ
cm9wZXJ0eSYgbV9hcHBseVByb3BlcnR5OwogICAgIAogICAgIGZyaWVuZCBjbGFzcyBDU1NTdHls
ZUFwcGx5UHJvcGVydHk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiA5NzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDE2ICsyMjYsMTYgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1BhcmVudFN0eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRU
eXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+
ZmlsbFBhaW50VXJpKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQo
c3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWlu
dENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5p
dGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmls
bFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSk7Cisg
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xv
cigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFs
dWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9
IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNT
U1ZhbHVlKHN2Z1BhaW50LCBtX3N0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpKTsKKyAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUo
KSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgbV9zdHlsZS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjQzLDE2ICsyNDMsMTYgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVNWR1Byb3BlcnR5KAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhl
cml0KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0
eWxlID0gbV9wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQ
YXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFp
bnRVcmkoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1Bh
cmVudFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0lu
aXRpYWwpIHsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRV
cmkoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRl
clN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFs
U3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJp
KCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZH
UGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwg
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgbV9zdHlsZS0+Y29sb3IoKSksIHN2
Z1BhaW50LT51cmkoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50
KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWlu
dCwgbV9zdHlsZS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTcsMTEgKzEwMTcsNyBAQCBib29sIEVsZW1lbnQ6OnBz
ZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNo
ZVNpemU7ICsraSkgewogICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1BzZXVkb1N0eWxl
OwogICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IHBzZXVkb1N0eWxlQ2FjaGUtPmF0KGkpLT5z
dHlsZVR5cGUoKTsKLSAgICAgICAgaWYgKHBzZXVkb0lkID09IFZJU0lURURfTElOSykgewotICAg
ICAgICAgICAgbmV3UHNldWRvU3R5bGUgPSAgbmV3U3R5bGUtPmdldENhY2hlZFBzZXVkb1N0eWxl
KFZJU0lURURfTElOSyk7IC8vIFRoaXMgcHNldWRvLXN0eWxlIHdhcyBhZ2dyZXNzaXZlbHkgY29t
cHV0ZWQgYWxyZWFkeSB3aGVuIHdlIGZpcnN0IGNhbGxlZCBzdHlsZUZvckVsZW1lbnQgb24gdGhl
IG5ldyBzdHlsZS4KLSAgICAgICAgICAgIGlmICghbmV3UHNldWRvU3R5bGUgfHwgKm5ld1BzZXVk
b1N0eWxlICE9ICpwc2V1ZG9TdHlsZUNhY2hlLT5hdChpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9MSU5FIHx8IHBz
ZXVkb0lkID09IEZJUlNUX0xJTkVfSU5IRVJJVEVEKQorICAgICAgICBpZiAocHNldWRvSWQgPT0g
RklSU1RfTElORSB8fCBwc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkKICAgICAgICAg
ICAgIG5ld1BzZXVkb1N0eWxlID0gcmVuZGVyZXIoKS0+dW5jYWNoZWRGaXJzdExpbmVTdHlsZShu
ZXdTdHlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5ld1BzZXVkb1N0eWxlID0gcmVu
ZGVyZXIoKS0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgbmV3U3R5bGUsIG5ld1N0
eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsMTYgKzIzMiwxMSBAQCB2
b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1CiAKIFJlbmRlclN0eWxlKiBS
ZW5kZXJTdHlsZTo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKSBjb25zdAogewot
ICAgIEFTU0VSVChzdHlsZVR5cGUoKSAhPSBWSVNJVEVEX0xJTkspOwotCiAgICAgaWYgKCFtX2Nh
Y2hlZFBzZXVkb1N0eWxlcyB8fCAhbV9jYWNoZWRQc2V1ZG9TdHlsZXMtPnNpemUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8pIHsKLSAgICAg
ICAgaWYgKHBpZCA9PSBWSVNJVEVEX0xJTkspCi0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRQ
c2V1ZG9TdHlsZXMtPmF0KDApLT5zdHlsZVR5cGUoKSA9PSBWSVNJVEVEX0xJTksgPyBtX2NhY2hl
ZFBzZXVkb1N0eWxlcy0+YXQoMCkuZ2V0KCkgOiAwOworICAgIGlmIChzdHlsZVR5cGUoKSAhPSBO
T1BTRVVETykgCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9jYWNoZWRQc2V1ZG9TdHlsZXMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
bmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IG1fY2FjaGVkUHNldWRvU3R5bGVzLT5hdChpKS5nZXQo
KTsKQEAgLTExMjMsNDYgKzExMTgsNDYgQEAgdm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93VmVy
dGljYWxFeHRlbgogICAgIH0KIH0KIAotQ29sb3IgUmVuZGVyU3R5bGU6OmNvbG9ySW5jbHVkaW5n
RmFsbGJhY2soaW50IGNvbG9yUHJvcGVydHkpIGNvbnN0CitDb2xvciBSZW5kZXJTdHlsZTo6Y29s
b3JJbmNsdWRpbmdGYWxsYmFjayhpbnQgY29sb3JQcm9wZXJ0eSwgYm9vbCB2aXNpdGVkTGluaykg
Y29uc3QKIHsKICAgICBDb2xvciByZXN1bHQ7CiAgICAgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxl
ID0gQk5PTkU7CiAgICAgc3dpdGNoIChjb2xvclByb3BlcnR5KSB7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICAgICAgcmV0dXJuIGJhY2tncm91bmRDb2xvcigpOyAv
LyBCYWNrZ3JvdW5kIGNvbG9yIGRvZXNuJ3QgZmFsbCBiYWNrLgorICAgICAgICByZXR1cm4gdmlz
aXRlZExpbmsgPyByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV92aXNpdGVkTGlua0JhY2tncm91bmRD
b2xvciA6IGJhY2tncm91bmRDb2xvcigpOyAvLyBCYWNrZ3JvdW5kIGNvbG9yIGRvZXNuJ3QgZmFs
bCBiYWNrLgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgICAgIHJl
c3VsdCA9IGJvcmRlckxlZnRDb2xvcigpOworICAgICAgICByZXN1bHQgPSB2aXNpdGVkTGluayA/
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Zpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yIDogYm9y
ZGVyTGVmdENvbG9yKCk7CiAgICAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyTGVmdFN0eWxlKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgot
ICAgICAgICByZXN1bHQgPSBib3JkZXJSaWdodENvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHZp
c2l0ZWRMaW5rID8gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdmlzaXRlZExpbmtCb3JkZXJSaWdo
dENvbG9yIDogYm9yZGVyUmlnaHRDb2xvcigpOwogICAgICAgICBib3JkZXJTdHlsZSA9IGJvcmRl
clJpZ2h0U3R5bGUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yOgotICAgICAgICByZXN1bHQgPSBib3JkZXJUb3BDb2xvcigpOworICAgICAgICBy
ZXN1bHQgPSB2aXNpdGVkTGluayA/IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Zpc2l0ZWRMaW5r
Qm9yZGVyVG9wQ29sb3IgOiBib3JkZXJUb3BDb2xvcigpOwogICAgICAgICBib3JkZXJTdHlsZSA9
IGJvcmRlclRvcFN0eWxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21Db2xvcjoKLSAgICAgICAgcmVzdWx0ID0gYm9yZGVyQm90dG9tQ29sb3IoKTsK
KyAgICAgICAgcmVzdWx0ID0gdmlzaXRlZExpbmsgPyByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV92
aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yIDogYm9yZGVyQm90dG9tQ29sb3IoKTsKICAgICAg
ICAgYm9yZGVyU3R5bGUgPSBib3JkZXJCb3R0b21TdHlsZSgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgIHJlc3VsdCA9IGNvbG9yKCk7CisgICAg
ICAgIHJlc3VsdCA9IHZpc2l0ZWRMaW5rID8gaW5oZXJpdGVkLT52aXNpdGVkTGlua0NvbG9yIDog
Y29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xv
cjoKLSAgICAgICAgcmVzdWx0ID0gb3V0bGluZUNvbG9yKCk7CisgICAgICAgIHJlc3VsdCA9IHZp
c2l0ZWRMaW5rID8gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdmlzaXRlZExpbmtPdXRsaW5lQ29s
b3IgOiBvdXRsaW5lQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAgICAgICAgcmVzdWx0ID0gY29sdW1uUnVsZUNvbG9y
KCk7CisgICAgICAgIHJlc3VsdCA9IHZpc2l0ZWRMaW5rID8gcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fbXVsdGlDb2wtPm1fdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IgOiBjb2x1bW5SdWxlQ29s
b3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBo
YXNpc0NvbG9yOgotICAgICAgICByZXN1bHQgPSB0ZXh0RW1waGFzaXNDb2xvcigpOworICAgICAg
ICByZXN1bHQgPSB2aXNpdGVkTGluayA/IHJhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1Rl
eHRFbXBoYXNpc0NvbG9yIDogdGV4dEVtcGhhc2lzQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Ci0gICAgICAgIHJlc3VsdCA9
IHRleHRGaWxsQ29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0gdmlzaXRlZExpbmsgPyByYXJlSW5o
ZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0RmlsbENvbG9yIDogdGV4dEZpbGxDb2xvcigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9y
OgotICAgICAgICByZXN1bHQgPSB0ZXh0U3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgcmVzdWx0ID0g
dmlzaXRlZExpbmsgPyByYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29s
b3IgOiB0ZXh0U3Ryb2tlQ29sb3IoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTcwLDI1ICsxMTY1LDIxIEBAIENvbG9y
IFJlbmRlclN0eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWMKICAgICB9CiAKICAgICBpZiAoIXJl
c3VsdC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKGJvcmRlclN0eWxlID09IElOU0VUIHx8IGJv
cmRlclN0eWxlID09IE9VVFNFVCB8fCBib3JkZXJTdHlsZSA9PSBSSURHRSB8fCBib3JkZXJTdHls
ZSA9PSBHUk9PVkUpCisgICAgICAgIGlmICghdmlzaXRlZExpbmsgJiYgKGJvcmRlclN0eWxlID09
IElOU0VUIHx8IGJvcmRlclN0eWxlID09IE9VVFNFVCB8fCBib3JkZXJTdHlsZSA9PSBSSURHRSB8
fCBib3JkZXJTdHlsZSA9PSBHUk9PVkUpKQogICAgICAgICAgICAgcmVzdWx0LnNldFJHQigyMzgs
IDIzOCwgMjM4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gY29sb3IoKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHZpc2l0ZWRMaW5rID8gaW5oZXJpdGVkLT52aXNpdGVkTGlu
a0NvbG9yIDogY29sb3IoKTsKICAgICB9Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xv
ciBSZW5kZXJTdHlsZTo6dmlzaXRlZERlcGVuZGVudENvbG9yKGludCBjb2xvclByb3BlcnR5KSBj
b25zdAogewotICAgIENvbG9yIHVudmlzaXRlZENvbG9yID0gY29sb3JJbmNsdWRpbmdGYWxsYmFj
ayhjb2xvclByb3BlcnR5KTsKKyAgICBDb2xvciB1bnZpc2l0ZWRDb2xvciA9IGNvbG9ySW5jbHVk
aW5nRmFsbGJhY2soY29sb3JQcm9wZXJ0eSwgZmFsc2UpOwogICAgIGlmIChpbnNpZGVMaW5rKCkg
IT0gSW5zaWRlVmlzaXRlZExpbmspCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKIAot
ICAgIFJlbmRlclN0eWxlKiB2aXNpdGVkU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShWSVNJ
VEVEX0xJTkspOwotICAgIGlmICghdmlzaXRlZFN0eWxlKQotICAgICAgICByZXR1cm4gdW52aXNp
dGVkQ29sb3I7Ci0gICAgQ29sb3IgdmlzaXRlZENvbG9yID0gdmlzaXRlZFN0eWxlLT5jb2xvcklu
Y2x1ZGluZ0ZhbGxiYWNrKGNvbG9yUHJvcGVydHkpOworICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9
IGNvbG9ySW5jbHVkaW5nRmFsbGJhY2soY29sb3JQcm9wZXJ0eSwgdHJ1ZSk7CiAKICAgICAvLyBG
SVhNRTogVGVjaG5pY2FsbHkgc29tZW9uZSBjb3VsZCBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGNv
bG9yIHRyYW5zcGFyZW50LCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0CiAgICAgLy8gYXNzdW1lIHRo
YXQgaWYgdGhlIGJhY2tncm91bmQgY29sb3IgaXMgdHJhbnNwYXJlbnQgdGhhdCBpdCB3YXNuJ3Qg
c2V0LiBOb3RlIHRoYXQgaXQncyB3ZWlyZCB0aGF0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ4MCw2ICsxNDgwLDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgaW5pdGlhbEZpbHRlcigpIHsgREVGSU5FX1NUQVRJQ19MT0NBTChGaWx0ZXJPcGVyYXRp
b25zLCBvcHMsICgpKTsgcmV0dXJuIG9wczsgfQogI2VuZGlmCiBwcml2YXRlOgorICAgIHZvaWQg
c2V0VmlzaXRlZExpbmtDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKGluaGVyaXRlZCwg
dmlzaXRlZExpbmtDb2xvciwgdikgfQorICAgIHZvaWQgc2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV92
aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgdikgfQorICAgIHZvaWQgc2V0VmlzaXRlZExpbmtC
b3JkZXJMZWZ0Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVk
RGF0YSwgbV92aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciwgdikgfQorICAgIHZvaWQgc2V0Vmlz
aXRlZExpbmtCb3JkZXJSaWdodENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5v
bkluaGVyaXRlZERhdGEsIG1fdmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yLCB2KSB9CisgICAg
dm9pZCBzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNF
VF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xv
ciwgdikgfQorICAgIHZvaWQgc2V0VmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvcihjb25zdCBDb2xv
ciYgdikgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3Zpc2l0ZWRMaW5rQm9yZGVy
VG9wQ29sb3IsIHYpIH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKGNvbnN0
IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdmlzaXRlZExpbmtP
dXRsaW5lQ29sb3IsIHYpIH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9y
KGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fbXVsdGlDb2wsIG1fdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsIHYpIH0KKyAgICB2b2lk
IHNldFZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZB
UihyYXJlSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvciwgdikgfQor
ICAgIHZvaWQgc2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNF
VF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgdikgfQor
ICAgIHZvaWQgc2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsg
U0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsIHYp
IH0KKwogICAgIHZvaWQgaW5oZXJpdFVuaWNvZGVCaWRpRnJvbShjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50KSB7IG5vbmluaGVyaXRlZF9mbGFncy5fdW5pY29kZUJpZGkgPSBwYXJlbnQtPm5vbmlu
aGVyaXRlZF9mbGFncy5fdW5pY29kZUJpZGk7IH0KICAgICB2b2lkIGdldFNoYWRvd0V4dGVudChj
b25zdCBTaGFkb3dEYXRhKiwgTGF5b3V0VW5pdCYgdG9wLCBMYXlvdXRVbml0JiByaWdodCwgTGF5
b3V0VW5pdCYgYm90dG9tLCBMYXlvdXRVbml0JiBsZWZ0KSBjb25zdDsKICAgICB2b2lkIGdldFNo
YWRvd0hvcml6b250YWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSosIExheW91dFVuaXQmIGxlZnQs
IExheW91dFVuaXQmIHJpZ2h0KSBjb25zdDsKQEAgLTE1MTgsNyArMTUzMCw3IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgQ29sb3ImIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5o
ZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQogICAgIGNvbnN0IENvbG9yJiB0ZXh0U3Ryb2tl
Q29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9y
OyB9CiAgICAgCi0gICAgQ29sb3IgY29sb3JJbmNsdWRpbmdGYWxsYmFjayhpbnQgY29sb3JQcm9w
ZXJ0eSkgY29uc3Q7CisgICAgQ29sb3IgY29sb3JJbmNsdWRpbmdGYWxsYmFjayhpbnQgY29sb3JQ
cm9wZXJ0eSwgYm9vbCB2aXNpdGVkTGluaykgY29uc3Q7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAg
IGNvbnN0IENvbG9yJiBzdG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdmdTdHlsZSgpLT5zdG9w
Q29sb3IoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlQ29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgZW51bSBQc2V1ZG9JZCB7CiAgICAgTk9QU0VVRE8sIEZJUlNU
X0xJTkUsIEZJUlNUX0xFVFRFUiwgQkVGT1JFLCBBRlRFUiwgU0VMRUNUSU9OLCBGSVJTVF9MSU5F
X0lOSEVSSVRFRCwgU0NST0xMQkFSLAogICAgIC8vIEludGVybmFsIElEcyBmb2xsb3c6CiAgICAg
U0NST0xMQkFSX1RIVU1CLCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ssIFNDUk9M
TEJBUl9UUkFDS19QSUVDRSwgU0NST0xMQkFSX0NPUk5FUiwgUkVTSVpFUiwKLSAgICBJTlBVVF9M
SVNUX0JVVFRPTiwgVklTSVRFRF9MSU5LLAorICAgIElOUFVUX0xJU1RfQlVUVE9OLAogICAgIEFG
VEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQsCiAgICAgRlVMTF9TQ1JFRU4sIEZVTExfU0NSRUVO
X0RPQ1VNRU5ULCBGVUxMX1NDUkVFTl9BTkNFU1RPUiwgQU5JTUFUSU5HX0ZVTExfU0NSRUVOX1RS
QU5TSVRJT04sCiAgICAgRklSU1RfUFVCTElDX1BTRVVET0lEID0gRklSU1RfTElORSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCShy
ZXZpc2lvbiA5NzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5k
ZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTQgKzE1MiwyNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBmaWxsLmFjY2VzcygpLT5vcGFjaXR5ID0gb2JqOwogICAgIH0KIAotICAgIHZv
aWQgc2V0RmlsbFBhaW50KFNWR1BhaW50OjpTVkdQYWludFR5cGUgdHlwZSwgY29uc3QgQ29sb3Im
IGNvbG9yLCBjb25zdCBTdHJpbmcmIHVyaSkKKyAgICB2b2lkIHNldEZpbGxQYWludChTVkdQYWlu
dDo6U1ZHUGFpbnRUeXBlIHR5cGUsIGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgU3RyaW5nJiB1
cmksIGJvb2wgYXBwbHlUb1JlZ3VsYXJTdHlsZSA9IHRydWUsIGJvb2wgYXBwbHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIGlmICghKGZpbGwtPnBhaW50VHlwZSA9
PSB0eXBlKSkKLSAgICAgICAgICAgIGZpbGwuYWNjZXNzKCktPnBhaW50VHlwZSA9IHR5cGU7Ci0g
ICAgICAgIGlmICghKGZpbGwtPnBhaW50Q29sb3IgPT0gY29sb3IpKQotICAgICAgICAgICAgZmls
bC5hY2Nlc3MoKS0+cGFpbnRDb2xvciA9IGNvbG9yOwotICAgICAgICBpZiAoIShmaWxsLT5wYWlu
dFVyaSA9PSB1cmkpKQotICAgICAgICAgICAgZmlsbC5hY2Nlc3MoKS0+cGFpbnRVcmkgPSB1cmk7
CisgICAgICAgIGlmIChhcHBseVRvUmVndWxhclN0eWxlKSB7CisgICAgICAgICAgICBpZiAoIShm
aWxsLT5wYWludFR5cGUgPT0gdHlwZSkpCisgICAgICAgICAgICAgICAgZmlsbC5hY2Nlc3MoKS0+
cGFpbnRUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIGlmICghKGZpbGwtPnBhaW50Q29sb3IgPT0g
Y29sb3IpKQorICAgICAgICAgICAgICAgIGZpbGwuYWNjZXNzKCktPnBhaW50Q29sb3IgPSBjb2xv
cjsKKyAgICAgICAgICAgIGlmICghKGZpbGwtPnBhaW50VXJpID09IHVyaSkpCisgICAgICAgICAg
ICAgICAgZmlsbC5hY2Nlc3MoKS0+cGFpbnRVcmkgPSB1cmk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGFwcGx5VG9WaXNpdGVkTGlua1N0eWxlKSB7CisgICAgICAgICAgICBpZiAoIShmaWxsLT5w
YWludFR5cGUgPT0gdHlwZSkpCisgICAgICAgICAgICAgICAgZmlsbC5hY2Nlc3MoKS0+dmlzaXRl
ZExpbmtQYWludFR5cGUgPSB0eXBlOworICAgICAgICAgICAgaWYgKCEoZmlsbC0+cGFpbnRDb2xv
ciA9PSBjb2xvcikpCisgICAgICAgICAgICAgICAgZmlsbC5hY2Nlc3MoKS0+dmlzaXRlZExpbmtQ
YWludENvbG9yID0gY29sb3I7CisgICAgICAgICAgICBpZiAoIShmaWxsLT5wYWludFVyaSA9PSB1
cmkpKQorICAgICAgICAgICAgICAgIGZpbGwuYWNjZXNzKCktPnZpc2l0ZWRMaW5rUGFpbnRVcmkg
PSB1cmk7CisgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lkIHNldFN0cm9rZU9wYWNpdHkoZmxv
YXQgb2JqKQpAQCAtMTY4LDE0ICsxNzgsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgc3Ryb2tl
LmFjY2VzcygpLT5vcGFjaXR5ID0gb2JqOwogICAgIH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlUGFp
bnQoU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSB0eXBlLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0
IFN0cmluZyYgdXJpKQorICAgIHZvaWQgc2V0U3Ryb2tlUGFpbnQoU1ZHUGFpbnQ6OlNWR1BhaW50
VHlwZSB0eXBlLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFN0cmluZyYgdXJpLCBib29sIGFw
cGx5VG9SZWd1bGFyU3R5bGUgPSB0cnVlLCBib29sIGFwcGx5VG9WaXNpdGVkTGlua1N0eWxlID0g
ZmFsc2UpCiAgICAgewotICAgICAgICBpZiAoIShzdHJva2UtPnBhaW50VHlwZSA9PSB0eXBlKSkK
LSAgICAgICAgICAgIHN0cm9rZS5hY2Nlc3MoKS0+cGFpbnRUeXBlID0gdHlwZTsKLSAgICAgICAg
aWYgKCEoc3Ryb2tlLT5wYWludENvbG9yID09IGNvbG9yKSkKLSAgICAgICAgICAgIHN0cm9rZS5h
Y2Nlc3MoKS0+cGFpbnRDb2xvciA9IGNvbG9yOwotICAgICAgICBpZiAoIShzdHJva2UtPnBhaW50
VXJpID09IHVyaSkpCi0gICAgICAgICAgICBzdHJva2UuYWNjZXNzKCktPnBhaW50VXJpID0gdXJp
OworICAgICAgICBpZiAoYXBwbHlUb1JlZ3VsYXJTdHlsZSkgeworICAgICAgICAgICAgaWYgKCEo
c3Ryb2tlLT5wYWludFR5cGUgPT0gdHlwZSkpCisgICAgICAgICAgICAgICAgc3Ryb2tlLmFjY2Vz
cygpLT5wYWludFR5cGUgPSB0eXBlOworICAgICAgICAgICAgaWYgKCEoc3Ryb2tlLT5wYWludENv
bG9yID09IGNvbG9yKSkKKyAgICAgICAgICAgICAgICBzdHJva2UuYWNjZXNzKCktPnBhaW50Q29s
b3IgPSBjb2xvcjsKKyAgICAgICAgICAgIGlmICghKHN0cm9rZS0+cGFpbnRVcmkgPT0gdXJpKSkK
KyAgICAgICAgICAgICAgICBzdHJva2UuYWNjZXNzKCktPnBhaW50VXJpID0gdXJpOworICAgICAg
ICB9CisgICAgICAgIGlmIChhcHBseVRvVmlzaXRlZExpbmtTdHlsZSkgeworICAgICAgICAgICAg
aWYgKCEoc3Ryb2tlLT5wYWludFR5cGUgPT0gdHlwZSkpCisgICAgICAgICAgICAgICAgc3Ryb2tl
LmFjY2VzcygpLT52aXNpdGVkTGlua1BhaW50VHlwZSA9IHR5cGU7CisgICAgICAgICAgICBpZiAo
IShzdHJva2UtPnBhaW50Q29sb3IgPT0gY29sb3IpKQorICAgICAgICAgICAgICAgIHN0cm9rZS5h
Y2Nlc3MoKS0+dmlzaXRlZExpbmtQYWludENvbG9yID0gY29sb3I7CisgICAgICAgICAgICBpZiAo
IShzdHJva2UtPnBhaW50VXJpID09IHVyaSkpCisgICAgICAgICAgICAgICAgc3Ryb2tlLmFjY2Vz
cygpLT52aXNpdGVkTGlua1BhaW50VXJpID0gdXJpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
dm9pZCBzZXRTdHJva2VEYXNoQXJyYXkoY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIG9iaikKQEAg
LTMyNyw2ICszNDcsMTMgQEAgcHVibGljOgogICAgIFN0cmluZyBtYXJrZXJTdGFydFJlc291cmNl
KCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkUmVzb3VyY2VzLT5tYXJrZXJTdGFydDsgfQogICAg
IFN0cmluZyBtYXJrZXJNaWRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZFJlc291
cmNlcy0+bWFya2VyTWlkOyB9CiAgICAgU3RyaW5nIG1hcmtlckVuZFJlc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gaW5oZXJpdGVkUmVzb3VyY2VzLT5tYXJrZXJFbmQ7IH0KKyAgICAKKyAgICBjb25z
dCBTVkdQYWludDo6U1ZHUGFpbnRUeXBlJiB2aXNpdGVkTGlua0ZpbGxQYWludFR5cGUoKSBjb25z
dCB7IHJldHVybiBmaWxsLT52aXNpdGVkTGlua1BhaW50VHlwZTsgfQorICAgIGNvbnN0IENvbG9y
JiB2aXNpdGVkTGlua0ZpbGxQYWludENvbG9yKCkgY29uc3QgeyByZXR1cm4gZmlsbC0+dmlzaXRl
ZExpbmtQYWludENvbG9yOyB9CisgICAgY29uc3QgU3RyaW5nJiB2aXNpdGVkTGlua0ZpbGxQYWlu
dFVyaSgpIGNvbnN0IHsgcmV0dXJuIGZpbGwtPnZpc2l0ZWRMaW5rUGFpbnRVcmk7IH0KKyAgICBj
b25zdCBTVkdQYWludDo6U1ZHUGFpbnRUeXBlJiB2aXNpdGVkTGlua1N0cm9rZVBhaW50VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0cm9rZS0+dmlzaXRlZExpbmtQYWludFR5cGU7IH0KKyAgICBjb25z
dCBDb2xvciYgdmlzaXRlZExpbmtTdHJva2VQYWludENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3Ry
b2tlLT52aXNpdGVkTGlua1BhaW50Q29sb3I7IH0KKyAgICBjb25zdCBTdHJpbmcmIHZpc2l0ZWRM
aW5rU3Ryb2tlUGFpbnRVcmkoKSBjb25zdCB7IHJldHVybiBzdHJva2UtPnZpc2l0ZWRMaW5rUGFp
bnRVcmk7IH0KIAogICAgIC8vIGNvbnZlbmllbmNlCiAgICAgYm9vbCBoYXNDbGlwcGVyKCkgY29u
c3QgeyByZXR1cm4gIWNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5j
cHAJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NW
R1JlbmRlclN0eWxlRGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAgU3R5
bGVGaWxsRGF0YTo6U3R5bGVGaWxsRGF0YSgpCiAgICAgLCBwYWludFR5cGUoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCkpCiAgICAgLCBwYWludENvbG9yKFNWR1JlbmRlclN0
eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSkKICAgICAsIHBhaW50VXJpKFNWR1JlbmRlclN0
eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCkpCisgICAgLCB2aXNpdGVkTGlua1BhaW50VHlwZShT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpKQorICAgICwgdmlzaXRlZExp
bmtQYWludENvbG9yKFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSkKKyAg
ICAsIHZpc2l0ZWRMaW5rUGFpbnRVcmkoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRV
cmkoKSkKIHsKIH0KIApAQCAtNDksNiArNTIsOSBAQCBTdHlsZUZpbGxEYXRhOjpTdHlsZUZpbGxE
YXRhKGNvbnN0IFN0eWxlCiAgICAgLCBwYWludFR5cGUob3RoZXIucGFpbnRUeXBlKQogICAgICwg
cGFpbnRDb2xvcihvdGhlci5wYWludENvbG9yKQogICAgICwgcGFpbnRVcmkob3RoZXIucGFpbnRV
cmkpCisgICAgLCB2aXNpdGVkTGlua1BhaW50VHlwZShvdGhlci52aXNpdGVkTGlua1BhaW50VHlw
ZSkKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRDb2xvcihvdGhlci52aXNpdGVkTGlua1BhaW50Q29s
b3IpCisgICAgLCB2aXNpdGVkTGlua1BhaW50VXJpKG90aGVyLnZpc2l0ZWRMaW5rUGFpbnRVcmkp
CiB7CiB9CiAKQEAgLTU3LDcgKzYzLDEwIEBAIGJvb2wgU3R5bGVGaWxsRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBTdHkKICAgICByZXR1cm4gb3BhY2l0eSA9PSBvdGhlci5vcGFjaXR5IAogICAgICAg
ICAmJiBwYWludFR5cGUgPT0gb3RoZXIucGFpbnRUeXBlCiAgICAgICAgICYmIHBhaW50Q29sb3Ig
PT0gb3RoZXIucGFpbnRDb2xvcgotICAgICAgICAmJiBwYWludFVyaSA9PSBvdGhlci5wYWludFVy
aTsKKyAgICAgICAgJiYgcGFpbnRVcmkgPT0gb3RoZXIucGFpbnRVcmkKKyAgICAgICAgJiYgdmlz
aXRlZExpbmtQYWludFR5cGUgPT0gb3RoZXIudmlzaXRlZExpbmtQYWludFR5cGUKKyAgICAgICAg
JiYgdmlzaXRlZExpbmtQYWludENvbG9yID09IG90aGVyLnZpc2l0ZWRMaW5rUGFpbnRDb2xvcgor
ICAgICAgICAmJiB2aXNpdGVkTGlua1BhaW50VXJpID09IG90aGVyLnZpc2l0ZWRMaW5rUGFpbnRV
cmk7CiB9CiAKIFN0eWxlU3Ryb2tlRGF0YTo6U3R5bGVTdHJva2VEYXRhKCkKQEAgLTY5LDYgKzc4
LDkgQEAgU3R5bGVTdHJva2VEYXRhOjpTdHlsZVN0cm9rZURhdGEoKQogICAgICwgcGFpbnRUeXBl
KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCkpCiAgICAgLCBwYWludENv
bG9yKFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpKQogICAgICwgcGFp
bnRVcmkoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpKQorICAgICwgdmlz
aXRlZExpbmtQYWludFR5cGUoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUo
KSkKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRDb2xvcihTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0
cm9rZVBhaW50Q29sb3IoKSkKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRVcmkoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpKQogewogfQogCkBAIC04Miw2ICs5NCw5IEBAIFN0
eWxlU3Ryb2tlRGF0YTo6U3R5bGVTdHJva2VEYXRhKGNvbnN0IFMKICAgICAsIHBhaW50VHlwZShv
dGhlci5wYWludFR5cGUpCiAgICAgLCBwYWludENvbG9yKG90aGVyLnBhaW50Q29sb3IpCiAgICAg
LCBwYWludFVyaShvdGhlci5wYWludFVyaSkKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRUeXBlKG90
aGVyLnZpc2l0ZWRMaW5rUGFpbnRUeXBlKQorICAgICwgdmlzaXRlZExpbmtQYWludENvbG9yKG90
aGVyLnZpc2l0ZWRMaW5rUGFpbnRDb2xvcikKKyAgICAsIHZpc2l0ZWRMaW5rUGFpbnRVcmkob3Ro
ZXIudmlzaXRlZExpbmtQYWludFVyaSkKIHsKIH0KIApAQCAtOTQsNyArMTA5LDEwIEBAIGJvb2wg
U3R5bGVTdHJva2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFMKICAgICAgICAgJiYgZGFzaEFycmF5
ID09IG90aGVyLmRhc2hBcnJheQogICAgICAgICAmJiBwYWludFR5cGUgPT0gb3RoZXIucGFpbnRU
eXBlCiAgICAgICAgICYmIHBhaW50Q29sb3IgPT0gb3RoZXIucGFpbnRDb2xvcgotICAgICAgICAm
JiBwYWludFVyaSA9PSBvdGhlci5wYWludFVyaTsKKyAgICAgICAgJiYgcGFpbnRVcmkgPT0gb3Ro
ZXIucGFpbnRVcmkKKyAgICAgICAgJiYgdmlzaXRlZExpbmtQYWludFR5cGUgPT0gb3RoZXIudmlz
aXRlZExpbmtQYWludFR5cGUKKyAgICAgICAgJiYgdmlzaXRlZExpbmtQYWludENvbG9yID09IG90
aGVyLnZpc2l0ZWRMaW5rUGFpbnRDb2xvcgorICAgICAgICAmJiB2aXNpdGVkTGlua1BhaW50VXJp
ID09IG90aGVyLnZpc2l0ZWRMaW5rUGFpbnRVcmk7CiB9CiAKIFN0eWxlU3RvcERhdGE6OlN0eWxl
U3RvcERhdGEoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRl
clN0eWxlRGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TVkdSZW5kZXJTdHlsZURlZnMuaAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw2ICsxMDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1BhaW50OjpT
VkdQYWludFR5cGUgcGFpbnRUeXBlOwogICAgICAgICBDb2xvciBwYWludENvbG9yOwogICAgICAg
ICBTdHJpbmcgcGFpbnRVcmk7CisgICAgICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgdmlzaXRl
ZExpbmtQYWludFR5cGU7CisgICAgICAgIENvbG9yIHZpc2l0ZWRMaW5rUGFpbnRDb2xvcjsKKyAg
ICAgICAgU3RyaW5nIHZpc2l0ZWRMaW5rUGFpbnRVcmk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBTdHlsZUZpbGxEYXRhKCk7CkBAIC0xMzAsNiArMTMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHBhaW50VHlwZTsKICAgICAgICAgQ29s
b3IgcGFpbnRDb2xvcjsKICAgICAgICAgU3RyaW5nIHBhaW50VXJpOworICAgICAgICBTVkdQYWlu
dDo6U1ZHUGFpbnRUeXBlIHZpc2l0ZWRMaW5rUGFpbnRUeXBlOworICAgICAgICBDb2xvciB2aXNp
dGVkTGlua1BhaW50Q29sb3I7CisgICAgICAgIFN0cmluZyB2aXNpdGVkTGlua1BhaW50VXJpOwog
CiAgICAgcHJpdmF0ZTogICAgICAgIAogICAgICAgICBTdHlsZVN0cm9rZURhdGEoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRl
ZERhdGEuY3BwCShyZXZpc2lvbiA5NzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUluaGVyaXRlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBAIFN0eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZWREYXRhKCkKICAgICAsIGxpbmVf
aGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKQogICAgICwgbGlzdF9zdHls
ZV9pbWFnZShSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RTdHlsZUltYWdlKCkpCiAgICAgLCBjb2xv
cihSZW5kZXJTdHlsZTo6aW5pdGlhbENvbG9yKCkpCisgICAgLCB2aXNpdGVkTGlua0NvbG9yKFJl
bmRlclN0eWxlOjppbml0aWFsQ29sb3IoKSkKIHsKIH0KIApAQCAtNDgsMTggKzQ5LDE5IEBAIFN0
eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZWREYXRhKGMKICAgICAsIGxpc3Rfc3R5bGVf
aW1hZ2Uoby5saXN0X3N0eWxlX2ltYWdlKQogICAgICwgZm9udChvLmZvbnQpCiAgICAgLCBjb2xv
cihvLmNvbG9yKQorICAgICwgdmlzaXRlZExpbmtDb2xvcihvLnZpc2l0ZWRMaW5rQ29sb3IpCiB7
CiB9CiAKIGJvb2wgU3R5bGVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlSW5o
ZXJpdGVkRGF0YSYgbykgY29uc3QKIHsKLSAgICByZXR1cm4KLSAgICAgICAgbGluZV9oZWlnaHQg
PT0gby5saW5lX2hlaWdodCAmJgotICAgICAgICBTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50
KGxpc3Rfc3R5bGVfaW1hZ2UuZ2V0KCksIG8ubGlzdF9zdHlsZV9pbWFnZS5nZXQoKSkgJiYKLSAg
ICAgICAgZm9udCA9PSBvLmZvbnQgJiYKLSAgICAgICAgY29sb3IgPT0gby5jb2xvciAmJgotICAg
ICAgICBob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nID09IG8uaG9yaXpvbnRhbF9ib3JkZXJfc3Bh
Y2luZyAmJgotICAgICAgICB2ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZyA9PSBvLnZlcnRpY2FsX2Jv
cmRlcl9zcGFjaW5nOworICAgIHJldHVybiBsaW5lX2hlaWdodCA9PSBvLmxpbmVfaGVpZ2h0Cisg
ICAgICAgICYmIFN0eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQobGlzdF9zdHlsZV9pbWFnZS5n
ZXQoKSwgby5saXN0X3N0eWxlX2ltYWdlLmdldCgpKQorICAgICAgICAmJiBmb250ID09IG8uZm9u
dAorICAgICAgICAmJiBjb2xvciA9PSBvLmNvbG9yCisgICAgICAgICYmIHZpc2l0ZWRMaW5rQ29s
b3IgPT0gby52aXNpdGVkTGlua0NvbG9yCisgICAgICAgICYmIGhvcml6b250YWxfYm9yZGVyX3Nw
YWNpbmcgPT0gby5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nCisgICAgICAgICYmIHZlcnRpY2Fs
X2JvcmRlcl9zcGFjaW5nID09IG8udmVydGljYWxfYm9yZGVyX3NwYWNpbmc7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZUluaGVyaXRlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIEZvbnQgZm9udDsKICAgICBDb2xv
ciBjb2xvcjsKKyAgICBDb2xvciB2aXNpdGVkTGlua0NvbG9yOwogCiBwcml2YXRlOgogICAgIFN0
eWxlSW5oZXJpdGVkRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlTXVsdGlDb2xEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuY3BwCShyZXZpc2lvbiA5NzM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZU11bHRpQ29sRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgU3R5bGVNdWx0aUNvbERhdGE6OlN0eWxlTXVsdGlD
b2xEYXRhKGNvbgogICAgICwgbV9jb3VudChvLm1fY291bnQpCiAgICAgLCBtX2dhcChvLm1fZ2Fw
KQogICAgICwgbV9ydWxlKG8ubV9ydWxlKQorICAgICwgbV92aXNpdGVkTGlua0NvbHVtblJ1bGVD
b2xvcihvLm1fdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpCiAgICAgLCBtX2F1dG9XaWR0aChv
Lm1fYXV0b1dpZHRoKQogICAgICwgbV9hdXRvQ291bnQoby5tX2F1dG9Db3VudCkKICAgICAsIG1f
bm9ybWFsR2FwKG8ubV9ub3JtYWxHYXApCkBAIC01OSw3ICs2MCw3IEBAIFN0eWxlTXVsdGlDb2xE
YXRhOjpTdHlsZU11bHRpQ29sRGF0YShjb24KIGJvb2wgU3R5bGVNdWx0aUNvbERhdGE6Om9wZXJh
dG9yPT0oY29uc3QgU3R5bGVNdWx0aUNvbERhdGEmIG8pIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
d2lkdGggPT0gby5tX3dpZHRoICYmIG1fY291bnQgPT0gby5tX2NvdW50ICYmIG1fZ2FwID09IG8u
bV9nYXAKLSAgICAgICAgICAgJiYgbV9ydWxlID09IG8ubV9ydWxlICYmIG1fYnJlYWtCZWZvcmUg
PT0gby5tX2JyZWFrQmVmb3JlCisgICAgICAgICAgICYmIG1fcnVsZSA9PSBvLm1fcnVsZSAmJiBt
X3Zpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yID09IG8ubV92aXNpdGVkTGlua0NvbHVtblJ1bGVD
b2xvciAmJiBtX2JyZWFrQmVmb3JlID09IG8ubV9icmVha0JlZm9yZQogICAgICAgICAgICAmJiBt
X2F1dG9XaWR0aCA9PSBvLm1fYXV0b1dpZHRoICYmIG1fYXV0b0NvdW50ID09IG8ubV9hdXRvQ291
bnQgJiYgbV9ub3JtYWxHYXAgPT0gby5tX25vcm1hbEdhcAogICAgICAgICAgICAmJiBtX2NvbHVt
blNwYW4gPT0gby5tX2NvbHVtblNwYW4gJiYgbV9icmVha0FmdGVyID09IG8ubV9icmVha0FmdGVy
ICYmIG1fYnJlYWtJbnNpZGUgPT0gby5tX2JyZWFrSW5zaWRlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmgJKHJldmlz
aW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlD
b2xEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIHNob3J0IG1fY291bnQ7CiAgICAgZmxvYXQgbV9nYXA7CiAgICAgQm9yZGVyVmFsdWUg
bV9ydWxlOworICAgIENvbG9yIG1fdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3I7CiAKICAgICBi
b29sIG1fYXV0b1dpZHRoIDogMTsKICAgICBib29sIG1fYXV0b0NvdW50IDogMTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5o
ZXJpdGVkRGF0YS5jcHAJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw2ICs2OCw5IEBAIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6OlN0eWxlUmFyZUluaGVyaXQKICAg
ICAsIHRleHRTdHJva2VXaWR0aChvLnRleHRTdHJva2VXaWR0aCkKICAgICAsIHRleHRGaWxsQ29s
b3Ioby50ZXh0RmlsbENvbG9yKQogICAgICwgdGV4dEVtcGhhc2lzQ29sb3Ioby50ZXh0RW1waGFz
aXNDb2xvcikKKyAgICAsIHZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKG8udmlzaXRlZExpbmtU
ZXh0U3Ryb2tlQ29sb3IpCisgICAgLCB2aXNpdGVkTGlua1RleHRGaWxsQ29sb3Ioby52aXNpdGVk
TGlua1RleHRGaWxsQ29sb3IpCisgICAgLCB2aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yKG8u
dmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvcikKICAgICAsIHRleHRTaGFkb3coby50ZXh0U2hh
ZG93ID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKm8udGV4dFNoYWRvdykpIDogbnVsbHB0cikK
ICAgICAsIGhpZ2hsaWdodChvLmhpZ2hsaWdodCkKICAgICAsIGN1cnNvckRhdGEoby5jdXJzb3JE
YXRhKQpAQCAtMTIzLDYgKzEyNiw5IEBAIGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3Bl
cmF0b3I9PSgKICAgICAgICAgJiYgdGV4dFN0cm9rZVdpZHRoID09IG8udGV4dFN0cm9rZVdpZHRo
CiAgICAgICAgICYmIHRleHRGaWxsQ29sb3IgPT0gby50ZXh0RmlsbENvbG9yCiAgICAgICAgICYm
IHRleHRFbXBoYXNpc0NvbG9yID09IG8udGV4dEVtcGhhc2lzQ29sb3IKKyAgICAgICAgJiYgdmlz
aXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IgPT0gby52aXNpdGVkTGlua1RleHRTdHJva2VDb2xvcgor
ICAgICAgICAmJiB2aXNpdGVkTGlua1RleHRGaWxsQ29sb3IgPT0gby52aXNpdGVkTGlua1RleHRG
aWxsQ29sb3IKKyAgICAgICAgJiYgdmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvciA9PSBvLnZp
c2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29sb3IKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAg
ICAgICAmJiB0YXBIaWdobGlnaHRDb2xvciA9PSBvLnRhcEhpZ2hsaWdodENvbG9yCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZUluaGVyaXRlZERhdGEuaAkocmV2aXNpb24gOTczNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw2ICs1NywxMCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdGV4dFN0cm9rZVdpZHRoOwogICAg
IENvbG9yIHRleHRGaWxsQ29sb3I7CiAgICAgQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3I7CisgICAg
CisgICAgQ29sb3IgdmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3I7CisgICAgQ29sb3IgdmlzaXRl
ZExpbmtUZXh0RmlsbENvbG9yOworICAgIENvbG9yIHZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29s
b3I7ICAgIAogCiAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHRleHRTaGFkb3c7IC8vIE91ciB0ZXh0
IHNoYWRvdyBpbmZvcm1hdGlvbiBmb3Igc2hhZG93ZWQgdGV4dCBkcmF3aW5nLgogICAgIEF0b21p
Y1N0cmluZyBoaWdobGlnaHQ7IC8vIEFwcGxlLXNwZWNpZmljIGV4dGVuc2lvbiBmb3IgY3VzdG9t
IGhpZ2hsaWdodCByZW5kZXJpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCShyZXZp
c2lvbiA5NzM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25JCiAgICAgLCBtX21hc2soRmlsbExh
eWVyKE1hc2tGaWxsTGF5ZXIpKQogICAgICwgbV9wYWdlU2l6ZSgpCiAgICAgLCBtX3dyYXBTaGFw
ZShSZW5kZXJTdHlsZTo6aW5pdGlhbFdyYXBTaGFwZSgpKQorICAgICwgbV92aXNpdGVkTGlua0Jh
Y2tncm91bmRDb2xvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tncm91bmRDb2xvcigpKQogICAg
ICwgbV9mbG93VGhyZWFkKFJlbmRlclN0eWxlOjppbml0aWFsRmxvd1RocmVhZCgpKQogICAgICwg
bV9yZWdpb25UaHJlYWQoUmVuZGVyU3R5bGU6OmluaXRpYWxSZWdpb25UaHJlYWQoKSkKICAgICAs
IG1fcmVnaW9uT3ZlcmZsb3coUmVuZGVyU3R5bGU6OmluaXRpYWxSZWdpb25PdmVyZmxvdygpKQpA
QCAtOTcsNiArOTgsMTIgQEAgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9u
SQogICAgICwgbV9tYXNrQm94SW1hZ2Uoby5tX21hc2tCb3hJbWFnZSkKICAgICAsIG1fcGFnZVNp
emUoby5tX3BhZ2VTaXplKQogICAgICwgbV93cmFwU2hhcGUoby5tX3dyYXBTaGFwZSkKKyAgICAs
IG1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3Ioby5tX3Zpc2l0ZWRMaW5rQmFja2dyb3VuZENv
bG9yKQorICAgICwgbV92aXNpdGVkTGlua091dGxpbmVDb2xvcihvLm1fdmlzaXRlZExpbmtCYWNr
Z3JvdW5kQ29sb3IpCisgICAgLCBtX3Zpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKG8ubV92aXNp
dGVkTGlua0JvcmRlckxlZnRDb2xvcikKKyAgICAsIG1fdmlzaXRlZExpbmtCb3JkZXJSaWdodENv
bG9yKG8ubV92aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpCisgICAgLCBtX3Zpc2l0ZWRMaW5r
Qm9yZGVyVG9wQ29sb3Ioby5tX3Zpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IpCisgICAgLCBtX3Zp
c2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3Ioby5tX3Zpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29s
b3IpCiAgICAgLCBtX2Zsb3dUaHJlYWQoby5tX2Zsb3dUaHJlYWQpCiAgICAgLCBtX3JlZ2lvblRo
cmVhZChvLm1fcmVnaW9uVGhyZWFkKQogICAgICwgbV9yZWdpb25PdmVyZmxvdyhvLm1fcmVnaW9u
T3ZlcmZsb3cpCkBAIC0xNzMsNiArMTgwLDEyIEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YTo6b3BlcmF0b3IKICAgICAgICAgJiYgKG1fcmVnaW9uVGhyZWFkID09IG8ubV9yZWdpb25U
aHJlYWQpCiAgICAgICAgICYmIChtX3JlZ2lvbk92ZXJmbG93ID09IG8ubV9yZWdpb25PdmVyZmxv
dykKICAgICAgICAgJiYgKG1fd3JhcFNoYXBlID09IG8ubV93cmFwU2hhcGUpCisgICAgICAgICYm
IG1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IgPT0gby5tX3Zpc2l0ZWRMaW5rQmFja2dyb3Vu
ZENvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtPdXRsaW5lQ29sb3IgPT0gby5tX3Zpc2l0
ZWRMaW5rT3V0bGluZUNvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29s
b3IgPT0gby5tX3Zpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yCisgICAgICAgICYmIG1fdmlzaXRl
ZExpbmtCb3JkZXJSaWdodENvbG9yID09IG8ubV92aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IK
KyAgICAgICAgJiYgbV92aXNpdGVkTGlua0JvcmRlclRvcENvbG9yID09IG8ubV92aXNpdGVkTGlu
a0JvcmRlclRvcENvbG9yCisgICAgICAgICYmIG1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xv
ciA9PSBvLm1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcgogICAgICAgICAmJiAobV9yZWdp
b25CcmVha0FmdGVyID09IG8ubV9yZWdpb25CcmVha0FmdGVyKQogICAgICAgICAmJiAobV9yZWdp
b25CcmVha0JlZm9yZSA9PSBvLm1fcmVnaW9uQnJlYWtCZWZvcmUpCiAgICAgICAgICYmIChtX3Jl
Z2lvbkJyZWFrSW5zaWRlID09IG8ubV9yZWdpb25CcmVha0luc2lkZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmgJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5
LDYgKzEyOSwxMyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoU2l6ZSBtX3BhZ2VTaXplOwogCiAgICAg
UmVmUHRyPENTU1dyYXBTaGFwZT4gbV93cmFwU2hhcGU7CisgICAgCisgICAgQ29sb3IgbV92aXNp
dGVkTGlua0JhY2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX3Zpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yOworICAgIENvbG9yIG1fdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3I7CisgICAgQ29sb3Ig
bV92aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3I7CisgICAgQ29sb3IgbV92aXNpdGVkTGlua0Jv
cmRlclRvcENvbG9yOworICAgIENvbG9yIG1fdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcjsK
IAogICAgIEF0b21pY1N0cmluZyBtX2Zsb3dUaHJlYWQ7CiAgICAgQXRvbWljU3RyaW5nIG1fcmVn
aW9uVGhyZWFkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk3MzUyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDE1ICs4MSwxMiBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiByZXF1ZXN0CiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlVmlzaXRlZExpbmsp
IHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHZpc2l0ZWRTdHlsZSA9IHN0eWxlLT5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShWSVNJVEVEX0xJTkspOwotICAgICAgICBBU1NFUlQodmlzaXRlZFN0eWxlKTsK
LQotICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnVmlzaXRlZFN0eWxlID0gdmlzaXRl
ZFN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHZpc2l0
ZWRQYWludFR5cGUgPSBhcHBseVRvRmlsbCA/IHN2Z1Zpc2l0ZWRTdHlsZS0+ZmlsbFBhaW50VHlw
ZSgpIDogc3ZnVmlzaXRlZFN0eWxlLT5zdHJva2VQYWludFR5cGUoKTsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgY29kZSBkb2Vzbid0IHN1cHBvcnQgdGhlIHVyaSBjb21wb25lbnQgb2YgdGhlIHZp
c2l0ZWQgbGluayBwYWludCwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcwMDA2CisgICAgICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgdmlzaXRlZFBhaW50VHlwZSA9
IGFwcGx5VG9GaWxsID8gc3ZnU3R5bGUtPnZpc2l0ZWRMaW5rRmlsbFBhaW50VHlwZSgpIDogc3Zn
U3R5bGUtPnZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnRUeXBlKCk7CiAKICAgICAgICAgLy8gRm9yIFNW
R19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SLCAnY29sb3InIGFscmVhZHkgY29udGFpbnMgdGhlICd2
aXNpdGVkQ29sb3InLgogICAgICAgICBpZiAodmlzaXRlZFBhaW50VHlwZSA8IFNWR1BhaW50OjpT
VkdfUEFJTlRUWVBFX1VSSV9OT05FICYmIHZpc2l0ZWRQYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNW
R19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKSB7Ci0gICAgICAgICAgICBjb25zdCBDb2xvciYgdmlz
aXRlZENvbG9yID0gYXBwbHlUb0ZpbGwgPyBzdmdWaXNpdGVkU3R5bGUtPmZpbGxQYWludENvbG9y
KCkgOiBzdmdWaXNpdGVkU3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKTsKKyAgICAgICAgICAgIGNv
bnN0IENvbG9yJiB2aXNpdGVkQ29sb3IgPSBhcHBseVRvRmlsbCA/IHN2Z1N0eWxlLT52aXNpdGVk
TGlua0ZpbGxQYWludENvbG9yKCkgOiBzdmdTdHlsZS0+dmlzaXRlZExpbmtTdHJva2VQYWludENv
bG9yKCk7CiAgICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICBjb2xvciA9IENvbG9yKHZpc2l0ZWRDb2xvci5yZWQoKSwgdmlzaXRlZENvbG9yLmdy
ZWVuKCksIHZpc2l0ZWRDb2xvci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="108430"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>