<?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>214158</bug_id>
          
          <creation_ts>2020-07-09 13:02:14 -0700</creation_ts>
          <short_desc>Part 4 of SimpleColor and SRGBA&lt;uint8_t&gt; are essentially the same - let&apos;s converge them</short_desc>
          <delta_ts>2020-07-10 10:37:13 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1670241</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 13:02:14 -0700</bug_when>
    <thetext>Part 4 of SimpleColor and SRGBA&lt;uint8_t&gt; are essentially the same - let&apos;s converge them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670256</commentid>
    <comment_count>1</comment_count>
      <attachid>403914</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 13:40:15 -0700</bug_when>
    <thetext>Created attachment 403914
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670307</commentid>
    <comment_count>2</comment_count>
      <attachid>403925</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 15:41:55 -0700</bug_when>
    <thetext>Created attachment 403925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670346</commentid>
    <comment_count>3</comment_count>
      <attachid>403938</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 18:14:46 -0700</bug_when>
    <thetext>Created attachment 403938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670351</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 18:29:38 -0700</bug_when>
    <thetext>Biggest SimpleColor-related thing left to do after this is figure out what to do with the  makeSimpleColor() family of functions.

They currently are used for the following:

1) Construction of SRGBA&lt;uint8_t&gt; from constants:

     e.g. static constexpr auto cyan = makeSimpleColor(0, 255, 255); (in Color.h)

2) Construction of SRGBA&lt;uint8_t&gt; from known uint8_t values:

     e.g. makeSimpleColor(colorArray[0], colorArray[1], colorArray[2], alphaComponent) (parseRGBParameters in CSSPropertyParserHelpers.cpp)

3) Construction of SRGBA&lt;uint8_t&gt; from ints that could be out of range and therefore need to be clamped:

     e.g. makeSimpleColor(r, g, b); (AXIsolatedObject::initializeAttributeData in AXIsolatedObject.cpp)

4) Construction of SRGBA&lt;uint8_t&gt; from a SRGBA&lt;float&gt;. in theory, these should only need to be multiplied by 255 (per component) but currently also get clamped.

     e.g. makeSimpleColor(SRGBA { r, g, b, a }) (CanvasRenderingContext2DBase::setShadow in CanvasRenderingContext2DBase.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670352</commentid>
    <comment_count>5</comment_count>
      <attachid>403939</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 18:44:49 -0700</bug_when>
    <thetext>Created attachment 403939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670357</commentid>
    <comment_count>6</comment_count>
      <attachid>403942</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-09 19:56:27 -0700</bug_when>
    <thetext>Created attachment 403942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670442</commentid>
    <comment_count>7</comment_count>
      <attachid>403942</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 07:51:11 -0700</bug_when>
    <thetext>Comment on attachment 403942
Patch

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

&gt; Source/WebCore/platform/graphics/Color.h:294
&gt; +
&gt; +
&gt; +    if constexpr (std::is_same_v&lt;T, float&gt;)

Excess blank line here. I would consider omitting the blank lines entirely.

&gt; Source/WebCore/platform/graphics/Color.h:296
&gt; +    else if constexpr (std::is_same_v&lt;T, uint8_t&gt;)

No need for else here. Also, it seems logical to me to check uint8_t first, before float.

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:97
&gt; +template&lt;typename ColorType, typename Functor&gt; ColorType colorByModifingEachNonAlphaComponent(const ColorType&amp; color, Functor&amp;&amp; functor)

I still prefer a style where we have exposition, declarations of the functions and what they are for, followed by implementation, function definitions. This file seems to mix the two and I think we could do better.

Given this calls the function and does not take ownership, would const Functor&amp; be better than Functor&amp;&amp;?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:99
&gt; +    // FIXME: This should be made to work with color&apos;s that don&apos;t use the names red, green, and blue for their channels.

&quot;color&apos;s&quot; -&gt; &quot;colors&quot;.

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:104
&gt; +    ColorType copy = color;
&gt; +    copy.red = functor(color.red);
&gt; +    copy.green = functor(color.green);
&gt; +    copy.blue = functor(color.blue);
&gt; +    return copy;

Does this generate efficient code? Seems like colors are first copied and then overwritten, but maybe the compiler can optimize that away. I Guess there are other examples below doing the same.

Also, for this and other cases below I suggest:

    auto copy = color;

Instead of writing out ColorType.

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:133
&gt; +    ColorType copy = color;

auto

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:140
&gt; +    ColorType copy = color;

auto

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:153
&gt; +constexpr uint8_t invertComponent(uint8_t component)
&gt; +{
&gt; +    return 255 - component;
&gt; +}
&gt; +
&gt; +constexpr float invertComponent(float component)
&gt; +{
&gt; +    return 1.0f - component;
&gt; +}

This kind of overloading, where numeric values depend on type, still doesn’t seem quite right to me. What happens with the 255.0f floating point code we have in some places?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:157
&gt; +    ColorType copy = colorByModifingEachNonAlphaComponent(color, [] (auto component) {

auto

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:166
&gt; +    ColorType copy = colorByModifingEachNonAlphaComponent(color, [] (auto component) {

auto

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:54
&gt; +static Optional&lt;SRGBA&lt;uint8_t&gt;&gt; makeSimpleColorFromCGColor(CGColorRef color)

Seems like this function needs a name that better communicates its limitations, because it:

- Reinterprets color components as either gray scale or sRGBA, based only on component *count*, ignoring color space. That&apos;s a bad bug. I guess that&apos;s what &quot;FIXME: ExtendedColor - needs to handle color spaces&quot; means, but it seems like an understatement.

- Clamps to the sRGBA gamut, loses anything outside the 0.0-1.0, ruining colors for HDR. That makes sense, I suppose since the return type is SRGBA&lt;uint8_t&gt;, but no word &quot;clamp&quot; in the title.

- Rounds color channels to 0-255 integers, losing any precision beyond that. Makes sense since the return type is SRGBA&lt;uint8_t&gt;.

I suppose &quot;SimpleColor&quot; is saying that? Also, no need for &quot;FromCGColor&quot; in this function name. This is C++, not C.

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:58
&gt;      // FIXME: ExtendedColor - needs to handle color spaces.
&gt; +    if (!color)
&gt; +        return WTF::nullopt;

Should leave a blank line after the comment since it’s about the whole function, not the first paragraph.

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:87
&gt; +    : Color(makeSimpleColorFromCGColor(color))

Not obvious to me that this will always be the right way to handle conversion from all CGColorRef objects. Some might need representation as extended colors. So probably needs to be a named constructor?

&gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:92
&gt; +    : Color(makeSimpleColorFromCGColor(color), tag)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670458</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 08:53:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 403942 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403942&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:294
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +    if constexpr (std::is_same_v&lt;T, float&gt;)
&gt; 
&gt; Excess blank line here. I would consider omitting the blank lines entirely.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:296
&gt; &gt; +    else if constexpr (std::is_same_v&lt;T, uint8_t&gt;)
&gt; 
&gt; No need for else here. Also, it seems logical to me to check uint8_t first,
&gt; before float.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:97
&gt; &gt; +template&lt;typename ColorType, typename Functor&gt; ColorType colorByModifingEachNonAlphaComponent(const ColorType&amp; color, Functor&amp;&amp; functor)
&gt; 
&gt; I still prefer a style where we have exposition, declarations of the
&gt; functions and what they are for, followed by implementation, function
&gt; definitions. This file seems to mix the two and I think we could do better.

Yeah, fixed.

&gt; 
&gt; Given this calls the function and does not take ownership, would const
&gt; Functor&amp; be better than Functor&amp;&amp;?

This is another of those universal references (since Functor is a deduced type), not really an r-value. 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:99
&gt; &gt; +    // FIXME: This should be made to work with color&apos;s that don&apos;t use the names red, green, and blue for their channels.
&gt; 
&gt; &quot;color&apos;s&quot; -&gt; &quot;colors&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:104
&gt; &gt; +    ColorType copy = color;
&gt; &gt; +    copy.red = functor(color.red);
&gt; &gt; +    copy.green = functor(color.green);
&gt; &gt; +    copy.blue = functor(color.blue);
&gt; &gt; +    return copy;
&gt; 
&gt; Does this generate efficient code? Seems like colors are first copied and
&gt; then overwritten, but maybe the compiler can optimize that away. I Guess
&gt; there are other examples below doing the same.

From my testing, the compiler generates the same code as if you passed in a reference.

&gt; 
&gt; Also, for this and other cases below I suggest:
&gt; 
&gt;     auto copy = color;
&gt; 
&gt; Instead of writing out ColorType.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:133
&gt; &gt; +    ColorType copy = color;
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:140
&gt; &gt; +    ColorType copy = color;
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:153
&gt; &gt; +constexpr uint8_t invertComponent(uint8_t component)
&gt; &gt; +{
&gt; &gt; +    return 255 - component;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +constexpr float invertComponent(float component)
&gt; &gt; +{
&gt; &gt; +    return 1.0f - component;
&gt; &gt; +}
&gt; 
&gt; This kind of overloading, where numeric values depend on type, still doesn’t
&gt; seem quite right to me. What happens with the 255.0f floating point code we
&gt; have in some places?

I hear you, but we really only have the 255.0f floating point code in two places:

1) for a brief moment when parsing css colors and we parsed a percentage, but we immediately convert that to a uint8_t via convertPrescaledToComponentByte.

2) In the intermediate state of the animation functions of SVGAnimationColorFunction.

I think we can and should do better here, but I think the problem is relatively contained in the interim.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:157
&gt; &gt; +    ColorType copy = colorByModifingEachNonAlphaComponent(color, [] (auto component) {
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:166
&gt; &gt; +    ColorType copy = colorByModifingEachNonAlphaComponent(color, [] (auto component) {
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:54
&gt; &gt; +static Optional&lt;SRGBA&lt;uint8_t&gt;&gt; makeSimpleColorFromCGColor(CGColorRef color)
&gt; 
&gt; Seems like this function needs a name that better communicates its
&gt; limitations, because it:
&gt; 
&gt; - Reinterprets color components as either gray scale or sRGBA, based only on
&gt; component *count*, ignoring color space. That&apos;s a bad bug. I guess that&apos;s
&gt; what &quot;FIXME: ExtendedColor - needs to handle color spaces&quot; means, but it
&gt; seems like an understatement.
&gt; 
&gt; - Clamps to the sRGBA gamut, loses anything outside the 0.0-1.0, ruining
&gt; colors for HDR. That makes sense, I suppose since the return type is
&gt; SRGBA&lt;uint8_t&gt;, but no word &quot;clamp&quot; in the title.
&gt; 
&gt; - Rounds color channels to 0-255 integers, losing any precision beyond that.
&gt; Makes sense since the return type is SRGBA&lt;uint8_t&gt;.
&gt; 
&gt; I suppose &quot;SimpleColor&quot; is saying that? Also, no need for &quot;FromCGColor&quot; in
&gt; this function name. This is C++, not C.

Renamed to roundAndClampToSRGBALossy() for now. Will want to keep iterating on this name (and the other makeSimpleColor() names).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:58
&gt; &gt;      // FIXME: ExtendedColor - needs to handle color spaces.
&gt; &gt; +    if (!color)
&gt; &gt; +        return WTF::nullopt;
&gt; 
&gt; Should leave a blank line after the comment since it’s about the whole
&gt; function, not the first paragraph.

Haha. I went back and forth on this blank lines a few times. You are definitely right, but for some reason the blank space kept bugging me (I&apos;ll get over it).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ColorCG.cpp:87
&gt; &gt; +    : Color(makeSimpleColorFromCGColor(color))
&gt; 
&gt; Not obvious to me that this will always be the right way to handle
&gt; conversion from all CGColorRef objects. Some might need representation as
&gt; extended colors. So probably needs to be a named constructor?

I think this current model is in fact the wrong way to go long term, and we instead maintain the color space and gamut of the CGColorRef (and by extension NSColor/UIColor) by default. It&apos;s hard for me to imagine a situation where we would explicitly want to lose the precision. 

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670461</commentid>
    <comment_count>9</comment_count>
      <attachid>403942</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 08:59:22 -0700</bug_when>
    <thetext>Comment on attachment 403942
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ColorUtilities.h:97
&gt;&gt;&gt; +template&lt;typename ColorType, typename Functor&gt; ColorType colorByModifingEachNonAlphaComponent(const ColorType&amp; color, Functor&amp;&amp; functor)
&gt;&gt; 
&gt;&gt; I still prefer a style where we have exposition, declarations of the functions and what they are for, followed by implementation, function definitions. This file seems to mix the two and I think we could do better.
&gt;&gt; 
&gt;&gt; Given this calls the function and does not take ownership, would const Functor&amp; be better than Functor&amp;&amp;?
&gt; 
&gt; Yeah, fixed.

Let me re-ask a question:

Given this calls the function and does not take ownership, would const Functor&amp; be better than Functor&amp;&amp;? How do we benefit from using a universal reference rather than a const&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670475</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 09:45:50 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 403942 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403942&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/ColorUtilities.h:97
&gt; &gt;&gt;&gt; +template&lt;typename ColorType, typename Functor&gt; ColorType colorByModifingEachNonAlphaComponent(const ColorType&amp; color, Functor&amp;&amp; functor)
&gt; &gt;&gt; 
&gt; &gt;&gt; I still prefer a style where we have exposition, declarations of the functions and what they are for, followed by implementation, function definitions. This file seems to mix the two and I think we could do better.
&gt; &gt;&gt; 
&gt; &gt;&gt; Given this calls the function and does not take ownership, would const Functor&amp; be better than Functor&amp;&amp;?
&gt; &gt; 
&gt; &gt; Yeah, fixed.
&gt; 
&gt; Let me re-ask a question:
&gt; 
&gt; Given this calls the function and does not take ownership, would const
&gt; Functor&amp; be better than Functor&amp;&amp;? How do we benefit from using a universal
&gt; reference rather than a const&amp;?

This is a good question, and I am afraid I am guilty of cargo-culting here without truly understanding the deep fundamentals. In looking at examples that seem similar-ish from the standard library, like std::apply() or std::invoke(), that take their function objects as Functor&amp;&amp;, I latched on. But that is not a good reason to do it.

Thinking a bit more deeply about it, the example I can come up with where using Function&amp;&amp; would work, but const Function&amp; would not, is that of a mutable functor like the following:

struct SampleFunctor {
    int value = 0;
    void operator()()
    {
        printf(&quot;Value is %d\n&quot;, value++);
    }
};

template&lt;typename Functor&gt; decltype(auto) callFunctor(const Functor&amp; f)
{
    f();
    f();
}

int main (int argc, char const *argv[])
{
    callFunctor(SampleFunctor());
    return 0;
}


This fails to compile with the following errors:

universal.cpp:13:5: error: no matching function for call to object of type &apos;const SampleFunctor&apos;
    f();
    ^
universal.cpp:19:5: note: in instantiation of function template specialization &apos;callFunctor&lt;SampleFunctor&gt;&apos; requested here
    callFunctor(SampleFunctor());
    ^
universal.cpp:5:10: note: candidate function not viable: &apos;this&apos; argument has type &apos;const SampleFunctor&apos;, but method is not marked const
    void operator()()


Changing the type to Functor&amp;&amp; works as you might expect.

This might be too contrived an example to worry about the case, I&apos;m not entirely sure. There might be intrinsic value for the project to map type&amp;&amp; to the concept taking ownership and avoiding universal references unless really needed (for things like perfect forwarding).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670476</commentid>
    <comment_count>11</comment_count>
      <attachid>403973</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-10 09:49:27 -0700</bug_when>
    <thetext>Created attachment 403973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670493</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 10:32:15 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; In looking at examples
&gt; that seem similar-ish from the standard library, like std::apply() or
&gt; std::invoke(), that take their function objects as Functor&amp;&amp;, I latched on.

That’s pretty good circumstantial evidence that this is the correct pattern. Would be great to have a deeper understanding of why; not sure I am *quite* there yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670496</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-10 10:36:41 -0700</bug_when>
    <thetext>Committed r264230: &lt;https://trac.webkit.org/changeset/264230&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403973.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670497</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-10 10:37:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/65349835&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403914</attachid>
            <date>2020-07-09 13:40:15 -0700</date>
            <delta_ts>2020-07-09 15:41:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-214158-20200709134015.patch</filename>
            <type>text/plain</type>
            <size>79990</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MSBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQIC0gTmVlZCB0byBicmVhayB0aGlzIHVwIGEgYml0IGZvciBsYW5kaW5nXQorICAgIAor
ICAgICAgICAtIFJlbW92ZSBTaW1wbGVDb2xvciBlbnRpcmVseSAodGhpcyBwYXJ0IHNob3VsZCBi
ZSBpdCdzIG93biBwYXRjaCkKKyAgICAgICAgICAgIC0gSW4gQ29sb3IsIHJlbmFtZWQgZnVuY3Rp
b25zIC8gdmFyaWFibGUgcmVmZXJlbmNpbmcgU2ltcGxlQ29sb3Igd2l0aCBuZXcgbmFtZSwgSW5s
aW5lQ29sb3IuCisKKyAgICAgICAgLSBSZXdvcmsgRXh0ZW5kZWRDb2xvciBzdXBwb3J0ICh0aGlz
IHBhcnQgc2hvdWxkIGJlIGl0J3Mgb3duIHBhdGNoKQorICAgICAgICAgICAgLSBBZGQgQ29sb3Ig
Y29uc3RydWN0b3JzIHdoaWNoIHRha2UgU1JHQkE8ZmxvYXQ+LCBEaXNwbGF5UDM8ZmxvYXQ+LCBl
dGMuCisgICAgICAgICAgICAgICAgLSBJZiBTUkdCQTxmbG9hdD4gaXMgcmVwcmVzZW50YWJsZSBh
cyBhIFNSR0JBPHVpbnQ4X3Q+LCBzdG9yZSBpbmxpbmUuCisgICAgICAgICAgICAtIEFkZCBoZWxw
ZXIgZnVuY3Rpb25zLCBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoKSBhbmQgRXh0ZW5kZWRD
b2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoKSwgCisgICAgICAgICAgICAgIHdoaWNoIGNhbiBi
ZSB1c2VkIHRvIGltcGxlbWVudCBmdW5jdGlvbmFsaXR5IGdlbmVyaWNhbGx5IHVzaW5nIENvbG9y
VXRpbGl0aWVzIGhlbHBlcnMgKGUuZy4KKyAgICAgICAgICAgICAgQ29sb3I6OmludmVydGVkQ29s
b3JXaXRoQWxwaGEoKSBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIGFsbCBjb2xvciB0eXBlcyB1c2lu
ZyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhCisgICAgICAgICAgICAgIGZyb20gQ29s
b3JVdGlsaXRpZXMuaCkKKyAgICAgICAgICAgICAgICAtIFRoaXMgYWxsb3cgdXMgdG8gcmVkdWNl
IHRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIHRoYXQgRXh0ZW5kZWRDb2xvciBleHBvc2VzIHRvIHRo
ZSBiYXJlIG1pbmltdW0uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVuYW1lIENvbG9yQnVp
bGRlci5oIHRvIENvbG9yQWRhcHRvci5oLCBpdCB3YXNuJ3QgcmVhbGx5IGJ1aWxkaW5nIGFueXRo
aW5nLgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2Vy
Ojpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFt
ZXRlcnMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmg6
CisgICAgICAgIC0gVXBkYXRlIHRvIGNhbGwgbmV3IENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcg
U1JHQkE8ZmxvYXQ+IGFuZCBEaXNwbGF5UDM8ZmxvYXQ+IGZvciBleHRlbmRlZCBjb2xvcnMuCisg
ICAgICAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGxzIHRvIG1ha2VTaW1wbGVDb2xvci4KKyAg
ICAgICAgLSBBZGQgcGFyc2luZyBoZWxwZXJzIHRoYXQgb3BlcmF0ZSBvbiBmbG9hdHMgZGlyZWN0
bHksIHRvIG1ha2UgY29sb3IgY29uc3RydWN0aW9uIGEgYml0IGNsZWFuZXIgKGZldyBjYXN0cyku
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0
YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWxJZ25v
cmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9u
ZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0lubGluZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldEV4dGVuZGVkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2tDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNXaGl0ZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNTaW1wbGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzU2ltcGxlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRTaW1wbGVDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3JBZGFwdG9yOjpDb2xvckFkYXB0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3JBZGFwdG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvckFkYXB0b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oOiBSZW1vdmVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjp0b1NSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnRvTGluZWFyU1JHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9EaXNwbGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJEaXNw
bGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFs
aXphdGlvbkZvckNTUyk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRNTCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Zm9yRWFjaE5vbkFscGhhQ29tcG9u
ZW50KTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0
aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFRvQ29tcG9uZW50Qnl0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnRDb21wb25lbnRCeXRlVG88dWludDhfdD4pOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydENvbXBvbmVudEZsb2F0VG88dWludDhfdD4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydENvbXBvbmVudEZsb2F0VG88ZmxvYXQ+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
V2l0aE92ZXJyaWRlbkFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydENvbXBvbmVudCk6
CisgICAgICAgIChXZWJDb3JlOjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VFeHRlbmRlZENv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUgY29uc3QpOgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6U2ltcGxlQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNv
bXBvbmVudEFzRmxvYXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Q29sb3I6OmlzT3BhcXVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUNvbG9yOjppc1Zpc2libGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JBIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvckZyb21DR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpuc0NvbG9yKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246
OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIGZvciByZXdvcmtlZCBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQuCisKIDIwMjAtMDctMDkgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXVtN
ZWRpYUZvdW5kYXRpb25dIFVzZSAvREVMQVlMT0FEIGZvciBtZi5kbGwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQkocmV2aXNpb24gMjY0MTg4KQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtMTA4Miw3ICsxMDgyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2
YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbXBvbmVudHMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjIwOCw3ICsyMjA4LDcgQEAKIAkJN0FGOUIyMEYxOENGQjVG
NDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVn
aW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFw
aGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICov
OyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAw
MjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk3QzE0QTAwNzI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE0QTAw
NjI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MxNEEwMDcyNEI1RkUyMTAwMUE2QzZDIC8q
IENvbG9yQWRhcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxNEEwMDYyNEI1RkUyMTAwMUE2QzZDIC8qIENvbG9yQWRhcHRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTg0M0ZFMUM4Qjcy
ODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxOTNCQkIx
RjVFMEVFRDAwODhGM0U2IC8qIENhbnZhc0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxOTNCQjYxRjVFMEVCOTAwODhGM0U2IC8qIENh
bnZhc0RpcmVjdGlvbi5oICovOyB9OwogCQk3QzE5M0JCQzFGNUUwRUVEMDA4OEYzRTYgLyogQ2Fu
dmFzRmlsbFJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMTkzQkExMUY1RTBFQUIwMDg4RjNFNiAvKiBDYW52YXNGaWxsUnVsZS5oICovOyB9OwpA
QCAtOTkyOCw3ICs5OTI4LDcgQEAKIAkJN0MwQ0VGMkUxRTRBNTgzMjAwOERFQjgwIC8qIEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzBDRUYyRjFFNEE1OEFEMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3Rv
ckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01Db25z
dHJ1Y3RvckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBDRUYzMDFF
NEE1OEYxMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MxNEEwMDYyNEI1RkUyMTAw
MUE2QzZDIC8qIENvbG9yQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvckJ1aWxkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxNEEwMDYyNEI1RkUyMTAwMUE2QzZDIC8q
IENvbG9yQWRhcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvckFkYXB0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkIxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9maWxsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8q
IEF1dG9maWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9maWxsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTkzQjlBMUY1RTBFQTcwMDg4RjNFNiAv
KiBDYW52YXNEcmF3SW1hZ2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc0RyYXdJ
bWFnZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTUzMCw5ICsyNTUzMCw5
IEBACiAJCQkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggKi8sCiAJ
CQkJQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLywKIAkJCQlCMjc1MzUz
OTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKKwkJCQk3QzE0QTAwNjI0QjVGRTIxMDAx
QTZDNkMgLyogQ29sb3JBZGFwdG9yLmggKi8sCiAJCQkJN0MxQjRBNjUyNEE5OTc1OTAwMzM3MjdG
IC8qIENvbG9yQmxlbmRpbmcuY3BwICovLAogCQkJCTdDMUI0QTY3MjRBOTk3NjYwMDMzNzI3RiAv
KiBDb2xvckJsZW5kaW5nLmggKi8sCi0JCQkJN0MxNEEwMDYyNEI1RkUyMTAwMUE2QzZDIC8qIENv
bG9yQnVpbGRlci5oICovLAogCQkJCTdDQUM2QUVDMjQ3RjFDNTEwMEU2MUQ1OSAvKiBDb2xvckNv
bXBvbmVudHMuaCAqLywKIAkJCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252
ZXJzaW9uLmNwcCAqLywKIAkJCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252
ZXJzaW9uLmggKi8sCkBAIC0zMDEyMCw3ICszMDEyMCw3IEBACiAJCQkJNDZFQkVBMDIxQjdENEQ2
NTAwQkU0OTQxIC8qIENvbGxlY3Rpb25UcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
QzQ0MjAwMEY4MTNBRTEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjI3NTM1NjcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggaW4gSGVhZGVycyAqLywK
LQkJCQk3QzE0QTAwNzI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3QzE0QTAwNzI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JBZGFwdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMzMwQTIyMzEzRUMxOTZCMDAwMEI0NUIgLyogQ29sb3JDaG9vc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMzdDREVCRDE0OUVGMjAzMDA0MjA5MEQgLyogQ29sb3JD
aG9vc2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDhEMkFBNTIxNTk3NDBEMDBDNjc1
MkIgLyogQ29sb3JDb2NvYS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZp
c2lvbiAyNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG1f
Y2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAg
fQogCi0gICAgYm9vbCBjb25zdW1lTnVtYmVyUmF3KGRvdWJsZSYgcmVzdWx0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFJlc3VsdD4gYm9vbCBjb25zdW1lTnVtYmVyUmF3KFJlc3VsdCYgcmVzdWx0
KQogICAgIHsKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdv
cnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNzYsNiArMTc2LDIxIEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmcKICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KHJlc3Vs
dCk7CiB9CiAKK2Jvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgeworICAg
ICAgICByZXN1bHQgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodG9rZW4udHlw
ZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENhbGNQ
YXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBWYWx1
ZVJhbmdlQWxsKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KHJlc3Vs
dCk7Cit9CisKIC8vIEZJWE1FOiBXb3JrIG91dCBpZiB0aGlzIGNhbiBqdXN0IGNhbGwgY29uc3Vt
ZU51bWJlclJhdwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CkBAIC01MzUs
NyArNTUwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAg
IGlmICghY29sb3JQYXJhbWV0ZXIpCiAgICAgICAgIGNvbG9yUGFyYW1ldGVyID0gY29uc3VtZVBl
cmNlbnQoYXJncywgVmFsdWVSYW5nZUFsbCk7CiAgICAgaWYgKCFjb2xvclBhcmFtZXRlcikKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBi
b29sIGlzUGVyY2VudCA9IGNvbG9yUGFyYW1ldGVyLT5pc1BlcmNlbnRhZ2UoKTsKIApAQCAtNTU4
LDcgKzU3Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAg
ICAgICAgaWYgKGkgPT0gMSkKICAgICAgICAgICAgIHN5bnRheCA9IGNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UoYXJncykgPyBDb2xvclN5bnRheDo6Q29tbWFzIDogQ29sb3JTeW50YXg6
OldoaXRlc3BhY2VTbGFzaDsKICAgICAgICAgZWxzZSBpZiAoIWNvbnN1bWVTZXBhcmF0b3IoKSkK
LSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgICAgICBjb2xvclBhcmFtZXRlciA9IGlzUGVyY2VudCA/IGNvbnN1bWVQZXJjZW50KGFyZ3Ms
IFZhbHVlUmFuZ2VBbGwpIDogY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAg
ICAgICAgaWYgKCFjb2xvclBhcmFtZXRlcikKQEAgLTU4MCw3ICs1OTUsNyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGlmICghY29uc3VtZU51bWJl
clJhdyhhcmdzLCBhbHBoYSkpIHsKICAgICAgICAgICAgIGF1dG8gYWxwaGFQZXJjZW50ID0gY29u
c3VtZVBlcmNlbnQoYXJncywgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgICAgICBpZiAoIWFscGhh
UGVyY2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICAgICAgYWxwaGEgPSBhbHBoYVBlcmNlbnQtPmRvdWJsZVZh
bHVlKCkgLyAxMDAuMDsKICAgICAgICAgfQogICAgICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpOwpAQCAtNTg5LDcgKzYwNCw3IEBAIHN0YXRpYyBDb2xv
ciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGNvbG9y
QXJyYXlbMF0sIGNvbG9yQXJyYXlbMV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50KTsK
KyAgICByZXR1cm4gU1JHQkEgeyBjb2xvckFycmF5WzBdLCBjb2xvckFycmF5WzFdLCBjb2xvckFy
cmF5WzJdLCBhbHBoYUNvbXBvbmVudCB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCkBAIC02MDEsMTIgKzYxNiwxMiBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0
ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFoc2xWYWx1ZSkgewogICAgICAgICBoc2xWYWx1ZSA9IGNv
bnN1bWVOdW1iZXIoYXJncywgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghaHNsVmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIGFuZ2xlSW5EZWdyZWVzID0gaHNsVmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGFuZ2xlSW5EZWdyZWVzID0gaHNsVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7
CiAKLSAgICBkb3VibGUgY29sb3JBcnJheVszXTsKKyAgICBmbG9hdCBjb2xvckFycmF5WzNdOwog
ICAgIGNvbG9yQXJyYXlbMF0gPSBmbW9kKGZtb2QoYW5nbGVJbkRlZ3JlZXMsIDM2MC4wKSArIDM2
MC4wLCAzNjAuMCkgLyAzNjAuMDsKICAgICBib29sIHJlcXVpcmVzQ29tbWFzID0gZmFsc2U7CiAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKQEAgLTYyMyw3ICs2MzgsNyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGNvbG9yQXJyYXlb
aV0gPSBjbGFtcFRvPGRvdWJsZT4oZG91YmxlVmFsdWUsIDAuMCwgMTAwLjApIC8gMTAwLjA7IC8v
IE5lZWRzIHRvIGJlIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4wLgogICAgIH0KIAotICAgIGRvdWJs
ZSBhbHBoYSA9IDEuMDsKKyAgICBmbG9hdCBhbHBoYSA9IDEuMDsKICAgICBib29sIGNvbW1hQ29u
c3VtZWQgPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIGJvb2wg
c2xhc2hDb25zdW1lZCA9IGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAg
ICAgaWYgKChjb21tYUNvbnN1bWVkICYmICFyZXF1aXJlc0NvbW1hcykgfHwgKHNsYXNoQ29uc3Vt
ZWQgJiYgcmVxdWlyZXNDb21tYXMpKQpAQCAtNjM5LDkgKzY1NCw5IEBAIHN0YXRpYyBDb2xvciBw
YXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICB9CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoSFNMQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxw
aGEpIH0pKTsKKyAgICByZXR1cm4gdG9TUkdCQShIU0xBIHsgY29sb3JBcnJheVswXSwgY29sb3JB
cnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxwaGEgfSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJz
ZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAt
NjU4LDExICs2NzMsMTEgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRl
cgogICAgICAgICBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6RGlzcGxheVAzOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgY29uc3VtZUlkZW50KGFyZ3MpOwogCi0gICAgZG91YmxlIGNv
bG9yQ2hhbm5lbHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKKyAgICBmbG9hdCBjb2xvckNoYW5uZWxz
WzRdID0geyAwLCAwLCAwLCAxIH07CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsK
ICAgICAgICAgZG91YmxlIHZhbHVlOwogICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhhcmdz
LCB2YWx1ZSkpCkBAIC02NzYsNyArNjkxLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5j
dGlvblBhcmFtZXRlcgogICAgICAgICBpZiAoIWFscGhhUGFyYW1ldGVyKQogICAgICAgICAgICAg
YWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwogICAg
ICAgICBpZiAoIWFscGhhUGFyYW1ldGVyKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIGNvbG9yQ2hhbm5lbHNbM10gPSBzdGQ6
Om1heCgwLjAsIHN0ZDo6bWluKDEuMCwgYWxwaGFQYXJhbWV0ZXItPmlzUGVyY2VudGFnZSgpID8g
KGFscGhhUGFyYW1ldGVyLT5kb3VibGVWYWx1ZSgpIC8gMTAwKSA6IGFscGhhUGFyYW1ldGVyLT5k
b3VibGVWYWx1ZSgpKSk7CiAgICAgfQpAQCAtNjg0LDkgKzY5OSwyMCBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGNv
bW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZhbGxiYWNrIGNvbG9yIHZhbHVlcy4KIAogICAgIGlmICgh
YXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICByZXR1cm4g
bWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29s
b3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFjZSk7CisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3Bh
Y2U6OlNSR0I6CisgICAgICAgIHJldHVybiBDb2xvciB7IFNSR0JBIHsgY29sb3JDaGFubmVsc1sw
XSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSB9
IH07CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBDb2xv
ciB7IERpc3BsYXlQMyB7IGNvbG9yQ2hhbm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9y
Q2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5lbHNbM10gfSB9OworICAgIGNhc2UgQ29sb3JTcGFjZTo6
TGluZWFyUkdCOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9
OwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oCShyZXZpc2lvbiAyNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBA
IGVudW0gY2xhc3MgQWxsb3dYUmVzb2x1dGlvblVuaXQgeyBBbGxvdywKIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSBt
aW5pbXVtVmFsdWUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOwogYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBk
b3VibGUmIHJlc3VsdCk7Citib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIGZsb2F0JiByZXN1bHQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVt
YmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwog
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb2xvci5oIgogCi0jaW5jbHVkZSAiQW5pbWF0aW9u
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Q29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzksNiArMzYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0ZXhwciBh
dXRvIGxpZ2h0ZW5lZEJsYWNrID0gbWFrZVNpbXBsZUNvbG9yKDg0LCA4NCwgODQpOwogc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIGRhcmtlbmVkV2hpdGUgPSBtYWtlU2ltcGxlQ29sb3IoMTcxLCAxNzEs
IDE3MSk7CiAKK0NvbG9yOjpDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAg
IGF1dG8gY29udmVydGVkID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29sb3IpOworICAgIGlm
IChjb2xvciA9PSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29udmVydGVkKSkgeworICAgICAg
ICBzZXRJbmxpbmVDb2xvcihjb252ZXJ0ZWQpOworICAgICAgICB0YWdBc1ZhbGlkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6
OmNyZWF0ZShjb2xvcikpOworfQorCitDb2xvcjo6Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKK3sKKyAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShjb2xvcikpOworfQorCitDb2xvcjo6Q29sb3IoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29s
b3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoY29sb3Ip
KTsKK30KKwogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKICAgICA6IG1fY29sb3JE
YXRhKG90aGVyLm1fY29sb3JEYXRhKQogewpAQCAtNzUsNyArOTQsNyBAQCBDb2xvciYgQ29sb3I6
Om9wZXJhdG9yPShDb2xvciYmIG90aGVyKQogICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5kZXJlZigpOwogCiAgICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKLSAg
ICBvdGhlci5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNv
bG9yOworICAgIG90aGVyLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBpbnZhbGlk
SW5saW5lQ29sb3I7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC04Myw3ICsxMDIsNyBAQCBD
b2xvciYgQ29sb3I6Om9wZXJhdG9yPShDb2xvciYmIG90aGVyKQogQ29sb3IgQ29sb3I6OmxpZ2h0
ZW5lZCgpIGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3Bl
ZWQuCi0gICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBTaW1wbGVDb2xvciB7IGJs
YWNrIH0pCisgICAgaWYgKGlzSW5saW5lKCkgJiYgYXNJbmxpbmUoKSA9PSBibGFjaykKICAgICAg
ICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwogCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CkBAIC0xMDAsNyArMTE5LDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0
ZW5lZCgpIGNvbnN0CiBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogewogICAgIC8vIEhh
cmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYm
IGFzU2ltcGxlKCkgPT0gU2ltcGxlQ29sb3IgeyB3aGl0ZSB9KQorICAgIGlmIChpc0lubGluZSgp
ICYmIGFzSW5saW5lKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwog
ICAgIAogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAt
MTI2LDIyICsxNDUsMjQgQEAgZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiAKIENvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNF
eHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNvbG9yV2l0aEFscGhhKGFs
cGhhKTsKLQotICAgIENvbG9yIHJlc3VsdCA9IGFzU2ltcGxlKCkuY29sb3JXaXRoQWxwaGEoY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOwotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBwcmVz
ZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPwotICAg
IGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoV1RGOjptYWtl
VmlzaXRvcigKKyAgICAgICAgWyZdIChjb25zdCBTUkdCQTx1aW50OD4mIGNvbG9yKSAtPiBDb2xv
ciB7CisgICAgICAgICAgICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShj
b2xvciwgYWxwaGEpOworICAgICAgICAgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBhdXRvJiBjb2xvcikgLT4gQ29sb3Igewor
ICAgICAgICAgICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7
CisgICAgICAgIH0KKyAgICApKTsKIH0KIAogQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAg
ICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRlZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoYWxwaGEpKTsKKyAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChj
b25zdCBhdXRvJiBjb2xvcikgLT4gQ29sb3IgeworICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZW5BbHBoYShjb2xvciwgYWxwaGEpOworICAgIH0pOwogfQogCiBDb2xvciBD
b2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0CkBAIC0xNTIsMTMgKzE3Myw2IEBAIENvbG9yIENv
bG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyB0b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKSwgU2VtYW50aWMgfTsKIH0KIAotc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29t
cG9uZW50czxmbG9hdD4+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNv
bG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJldHVybiB7IENv
bG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9h
dD4oKSkgfTsKLX0KLQogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQogewogICAgIHJldHVybiB0cyA8PCBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDEyIEBACiAKICNw
cmFnbWEgb25jZQogCisKKyNpbmNsdWRlICJDb2xvckFkYXB0b3IuaCIKKyNpbmNsdWRlICJDb2xv
ckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRXh0ZW5kZWRD
b2xvci5oIgogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTUxLDg1ICs1Niw4MCBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JBOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEFibGUgdG8gcmVwcmVzZW50OgorLy8gICAgLSBT
cGVjaWFsICJpbnZhbGlkIGNvbG9yIiBzdGF0ZQorLy8gICAgLSA0eCA4LWJpdCAoMC0yNTUpIHNS
R0JBLCBzdG9yZWQgaW5saW5lLCBubyBhbGxvY2F0aW9uCisvLyAgICAtIDR4IGZsb2F0ICgwLTEp
IHNSR0JBLCBzdG9yZWQgaW4gYSByZWZlcmVuY2UgY291bnRlZCBzdWItb2JqZWN0CisvLyAgICAt
IDR4IGZsb2F0ICgwLTEpIExpbmVhciBzUkdCQSwgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50
ZWQgc3ViLW9iamVjdAorLy8gICAgLSA0eCBmbG9hdCAoMC0xKSBEaXNwbGF5UDMsIHN0b3JlZCBp
biBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmplY3QKKy8vCisvLyBBZGRpdGlvbmFsbHksIHRo
ZSBpbmxpbmUgOC1iaXQgc1JHQkEgY2FuIGhhdmUgYW4gb3B0aW9uYWwgInNlbWFudGljIiBiaXQg
c2V0IG9uIGl0LAorLy8gd2hpY2ggaW5kaWNhdGVzIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20g
YSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KKy8vIEZJWE1FOiBJZiB3ZSBrZWVwIHRoZSAic2Vt
YW50aWMiIGJpdCBvbiBDb2xvciwgd2Ugc2hvdWxkIGV4dGVuZCBzdXBwb3J0IHRvIGFsbCBjb2xv
cnMsCisvLyBub3QganVzdCBpbmxpbmUgb25lcywgYnkgdXNpbmcgdGhlIHVudXNlZCBwb2ludGVy
IGJpdHMuCisKIGNsYXNzIENvbG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBDb2xvcigpID0gZGVmYXVsdDsKIAotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKQotICAgIHsKLSAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwotICAgIH0KKyAg
ICBDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+KTsKKworICAgIENvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworICAgIENvbG9yKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOworICAgIENvbG9yKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4m
KTsKIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKLSAgICAgICAgOiBDb2xvcihjb2xvcikKLSAg
ICB7Ci0gICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKLSAgICB9CisgICAgQ29sb3IoU1JHQkE8dWlu
dDhfdD4sIFNlbWFudGljVGFnKTsKKyAgICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4s
IFNlbWFudGljVGFnKTsKIAotICAgIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVk
Q29sb3IpCi0gICAgewotICAgICAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEg
MzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCi0gICAgICAgIC8vIHRvcCAzMiBiaXRzIHdo
ZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93LgotICAgICAgICBtX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gMDsKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0
ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYoKTsKLSAgICAgICAgQVNTRVJUKGlz
RXh0ZW5kZWQoKSk7Ci0gICAgfQorICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSk7CisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZh
bHVlVHlwZSk7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsg
fQogCi0gICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQot
ICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZFNp
bXBsZUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRIYXNo
VmFsdWUgJiB2YWxpZFNpbXBsZUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVl
IG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFNpbXBsZUNvbG9yIik7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xvciB3b3Vs
ZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBk
ZWxldGVkSGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Ci0gICAgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3IoQ29sb3ImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShj
b25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3Im
Jik7CiAKLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGRlbGV0ZWRI
YXNoVmFsdWU7Ci0gICAgfQorICAgIH5Db2xvcigpOwogCi0gICAgZXhwbGljaXQgQ29sb3IoV1RG
OjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
ZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkU2ltcGxlQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2gg
dmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBTaW1wbGVDb2xvciB3b3Vs
ZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBl
bXB0eUhhc2hWYWx1ZTsKLSAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOworICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29sb3JCaXQpOyB9CisgICAgYm9vbCBpc1Nl
bWFudGljKCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiAobV9jb2xvckRhdGEuaW5saW5l
Q29sb3JBbmRGbGFncyAmIGlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCk7IH0KIAotICAgIH5Db2xv
cigpCi0gICAgewotICAgICAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICAgICAgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLSAgICB9CiAKLSAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9y
QW5kRmxhZ3MgJiB2YWxpZFNpbXBsZUNvbG9yQml0KTsgfQorICAgIC8vIEFjY2VzcyB0byBhbHBo
YSByZWxhdGVkIHByb3BlcnRpZXMgb2YgdW5kZXJseWluZyBjb2xvcgogCi0gICAgYm9vbCBpc09w
YXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgp
ID09IDEuMCA6IGFzU2ltcGxlKCkuaXNPcGFxdWUoKTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAg
OiBhc1NpbXBsZSgpLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5s
aW5lKCkuYWxwaGEgPT0gMjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCku
YWxwaGEgPiAwOyB9CiAKLSAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRl
bmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBh
c1NpbXBsZSgpLmFscGhhQ29tcG9uZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2lt
cGxlKCkuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVu
ZGVkKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zs
b2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkg
OiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCi0gICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9y
U3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkg
Y29uc3Q7CisgICAgLy8gQWNjZXNzIHRvIGRlcml2ZWQgcHJvcGVydGllcyBvZiB0aGUgdW5kZXJs
eWluZyBjb2xvci4KKworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTog
UmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KKworCisgICAgLy8gQWNjZXNz
IHRvIHRoZSB1bmRlcmx5aW5nIGNvbG9yCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50
byBzUkdCLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgp
IGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgZGFya2VuZWQoKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8
Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVu
dHMoKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0
OwogCi0gICAgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFuY2Uu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7CisgICAgLy8gR2Vu
ZXJhdGlvbiBvZiBuZXcgY29sb3JzIHZpYSBtdXRhdGlvbiBvZiB0aGlzIG9uZS4KKyAgICAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwogCiAgICAgQ29sb3IgaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0OwogICAgIENvbG9yIGludmVydGVk
Q29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0OwpAQCAtMTQ0LDkgKzE0NCw2IEBAIHB1
YmxpYzoKIAogICAgIENvbG9yIHNlbWFudGljQ29sb3IoKSBjb25zdDsKIAotICAgIC8vIFRydWUg
aWYgdGhlIGNvbG9yIG9yaWdpbmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgot
ICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0IHsgcmV0dXJuIGlzU2ltcGxlKCkgJiYgKG1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiBpc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpOyB9
Ci0KICNpZiBQTEFURk9STShHVEspCiAgICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOwogICAgIG9w
ZXJhdG9yIEdka1JHQkEoKSBjb25zdDsKQEAgLTE3MiwxNCArMTY5LDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBjeWFuID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMjU1
KTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8geWVsbG93ID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMjU1LCAwKTsKIAotICAgIGJvb2wgaXNFeHRlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIGludmFsaWRTaW1wbGVDb2xvcik7IH0KLSAg
ICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gIWlzRXh0ZW5kZWQoKTsgfQotCi0gICAg
Y29uc3QgRXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotICAgIGNvbnN0IFNpbXBs
ZUNvbG9yIGFzU2ltcGxlKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3Bl
cmF0b3I9KGNvbnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9y
PShDb2xvciYmKTsKIAogICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdp
bGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CkBAIC0xOTIsMzEgKzE4MSwzNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVj
b2RlKERlY29kZXImKTsKIAorICAgIC8vIEZJWE1FOiBUaGVzZSBpcy9hcyBmdW5jdGlvbnMgYXJl
IGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHNob3VsZCBiZSBtYWRlIHByaXZhdGUgb25jZSBh
bGwgY2FsbGVycworICAgIC8vIGhhdmUgYmVlbiB3ZWFuZWQgb2ZmIHRoZW0uCisgICAgYm9vbCBp
c0V4dGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIShtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZs
YWdzICYgaW52YWxpZElubGluZUNvbG9yKTsgfQorICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7
IHJldHVybiAhaXNFeHRlbmRlZCgpOyB9CisgICAgY29uc3QgQ29sb3JBZGFwdG9yPFNSR0JBPHVp
bnQ4X3Q+PiBhc0lubGluZSgpIGNvbnN0OworICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0
ZW5kZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvcikK
LSAgICAgICAgOiBDb2xvcihjb2xvci5hc1NSR0JBPHVpbnQ4X3Q+KCkpCi0gICAgewotICAgIH0K
KyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAgICB2b2lkIHNldElubGluZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+KTsKIAotICAgIHZvaWQgc2V0U2ltcGxlQ29sb3IoU1JHQkE8dWlu
dDhfdD4pOworICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7
CiAKLSAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgfD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlk
KCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
IH0KKyAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5k
RmxhZ3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9CisgICAgdm9pZCB0YWdBc1ZhbGlk
KCkgeyBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7
IH0KIAogICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9pbnRlci4KLSAg
ICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFNpbXBsZUNvbG9yLgotICAgIC8vIDB4X19f
X19fXzExIGlzIGEgdmFsaWQgU2ltcGxlQ29sb3IuCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRT
aW1wbGVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVD
b2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xv
ciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9y
Qml0ID0gMHg0OworICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgaW5saW5lIGNvbG9y
LgorICAgIC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgaW5saW5lIGNvbG9yLgorICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ2NF90IGludmFsaWRJbmxpbmVDb2xvciA9IDB4MTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ2NF90IHZhbGlkSW5saW5lQ29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50NjRfdCB2YWxpZElubGluZUNvbG9yID0gMHgzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0gMHg0OwogCi0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZG
RkZGRkZCOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1ZSA9
IDB4RkZGRkZGRkZGRkZGRkZGRDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGVtcHR5
SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwogCiAgICAgdW5pb24gewotICAgICAgICB1
aW50NjRfdCBzaW1wbGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CisgICAg
ICAgIHVpbnQ2NF90IGlubGluZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkSW5saW5lQ29sb3IgfTsK
ICAgICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRh
OwogfTsKQEAgLTIzOSw3ICsyMzQsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bG9yJiBhLCBjCiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAg
ICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1f
Y29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzOworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
PT0gYi5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKQEAgLTI2MCwyMSArMjU1
LDkyIEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIHsKICAgICBp
ZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRl
bmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5zaW1wbGVD
b2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpID09IChiLm1f
Y29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVD
b2xvckJpdCk7CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
JiB+Q29sb3I6OmlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsKK30K
KworaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK3sKKyAgICBzZXRJ
bmxpbmVDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JH
QkE8dWludDhfdD4+IGNvbG9yKQoreworICAgIGlmIChjb2xvcikKKyAgICAgICAgc2V0SW5saW5l
Q29sb3IoKmNvbG9yKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBj
b2xvciwgU2VtYW50aWNUYWcpCit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHRh
Z0FzU2VtYW50aWMoKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1
aW50OF90Pj4gY29sb3IsIFNlbWFudGljVGFnKQoreworICAgIGlmIChjb2xvcikgeworICAgICAg
ICBzZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAgICAgICB0YWdBc1NlbWFudGljKCk7CisgICAg
fQorfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVk
Q29sb3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsK
K30KKworaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
Cit7CisgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElubGluZUNv
bG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4
dGVuZGVkQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZh
bGlkSW5saW5lQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3Qg
bG9vayBsaWtlIGEgdmFsaWQgaW5saW5lIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydChkZWxl
dGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0
IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIGlubGluZSBjb2xvciB3b3VsZG4ndCBoYXZlIik7
CisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IGRlbGV0ZWRIYXNoVmFsdWU7
CisgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKFdU
Rjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCit7CisgICAgc3RhdGljX2Fzc2VydChlbXB0eUhh
c2hWYWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBt
dXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQo
ZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11
c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gaW5saW5lIGNvbG9yIHdvdWxkbid0IGhhdmUi
KTsKKyAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7
CisgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6On5Db2xvcigp
Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRD
b2xvci0+ZGVyZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QK
IHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhh
c2goKTsKLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MpOworICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JB
bmRGbGFncyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8p
IENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKK3sK
KyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNhbGxP
blVuZGVybHlpbmdUeXBlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0
dXJuIGZ1bmN0b3IoYXNJbmxpbmUoKSk7Cit9CisKK2lubGluZSBzdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4geyBhc0V4
dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07CisgICAg
cmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
UkdCQTxUPiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRl
ZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOwotICAg
IHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkE8VD4oKTsKKyAgICAKKyAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgIHJldHVybiBhc0lubGluZSgpOwogfQogCiBpbmxp
bmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFs
cGhhKSBjb25zdApAQCAtMzAzLDMwICszNjksMzkgQEAgaW5saW5lIGNvbnN0IEV4dGVuZGVkQ29s
b3ImIENvbG9yOjphc0V4dAogICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsK
IH0KIAotaW5saW5lIGNvbnN0IFNpbXBsZUNvbG9yIENvbG9yOjphc1NpbXBsZSgpIGNvbnN0Citp
bmxpbmUgY29uc3QgQ29sb3JBZGFwdG9yPFNSR0JBPHVpbnQ4X3Q+PiBDb2xvcjo6YXNJbmxpbmUo
KSBjb25zdAogewotICAgIEFTU0VSVChpc1NpbXBsZSgpKTsKLSAgICByZXR1cm4gU2ltcGxlQ29s
b3IgeyBhc1NSR0JBKFBhY2tlZDo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID4+IDMyKSB9KSB9OworICAgIEFTU0VSVChpc0lubGlu
ZSgpKTsKKyAgICByZXR1cm4gYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA+PiAzMikgfSk7CiB9CiAKLWlu
bGluZSB2b2lkIENvbG9yOjpzZXRTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK2lu
bGluZSB2b2lkIENvbG9yOjpzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KFBhY2tlZDo6UkdCQSB7IGNvbG9yIH0udmFsdWUpIDw8IDMyOworICAgIG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JB
IHsgY29sb3IgfS52YWx1ZSkgPDwgMzI7CiAgICAgdGFnQXNWYWxpZCgpOwogfQogCitpbmxpbmUg
dm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRl
ZENvbG9yKQoreworICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2UgYSAzMi1iaXQg
c3lzdGVtIG9ubHkgYXNzaWducyB0aGUKKyAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcg
dGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KKyAgICBtX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzID0gMDsKKyAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVu
ZGVkQ29sb3IubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworfQorCiBpbmxp
bmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBp
ZiAoY29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRlZCgp
LmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNTaW1wbGUoKSA9PSBTaW1wbGVDb2xvciB7
IENvbG9yOjpibGFjayB9OworICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjpi
bGFjazsKIH0KIAogaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGNv
bG9yLmFzRXh0ZW5kZWQoKS5pc1doaXRlKCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkg
PT0gU2ltcGxlQ29sb3IgeyBDb2xvcjo6d2hpdGUgfTsKKyAgICByZXR1cm4gY29sb3IuYXNJbmxp
bmUoKSA9PSBDb2xvcjo6d2hpdGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0z
NTUsNyArNDMwLDcgQEAgdm9pZCBDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbgog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2Vt
YW50aWMuCiAKICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCBQYWNrZWQ6OlJH
QkEgeyBhc1NpbXBsZSgpLmFzU1JHQkE8dWludDhfdD4oKSB9LnZhbHVlOworICAgIGVuY29kZXIg
PDwgUGFja2VkOjpSR0JBIHsgYXNJbmxpbmUoKSB9LnZhbHVlOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtMzgxLDcgKzQ1Niw3IEBAIE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUo
YzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpIH07CisgICAgICAgIHJldHVybiBDb2xvciB7
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhhIH0sIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gSGVscGVyIHRvIGFsbG93IGNvbnZlbmllbnQgc3ludGF4IGZvciB3
b3JraW5nIHdpdGggY29sb3IgdHlwZXMuCisvLyBlLmcuIGF1dG8geWVsbG93V2l0aDUwUGVyY2Vu
dEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYSgxMjgpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IHN0cnVjdCBDb2xvckFkYXB0b3IgOiBwdWJsaWMgQ29sb3JUeXBl
IHsKKyAgICBjb25zdGV4cHIgQ29sb3JBZGFwdG9yKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCisg
ICAgICAgIDogQ29sb3JUeXBlIHsgY29sb3IgfQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgQ29sb3JBZGFwdG9yIGNvbG9yV2l0aEFscGhhKHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpjb2xvcldpdGhPdmVycmlkZW5BbHBo
YSgqdGhpcywgb3ZlcnJpZGVBbHBoYSk7CisgICAgfQorCisgICAgY29uc3RleHByIENvbG9yQWRh
cHRvciBpbnZlcnRlZENvbG9yV2l0aEFscGhhKHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKCp0
aGlzLCBvdmVycmlkZUFscGhhKTsKKyAgICB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJ1aWxkZXIuaAkocmV2aXNpb24gMjY0MTg4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCdWlsZGVyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSGVscGVyIHRvIGFsbG93IGNvbnZlbmllbnQgc3lu
dGF4IGZvciB3b3JraW5nIHdpdGggY29sb3IgdHlwZXMuCi0vLyBlLmcuIGF1dG8geWVsbG93V2l0
aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYSgxMjgpOwotdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdHJ1Y3QgQ29sb3JCdWlsZGVyIDogcHVibGljIENv
bG9yVHlwZSB7Ci0gICAgY29uc3RleHByIENvbG9yQnVpbGRlcihjb25zdCBDb2xvclR5cGUmIGNv
bG9yKQotICAgICAgICA6IENvbG9yVHlwZSB7IGNvbG9yIH0KLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3RleHByIENvbG9yVHlwZSBjb2xvcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotCi0gICAgY29uc3RleHByIENvbG9yQnVpbGRlciBjb2xvcldpdGhBbHBo
YSh1aW50OF90IG92ZXJyaWRlQWxwaGEpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZV92PGRlY2x0eXBlKENvbG9yVHlwZSgpLmFscGhhKSwgdWludDhfdD4s
ICJPbmx5IHVpbnQ4X3QgYmFzZWQgY29sb3IgdHlwZXMgYXJlIHN1cHBvcnRlZC4iKTsKLQotICAg
ICAgICBDb2xvckJ1aWxkZXIgY29weSA9ICp0aGlzOwotICAgICAgICBjb3B5LmFscGhhID0gb3Zl
cnJpZGVBbHBoYTsKLSAgICAgICAgcmV0dXJuIGNvcHk7Ci0gICAgfQotfTsKLQotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9u
LmgJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsOSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkNvbG9yVHlwZXMu
aCIKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLQTsKLXRlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xBOwotdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDM7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IExpbmVhclNSR0JBOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwt
PiBMaW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1
bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCiBmbG9hdCBsaW5l
YXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKQEAgLTUyLDQgKzQ3LDEzIEBAIFdFQkNPUkVf
RVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnMKIAogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEo
Y29uc3QgQ01ZS0E8ZmxvYXQ+Jik7CiAKKworLy8gSWRlbnRpdHkgY29udmVyc2lvbnMgKHVzZWZ1
bCBmb3IgZ2VuZXJpYyBjb250ZXh0cykKKworY29uc3RleHByIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25zdGV4cHIg
TGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+
JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsg
fQorY29uc3RleHByIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29u
c3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9Citjb25z
dGV4cHIgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IEhTTEE8ZmxvYXQ+JiBjb2xvcikgeyByZXR1
cm4gY29sb3I7IH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gU2ltcGxlQ29sb3Igb3ZlcmxvYWRzCisvLyBTUkdC
QTx1aW50OF90PiBvdmVybG9hZHMKIAogc3RhdGljIGNoYXIgZGVjaW1hbERpZ2l0KHVuc2lnbmVk
IG51bWJlcikKIHsKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIHN0ZDo6YXJyYXk8Y2hhciwgND4g
ZnJhY3Rpb25EaWdpdAogICAgIHJldHVybiB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsg
MHg3RikgLyAweEZGKSwgJ1wwJywgJ1wwJywgJ1wwJyB9IH07CiB9CiAKLVN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKFNpbXBsZUNvbG9yIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGFdID0gY29sb3I7CiAgICAgc3dpdGNoIChhbHBoYSkgewpAQCAtNjYsMTUgKzY2LDE1IEBA
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNpbXBsZUNvbG9yIGMKICAgICB9CiB9CiAKLVN0
cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTaW1wbGVDb2xvciBjb2xvcikKK1N0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBhdXRvIFtyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKLSAgICBpZiAoY29sb3IuaXNPcGFxdWUoKSkK
KyAgICBpZiAoYWxwaGEgPT0gMHhGRikKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBo
ZXgocmVkLCAyLCBMb3dlcmNhc2UpLCBoZXgoZ3JlZW4sIDIsIExvd2VyY2FzZSksIGhleChibHVl
LCAyLCBMb3dlcmNhc2UpKTsKICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7
CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTaW1wbGVDb2xv
ciBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTUkdCQTx1
aW50OF90PiBjb2xvcikKIHsKICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBj
b2xvcjsKICAgICBpZiAoYWxwaGEgPCAweEZGKQpAQCAtODMsNyArODMsNyBAQCBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoCiB9CiAKIAotLy8gRXh0ZW5kZWRDb2xvciBv
dmVybG9hZHMKKy8vIEV4dGVuZGVkIGNvbG9yIG92ZXJsb2FkcwogCiBzdGF0aWMgQVNDSUlMaXRl
cmFsIHNlcmlhbGl6YXRpb24oQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewpAQCAtMTAwLDQ1ICsx
MDAsODYgQEAgc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yUwogICAgIHJl
dHVybiAiIl9zOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRl
ZENvbG9yJiBjb2xvcikKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFN0cmlu
ZyBzZXJpYWxpemF0aW9uKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgYXV0byBbYzEs
IGMyLCBjMywgYWxwaGFdID0gY29sb3IuY29tcG9uZW50cygpOworICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOwogICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxw
aGEsIDEuMGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXph
dGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScp
OwotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNv
bG9yU3BhY2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJykn
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29s
b3IuY29sb3JTcGFjZSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSks
ICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKIH0KIAotU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9yKQorLy8g
U1JHQkE8ZmxvYXQ+IG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25z
dCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NT
KGNvbG9yKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKLVN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xv
cikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKKyAgICByZXR1cm4g
c2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJp
YWxpemF0aW9uKGNvbG9yKTsKK30KKworLy8gTGluZWFyU1JHQkE8ZmxvYXQ+IG92ZXJsb2Fkcwor
CitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNv
bG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKKy8vIERpc3BsYXlQMzxmbG9h
dD4gb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNv
bG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNv
bG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uKGNvbG9yKTsKIH0KIAogLy8gQ29sb3Ig
b3ZlcmxvYWRzCiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0
aW9uRm9yQ1NTKGNvbG9yLmFzU2ltcGxlKCkpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRl
cmx5aW5nVHlwZShbXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JD
U1MoYyk7CisgICAgfSk7CiB9CiAKIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzU2ltcGxlKCkpOworICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKGMpOworICAgIH0pOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5p
c0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb2xvci5hc1NpbXBsZSgpKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9u
VW5kZXJseWluZ1R5cGUoW10oYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChjKTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJ
KHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMCArMjgsMzAgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBFeHRlbmRlZENvbG9yOwot
Y2xhc3MgU2ltcGxlQ29sb3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGlzcGxheVAz
OwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJTUkdCQTsKK3RlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgU1JHQkE7CiAKIC8vIHNlcmlhbGl6YXRpb25Gb3JIVE1MIHJldHVybnMgdGhl
IGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1IDxodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVz
PiAoMTAgU2VwdGVtYmVyIDIwMTUpCiAvLyBzZXJpYWxpemF0aW9uRm9yQ1NTIHJldHVybnMgdGhl
IGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIENTUwogLy8gc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQgcmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBmb3IgRHVtcFJlbmRl
clRyZWUsICNSUkdHQkIsICNSUkdHQkJBQSBvciB0aGUgQ1NTIHNlcmlhbGl6YXRpb24KIAotV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU2ltcGxlQ29sb3IpOwotV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNpbXBsZUNvbG9yKTsKLVdF
QkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTaW1w
bGVDb2xvcik7Ci0KLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IEV4dGVuZGVkQ29sb3ImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgRXh0ZW5kZWRDb2xvciYpOworV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU1JHQkE8dWludDhfdD4pOwor
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+
KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChTUkdCQTx1aW50OF90Pik7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yQ1NTKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IFNSR0JBPGZsb2F0PiYp
OworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
KTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9yJik7
CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgQ29sb3Im
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
LmgJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDMzIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29tcG9uZW50VHJhaXRzOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heFZhbHVlID0gMjU1OworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBtaW5WYWx1ZSA9IDAuMGY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtYXhW
YWx1ZSA9IDEuMGY7Cit9OworCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSB7
CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7Ci0gICAgVCBhbHBoYTsKKyAg
ICBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQjsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBKFQsIFQsIFQpIC0+IFNSR0JBPFQ+OwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gU1JHQkEoVCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVu
dHMoY29uc3QgU1JHQkE8VD4mIGMpCkBAIC01OCwyMSArNzUsMTYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vbkFscGhh
Q29tcG9uZW50KFNSR0JBPFQ+JiBjb2xvciwgRnVuY3RvciYmIGYpCi17Ci0gICAgY29sb3IucmVk
ID0gZihjb2xvci5yZWQpOwotICAgIGNvbG9yLmdyZWVuID0gZihjb2xvci5ncmVlbik7Ci0gICAg
Y29sb3IuYmx1ZSA9IGYoY29sb3IuYmx1ZSk7Ci19Ci0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IExpbmVhclNSR0JBIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1
ZTsKLSAgICBUIGFscGhhOworICAgIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZh
bHVlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdC
QShULCBULCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVh
clNSR0JBKFQsIFQsIFQsIFQpIC0+IExpbmVhclNSR0JBPFQ+OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0
IExpbmVhclNSR0JBPFQ+JiBjKQpAQCAtMTAwLDkgKzExMiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQg
Ymx1ZTsKLSAgICBUIGFscGhhOworICAgIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1h
eFZhbHVlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBEaXNwbGF5
UDMoVCwgVCwgVCkgLT4gRGlzcGxheVAzPFQ+OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gRGlzcGxh
eVAzKFQsIFQsIFQsIFQpIC0+IERpc3BsYXlQMzxUPjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBEaXNw
bGF5UDM8VD4mIGMpCkBAIC0xMzAsOSArMTQ1LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBMaW5lYXJEaXNwbGEKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwogICAgIFQgYmx1ZTsK
LSAgICBUIGFscGhhOworICAgIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyRGlzcGxheVAzKFQsIFQsIFQpIC0+
IExpbmVhckRpc3BsYXlQMzxUPjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQ
MyhULCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3Qg
TGluZWFyRGlzcGxheVAzPFQ+JiBjKQpAQCAtMTYwLDkgKzE3NiwxMCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSFNMQSB7CiAgICAgVCBodWU7CiAgICAgVCBzYXR1cmF0aW9uOwogICAg
IFQgbGlnaHRuZXNzOwotICAgIFQgYWxwaGE7CisgICAgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0
czxUPjo6bWF4VmFsdWU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQsIFQsIFQp
IC0+IEhTTEE8VD47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBIU0xBKFQsIFQsIFQsIFQpIC0+IEhT
TEE8VD47CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8
VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgSFNMQTxUPiYgYykKQEAgLTE5Miw5ICsyMDksMTAg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIHsKICAgICBUIG1hZ2VudGE7CiAg
ICAgVCB5ZWxsb3c7CiAgICAgVCBibGFjazsKLSAgICBUIGFscGhhOworICAgIFQgYWxwaGEgPSBD
b21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
Q01ZS0EoVCwgVCwgVCwgVCkgLT4gQ01ZS0E8VD47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBDTVlL
QShULCBULCBULCBULCBUKSAtPiBDTVlLQTxUPjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDTVlLQTxUPiYgYSwgY29uc3QgQ01ZS0E8VD4m
IGIpCkBAIC0yMTIsOSArMjMwLDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBYWVpB
IHsKICAgICBUIHg7CiAgICAgVCB5OwogICAgIFQgejsKLSAgICBUIGFscGhhOworICAgIFQgYWxw
aGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlOwogfTsKIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4gWFlaQShULCBULCBUKSAtPiBYWVpBPFQ+OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gWFla
QShULCBULCBULCBUKSAtPiBYWVpBPFQ+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4
cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFhZWkE8VD4mIGMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmgJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAg
U1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5w
cmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAorCiBpbmxpbmUgdWludDhfdCBjb252ZXJ0
UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7CiAgICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKQEAgLTgxLDcgKzgyLDcgQEAgdGVtcGxhdGU8
dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbAogICAgIHJldHVybiB7IGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21w
b25lbnRzWzFdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbM10pIH07CiB9CiAKLXRlbXBsYXRlPHRlbXBs
YXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQor
dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUu
Li4gQ29tcG9uZW50cz4gY29uc3RleHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRvQ29tcG9u
ZW50Qnl0ZXMoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiB7CiAgICAgcmV0dXJuIHsgY2xh
bXBUb0NvbXBvbmVudEJ5dGUociksIGNsYW1wVG9Db21wb25lbnRCeXRlKGcpLCBjbGFtcFRvQ29t
cG9uZW50Qnl0ZShiKSwgY2xhbXBUb0NvbXBvbmVudEJ5dGUoYSkgfTsKIH0KQEAgLTkxLDYgKzky
LDg1IEBAIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2wKICAgICByZXR1
cm4geyBjbGFtcFRvQ29tcG9uZW50RmxvYXQociksIGNsYW1wVG9Db21wb25lbnRGbG9hdChnKSwg
Y2xhbXBUb0NvbXBvbmVudEZsb2F0KGIpLCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoYSkgfTsKIH0K
IAorCisvLyBDb2xvciBtdXRhdG9ycworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21w
b25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1hZGUgdG8gd29yayB3aXRoIGNvbG9yJ3MgdGhhdCBk
b24ndCB1c2UgdGhlIG5hbWVzIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGZvciB0aGVpciBjaGFubmVs
cy4KKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yOworICAgIGNvcHkucmVkID0gZnVuY3Rvcihj
b2xvci5yZWQpOworICAgIGNvcHkuZ3JlZW4gPSBmdW5jdG9yKGNvbG9yLmdyZWVuKTsKKyAgICBj
b3B5LmJsdWUgPSBmdW5jdG9yKGNvbG9yLmJsdWUpOworICAgIHJldHVybiBjb3B5OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgVCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvKHVp
bnQ4X3QpOworCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciB1aW50OF90IGNvbnZlcnRDb21wb25lbnRC
eXRlVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K3RlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZmxvYXQ+
KHVpbnQ4X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRGbG9hdCh2YWx1
ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydENvbXBvbmVudEZsb2F0VG8o
ZmxvYXQpOworCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90IGNvbnZlcnRDb21wb25lbnRGbG9h
dFRvPHVpbnQ4X3Q+KGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKHZhbHVlKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydENvbXBv
bmVudEZsb2F0VG88ZmxvYXQ+KGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvQ29t
cG9uZW50RmxvYXQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBjb3B5ID0g
Y29sb3I7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUo
Y29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBo
YShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQoreworICAgIENv
bG9yVHlwZSBjb3B5ID0gY29sb3I7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRG
bG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4g
Y29weTsKK30KKworY29uc3RleHByIHVpbnQ4X3QgaW52ZXJ0Q29tcG9uZW50KHVpbnQ4X3QgY29t
cG9uZW50KQoreworICAgIHJldHVybiAyNTUgLSBjb21wb25lbnQ7Cit9CisKK2NvbnN0ZXhwciBm
bG9hdCBpbnZlcnRDb21wb25lbnQoZmxvYXQgY29tcG9uZW50KQoreworICAgIHJldHVybiAxLjBm
IC0gY29tcG9uZW50OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlw
ZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3Is
IHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yQnlN
b2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7
CisgICAgICAgIHJldHVybiBpbnZlcnRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAg
ICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhh
KT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEo
Y29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xv
clR5cGUgY29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwg
W10gKGF1dG8gY29tcG9uZW50KSB7CisgICAgICAgIHJldHVybiBpbnZlcnRDb21wb25lbnQoY29t
cG9uZW50KTsKKyAgICB9KTsKKyAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0
VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5
OworfQorCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFs
dWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlz
aW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0OSArMjYsMjIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJFeHRlbmRlZENvbG9yLmgiCiAKLSNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xv
cihjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkpOwotfQotCiB1bnNpZ25lZCBFeHRlbmRl
ZENvbG9yOjpoYXNoKCkgY29uc3QKIHsKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBj
b21wb25lbnRzKCk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGMxLCBjMiwgYzMsIGFscGhhLCBt
X2NvbG9yU3BhY2UpOwogfQogCi1SZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y29s
b3JXaXRoQWxwaGEoZmxvYXQgb3ZlcnJpZGVBbHBoYSkgY29uc3QKLXsKLSAgICBhdXRvIFtjMSwg
YzIsIGMzLCBleGlzdGluZ0FscGhhXSA9IGNvbXBvbmVudHMoKTsKLSAgICByZXR1cm4gRXh0ZW5k
ZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIG92ZXJyaWRlQWxwaGEsIGNvbG9yU3BhY2UoKSk7
Ci19Ci0KLVJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhKGZsb2F0IG92ZXJyaWRlQWxwaGEpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBj
MywgZXhpc3RpbmdBbHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29s
b3I6OmNyZWF0ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhh
LCBjb2xvclNwYWNlKCkpOwotfQotCiBTUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdC
QUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKG1fY29sb3JTcGFj
ZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKLSAgICAgICAgcmV0dXJuIGFzU1JHQkEo
bV9jb21wb25lbnRzKTsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAg
cmV0dXJuIHRvU1JHQkEoYXNMaW5lYXJTUkdCQShtX2NvbXBvbmVudHMpKTsKLSAgICBjYXNlIENv
bG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgcmV0dXJuIHRvU1JHQkEoYXNEaXNwbGF5UDMo
bV9jb21wb25lbnRzKSk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoW10g
KGNvbnN0IGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiB0b1NSR0JBKGNvbG9yKTsKKyAg
ICB9KTsKIH0KIAogYm9vbCBFeHRlbmRlZENvbG9yOjppc1doaXRlKCkgY29uc3QKQEAgLTgzLDkg
KzU2LDQgQEAgYm9vbCBFeHRlbmRlZENvbG9yOjppc0JsYWNrKCkgY29uc3QKICAgICByZXR1cm4g
IWMxICYmICFjMiAmJiAhYzMgJiYgYWxwaGEgPT0gMTsKIH0KIAotQ29sb3IgbWFrZUV4dGVuZGVk
Q29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBj
MiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKTsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjY0MTg4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3Qg
U1JHQkE7CiAKIGNsYXNzIEV4dGVuZGVkQ29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRl
ZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxFeHRlbmRl
ZENvbG9yPiBjcmVhdGUoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEs
IENvbG9yU3BhY2UpOwotCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMg
UmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShjb25zdCBDb2xvclR5cGUmKTsKKyAgICBzdGF0aWMg
UmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNw
YWNlKTsKKyAgICAKICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50
c1szXTsgfQogCiAgICAgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29tcG9uZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50czsgfQpAQCAtNDgsMjcgKzQ5LDE2IEBAIHB1Ymxp
YzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAotICAgIFJl
ZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0gICAgUmVmPEV4
dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwotCiAgICAg
Ym9vbCBpc1doaXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7CiAKICAgICAv
LyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0Iu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IHRvU1JHQkFMb3Nz
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQs
IGZsb2F0PikKLSAgICAgICAgICAgIHJldHVybiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3ko
KTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+
KQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgY2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3Rv
ciYmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9h
dCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAg
ICAgIDogbV9jb21wb25lbnRzKGMxLCBjMiwgYzMsIGFscGhhKQotICAgICAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQotICAgIHsKLSAgICB9CisgICAgRXh0ZW5kZWRDb2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFNSR0JB
PGZsb2F0PiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBjb25zdDsKIApAQCAtODYsOCAr
NzYsNDAgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHRlbmRlZENvbAogICAgIHJl
dHVybiAhKGEgPT0gYik7CiB9CiAKLS8vIEZJWE1FOiBJZiB0aGUgQ29sb3JTcGFjZSBpcyBzUkdC
IGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUKLS8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVn
ZXJzLCB3ZSBzaG91bGQgbWFrZSBhIFNpbXBsZUNvbG9yLgotV0VCQ09SRV9FWFBPUlQgQ29sb3Ig
bWFrZUV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxw
aGEsIENvbG9yU3BhY2UpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgUmVm
PEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb25zdCBDb2xvclR5cGUmIGNv
bG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYXNDb2xvckNv
bXBvbmVudHMoY29sb3IpLCBjb2xvci5jb2xvclNwYWNlKSk7Cit9CisKK2lubGluZSBSZWY8RXh0
ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4g
Y29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEV4dGVuZGVkQ29sb3IoY29tcG9uZW50cywgY29sb3JTcGFjZSkpOworfQorCitpbmxp
bmUgRXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNv
bXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fY29tcG9uZW50cyhjb21w
b25lbnRzKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9z
c3koKSBjb25zdAoreworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+
KQorICAgICAgICByZXR1cm4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCk7CisgICAgZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRl
ZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
KyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNTUkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNl
IENvbG9yU3BhY2U6OkxpbmVhclJHQjoKKyAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNMaW5lYXJT
UkdCQShtX2NvbXBvbmVudHMpKTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0b3IoYXNEaXNwbGF5UDMobV9jb21wb25lbnRzKSk7CisgICAgfQor
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmgJKHJldmlzaW9uIDI2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwOSArMjUsMzIgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckJ1aWxkZXIuaCIKLSNpbmNsdWRlICJD
b2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaW1wbGVDb2xv
ciB7Ci1wdWJsaWM6Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IFNpbXBsZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHZhbHVlKSA6IG1fdmFsdWUgeyB2YWx1ZSB9IHsgfQotCi0gICAgY29uc3RleHByIHVp
bnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhOyB9Ci0g
ICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KG1fdmFsdWUuYWxwaGEpOyB9Ci0KLSAgICBjb25zdGV4
cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuYWxwaGEgPT0gMHhGRjsg
fQotICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUu
YWxwaGE7IH0KLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50
OF90IGFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgbV92YWx1ZS5yZWQsIG1f
dmFsdWUuZ3JlZW4sIG1fdmFsdWUuYmx1ZSwgYWxwaGEgfTsKLSAgICB9Ci0KLSAgICBjb25zdGV4
cHIgU2ltcGxlQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIG1f
dmFsdWUucmVkKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIG1fdmFsdWUuZ3JlZW4pLCBz
dGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gbV92YWx1ZS5ibHVlKSwgYWxwaGEgfTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZs
b2F0PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMobV92YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90
PikKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHN0
ZDo6c2l6ZV90IE4+Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOwotICAgICAgICBpZiBjb25zdGV4cHIgKCFOKQot
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUucmVkOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoTiA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuZ3JlZW47Ci0gICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChOID09IDIpCi0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5ibHVl
OwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAzKQotICAgICAgICAgICAgcmV0dXJu
IG1fdmFsdWUuYWxwaGE7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0ZXhwciBTaW1wbGVD
b2xvcih1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpIDogbV92YWx1
ZSB7IHIsIGcsIGIsIGEgfSB7IH0KLQotICAgIFNSR0JBPHVpbnQ4X3Q+IG1fdmFsdWUgeyAwLCAw
LCAwLCAwIH07Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9y
KTsKLWJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOwotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCi17Ci0gICAgcmV0
dXJuIGEuYXNTUkdCQTx1aW50OF90PigpID09IGIuYXNTUkdCQTx1aW50OF90PigpOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCi17Ci0g
ICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1
aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpOwotY29uc3RleHBy
IENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+
IG1ha2VTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7Ci1Db2xvckJ1aWxkZXI8U1JHQkE8dWlu
dDhfdD4+IG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKLQotY29uc3RleHBy
IENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQg
ZywgaW50IGIpCisvLyBGSVhNRTogUmVuYW1lIChtYXliZSBtYWtlU1JHQihyLCBnLCBiKSBvciBt
YXliZSByZ2IociwgZywgYikgdG8gbWF0Y2ggY3NzKSBhbmQgbW92ZSB0byBDb2xvclV0aWxpdGll
cy5oCitjb25zdGV4cHIgQ29sb3JBZGFwdG9yPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5
dGVzPFNSR0JBPihyLCBnLCBiLCAweEZGKTsKIH0KIAotY29uc3RleHByIENvbG9yQnVpbGRlcjxT
UkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBh
KQorLy8gRklYTUU6IFJlbmFtZSAobWF5YmUgbWFrZVNSR0JBKHIsIGcsIGIpIG9yIG1heWJlIHJn
YmEociwgZywgYikgdG8gbWF0Y2ggY3NzKSBhbmQgbW92ZSB0byBDb2xvclV0aWxpdGllcy5oCitj
b25zdGV4cHIgQ29sb3JBZGFwdG9yPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiB7CiAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRC
eXRlczxTUkdCQT4ociwgZywgYiwgYSk7CiB9CiAKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiBzUkdCQSkKKy8vIEZJ
WE1FOiBSZW1vdmUgaWYgdW51c2VkLCBvdGhlcndpc2UgcmVuYW1lL21vdmUgdG8gbWF0Y2ggYWJv
dmUuCitjb25zdGV4cHIgQ29sb3JBZGFwdG9yPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29s
b3IoU1JHQkE8dWludDhfdD4gc1JHQkEpCiB7CiAgICAgcmV0dXJuIHNSR0JBOwogfQogCi1pbmxp
bmUgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JH
QkE8ZmxvYXQ+JiBzUkdCQSkKKy8vIEZJWE1FOiBSZXBsYWNlIHdpdGggZGlyZWN0IGNhbGwgdG8g
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMoKSAoY29uc2lkZXIgcmVuYW1pbmcKKy8vIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzIHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0IHRoZSBjb252ZXJzaW9uIGxv
c2VzIGJpdCBkZXB0aCkuCitpbmxpbmUgQ29sb3JBZGFwdG9yPFNSR0JBPHVpbnQ4X3Q+PiBtYWtl
U2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBzUkdCQSkKIHsKICAgICByZXR1cm4gY29u
dmVydFRvQ29tcG9uZW50Qnl0ZXMoc1JHQkEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLW5hbWVzcGFjZSBzdGQgewotCi10ZW1wbGF0ZTw+IGNsYXNzIHR1cGxlX3NpemU8V2ViQ29y
ZTo6U2ltcGxlQ29sb3I+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXpl
X3QsIDQ+IHsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+IGNsYXNzIHR1cGxlX2VsZW1l
bnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0eXBlID0g
dWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjQxODgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
OSArNTEsMTEgQEAgUmV0YWluUHRyPENHQ29sb3JSZWY+IFRpbnlMUlVDYWNoZVBvbGljeQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2ltcGxlQ29s
b3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQorc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogewog
ICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
cy4KKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
c2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9y
KTsKICAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMo
Y29sb3IpOwpAQCAtODIsMjggKzg0LDEzIEBAIHN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2lt
cGxlQ29sb3JGcm8KIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCisgICAgOiBD
b2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihjb2xvcikpCiB7Ci0gICAgLy8gRklYTUU6
IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotCi0gICAgaWYg
KCFjb2xvcikgewotICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gaW52
YWxpZFNpbXBsZUNvbG9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0U2ltcGxl
Q29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsKIH0KIAotQ29sb3I6OkNv
bG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFnKQorQ29sb3I6OkNvbG9yKENHQ29sb3JS
ZWYgY29sb3IsIFNlbWFudGljVGFnIHRhZykKKyAgICA6IENvbG9yKG1ha2VTaW1wbGVDb2xvckZy
b21DR0NvbG9yKGNvbG9yKSwgdGFnKQogewotICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0g
bmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLQotICAgIGlmICghY29sb3IpIHsKLSAgICAg
ICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVD
b2xvckZyb21DR0NvbG9yKGNvbG9yKSk7Ci0gICAgdGFnQXNTZW1hbnRpYygpOwogfQogCiBzdGF0
aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0xMjgsOCAr
MTE1LDggQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0Nv
bG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xv
ci5pc1NpbXBsZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNT
aW1wbGUoKS5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZSkgeworICAgIGlmIChjb2xvci5pc0lu
bGluZSgpKSB7CisgICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJbmxpbmUo
KSB9LnZhbHVlKSB7CiAgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFy
ZW50IH0udmFsdWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50
Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cmFuc3Bh
cmVudENHQ29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNjQx
ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwyMCArMTU4LDIwIEBAIGJvb2wgQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBJTlZFUlQ6IHsKICAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0g
bV9hbW91bnQ7Ci0gICAgICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZs
b2F0IGNvbXBvbmVudCkgeworICAgICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25B
bHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAgICAgICAg
cmV0dXJuIDEuMGYgLSAob25lTWludXNBbW91bnQgKyBjb21wb25lbnQgKiAobV9hbW91bnQgLSBv
bmVNaW51c0Ftb3VudCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGNhc2UgQ09OVFJBU1Q6IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVm
ICogbV9hbW91bnQpICsgMC41ZjsKLSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNv
bG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpjbGFtcDxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQg
KiBjb21wb25lbnQsIDAuMGYsIDEuMGYpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIGNhc2UgQlJJR0hUTkVTUzoKLSAgICAgICAgZm9yRWFjaE5vbkFscGhh
Q29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNvbG9yID0g
Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29t
cG9uZW50KSB7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICog
Y29tcG9uZW50LCAwLjBmKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5t
bQkocmV2aXNpb24gMjY0MTg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOCArMTIyLDggQEAgQ29sb3Ig
c2VtYW50aWNDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKgogCiBOU0NvbG9yICpuc0NvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNTaW1wbGUoKSkgewotICAgICAg
ICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzU2ltcGxlKCkuYXNTUkdCQTx1aW50OF90
PigpIH0udmFsdWUpIHsKKyAgICBpZiAoY29sb3IuaXNJbmxpbmUoKSkgeworICAgICAgICBzd2l0
Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzSW5saW5lKCkgfS52YWx1ZSkgewogICAgICAgICBj
YXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudCB9LnZhbHVlOiB7CiAgICAgICAg
ICAgICBzdGF0aWMgTlNDb2xvciAqY2xlYXJDb2xvciA9IFtbTlNDb2xvciBjb2xvcldpdGhTUkdC
UmVkOjAgZ3JlZW46MCBibHVlOjAgYWxwaGE6MF0gcmV0YWluXTsKICAgICAgICAgICAgIHJldHVy
biBjbGVhckNvbG9yOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjY0MTkwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDctMDkgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFBhcnQgNCBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWlu
dDhfdD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MTU4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9yKToKKyAg
ICAgICAgVXBkYXRlIGZvciBuZXcgbWV0aG9kIG9mIGV4dGVuZGVkIGNvbG9yIGNvbnN0cnVjdGlv
bi4KKwogMjAyMC0wNy0wOSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBMb2NhbCBpbnRlcm5hbCBidWlsZHMgZmFpbCBvbiBBcHBsZSBTaWxpY29uIChi
dWlsZGluZyB5YXNtKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2NDE4OCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKIAogVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gYzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUy
LDcgKzUyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRl
bmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5k
ZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07Cisg
ICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsK
QEAgLTcwLDcgKzcwLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAK
IFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIg
PSBjMTsKQEAgLTg5LDIwICs4OSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQp
CiBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkp
OwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUs
IDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRl
bmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAg
ICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAg
ICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05F
KGMxLCBjMik7CkBAIC0xMjEsMjAgKzEyMSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFs
aXR5KQogVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAgICAgICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkp
OwogCi0gICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5o
YXNoKCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAg
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9y
IGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
U1JHQikgfTsKKyAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAg
ICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQ0LDE0ICsxNDQsMTQg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4OwogICAgIGludCBi
ID0gNjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENv
bG9yKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFj
ZTo6U1JHQikgfTsKKyAgICBDb2xvciByZ2IxIHsgU1JHQkE8ZmxvYXQ+IHsgciAvIDI1NS4wZiwg
ZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgYSAvIDI1NS4wZiB9IH07CiAgICAgQ29sb3IgcmdiMiA9
IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCks
IHJnYjIuaGFzaCgpKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3Ip
CiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3Miw3ICsxNzIsNyBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENv
bG9yLCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMx
KTsKQEAgLTE5NCw3ICsxOTQsOCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50
KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAg
Q29sb3IqIGMxID0gbmV3IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xv
ciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAKICAg
ICBFWFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yKiBjMiA9IG5ldyBD
b2xvcigqYzEpOwpAQCAtMjIwLDcgKzIyMSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNS
ZWZlcmVuY2VDb3VudGkKIAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBDb2xvciBjMSB7IG1h
a2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwg
MS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVYUEVDVF9F
USgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM5LDcgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwg
UDNDb252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAg
IENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUg
fSB9OwogICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8g
c1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMjUwLDkgKzI1
MSwxMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIAogVEVTVChF
eHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvblRvU1JHQikKIHsKLSAgICBDb2xvciBs
aW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xv
clNwYWNlOjpMaW5lYXJSR0IpIH07Ci0gICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRl
bmRlZCgpKTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCk7CisgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKKyAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdC
QUNvbG9yLmlzRXh0ZW5kZWQoKSk7CisKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdC
QUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7
CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1
ZSwgMC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403925</attachid>
            <date>2020-07-09 15:41:55 -0700</date>
            <delta_ts>2020-07-09 17:27:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214158-20200709154154.patch</filename>
            <type>text/plain</type>
            <size>80373</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MSBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbV0lQIC0gTmVlZCB0byBicmVhayB0aGlzIHVwIGEgYml0IGZvciBsYW5kaW5nXQorICAgIAor
ICAgICAgICAtIFJlbW92ZSBTaW1wbGVDb2xvciBlbnRpcmVseSAodGhpcyBwYXJ0IHNob3VsZCBi
ZSBpdCdzIG93biBwYXRjaCkKKyAgICAgICAgICAgIC0gSW4gQ29sb3IsIHJlbmFtZWQgZnVuY3Rp
b25zIC8gdmFyaWFibGUgcmVmZXJlbmNpbmcgU2ltcGxlQ29sb3Igd2l0aCBuZXcgbmFtZSwgSW5s
aW5lQ29sb3IuCisKKyAgICAgICAgLSBSZXdvcmsgRXh0ZW5kZWRDb2xvciBzdXBwb3J0ICh0aGlz
IHBhcnQgc2hvdWxkIGJlIGl0J3Mgb3duIHBhdGNoKQorICAgICAgICAgICAgLSBBZGQgQ29sb3Ig
Y29uc3RydWN0b3JzIHdoaWNoIHRha2UgU1JHQkE8ZmxvYXQ+LCBEaXNwbGF5UDM8ZmxvYXQ+LCBl
dGMuCisgICAgICAgICAgICAgICAgLSBJZiBTUkdCQTxmbG9hdD4gaXMgcmVwcmVzZW50YWJsZSBh
cyBhIFNSR0JBPHVpbnQ4X3Q+LCBzdG9yZSBpbmxpbmUuCisgICAgICAgICAgICAtIEFkZCBoZWxw
ZXIgZnVuY3Rpb25zLCBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoKSBhbmQgRXh0ZW5kZWRD
b2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoKSwgCisgICAgICAgICAgICAgIHdoaWNoIGNhbiBi
ZSB1c2VkIHRvIGltcGxlbWVudCBmdW5jdGlvbmFsaXR5IGdlbmVyaWNhbGx5IHVzaW5nIENvbG9y
VXRpbGl0aWVzIGhlbHBlcnMgKGUuZy4KKyAgICAgICAgICAgICAgQ29sb3I6OmludmVydGVkQ29s
b3JXaXRoQWxwaGEoKSBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIGFsbCBjb2xvciB0eXBlcyB1c2lu
ZyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhCisgICAgICAgICAgICAgIGZyb20gQ29s
b3JVdGlsaXRpZXMuaCkKKyAgICAgICAgICAgICAgICAtIFRoaXMgYWxsb3cgdXMgdG8gcmVkdWNl
IHRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIHRoYXQgRXh0ZW5kZWRDb2xvciBleHBvc2VzIHRvIHRo
ZSBiYXJlIG1pbmltdW0uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVuYW1lIENvbG9yQnVp
bGRlci5oIHRvIENvbG9yQWRhcHRvci5oLCBpdCB3YXNuJ3QgcmVhbGx5IGJ1aWxkaW5nIGFueXRo
aW5nLgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2Vy
Ojpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvblBhcmFt
ZXRlcnMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmg6
CisgICAgICAgIC0gVXBkYXRlIHRvIGNhbGwgbmV3IENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcg
U1JHQkE8ZmxvYXQ+IGFuZCBEaXNwbGF5UDM8ZmxvYXQ+IGZvciBleHRlbmRlZCBjb2xvcnMuCisg
ICAgICAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGxzIHRvIG1ha2VTaW1wbGVDb2xvci4KKyAg
ICAgICAgLSBBZGQgcGFyc2luZyBoZWxwZXJzIHRoYXQgb3BlcmF0ZSBvbiBmbG9hdHMgZGlyZWN0
bHksIHRvIG1ha2UgY29sb3IgY29uc3RydWN0aW9uIGEgYml0IGNsZWFuZXIgKGZldyBjYXN0cyku
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0
YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWxJZ25v
cmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdU
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9u
ZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0lubGluZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6c2V0SW5saW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldEV4dGVuZGVkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzQmxhY2tDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNXaGl0ZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNTaW1wbGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzU2ltcGxlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRTaW1wbGVDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JBZGFwdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3JBZGFwdG9yOjpDb2xvckFkYXB0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3JBZGFwdG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvckFkYXB0b3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oOiBSZW1vdmVkLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjp0b1NSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnRvTGluZWFyU1JHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9EaXNwbGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9MaW5lYXJEaXNw
bGF5UDMpOgorICAgICAgICAoV2ViQ29yZTo6dG9IU0xBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFs
aXphdGlvbkZvckNTUyk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRNTCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemF0aW9uKToKKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Zm9yRWFjaE5vbkFscGhhQ29tcG9u
ZW50KTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0
aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFRvQ29tcG9uZW50Qnl0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnRDb21wb25lbnRCeXRlVG88dWludDhfdD4pOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydENvbXBvbmVudEZsb2F0VG88dWludDhfdD4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydENvbXBvbmVudEZsb2F0VG88ZmxvYXQ+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9y
V2l0aE92ZXJyaWRlbkFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydENvbXBvbmVudCk6
CisgICAgICAgIChXZWJDb3JlOjppbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VFeHRlbmRlZENv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6RXh0ZW5kZWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUgY29uc3QpOgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6U2ltcGxlQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNv
bXBvbmVudEFzRmxvYXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Q29sb3I6OmlzT3BhcXVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUNvbG9yOjppc1Zpc2libGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlQ29sb3I6OmNvbG9yV2l0aEFscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUNvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JBIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvckZyb21DR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpuc0NvbG9yKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246
OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIGZvciByZXdvcmtlZCBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQuCisKIDIwMjAtMDctMDkgIFBlciBBcm5l
IFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgWFBDRW5kcG9pbnQg
YW5kIFhQQ0VuZHBvaW50Q2xpZW50IGNsYXNzZXMgZnJvbSBXZWJDb3JlIHRvIFdlYktpdApJbmRl
eDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgyLDcgKzEwODIsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQXVk
aW9UcmFja1ByaXZhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JC
dWlsZGVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckFkYXB0b3IuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA4LDcgKzIyMDgsNyBAQAogCQk3QUY5
QjIwRjE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYg
LyogSlNWVFRSZWdpb25MaXN0LmggKi87IH07CiAJCTdCRTc0MjczODFGQTkwNkZCQjRGMEYyQyAv
KiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZHR3JhcGhpY3NF
bGVtZW50LmggKi87IH07CiAJCTdDMDI5QzZFMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAyOUM2
RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTdDMTRBMDA3MjRCNUZFMjEwMDFBNkM2QyAvKiBD
b2xvckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMTRBMDA2MjRCNUZFMjEwMDFBNkM2QyAvKiBDb2xvckJ1aWxkZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzE0QTAwNzI0QjVGRTIx
MDAxQTZDNkMgLyogQ29sb3JBZGFwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzE0QTAwNjI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JBZGFwdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Mx
ODQzRkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0
b2ZpbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3QzE5M0JCQjFGNUUwRUVEMDA4OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JCNjFGNUUwRUI5MDA4
OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmggKi87IH07CiAJCTdDMTkzQkJDMUY1RTBFRUQwMDg4
RjNFNiAvKiBDYW52YXNGaWxsUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MxOTNCQTExRjVFMEVBQjAwODhGM0U2IC8qIENhbnZhc0ZpbGxSdWxl
LmggKi87IH07CkBAIC05OTI0LDcgKzk5MjQsNyBAQAogCQk3QzBDRUYyRTFFNEE1ODMyMDA4REVC
ODAgLyogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjJGMUU0QTU4QUQwMDhERUI4MCAvKiBKU0RP
TUNvbnN0cnVjdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMENFRjMwMUU0QTU4RjEwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzE0QTAw
NjI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9y
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzE0QTAwNjI0QjVGRTIx
MDAxQTZDNkMgLyogQ29sb3JBZGFwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yQWRhcHRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzE4NDNGQjFDOEI3MjgzMDAyRUI5NzMg
LyogQXV0b2ZpbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0
b2ZpbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzE4NDNGQzFDOEI3Mjgz
MDAyRUI5NzMgLyogQXV0b2ZpbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXV0b2ZpbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxOTNCOUExRjVFMEVB
NzAwODhGM0U2IC8qIENhbnZhc0RyYXdJbWFnZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
Q2FudmFzRHJhd0ltYWdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTE4
LDkgKzI1NTE4LDkgQEAKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuaCAqLywKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAog
CQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLAorCQkJCTdDMTRBMDA2
MjRCNUZFMjEwMDFBNkM2QyAvKiBDb2xvckFkYXB0b3IuaCAqLywKIAkJCQk3QzFCNEE2NTI0QTk5
NzU5MDAzMzcyN0YgLyogQ29sb3JCbGVuZGluZy5jcHAgKi8sCiAJCQkJN0MxQjRBNjcyNEE5OTc2
NjAwMzM3MjdGIC8qIENvbG9yQmxlbmRpbmcuaCAqLywKLQkJCQk3QzE0QTAwNjI0QjVGRTIxMDAx
QTZDNkMgLyogQ29sb3JCdWlsZGVyLmggKi8sCiAJCQkJN0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5
IC8qIENvbG9yQ29tcG9uZW50cy5oICovLAogCQkJCTdDNTE0RTAyMjRBRjgwNTgwMDUwNzEwRiAv
KiBDb2xvckNvbnZlcnNpb24uY3BwICovLAogCQkJCTdDNTE0RTAwMjRBRjgwNTgwMDUwNzEwRiAv
KiBDb2xvckNvbnZlcnNpb24uaCAqLywKQEAgLTMwMTA4LDcgKzMwMTA4LDcgQEAKIAkJCQk0NkVC
RUEwMjFCN0Q0RDY1MDBCRTQ5NDEgLyogQ29sbGVjdGlvblRyYXZlcnNhbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTNDNDQyMDAwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjc1MzU2NzBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTdDMTRBMDA3MjRCNUZFMjEwMDFBNkM2QyAvKiBDb2xvckJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdDMTRBMDA3MjRCNUZFMjEwMDFBNkM2QyAvKiBDb2xvckFk
YXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzMzBBMjIzMTNFQzE5NkIwMDAwQjQ1QiAvKiBD
b2xvckNob29zZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzN0NERUJEMTQ5RUYyMDMwMDQyMDkw
RCAvKiBDb2xvckNob29zZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0OEQyQUE1MjE1
OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKICAgICB9CiAKLSAgICBib29sIGNvbnN1bWVOdW1iZXJSYXcoZG91YmxlJiByZXN1bHQp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0PiBib29sIGNvbnN1bWVOdW1iZXJSYXcoUmVz
dWx0JiByZXN1bHQpCiAgICAgewogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1Zh
bHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Niw2ICsxNzYsMjEgQEAgYm9vbCBjb25zdW1lTnVtYmVy
UmF3KENTU1BhcnNlclRva2VuUmFuZwogICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1i
ZXJSYXcocmVzdWx0KTsKIH0KIAorYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBmbG9hdCYgcmVzdWx0KQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2Vu
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRv
a2VuKSB7CisgICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkubnVtZXJpY1ZhbHVlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIsIFZhbHVlUmFuZ2VBbGwpOworICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1i
ZXJSYXcocmVzdWx0KTsKK30KKwogLy8gRklYTUU6IFdvcmsgb3V0IGlmIHRoaXMgY2FuIGp1c3Qg
Y2FsbCBjb25zdW1lTnVtYmVyUmF3CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVO
dW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkK
IHsKQEAgLTUzNSw3ICs1NTAsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENT
U1BhcnNlCiAgICAgaWYgKCFjb2xvclBhcmFtZXRlcikKICAgICAgICAgY29sb3JQYXJhbWV0ZXIg
PSBjb25zdW1lUGVyY2VudChhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICBpZiAoIWNvbG9yUGFy
YW1ldGVyKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIGNvbnN0IGJvb2wgaXNQZXJjZW50ID0gY29sb3JQYXJhbWV0ZXItPmlzUGVyY2VudGFnZSgp
OwogCkBAIC01NTgsNyArNTczLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhD
U1NQYXJzZQogICAgICAgICBpZiAoaSA9PSAxKQogICAgICAgICAgICAgc3ludGF4ID0gY29uc3Vt
ZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSA/IENvbG9yU3ludGF4OjpDb21tYXMgOiBD
b2xvclN5bnRheDo6V2hpdGVzcGFjZVNsYXNoOwogICAgICAgICBlbHNlIGlmICghY29uc3VtZVNl
cGFyYXRvcigpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgICAgIGNvbG9yUGFyYW1ldGVyID0gaXNQZXJjZW50ID8gY29uc3VtZVBl
cmNlbnQoYXJncywgVmFsdWVSYW5nZUFsbCkgOiBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFu
Z2VBbGwpOwogICAgICAgICBpZiAoIWNvbG9yUGFyYW1ldGVyKQpAQCAtNTgwLDcgKzU5NSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgaWYgKCFj
b25zdW1lTnVtYmVyUmF3KGFyZ3MsIGFscGhhKSkgewogICAgICAgICAgICAgYXV0byBhbHBoYVBl
cmNlbnQgPSBjb25zdW1lUGVyY2VudChhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgICAg
IGlmICghYWxwaGFQZXJjZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICBhbHBoYSA9IGFscGhhUGVyY2Vu
dC0+ZG91YmxlVmFsdWUoKSAvIDEwMC4wOwogICAgICAgICB9CiAgICAgICAgIGFscGhhQ29tcG9u
ZW50ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSk7CkBAIC01ODksNyArNjA0LDcgQEAg
c3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5h
dEVuZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3IoY29sb3JBcnJheVswXSwgY29sb3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxwaGFD
b21wb25lbnQpOworICAgIHJldHVybiBTUkdCQSB7IGNvbG9yQXJyYXlbMF0sIGNvbG9yQXJyYXlb
MV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50IH07CiB9CiAKIHN0YXRpYyBDb2xvciBw
YXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKQEAgLTYwMSwxMiArNjE2LDEyIEBAIHN0YXRpYyBDb2xvciBwYXJz
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWhzbFZhbHVlKSB7CiAgICAgICAgIGhz
bFZhbHVlID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYg
KCFoc2xWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgYW5nbGVJbkRlZ3JlZXMgPSBoc2xWYWx1ZS0+ZG91YmxlVmFsdWUo
KTsKICAgICB9IGVsc2UKICAgICAgICAgYW5nbGVJbkRlZ3JlZXMgPSBoc2xWYWx1ZS0+Y29tcHV0
ZURlZ3JlZXMoKTsKIAotICAgIGRvdWJsZSBjb2xvckFycmF5WzNdOworICAgIGZsb2F0IGNvbG9y
QXJyYXlbM107CiAgICAgY29sb3JBcnJheVswXSA9IGZtb2QoZm1vZChhbmdsZUluRGVncmVlcywg
MzYwLjApICsgMzYwLjAsIDM2MC4wKSAvIDM2MC4wOwogICAgIGJvb2wgcmVxdWlyZXNDb21tYXMg
PSBmYWxzZTsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKykgewpAQCAtNjIzLDcgKzYz
OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAg
Y29sb3JBcnJheVtpXSA9IGNsYW1wVG88ZG91YmxlPihkb3VibGVWYWx1ZSwgMC4wLCAxMDAuMCkg
LyAxMDAuMDsgLy8gTmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAuCiAgICAgfQog
Ci0gICAgZG91YmxlIGFscGhhID0gMS4wOworICAgIGZsb2F0IGFscGhhID0gMS4wOwogICAgIGJv
b2wgY29tbWFDb25zdW1lZCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7
CiAgICAgYm9vbCBzbGFzaENvbnN1bWVkID0gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFj
ZShhcmdzKTsKICAgICBpZiAoKGNvbW1hQ29uc3VtZWQgJiYgIXJlcXVpcmVzQ29tbWFzKSB8fCAo
c2xhc2hDb25zdW1lZCAmJiByZXF1aXJlc0NvbW1hcykpCkBAIC02MzksOSArNjU0LDkgQEAgc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIH0KIAogICAgIGlmICgh
YXJncy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
QXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0
PGZsb2F0PihhbHBoYSkgfSkpOworICAgIHJldHVybiB0b1NSR0JBKEhTTEEgeyBjb2xvckFycmF5
WzBdLCBjb2xvckFycmF5WzFdLCBjb2xvckFycmF5WzJdLCBhbHBoYSB9KTsKIH0KIAogc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCkBAIC02NTgsMTEgKzY3MywxMSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0
aW9uUGFyYW1ldGVyCiAgICAgICAgIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcigpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBjb25zdW1lSWRlbnQoYXJncyk7CiAKLSAg
ICBkb3VibGUgY29sb3JDaGFubmVsc1s0XSA9IHsgMCwgMCwgMCwgMSB9OworICAgIGZsb2F0IGNv
bG9yQ2hhbm5lbHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewogICAgICAgICBkb3VibGUgdmFsdWU7CiAgICAgICAgIGlmIChjb25zdW1lTnVt
YmVyUmF3KGFyZ3MsIHZhbHVlKSkKQEAgLTY3Niw3ICs2OTEsNyBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgICAgIGlmICghYWxwaGFQYXJhbWV0ZXIpCiAg
ICAgICAgICAgICBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXIoYXJncywgVmFsdWVSYW5n
ZUFsbCk7CiAgICAgICAgIGlmICghYWxwaGFQYXJhbWV0ZXIpCi0gICAgICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgY29sb3JDaGFubmVs
c1szXSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMS4wLCBhbHBoYVBhcmFtZXRlci0+aXNQZXJj
ZW50YWdlKCkgPyAoYWxwaGFQYXJhbWV0ZXItPmRvdWJsZVZhbHVlKCkgLyAxMDApIDogYWxwaGFQ
YXJhbWV0ZXItPmRvdWJsZVZhbHVlKCkpKTsKICAgICB9CkBAIC02ODQsOSArNjk5LDIwIEBAIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICAvLyBGSVhNRTogU3Vw
cG9ydCB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmFsbGJhY2sgY29sb3IgdmFsdWVzLgog
CiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAot
ICAgIHJldHVybiBtYWtlRXh0ZW5kZWRDb2xvcihjb2xvckNoYW5uZWxzWzBdLCBjb2xvckNoYW5u
ZWxzWzFdLCBjb2xvckNoYW5uZWxzWzJdLCBjb2xvckNoYW5uZWxzWzNdLCBjb2xvclNwYWNlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNh
c2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgU1JHQkEgeyBjb2xv
ckNoYW5uZWxzWzBdLCBjb2xvckNoYW5uZWxzWzFdLCBjb2xvckNoYW5uZWxzWzJdLCBjb2xvckNo
YW5uZWxzWzNdIH0gfTsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAg
cmV0dXJuIENvbG9yIHsgRGlzcGxheVAzIHsgY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVs
c1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSB9IH07CisgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VI
ZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xv
cnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDcgQEAgZW51bSBjbGFzcyBBbGxvd1hSZXNvbHV0aW9uVW5pdCB7IEFsbG93LAogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJik7CiBib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsKK2Jvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgZmxvYXQmIHJlc3VsdCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
PSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYs
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRl
ICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIK
ICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOSw2ICszNiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMg
Y29uc3RleHByIGF1dG8gbGlnaHRlbmVkQmxhY2sgPSBtYWtlU2ltcGxlQ29sb3IoODQsIDg0LCA4
NCk7CiBzdGF0aWMgY29uc3RleHByIGF1dG8gZGFya2VuZWRXaGl0ZSA9IG1ha2VTaW1wbGVDb2xv
cigxNzEsIDE3MSwgMTcxKTsKIAorQ29sb3I6OkNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29s
b3IpCit7CisgICAgYXV0byBjb252ZXJ0ZWQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb2xv
cik7CisgICAgaWYgKGNvbG9yID09IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb252ZXJ0ZWQp
KSB7CisgICAgICAgIHNldElubGluZUNvbG9yKGNvbnZlcnRlZCk7CisgICAgICAgIHRhZ0FzVmFs
aWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0
ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKK0NvbG9yOjpDb2xvcihjb25zdCBMaW5l
YXJTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRD
b2xvcjo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKK0NvbG9yOjpDb2xvcihjb25zdCBEaXNwbGF5UDM8
ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBzZXRFeHRlbmRlZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNy
ZWF0ZShjb2xvcikpOworfQorCiBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3ImIG90aGVyKQogICAg
IDogbV9jb2xvckRhdGEob3RoZXIubV9jb2xvckRhdGEpCiB7CkBAIC03NSw3ICs5NCw3IEBAIENv
bG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29s
b3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBpbnZh
bGlkU2ltcGxlQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFn
cyA9IGludmFsaWRJbmxpbmVDb2xvcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTgzLDcg
KzEwMiw3IEBAIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiBDb2xvciBD
b2xvcjo6bGlnaHRlbmVkKCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBj
YXNlIGZvciBzcGVlZC4KLSAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBs
ZUNvbG9yIHsgYmxhY2sgfSkKKyAgICBpZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKQEAgLTEwMCw3ICsxMTksNyBAQCBDb2xvciBD
b2xvcjo6bGlnaHRlbmVkKCkgY29uc3QKIENvbG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CiB7
CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKGlz
U2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBTaW1wbGVDb2xvciB7IHdoaXRlIH0pCisgICAgaWYg
KGlzSW5saW5lKCkgJiYgYXNJbmxpbmUoKSA9PSB3aGl0ZSkKICAgICAgICAgcmV0dXJuIGRhcmtl
bmVkV2hpdGU7CiAgICAgCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7CkBAIC0xMjYsMjIgKzE0NSwyNCBAQCBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29u
c3QKIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdAogewot
ICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY29sb3JX
aXRoQWxwaGEoYWxwaGEpOwotCi0gICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1wbGUoKS5jb2xvcldp
dGhBbHBoYShjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKSk7Ci0KLSAgICAvLyBGSVhNRTog
V2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFuZC9vciBjb3JyZWN0
IGhlcmU/Ci0gICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50
aWMoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlw
ZShXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0gKGNvbnN0IFNSR0JBPHVpbnQ4PiYgY29s
b3IpIC0+IENvbG9yIHsKKyAgICAgICAgICAgIENvbG9yIHJlc3VsdCA9IGNvbG9yV2l0aE92ZXJy
aWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7CisgICAgICAgICAgICBpZiAoaXNTZW1hbnRpYygpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IGF1dG8mIGNvbG9yKSAt
PiBDb2xvciB7CisgICAgICAgICAgICByZXR1cm4gY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29s
b3IsIGFscGhhKTsKKyAgICAgICAgfQorICAgICkpOwogfQogCiBDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRl
ZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEo
YWxwaGEpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLmludmVydGVkQ29sb3JXaXRoQWxwaGEoY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSkpOworICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5n
VHlwZShbJl0gKGNvbnN0IGF1dG8mIGNvbG9yKSAtPiBDb2xvciB7CisgICAgICAgIHJldHVybiBp
bnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbG9yLCBhbHBoYSk7CisgICAgfSk7CiB9
CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTE1MiwxMyArMTczLDYg
QEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdAogICAgIHJldHVybiB7IHRvU1JH
QkFMb3NzeTx1aW50OF90PigpLCBTZW1hbnRpYyB9OwogfQogCi1zdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4geyBhc0V4
dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07Ci0gICAg
cmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoYXNTaW1wbGUoKS5h
c1NSR0JBPGZsb2F0PigpKSB9OwotfQotCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs
MTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKworI2luY2x1ZGUgIkNvbG9yQWRhcHRvci5oIgorI2lu
Y2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNs
dWRlICJDb2xvclR5cGVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJFeHRlbmRlZENvbG9yLmgiCiAjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNTEsODUgKzU2LDgwIEBAIHR5cGVkZWYgc3RydWN0IF9HZGtSR0JB
IEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gQWJsZSB0byByZXByZXNlbnQ6
CisvLyAgICAtIFNwZWNpYWwgImludmFsaWQgY29sb3IiIHN0YXRlCisvLyAgICAtIDR4IDgtYml0
ICgwLTI1NSkgc1JHQkEsIHN0b3JlZCBpbmxpbmUsIG5vIGFsbG9jYXRpb24KKy8vICAgIC0gNHgg
ZmxvYXQgKDAtMSkgc1JHQkEsIHN0b3JlZCBpbiBhIHJlZmVyZW5jZSBjb3VudGVkIHN1Yi1vYmpl
Y3QKKy8vICAgIC0gNHggZmxvYXQgKDAtMSkgTGluZWFyIHNSR0JBLCBzdG9yZWQgaW4gYSByZWZl
cmVuY2UgY291bnRlZCBzdWItb2JqZWN0CisvLyAgICAtIDR4IGZsb2F0ICgwLTEpIERpc3BsYXlQ
Mywgc3RvcmVkIGluIGEgcmVmZXJlbmNlIGNvdW50ZWQgc3ViLW9iamVjdAorLy8KKy8vIEFkZGl0
aW9uYWxseSwgdGhlIGlubGluZSA4LWJpdCBzUkdCQSBjYW4gaGF2ZSBhbiBvcHRpb25hbCAic2Vt
YW50aWMiIGJpdCBzZXQgb24gaXQsCisvLyB3aGljaCBpbmRpY2F0ZXMgdGhlIGNvbG9yIG9yaWdp
bmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorLy8gRklYTUU6IElmIHdlIGtl
ZXAgdGhlICJzZW1hbnRpYyIgYml0IG9uIENvbG9yLCB3ZSBzaG91bGQgZXh0ZW5kIHN1cHBvcnQg
dG8gYWxsIGNvbG9ycywKKy8vIG5vdCBqdXN0IGlubGluZSBvbmVzLCBieSB1c2luZyB0aGUgdW51
c2VkIHBvaW50ZXIgYml0cy4KKwogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIENvbG9yKCkgPSBkZWZhdWx0OwogCi0gICAgQ29sb3IoU1JH
QkE8dWludDhfdD4gY29sb3IpCi0gICAgewotICAgICAgICBzZXRTaW1wbGVDb2xvcihjb2xvcik7
Ci0gICAgfQorICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBDb2xvcihPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4pOworCisgICAgQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisgICAg
Q29sb3IoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisgICAgQ29sb3IoY29uc3QgRGlzcGxh
eVAzPGZsb2F0PiYpOwogCiAgICAgZW51bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07Ci0gICAg
Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQotICAgICAgICA6IENvbG9y
KGNvbG9yKQotICAgIHsKLSAgICAgICAgdGFnQXNTZW1hbnRpYygpOwotICAgIH0KKyAgICBDb2xv
cihTUkdCQTx1aW50OF90PiwgU2VtYW50aWNUYWcpOworICAgIENvbG9yKE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiwgU2VtYW50aWNUYWcpOwogCi0gICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+
JiYgZXh0ZW5kZWRDb2xvcikKLSAgICB7Ci0gICAgICAgIC8vIFplcm8gdGhlIHVuaW9uLCBqdXN0
IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAgICAgLy8gdG9w
IDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBFeHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCi0g
ICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgICAgICBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwotICAgICAg
ICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLSAgICB9CisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKTsKKyAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hU
YWJsZUVtcHR5VmFsdWVUeXBlKTsKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9PSBkZWxldGVk
SGFzaFZhbHVlOyB9CiAKLSAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUg
JiBpbnZhbGlkU2ltcGxlQ29sb3IsICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5v
dCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEo
ZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlkU2ltcGxlQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVk
IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGEgdmFsaWQgU2ltcGxlQ29sb3IiKTsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidz
IGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBs
ZUNvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JB
bmRGbGFncyA9IGRlbGV0ZWRIYXNoVmFsdWU7Ci0gICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgp
KTsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBDb2xvcihDb2xvciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYg
b3BlcmF0b3I9KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3ImIG9wZXJh
dG9yPShDb2xvciYmKTsKIAotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
PT0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICB9CisgICAgfkNvbG9yKCk7CiAKLSAgICBleHBsaWNp
dCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQotICAgIHsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3Mg
ZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidz
IGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBs
ZUNvbG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JB
bmRGbGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7
Ci0gICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8IChtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgdmFsaWRJbmxpbmVDb2xvckJpdCk7IH0KKyAg
ICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIChtX2NvbG9y
RGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsgfQog
Ci0gICAgfkNvbG9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAg
ICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOwotICAgIH0KIAotICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyAmIHZhbGlkU2ltcGxlQ29sb3JCaXQpOyB9CisgICAgLy8gQWNj
ZXNzIHRvIGFscGhhIHJlbGF0ZWQgcHJvcGVydGllcyBvZiB1bmRlcmx5aW5nIGNvbG9yCiAKLSAg
ICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGUoKS5pc09wYXF1ZSgpOyB9Ci0gICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxw
aGEoKSA+IDAuMCA6IGFzU2ltcGxlKCkuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0g
MS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KKyAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDog
YXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KIAotICAgIHVpbnQ4X3QgYWxwaGEoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5h
bHBoYSgpKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25lbnQoKTsgfQotICAgIGZsb2F0IGFscGhh
QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBo
YSgpIDogYXNTaW1wbGUoKS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQorICAgIHVpbnQ4X3Qg
YWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KKyAgICBmbG9h
dCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9
CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6
OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKSBjb25zdDsKKyAgICAvLyBBY2Nlc3MgdG8gZGVyaXZlZCBwcm9wZXJ0aWVzIG9m
IHRoZSB1bmRlcmx5aW5nIGNvbG9yLgorCisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVtaW5h
bmNlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7
IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgorCisKKyAg
ICAvLyBBY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgY29sb3IKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3Im
JikgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNl
IGNvbG9ycyBpbnRvIHNSR0IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9T
UkdCQUxvc3N5KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQo
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OworICAg
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbHVtaW5h
bmNlKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRo
IGx1bWluYW5jZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
KyAgICAvLyBHZW5lcmF0aW9uIG9mIG5ldyBjb2xvcnMgdmlhIG11dGF0aW9uIG9mIHRoaXMgb25l
LgorICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIENvbG9yIGRhcmtlbmVkKCkgY29uc3Q7CiAKICAgICBDb2xvciBpbnZl
cnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3Q7CiAgICAgQ29s
b3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3Q7CkBAIC0xNDQsOSAr
MTQ0LDYgQEAgcHVibGljOgogCiAgICAgQ29sb3Igc2VtYW50aWNDb2xvcigpIGNvbnN0OwogCi0g
ICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEgQ1NTIHNlbWFudGljIGNv
bG9yIG5hbWUuCi0gICAgYm9vbCBpc1NlbWFudGljKCkgY29uc3QgeyByZXR1cm4gaXNTaW1wbGUo
KSAmJiAobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIGlzU2VtYW50aWNTaW1wbGVD
b2xvckJpdCk7IH0KLQogI2lmIFBMQVRGT1JNKEdUSykKICAgICBDb2xvcihjb25zdCBHZGtSR0JB
Jik7CiAgICAgb3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0OwpAQCAtMTcyLDE0ICsxNjksNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGN5YW4gPSBtYWtlU2ltcGxlQ29sb3Io
MCwgMjU1LCAyNTUpOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB5ZWxsb3cgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAyNTUsIDApOwogCi0gICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QgeyBy
ZXR1cm4gIShtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBsZUNv
bG9yKTsgfQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgp
OyB9Ci0KLSAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7Ci0gICAg
Y29uc3QgU2ltcGxlQ29sb3IgYXNTaW1wbGUoKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3ImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xv
ciYgb3BlcmF0b3I9KENvbG9yJiYpOwogCiAgICAgLy8gRXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRl
ZCBjb2xvcnMgd2lsbCBhbHdheXMgYmUgbm9uLWVxdWFsLgogICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKQEAgLTE5MiwzMSArMTgxLDM3
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCisgICAgLy8gRklYTUU6IFRoZXNlIGlzL2FzIGZ1
bmN0aW9ucyBhcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgc2hvdWxkIGJlIG1hZGUgcHJp
dmF0ZSBvbmNlIGFsbCBjYWxsZXJzCisgICAgLy8gaGF2ZSBiZWVuIHdlYW5lZCBvZmYgdGhlbS4K
KyAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY29sb3JEYXRhLmlubGlu
ZUNvbG9yQW5kRmxhZ3MgJiBpbnZhbGlkSW5saW5lQ29sb3IpOyB9CisgICAgYm9vbCBpc0lubGlu
ZSgpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCk7IH0KKyAgICBjb25zdCBTUkdCQTx1aW50
OF90PiBhc0lubGluZSgpIGNvbnN0OworICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFzRXh0ZW5k
ZWQoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvcikKLSAg
ICAgICAgOiBDb2xvcihjb2xvci5hc1NSR0JBPHVpbnQ4X3Q+KCkpCi0gICAgewotICAgIH0KKyAg
ICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CisKKyAgICB2b2lkIHNldElubGluZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+KTsKIAotICAgIHZvaWQgc2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhf
dD4pOworICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAK
LSAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxh
Z3MgfD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlkKCkg
eyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7IH0K
KyAgICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxh
Z3MgfD0gaXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9CisgICAgdm9pZCB0YWdBc1ZhbGlkKCkg
eyBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7IH0K
IAogICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9pbnRlci4KLSAgICAv
LyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFNpbXBsZUNvbG9yLgotICAgIC8vIDB4X19fX19f
XzExIGlzIGEgdmFsaWQgU2ltcGxlQ29sb3IuCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4
dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRTaW1w
bGVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xv
ckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvciA9
IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0
ID0gMHg0OworICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgaW5saW5lIGNvbG9yLgor
ICAgIC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgaW5saW5lIGNvbG9yLgorICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ2NF90IGludmFsaWRJbmxpbmVDb2xvciA9IDB4MTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ2NF90IHZhbGlkSW5saW5lQ29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50NjRfdCB2YWxpZElubGluZUNvbG9yID0gMHgzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0gMHg0OwogCi0gICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkQ7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZG
RkZCOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1ZSA9IDB4
RkZGRkZGRkZGRkZGRkZGRDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGVtcHR5SGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZCOwogCiAgICAgdW5pb24gewotICAgICAgICB1aW50
NjRfdCBzaW1wbGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CisgICAgICAg
IHVpbnQ2NF90IGlubGluZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkSW5saW5lQ29sb3IgfTsKICAg
ICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRhOwog
fTsKQEAgLTIzOSw3ICsyMzQsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9y
JiBhLCBjCiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAg
ICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzOworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0g
Yi5tX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKQEAgLTI2MCwyMSArMjU1LDky
IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIHsKICAgICBpZiAo
YS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRl
ZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpID09IChiLm1fY29s
b3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xv
ckJpdCk7CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+
Q29sb3I6OmlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuaW5saW5l
Q29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsKK30KKwor
aW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK3sKKyAgICBzZXRJbmxp
bmVDb2xvcihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IGNvbG9yKQoreworICAgIGlmIChjb2xvcikKKyAgICAgICAgc2V0SW5saW5lQ29s
b3IoKmNvbG9yKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xv
ciwgU2VtYW50aWNUYWcpCit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHRhZ0Fz
U2VtYW50aWMoKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50
OF90Pj4gY29sb3IsIFNlbWFudGljVGFnKQoreworICAgIGlmIChjb2xvcikgeworICAgICAgICBz
ZXRJbmxpbmVDb2xvcigqY29sb3IpOworICAgICAgICB0YWdBc1NlbWFudGljKCk7CisgICAgfQor
fQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29s
b3IpCit7CisgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsKK30K
KworaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCit7
CisgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElubGluZUNvbG9y
LCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVu
ZGVkQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlk
SW5saW5lQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9v
ayBsaWtlIGEgdmFsaWQgaW5saW5lIGNvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydChkZWxldGVk
SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhh
dmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIGlubGluZSBjb2xvciB3b3VsZG4ndCBoYXZlIik7Cisg
ICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IGRlbGV0ZWRIYXNoVmFsdWU7Cisg
ICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9yKFdURjo6
SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCit7CisgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hW
YWx1ZSAmIGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0
IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOworICAgIHN0YXRpY19hc3NlcnQoZW1w
dHlIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
aGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gaW5saW5lIGNvbG9yIHdvdWxkbid0IGhhdmUiKTsK
KyAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7Cisg
ICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6On5Db2xvcigpCit7
CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+ZGVyZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsK
ICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2go
KTsKLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxh
Z3MpOworICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIENv
bG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKK3sKKyAg
ICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNhbGxPblVu
ZGVybHlpbmdUeXBlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0dXJu
IGZ1bmN0b3IoYXNJbmxpbmUoKSk7Cit9CisKK2lubGluZSBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwg
Q29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4geyBhc0V4dGVu
ZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07CisgICAgcmV0
dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydFRvQ29tcG9u
ZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdC
QTxUPiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgp
KQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOwotICAgIHJl
dHVybiBhc1NpbXBsZSgpLmFzU1JHQkE8VD4oKTsKKyAgICAKKyAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l
X3Y8VCwgdWludDhfdD4pCisgICAgICAgIHJldHVybiBhc0lubGluZSgpOwogfQogCiBpbmxpbmUg
Q29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhh
KSBjb25zdApAQCAtMzAzLDMwICszNjksMzkgQEAgaW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3Im
IENvbG9yOjphc0V4dAogICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0K
IAotaW5saW5lIGNvbnN0IFNpbXBsZUNvbG9yIENvbG9yOjphc1NpbXBsZSgpIGNvbnN0Citpbmxp
bmUgY29uc3QgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoaXNTaW1wbGUoKSk7Ci0gICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgYXNTUkdCQShQYWNr
ZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuc2ltcGxlQ29sb3JB
bmRGbGFncyA+PiAzMikgfSkgfTsKKyAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgcmV0dXJu
IGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6
c2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCitpbmxpbmUgdm9pZCBDb2xvcjo6
c2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgbV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEg
eyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKKyAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZs
YWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZDo6UkdCQSB7IGNvbG9yIH0udmFsdWUp
IDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAoraW5saW5lIHZvaWQgQ29sb3I6OnNldEV4
dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKK3sKKyAgICAv
LyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2ln
bnMgdGhlCisgICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBFeHRlbmRlZENvbG9y
IHBvaW50ZXIgYmVsb3cuCisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IDA7
CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9yLmxlYWtSZWYo
KTsKKyAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKK30KKwogaW5saW5lIGJvb2wgQ29sb3I6Omlz
QmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5k
ZWQoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5kZWQoKS5pc0JsYWNrKCk7Ci0gICAg
cmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkgPT0gU2ltcGxlQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
KyAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xvcjo6YmxhY2s7CiB9CiAKIGlubGlu
ZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlm
IChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBjb2xvci5hc0V4dGVuZGVkKCku
aXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsg
Q29sb3I6OndoaXRlIH07CisgICAgcmV0dXJuIGNvbG9yLmFzSW5saW5lKCkgPT0gQ29sb3I6Ondo
aXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzU1LDcgKzQzMCw3IEBAIHZv
aWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb24KICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGljLgogCiAgICAgZW5j
b2RlciA8PCB0cnVlOwotICAgIGVuY29kZXIgPDwgUGFja2VkOjpSR0JBIHsgYXNTaW1wbGUoKS5h
c1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZTsKKyAgICBlbmNvZGVyIDw8IFBhY2tlZDo6UkdCQSB7
IGFzSW5saW5lKCkgfS52YWx1ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTM4
MSw3ICs0NTYsNyBAQCBPcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNvbG9yU3BhY2UpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgcmV0dXJuIENvbG9yIHsgRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhh
LCBjb2xvclNwYWNlKSB9OworICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpj
cmVhdGUoeyBjMSwgYzIsIGMzLCBhbHBoYSB9LCBjb2xvclNwYWNlKSB9OwogICAgIH0KIAogICAg
IGJvb2wgaXNWYWxpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQWRhcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQWRhcHRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQWRhcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIK
KyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IEhlbHBlciB0byBhbGxvdyBjb252ZW5pZW50IHN5bnRheCBmb3Igd29ya2luZyB3aXRoIGNvbG9y
IHR5cGVzLgorLy8gZS5nLiBhdXRvIHllbGxvd1dpdGg1MFBlcmNlbnRBbHBoYSA9IENvbG9yOjp5
ZWxsb3cuY29sb3JXaXRoQWxwaGEoMTI4KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBzdHJ1Y3QgQ29sb3JBZGFwdG9yIDogcHVibGljIENvbG9yVHlwZSB7CisgICAgY29uc3RleHBy
IENvbG9yQWRhcHRvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorICAgICAgICA6IENvbG9yVHlw
ZSB7IGNvbG9yIH0KKyAgICB7CisgICAgfQorCisgICAgY29uc3RleHByIENvbG9yQWRhcHRvciBj
b2xvcldpdGhBbHBoYSh1aW50OF90IG92ZXJyaWRlQWxwaGEpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoKnRoaXMsIG92ZXJyaWRl
QWxwaGEpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBDb2xvckFkYXB0b3IgaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYSh1aW50OF90IG92ZXJyaWRlQWxwaGEpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSgqdGhpcywgb3ZlcnJpZGVBbHBo
YSk7CisgICAgfQorfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JCdWlsZGVyLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oCShub25leGlzdGVudCkKQEAgLTEs
NTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEhlbHBlciB0byBhbGxvdyBjb252ZW5pZW50IHN5bnRheCBmb3Igd29ya2luZyB3
aXRoIGNvbG9yIHR5cGVzLgotLy8gZS5nLiBhdXRvIHllbGxvd1dpdGg1MFBlcmNlbnRBbHBoYSA9
IENvbG9yOjp5ZWxsb3cuY29sb3JXaXRoQWxwaGEoMTI4KTsKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4gc3RydWN0IENvbG9yQnVpbGRlciA6IHB1YmxpYyBDb2xvclR5cGUgewotICAgIGNv
bnN0ZXhwciBDb2xvckJ1aWxkZXIoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKLSAgICAgICAgOiBD
b2xvclR5cGUgeyBjb2xvciB9Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0ZXhwciBDb2xvclR5
cGUgY29sb3IoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIGNvbnN0ZXhwciBDb2xvckJ1aWxkZXIgY29sb3JXaXRoQWxwaGEodWludDhfdCBvdmVycmlk
ZUFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVf
djxkZWNsdHlwZShDb2xvclR5cGUoKS5hbHBoYSksIHVpbnQ4X3Q+LCAiT25seSB1aW50OF90IGJh
c2VkIGNvbG9yIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIik7Ci0KLSAgICAgICAgQ29sb3JCdWlsZGVy
IGNvcHkgPSAqdGhpczsKLSAgICAgICAgY29weS5hbHBoYSA9IG92ZXJyaWRlQWxwaGE7Ci0gICAg
ICAgIHJldHVybiBjb3B5OwotICAgIH0KLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyNjQy
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAKLXRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgQ01ZS0E7Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQ
MzsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMQTsKLXRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgTGluZWFyRGlzcGxheVAzOwotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJT
UkdCQTsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7CituYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gTGluZWFyUkdCIC8gRGlz
cGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgogZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChmbG9hdCk7CkBAIC01Miw0ICs0NywxMyBAQCBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9h
dD4gdG9TUkdCQShjb25zCiAKIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0
PiYpOwogCisKKy8vIElkZW50aXR5IGNvbnZlcnNpb25zICh1c2VmdWwgZm9yIGdlbmVyaWMgY29u
dGV4dHMpCisKK2NvbnN0ZXhwciBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIExpbmVhclNSR0JBPGZsb2F0
PiB0b0xpbmVhclNSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJu
IGNvbG9yOyB9Citjb25zdGV4cHIgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBE
aXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikgeyByZXR1cm4gY29sb3I7IH0KK2NvbnN0ZXhwciBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKSB7IHJldHVybiBjb2xvcjsgfQorY29uc3RleHByIEhTTEE8ZmxvYXQ+
IHRvSFNMQShjb25zdCBIU0xBPGZsb2F0PiYgY29sb3IpIHsgcmV0dXJuIGNvbG9yOyB9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIFNpbXBsZUNvbG9yIG92ZXJsb2FkcworLy8gU1JHQkE8dWludDhfdD4gb3Zlcmxv
YWRzCiAKIHN0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CkBAIC01
Myw3ICs1Myw3IEBAIHN0YXRpYyBzdGQ6OmFycmF5PGNoYXIsIDQ+IGZyYWN0aW9uRGlnaXQKICAg
ICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMCArIDB4N0YpIC8gMHhGRiksICdc
MCcsICdcMCcsICdcMCcgfSB9OwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTaW1w
bGVDb2xvciBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwog
ICAgIHN3aXRjaCAoYWxwaGEpIHsKQEAgLTY2LDE1ICs2NiwxNSBAQCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhTaW1wbGVDb2xvciBjCiAgICAgfQogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwo
U1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGFdID0gY29sb3I7Ci0gICAgaWYgKGNvbG9yLmlzT3BhcXVlKCkpCisgICAgaWYgKGFscGhhID09
IDB4RkYpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJj
YXNlKSwgaGV4KGdyZWVuLCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7
CiAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwogfQogCi1TdHJpbmcgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7
CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CiAgICAgaWYgKGFs
cGhhIDwgMHhGRikKQEAgLTgzLDcgKzgzLDcgQEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KAogfQogCiAKLS8vIEV4dGVuZGVkQ29sb3Igb3ZlcmxvYWRzCisvLyBFeHRl
bmRlZCBjb2xvciBvdmVybG9hZHMKIAogc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9u
KENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKQEAgLTEwMCw0NSArMTAwLDg2IEBAIHN0YXRpYyBB
U0NJSUxpdGVyYWwgc2VyaWFsaXphdGlvbihDb2xvclMKICAgICByZXR1cm4gIiJfczsKIH0KIAot
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBTdHJpbmcgc2VyaWFsaXphdGlvbihj
b25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9
IGNvbG9yLmNvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xv
cjsKICAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAxLjBmKSkKLSAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JT
cGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNwYWNlKCkpLCAnICcs
IGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CisgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2UpLCAn
ICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCJj
b2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2UpLCAnICcsIGMxLCAnICcsIGMy
LCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7CiB9CiAKLVN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKKy8vIFNSR0JBPGZsb2F0PiBvdmVy
bG9hZHMKKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb24oY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvckhUTUwoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICByZXR1cm4g
c2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb24oY29s
b3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3Qg
U1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7
Cit9CisKKy8vIExpbmVhclNSR0JBPGZsb2F0PiBvdmVybG9hZHMKKworU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRN
TChjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uKGNvbG9yKTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb24oY29sb3IpOworfQorCisvLyBEaXNwbGF5UDM8ZmxvYXQ+IG92ZXJsb2FkcworCitT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikK
K3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxp
emF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvbihjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvbihjb2xvcik7CiB9CiAKIC8vIENvbG9yIG92ZXJsb2FkcwogCiBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNv
bG9yLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29s
b3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5h
c1NpbXBsZSgpKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10oYXV0
byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGMpOworICAgIH0pOwog
fQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9y
SFRNTChjb2xvci5hc1NpbXBsZSgpKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWlu
Z1R5cGUoW10oYXV0byBjKSB7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChj
KTsKKyAgICB9KTsKIH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQotICAg
ICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRl
bmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29s
b3IuYXNTaW1wbGUoKSk7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtd
KGF1dG8gYykgeworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoYyk7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjQyMDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjAgKzI4LDMwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRXh0ZW5kZWRDb2xvcjsKLWNsYXNzIFNpbXBsZUNvbG9y
OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKK3RlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgTGluZWFyU1JHQkE7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JB
OwogCiAvLyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVk
IGFjY29yZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAy
MDE1KQogLy8gc2VyaWFsaXphdGlvbkZvckNTUyByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVk
IGFjY29yZGluZyB0byBDU1MKIC8vIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IHJl
dHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgZm9yIER1bXBSZW5kZXJUcmVlLCAjUlJHR0JCLCAj
UlJHR0JCQUEgb3IgdGhlIENTUyBzZXJpYWxpemF0aW9uCiAKLVdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNpbXBsZUNvbG9yKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTaW1wbGVDb2xvcik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU2ltcGxlQ29sb3IpOwotCi1XRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9y
Jik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0
ZW5kZWRDb2xvciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+KTsKK1dFQkNPUkVfRVhQT1JUIFN0
cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChTUkdCQTx1aW50OF90Pik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4p
OworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBTUkdC
QTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChj
b25zdCBTUkdCQTxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7
CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgTGluZWFy
U1JHQkE8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CisKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsK
K1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBEaXNwbGF5
UDM8ZmxvYXQ+Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xvciYpOwogV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjQy
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwzMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvckNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbXBvbmVudFRyYWl0
czsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPHVpbnQ4X3Q+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWluVmFsdWUgPSAwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbXBv
bmVudFRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWluVmFsdWUg
PSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4VmFsdWUgPSAxLjBmOworfTsK
KworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JHQkEgewogICAgIFQgcmVkOwogICAg
IFQgZ3JlZW47CiAgICAgVCBibHVlOwotICAgIFQgYWxwaGE7CisgICAgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0I7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTUkdCQShULCBULCBUKSAtPiBTUkdCQTxUPjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNS
R0JBKFQsIFQsIFQsIFQpIC0+IFNSR0JBPFQ+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IFNSR0JBPFQ+
JiBjKQpAQCAtNTgsMjEgKzc1LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXIKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChTUkdCQTxU
PiYgY29sb3IsIEZ1bmN0b3ImJiBmKQotewotICAgIGNvbG9yLnJlZCA9IGYoY29sb3IucmVkKTsK
LSAgICBjb2xvci5ncmVlbiA9IGYoY29sb3IuZ3JlZW4pOwotICAgIGNvbG9yLmJsdWUgPSBmKGNv
bG9yLmJsdWUpOwotfQotCi0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdC
QSB7CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7Ci0gICAgVCBhbHBoYTsK
KyAgICBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gTGluZWFyU1JHQkEoVCwgVCwgVCkgLT4gTGlu
ZWFyU1JHQkE8VD47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShULCBULCBULCBU
KSAtPiBMaW5lYXJTUkdCQTxUPjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBMaW5lYXJTUkdCQTxUPiYg
YykKQEAgLTEwMCw5ICsxMTIsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3Bs
YXlQMyB7CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7Ci0gICAgVCBhbHBo
YTsKKyAgICBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6RGlzcGxh
eVAzOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gRGlzcGxheVAzKFQsIFQsIFQpIC0+IERp
c3BsYXlQMzxUPjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAt
PiBEaXNwbGF5UDM8VD47CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNv
bXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQpAQCAt
MTMwLDkgKzE0NSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxh
CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKICAgICBUIGJsdWU7Ci0gICAgVCBhbHBoYTsKKyAg
ICBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZTsKIH07CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQMyhULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8
VD47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4g
TGluZWFyRGlzcGxheVAzPFQ+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29s
b3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxU
PiYgYykKQEAgLTE2MCw5ICsxNzYsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhT
TEEgewogICAgIFQgaHVlOwogICAgIFQgc2F0dXJhdGlvbjsKICAgICBUIGxpZ2h0bmVzczsKLSAg
ICBUIGFscGhhOworICAgIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBULCBUKSAtPiBIU0xBPFQ+OwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBULCBULCBUKSAtPiBIU0xBPFQ+OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25l
bnRzKGNvbnN0IEhTTEE8VD4mIGMpCkBAIC0xOTIsOSArMjA5LDEwIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDTVlLQSB7CiAgICAgVCBtYWdlbnRhOwogICAgIFQgeWVsbG93OwogICAg
IFQgYmxhY2s7Ci0gICAgVCBhbHBoYTsKKyAgICBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+
OjptYXhWYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IENNWUtBKFQsIFQsIFQsIFQp
IC0+IENNWUtBPFQ+OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gQ01ZS0EoVCwgVCwgVCwgVCwgVCkg
LT4gQ01ZS0E8VD47CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ01ZS0E8VD4mIGEsIGNvbnN0IENNWUtBPFQ+JiBiKQpAQCAtMjEyLDkgKzIz
MCwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSB7CiAgICAgVCB4OwogICAg
IFQgeTsKICAgICBUIHo7Ci0gICAgVCBhbHBoYTsKKyAgICBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwg
VCkgLT4gWFlaQTxUPjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwgVCwgVCwgVCkgLT4g
WFlaQTxUPjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50
czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBYWVpBPFQ+JiBjKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRGbG9vcmluZyhTUkcKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWls
aW5nKFNSR0JBPHVpbnQ4X3Q+KTsKIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdC
QTx1aW50OF90Pik7CiAKKwogaW5saW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9u
ZW50Qnl0ZShmbG9hdCBmKQogewogICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYp
LCAwbCwgMjU1bCk7CkBAIC04MSw3ICs4Miw3IEBAIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1l
PiB0eXBlbmFtZSBDb2wKICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21w
b25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1sxXSksIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChjb21wb25lbnRzWzNdKSB9OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNsYW1wVG9Db21w
b25lbnRCeXRlcyhpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3RlbXBsYXRlPHRlbXBsYXRl
PHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudHM+IGNv
bnN0ZXhwciBDb2xvclR5cGU8dWludDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKGludCByLCBp
bnQgZywgaW50IGIsIGludCBhKQogewogICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRl
KHIpLCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShnKSwgY2xhbXBUb0NvbXBvbmVudEJ5dGUoYiksIGNs
YW1wVG9Db21wb25lbnRCeXRlKGEpIH07CiB9CkBAIC05MSw2ICs5Miw4NSBAQCB0ZW1wbGF0ZTx0
ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sCiAgICAgcmV0dXJuIHsgY2xhbXBUb0NvbXBv
bmVudEZsb2F0KHIpLCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoZyksIGNsYW1wVG9Db21wb25lbnRG
bG9hdChiKSwgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGEpIH07CiB9CiAKKworLy8gQ29sb3IgbXV0
YXRvcnMKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBD
b2xvclR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9y
VHlwZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBtYWRlIHRvIHdvcmsgd2l0aCBjb2xvcidzIHRoYXQgZG9uJ3QgdXNlIHRoZSBuYW1l
cyByZWQsIGdyZWVuLCBhbmQgYmx1ZSBmb3IgdGhlaXIgY2hhbm5lbHMuCisgICAgQ29sb3JUeXBl
IGNvcHkgPSBjb2xvcjsKKyAgICBjb3B5LnJlZCA9IGZ1bmN0b3IoY29sb3IucmVkKTsKKyAgICBj
b3B5LmdyZWVuID0gZnVuY3Rvcihjb2xvci5ncmVlbik7CisgICAgY29weS5ibHVlID0gZnVuY3Rv
cihjb2xvci5ibHVlKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIFQgY29udmVydENvbXBvbmVudEJ5dGVUbyh1aW50OF90KTsKKwordGVtcGxh
dGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVp
bnQ4X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0Pih1aW50OF90IHZhbHVlKQor
eworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRvKGZsb2F0KTsKKwordGVtcGxh
dGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50OF90PihmbG9h
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7Cit9
CisKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0
PihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEZsb2F0KHZhbHVl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qg
b3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yOworICAgIGNvcHku
YWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVy
cmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNv
bG9yOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShj
b3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK2NvbnN0
ZXhwciB1aW50OF90IGludmVydENvbXBvbmVudCh1aW50OF90IGNvbXBvbmVudCkKK3sKKyAgICBy
ZXR1cm4gMjU1IC0gY29tcG9uZW50OworfQorCitjb25zdGV4cHIgZmxvYXQgaW52ZXJ0Q29tcG9u
ZW50KGZsb2F0IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gMS4wZiAtIGNvbXBvbmVudDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldp
dGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRl
QWxwaGEpCit7CisgICAgQ29sb3JUeXBlIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxw
aGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgeworICAgICAgICByZXR1cm4g
aW52ZXJ0Q29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgfSk7CisgICAgY29weS5hbHBoYSA9IGNv
bnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEp
OworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENv
bG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCit7CisgICAgQ29sb3JUeXBlIGNvcHkgPSBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVu
dCkgeworICAgICAgICByZXR1cm4gaW52ZXJ0Q29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgfSk7
CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHku
YWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKwogY29uc3RleHBy
IHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAgIHJldHVy
biAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNDkgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRXh0ZW5kZWRDb2xvci5oIgogCi0jaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xv
ckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hlci5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShmbG9hdCBjMSwg
ZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYzEsIGMyLCBjMywgYWxw
aGEsIGNvbG9yU3BhY2UpKTsKLX0KLQogdW5zaWduZWQgRXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNv
bnN0CiB7CiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29tcG9uZW50cygpOwogICAg
IHJldHVybiBjb21wdXRlSGFzaChjMSwgYzIsIGMzLCBhbHBoYSwgbV9jb2xvclNwYWNlKTsKIH0K
IAotUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0
IG92ZXJyaWRlQWxwaGEpIGNvbnN0Ci17Ci0gICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdB
bHBoYV0gPSBjb21wb25lbnRzKCk7Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShj
MSwgYzIsIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwotfQotCi1SZWY8RXh0ZW5k
ZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBvdmVy
cmlkZUFscGhhKSBjb25zdAotewotICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFd
ID0gY29tcG9uZW50cygpOwotICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAt
IGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgb3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsK
LX0KLQogU1JHQkE8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNM
b3NzeSgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENv
bG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBhc1NSR0JBKG1fY29tcG9uZW50cyk7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiB0b1NSR0JBKGFz
TGluZWFyU1JHQkEobV9jb21wb25lbnRzKSk7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5
UDM6Ci0gICAgICAgIHJldHVybiB0b1NSR0JBKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyAwLCAwLCAwLCAw
IH07CisgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xv
cikgeworICAgICAgICByZXR1cm4gdG9TUkdCQShjb2xvcik7CisgICAgfSk7CiB9CiAKIGJvb2wg
RXh0ZW5kZWRDb2xvcjo6aXNXaGl0ZSgpIGNvbnN0CkBAIC04Myw5ICs1Niw0IEBAIGJvb2wgRXh0
ZW5kZWRDb2xvcjo6aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMz
ICYmIGFscGhhID09IDE7CiB9CiAKLUNvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBm
bG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17
Ci0gICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29s
b3JTcGFjZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksOCArMzksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiBjbGFzcyBF
eHRlbmRlZENvbG9yIDogcHVibGljIFJlZkNvdW50ZWQ8RXh0ZW5kZWRDb2xvcj4gewogcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZs
b2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKLQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIFJlZjxFeHRlbmRlZENvbG9y
PiBjcmVhdGUoY29uc3QgQ29sb3JUeXBlJik7CisgICAgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9y
PiBjcmVhdGUoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7CisgICAgCiAgICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHNbM107IH0KIAogICAgIGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbXBvbmVudHMoKSBjb25zdCB7IHJldHVybiBt
X2NvbXBvbmVudHM7IH0KQEAgLTQ4LDI3ICs0OSwxNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBSZWY8RXh0ZW5kZWRDb2xvcj4g
Y29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwotICAgIFJlZjxFeHRlbmRlZENvbG9yPiBpbnZl
cnRlZENvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLQogICAgIGJvb2wgaXNXaGl0ZSgpIGNv
bnN0OwogICAgIGJvb2wgaXNCbGFjaygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZl
cnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAg
ICAgICByZXR1cm4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCk7Ci0gICAgICAgIGVsc2Ug
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3ko
KSk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiB0
b1NSR0JBTG9zc3koKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRl
Y2x0eXBlKGF1dG8pIGNhbGxPblVuZGVybHlpbmdUeXBlKEZ1bmN0b3ImJikgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgICAgICA6IG1fY29tcG9uZW50
cyhjMSwgYzIsIGMzLCBhbHBoYSkKLSAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkK
LSAgICB7Ci0gICAgfQorICAgIEV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0Piwg
Q29sb3JTcGFjZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZs
b2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CiAKQEAgLTg2LDggKzc2LDQwIEBAIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5kZWRDb2wKICAgICByZXR1cm4gIShhID09IGIpOwog
fQogCi0vLyBGSVhNRTogSWYgdGhlIENvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBj
YW4gYWxsIGJlCi0vLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1h
a2UgYSBTaW1wbGVDb2xvci4KLVdFQkNPUkVfRVhQT1JUIENvbG9yIG1ha2VFeHRlbmRlZENvbG9y
KGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwg
Y29sb3IuY29sb3JTcGFjZSkpOworfQorCitpbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRlZENv
bG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpKTsKK30KKworaW5saW5lIEV4dGVuZGVkQ29sb3I6
OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2NvbXBvbmVudHMoY29tcG9uZW50cykKKyAgICAsIG1f
Y29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgU1JHQkE8VD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3sKKyAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgcmV0dXJu
IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpOworICAgIGVsc2UgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGVzKHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgRXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5k
ZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2Nv
bG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHJldHVybiBm
dW5jdG9yKGFzU1JHQkEobV9jb21wb25lbnRzKSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6CisgICAgICAgIHJldHVybiBmdW5jdG9yKGFzTGluZWFyU1JHQkEobV9jb21wb25lbnRz
KSk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBmdW5j
dG9yKGFzRGlzcGxheVAzKG1fY29tcG9uZW50cykpOworICAgIH0KK30KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMDkgKzI1LDMyIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQ29sb3JCdWlsZGVyLmgiCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgi
Ci0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAg
IGNvbnN0ZXhwciBleHBsaWNpdCBTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiB2YWx1ZSkgOiBt
X3ZhbHVlIHsgdmFsdWUgfSB7IH0KLQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5hbHBoYTsgfQotICAgIGNvbnN0ZXhwciBmbG9h
dCBhbHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChtX3ZhbHVlLmFscGhhKTsgfQotCi0gICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhID09IDB4RkY7IH0KLSAgICBjb25zdGV4cHIg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhOyB9Ci0KLSAgICBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiB7IG1fdmFsdWUucmVkLCBtX3ZhbHVlLmdyZWVuLCBtX3Zh
bHVlLmJsdWUsIGFscGhhIH07Ci0gICAgfQotCi0gICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGlu
dmVydGVkQ29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLnJlZCksIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLmdyZWVuKSwgc3RhdGljX2Nhc3Q8dWludDhf
dD4oMHhGRiAtIG1fdmFsdWUuYmx1ZSksIGFscGhhIH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAg
ICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKG1fdmFsdWUpOwotICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgotICAg
IGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAgICAgICAgIHJldHVy
biBtX3ZhbHVlLnJlZDsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKLSAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmdyZWVuOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAo
TiA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYmx1ZTsKLSAgICAgICAgZWxzZSBp
ZiBjb25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFscGhhOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IodWludDhfdCByLCB1
aW50OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKSA6IG1fdmFsdWUgeyByLCBnLCBiLCBhIH0g
eyB9Ci0KLSAgICBTUkdCQTx1aW50OF90PiBtX3ZhbHVlIHsgMCwgMCwgMCwgMCB9OwotfTsKLQot
Ym9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7Ci1ib29sIG9wZXJhdG9y
IT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShT
aW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiBhLmFzU1JHQkE8dWlu
dDhfdD4oKSA9PSBiLmFzU1JHQkE8dWludDhfdD4oKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiAhKGEgPT0g
Yik7Ci19Ci0KLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1w
bGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
Ci1jb25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3Io
U1JHQkE8dWludDhfdD4pOwotQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxl
Q29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQorLy8gRklY
TUU6IFJlbmFtZSAobWF5YmUgbWFrZVNSR0IociwgZywgYikgb3IgbWF5YmUgcmdiKHIsIGcsIGIp
IHRvIG1hdGNoIGNzcykgYW5kIG1vdmUgdG8gQ29sb3JVdGlsaXRpZXMuaAorY29uc3RleHByIENv
bG9yQWRhcHRvcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywg
aW50IGIpCiB7CiAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywg
YiwgMHhGRik7CiB9CiAKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1h
a2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKKy8vIEZJWE1FOiBSZW5h
bWUgKG1heWJlIG1ha2VTUkdCQShyLCBnLCBiKSBvciBtYXliZSByZ2JhKHIsIGcsIGIpIHRvIG1h
dGNoIGNzcykgYW5kIG1vdmUgdG8gQ29sb3JVdGlsaXRpZXMuaAorY29uc3RleHByIENvbG9yQWRh
cHRvcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKQogewogICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcs
IGIsIGEpOwogfQogCi1jb25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtl
U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gc1JHQkEpCisvLyBGSVhNRTogUmVtb3ZlIGlmIHVu
dXNlZCwgb3RoZXJ3aXNlIHJlbmFtZS9tb3ZlIHRvIG1hdGNoIGFib3ZlLgorY29uc3RleHByIENv
bG9yQWRhcHRvcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+
IHNSR0JBKQogewogICAgIHJldHVybiBzUkdCQTsKIH0KIAotaW5saW5lIENvbG9yQnVpbGRlcjxT
UkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEp
CisvLyBGSVhNRTogUmVwbGFjZSB3aXRoIGRpcmVjdCBjYWxsIHRvIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKCkgKGNvbnNpZGVyIHJlbmFtaW5nCisvLyBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyB0
byBtYWtlIGl0IGNsZWFyZXIgdGhhdCB0aGUgY29udmVyc2lvbiBsb3NlcyBiaXQgZGVwdGgpLgor
aW5saW5lIENvbG9yQWRhcHRvcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGNvbnN0
IFNSR0JBPGZsb2F0PiYgc1JHQkEpCiB7CiAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKHNSR0JBKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2Ugc3Rk
IHsKLQotdGVtcGxhdGU8PiBjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlNpbXBsZUNvbG9yPiA6
IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Ci19OwotCi10
ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPiBjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OlNp
bXBsZUNvbG9yPiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgdHlwZSA9IHVpbnQ4X3Q7Ci19OwotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNH
LmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDExIEBAIFJldGFp
blB0cjxDR0NvbG9yUmVmPiBUaW55TFJVQ2FjaGVQb2xpY3kKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgU1JHQkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoQ0dD
b2xvclJlZiBjb2xvcikKK3N0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBs
ZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgaWYgKCFjb2xv
cikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHNpemVfdCBudW1Db21wb25l
bnRzID0gQ0dDb2xvckdldE51bWJlck9mQ29tcG9uZW50cyhjb2xvcik7CiAgICAgY29uc3QgQ0dG
bG9hdCogY29tcG9uZW50cyA9IENHQ29sb3JHZXRDb21wb25lbnRzKGNvbG9yKTsKQEAgLTgyLDI4
ICs4NCwxMyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvCiB9CiAK
IENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQorICAgIDogQ29sb3IobWFrZVNpbXBsZUNv
bG9yRnJvbUNHQ29sb3IoY29sb3IpKQogewotICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0g
bmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLQotICAgIGlmICghY29sb3IpIHsKLSAgICAg
ICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVD
b2xvckZyb21DR0NvbG9yKGNvbG9yKSk7CiB9CiAKLUNvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNv
bG9yLCBTZW1hbnRpY1RhZykKK0NvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRp
Y1RhZyB0YWcpCisgICAgOiBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihjb2xvciks
IHRhZykKIHsKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBj
b2xvciBzcGFjZXMuCi0KLSAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgIG1fY29sb3JEYXRhLnNp
bXBsZUNvbG9yQW5kRmxhZ3MgPSBpbnZhbGlkU2ltcGxlQ29sb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihj
b2xvcikpOwotICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAogc3RhdGljIENHQ29sb3JSZWYgbGVh
a0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTI4LDggKzExNSw4IEBAIHN0YXRpYyBD
R0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG8KIAogQ0dDb2xvclJlZiBjYWNoZWRDR0Nv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNTaW1wbGUoKSkgewot
ICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzU2ltcGxlKCkuYXNTUkdCQTx1
aW50OF90PigpIH0udmFsdWUpIHsKKyAgICBpZiAoY29sb3IuaXNJbmxpbmUoKSkgeworICAgICAg
ICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzSW5saW5lKCkgfS52YWx1ZSkgewogICAg
ICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudCB9LnZhbHVlOiB7CiAg
ICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dD
b2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTgsMjAgKzE1OCwyMCBAQCBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgSU5WRVJUOiB7
CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS4wZiAtIG1fYW1vdW50OwotICAgICAg
ICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFsmXShmbG9hdCBjb21wb25lbnQpIHsK
KyAgICAgICAgY29sb3IgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29s
b3IsIFsmXShmbG9hdCBjb21wb25lbnQpIHsKICAgICAgICAgICAgIHJldHVybiAxLjBmIC0gKG9u
ZU1pbnVzQW1vdW50ICsgY29tcG9uZW50ICogKG1fYW1vdW50IC0gb25lTWludXNBbW91bnQpKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIENPTlRS
QVNUOiB7CiAgICAgICAgIGZsb2F0IGludGVyY2VwdCA9IC0oMC41ZiAqIG1fYW1vdW50KSArIDAu
NWY7Ci0gICAgICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNv
bXBvbmVudCkgeworICAgICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6Y2xhbXA8ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBm
LCAxLjBmKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBj
YXNlIEJSSUdIVE5FU1M6Ci0gICAgICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwg
WyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAgICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0Vh
Y2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PGZsb2F0PihtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZik7
CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2NDIw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw4IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9t
TlNDb2xvcihOU0NvbG9yICoKIAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKGNvbG9yLmlzU2ltcGxlKCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWQ6
OlJHQkEgeyBjb2xvci5hc1NpbXBsZSgpLmFzU1JHQkE8dWludDhfdD4oKSB9LnZhbHVlKSB7Cisg
ICAgaWYgKGNvbG9yLmlzSW5saW5lKCkpIHsKKyAgICAgICAgc3dpdGNoIChQYWNrZWQ6OlJHQkEg
eyBjb2xvci5hc0lubGluZSgpIH0udmFsdWUpIHsKICAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEg
eyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5TQ29s
b3IgKmNsZWFyQ29sb3IgPSBbW05TQ29sb3IgY29sb3JXaXRoU1JHQlJlZDowIGdyZWVuOjAgYmx1
ZTowIGFscGhhOjBdIHJldGFpbl07CiAgICAgICAgICAgICByZXR1cm4gY2xlYXJDb2xvcjsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2NDIwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDIwLTA3LTA5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBQYXJ0IDQgb2YgU2ltcGxlQ29sb3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRp
YWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDE1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisgICAgICAgIFVwZGF0ZSBmb3Ig
bmV3IG1ldGhvZCBvZiBleHRlbmRlZCBjb2xvciBjb25zdHJ1Y3Rpb24uCisKIDIwMjAtMDctMDkg
IFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgWFBD
RW5kcG9pbnQgYW5kIFhQQ0VuZHBvaW50Q2xpZW50IGNsYXNzZXMgZnJvbSBXZWJDb3JlIHRvIFdl
YktpdApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29s
b3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2NDIwMCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVT
VChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRl
bmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsK
KyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0g
fTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBbciwgZywg
YiwgYWxwaGFdID0gYzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUyLDcgKzUyLDcg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9y
LCBDb3B5Q29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3Ig
YzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTcwLDcg
KzcwLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICBD
b2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBjMTsKQEAg
LTg5LDIwICs4OSwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiBURVNUKEV4
dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAg
ICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9h
dD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNF
eHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgICAgIENvbG9y
IGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7
CkBAIC0xMTIsNyArMTEyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBp
bnQgZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9y
IHJnYjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4w
LCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMSB7IFNSR0JB
PGZsb2F0PiB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsIGEgLyAyNTUuMGYg
fSB9OwogICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAg
RVhQRUNUX05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAgLTEy
MSwyMCArMTIxLDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIEhhc2gpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAg
ICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9
IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29s
b3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpEaXNwbGF5UDMpIH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEu
MCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVk
KCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CiAgICAgfQog
CiAgICAgewotICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKKyAgICAgICAgQ29sb3IgYzEgeyBE
aXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIEVYUEVD
VF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5k
ZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgICAg
ICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShj
MS5oYXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQg
YSA9IDEyNzsKLSAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBn
IC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAg
IENvbG9yIHJnYjEgeyBTUkdCQTxmbG9hdD4geyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBiIC8g
MjU1LjBmLCBhIC8gMjU1LjBmIH0gfTsKICAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9y
KHIsIGcsIGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwog
fQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBj
MSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRp
c3BsYXlQMykgfTsKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwg
MC4yNSwgMS4wIH0gfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAg
Q29sb3IgYzIoV1RGTW92ZShjMSkpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIFRFU1QoRXh0ZW5kZWRD
b2xvciwgTW92ZUNvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25t
ZW50KQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9yIGMxIHsgRGlzcGxheVAz
PGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTk0LDcgKzE5
NCw4IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcg
Q29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgRGlzcGxheVAzPGZs
b2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgIAogICAgIEVYUEVDVF9UUlVFKGMx
LT5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0y
MjAsNyArMjIxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aQog
CiBDb2xvciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OworICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0VRKDF1LCBjMS5hc0V4dGVu
ZGVkKCkucmVmQ291bnQoKSk7CiAKQEAgLTIzOCw3ICsyMzksNyBAQCBURVNUKEV4dGVuZGVkQ29s
b3IsIFJldHVyblZhbHVlcykKIAogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NS
R0IpCiB7Ci0gICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CisgICAgQ29sb3IgcDNDb2xvciB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CiAgICAgRVhQRUNU
X1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBzUkdCQUNvbG9yID0gcDND
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CkBAIC0yNTAsOSArMjUxLDEwIEBAIFRFU1QoRXh0
ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIExp
bmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQogewotICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJH
QikgfTsKLSAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1
dG8gc1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBD
b2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFyU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDAuNzUgfSB9OworICAgIEVYUEVDVF9UUlVFKGxpbmVhclNSR0JBQ29sb3IuaXNFeHRlbmRl
ZCgpKTsKKworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChz
UkdCQUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFs
bHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403938</attachid>
            <date>2020-07-09 18:14:46 -0700</date>
            <delta_ts>2020-07-09 18:44:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214158-20200709181445.patch</filename>
            <type>text/plain</type>
            <size>33965</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmVzIFNpbXBsZUNvbG9yIQorICAgICAgICAKKyAgICAgICAgQWxhcywgbWFrZVNpbXBs
ZUNvbG9yKCkgcmVtYWlucyBmb3Igbm93LCBzZWVraW5nIGEgbmV3IG5hbWUgaW4gYSBmb2xsb3cg
dXAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjppc09wYXF1ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNWaXNpYmxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhB
bHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdGhlIFNpbXBsZUNvbG9yIGNs
YXNzLiAgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxv
YXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjp0YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdB
c1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JH
QkFMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNJbmxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElubGluZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojppc0JsYWNrQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc1NpbXBsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6YXNTaW1wbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldFNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW5hbWUgZXhpc3RpbmcgdXNl
cyBvZiBTaW1wbGUgd2l0aCBJbmxpbmUsIGRlbm90aW5nIHRoZSBpbmxpbmUgU1JHQkE8dWludDhf
dD4uCisgICAgICAgIC0gTW92ZSBtdWx0aWxpbmUgZnVuY3Rpb25zIG91dCBvZiBsaW5lIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIC0gQWRkcyBuZXcgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRha2lu
ZyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gbWFrZSBDb2xvcihDR0NvbG9yUmVmKQorICAg
ICAgICAgIGNvbnN0cnVjdG9ycyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgLSBSZXBs
YWNlcyB1c2VzIG9mIFNpbXBsZUNvbG9yJ3MgaW50ZXJmYWNlIHdpdGggdXNlIG9mIENvbG9yVXRp
bGl0aWVzLmggaGVscGVycy4gZS5nLgorICAgICAgICAgIENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhKCkgbm93IHVzZXMgdGhlIG5ldyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhh
KCkKKyAgICAgICAgICBoZWxwZXIgZnVuY3Rpb24uIFVzZSBvZiB0aGVzZSB1dGlsaXRpZXMgd2ls
bCBiZSBleHBhbmRlZCB0byBFeHRlbmRlZENvbG9yIGluIGEgZm9sbG93CisgICAgICAgICAgdXAs
IGFsbG93aW5nIHVzIHRvIGhhdmUganVzdCBvbmUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYWxn
b3JpdGhtcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJp
YWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorICAgICAgICBSZXBsYWNlIHNlcmlhbGl6
YXRpb24gb2YgU2ltcGxlQ29sb3Igd2l0aCBzZXJpYWxpemF0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+
LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICBSZW1vdmVkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudC4gVXNlcyByZXBsYWNlZCBieSBu
ZXcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50CisgICAgICAgIGZ1bmN0aW9u
IGluIENvbG9yVXRpbGl0aWVzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxw
aGFDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzx1
aW50OF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0
Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50OF90Pik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6aW52ZXJ0Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICBBZGRlZCBoZXBsZXJzIHRvIGltcGxlbWVudCBjb2xv
ciBtdXRhdGlvbiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
YWNoZWRDR0NvbG9yKToKKyAgICAgICAgU3dpdGNoIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
IHRvIHJldHVybiBhbiBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gc3RyZWFtbGluZQorICAg
ICAgICB0aGUgY29uc3RydWN0b3JzLiBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5lIGZ1bmN0aW9u
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Om5zQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5l
IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBT
d2l0Y2ggdG8gdXNpbmcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KCkuCisK
IDIwMjAtMDctMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgIkVTUE4gRmFudGFzeSBTcG9ydHMiIGRvZXMgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZl
bnRzLCBvbmx5IHRvdWNoIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1f
Y29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBp
bnZhbGlkU2ltcGxlQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyA9IGludmFsaWRJbmxpbmVDb2xvcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTgz
LDcgKzgzLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9u
IGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gU2lt
cGxlQ29sb3IgeyBibGFjayB9KQorICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0g
YmxhY2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QK
IHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAo
aXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgd2hpdGUgfSkKKyAgICBp
ZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEo
ZmxvYXQgYWxwaGEpCiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSBhc1Np
bXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAg
ICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBo
YSk7CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBk
ZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hCiB7
CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAgICByZXR1
cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CiB9
CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTE1Niw3ICsxNTYsNyBA
QCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwg
YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNS
R0IsIGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKKyAg
ICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSkpIH07CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NjUgKzU2LDM0IEBAIGNsYXNzIENvbG9yIHsKIHB1YmxpYzoKICAgICBDb2xvcigpID0gZGVmYXVs
dDsKIAotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IoY29sb3IpOwotICAgIH0KKyAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7Cisg
ICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAogICAgIGVudW0gU2VtYW50aWNU
YWcgeyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRp
Y1RhZykKLSAgICAgICAgOiBDb2xvcihjb2xvcikKLSAgICB7Ci0gICAgICAgIHRhZ0FzU2VtYW50
aWMoKTsKLSAgICB9CisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKKyAg
ICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi0gICAgewotICAgICAgICAv
LyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2ln
bnMgdGhlCi0gICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRD
b2xvciBwb2ludGVyIGJlbG93LgotICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzID0gMDsKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENv
bG9yLmxlYWtSZWYoKTsKLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgfQorICAg
IENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
ZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBo
YXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCks
ICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBT
aW1wbGVDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAo
MSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMg
c2V0IHRoYXQgYW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgICAgICBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICAgICAgQVNT
RVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnNpbXBsZUNv
bG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBD
b2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQotICAgIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZW1w
dHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRl
bGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBsZUNv
bG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRG
bGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Ci0g
ICAgfQorICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpOwor
ICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihD
b2xvciYmKTsKIAotICAgIH5Db2xvcigpCi0gICAgewotICAgICAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLSAgICB9
CisgICAgfkNvbG9yKCk7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZFNpbXBs
ZUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29s
b3JCaXQpOyB9CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGUoKS5pc09wYXF1ZSgp
OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzU2ltcGxlKCkuaXNWaXNpYmxlKCk7IH0KKyAg
ICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29s
b3IgbmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgp
ICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0KTsgfQorCisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0g
MjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9CiAK
LSAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhh
Q29tcG9uZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21w
b25lbnRBc0Zsb2F0KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkg
OiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBhc0lubGluZSgpLmFs
cGhhOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTE0NCw5ICsxMTMsNiBA
QCBwdWJsaWM6CiAKICAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKLSAgICAvLyBU
cnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFt
ZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc1NpbXBsZSgpICYmICht
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0
KTsgfQotCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAg
ICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CkBAIC0xNzIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGN5YW4gPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1
LCAyNTUpOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB5ZWxsb3cgPSBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyNTUsIDApOwogCi0gICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QgeyByZXR1cm4g
IShtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBsZUNvbG9yKTsg
fQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpOyB9Cisg
ICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIShtX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzICYgaW52YWxpZElubGluZUNvbG9yKTsgfQorICAgIGJvb2wgaXNJbmxpbmUo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpOyB9CiAKICAgICBjb25zdCBFeHRlbmRlZENv
bG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgU2ltcGxlQ29sb3IgYXNTaW1wbGUo
KSBjb25zdDsKKyAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CkBAIC0xOTMsMzAgKzE1OSwyNiBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9y
PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIENvbG9yKFNpbXBsZUNvbG9yIGNv
bG9yKQotICAgICAgICA6IENvbG9yKGNvbG9yLmFzU1JHQkE8dWludDhfdD4oKSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9p
ZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRFeHRlbmRlZENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAotICAgIHZvaWQgdGFnQXNTZW1hbnRpYygpIHsg
bV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljU2ltcGxlQ29sb3JC
aXQ7IH0KLSAgICB2b2lkIHRhZ0FzVmFsaWQoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgfD0gdmFsaWRTaW1wbGVDb2xvcjsgfQorICAgIHZvaWQgdGFnQXNTZW1hbnRpYygpIHsg
bV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljSW5saW5lQ29sb3JC
aXQ7IH0KKyAgICB2b2lkIHRhZ0FzVmFsaWQoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5k
RmxhZ3MgfD0gdmFsaWRJbmxpbmVDb2xvcjsgfQogCiAgICAgLy8gMHhfX19fX19fMDAgaXMgYW4g
RXh0ZW5kZWRDb2xvciBwb2ludGVyLgotICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQg
U2ltcGxlQ29sb3IuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBTaW1wbGVDb2xvci4K
KyAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIGlubGluZSBjb2xvci4KKyAgICAvLyAw
eF9fX19fX18xMSBpcyBhIHZhbGlkIGlubGluZSBjb2xvci4KICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52
YWxpZFNpbXBsZUNvbG9yID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFNp
bXBsZUNvbG9yQml0ID0gMHgyOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFNpbXBs
ZUNvbG9yID0gMHgzOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljU2ltcGxl
Q29sb3JCaXQgPSAweDQ7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRJbmxpbmVD
b2xvciA9IDB4MTsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvckJp
dCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvciA9IDB4
MzsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0g
MHg0OwogCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZG
RkZGRkZGRkZGRkZGRkQ7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVl
ID0gMHhGRkZGRkZGRkZGRkZGRkZCOwogCiAgICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBz
aW1wbGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CisgICAgICAgIHVpbnQ2
NF90IGlubGluZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkSW5saW5lQ29sb3IgfTsKICAgICAgICAg
RXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRhOwogfTsKQEAg
LTIzOSw3ICsyMDEsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBj
CiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
OworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKQEAgLTI2MCwyMSArMjIyLDc5IEBAIGlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIHsKICAgICBpZiAoYS5pc0V4
dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9y
c0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzICYgfkNvbG9yOjppc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpID09IChiLm1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCk7
CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6
OmlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JB
bmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsKK30KKworaW5saW5l
IENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK3sKKyAgICBzZXRJbmxpbmVDb2xv
cihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IGNvbG9yKQoreworICAgIGlmIChjb2xvcikKKyAgICAgICAgc2V0SW5saW5lQ29sb3IoKmNv
bG9yKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwgU2Vt
YW50aWNUYWcpCit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHRhZ0FzU2VtYW50
aWMoKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4g
Y29sb3IsIFNlbWFudGljVGFnKQoreworICAgIGlmIChjb2xvcikgeworICAgICAgICBzZXRJbmxp
bmVDb2xvcigqY29sb3IpOworICAgICAgICB0YWdBc1NlbWFudGljKCk7CisgICAgfQorfQorCitp
bmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCit7
CisgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsKK30KKworaW5s
aW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCit7CisgICAg
c3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElubGluZUNvbG9yLCAiQ29s
b3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlkSW5saW5l
Q29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGEgdmFsaWQgSW5saW5lQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFs
dWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21l
IGJpdHMgc2V0IHRoYXQgYW4gSW5saW5lQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgIG1fY29s
b3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFzaFZhbHVlOworICAgIEFTU0VS
VCghaXNFeHRlbmRlZCgpKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJs
ZUVtcHR5VmFsdWVUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBp
bnZhbGlkSW5saW5lQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9v
ayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZh
bHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29t
ZSBiaXRzIHNldCB0aGF0IGFuIElubGluZUNvbG9yIHdvdWxkbid0IGhhdmUiKTsKKyAgICBtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgQVNTRVJU
KCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6On5Db2xvcigpCit7CisgICAgaWYg
KGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYo
KTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKLSAgICBy
ZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MpOworICAg
IHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBj
b25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVk
KCkudG9TUkdCQUxvc3N5PFQ+KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigp
OworCisKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgIHJldHVy
biBhc0lubGluZSgpOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdApAQCAtMzAzLDMwICszMjMsMzkgQEAg
aW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dAogICAgIHJldHVybiAqbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0KIAotaW5saW5lIGNvbnN0IFNpbXBsZUNvbG9yIENv
bG9yOjphc1NpbXBsZSgpIGNvbnN0CitpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5s
aW5lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNTaW1wbGUoKSk7Ci0gICAgcmV0dXJuIFNpbXBs
ZUNvbG9yIHsgYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA+PiAzMikgfSkgfTsKKyAgICBBU1NFUlQoaXNJ
bmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQog
Ci1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CiB7Ci0gICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKKyAgICBtX2NvbG9y
RGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZDo6
UkdCQSB7IGNvbG9yIH0udmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAoraW5s
aW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0
ZW5kZWRDb2xvcikKK3sKKyAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzIt
Yml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCisgICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5
aW5nIHRoZSBFeHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCisgICAgbV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyA9IDA7CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZl
eHRlbmRlZENvbG9yLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKK30KKwog
aW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5k
ZWQoKS5pc0JsYWNrKCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkgPT0gU2ltcGxlQ29s
b3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xv
cjo6YmxhY2s7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVy
biBjb2xvci5hc0V4dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc1NpbXBs
ZSgpID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OndoaXRlIH07CisgICAgcmV0dXJuIGNvbG9yLmFz
SW5saW5lKCkgPT0gQ29sb3I6OndoaXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpA
QCAtMzU1LDcgKzM4NCw3IEBAIHZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b24KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlz
IHNlbWFudGljLgogCiAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVuY29kZXIgPDwgUGFja2Vk
OjpSR0JBIHsgYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZTsKKyAgICBlbmNv
ZGVyIDw8IFBhY2tlZDo6UkdCQSB7IGFzSW5saW5lKCkgfS52YWx1ZTsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIFNpbXBsZUNvbG9yIG92ZXJsb2FkcworLy8gU1JHQkE8dWludDhfdD4gb3ZlcmxvYWRzCiAK
IHN0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CkBAIC01Myw3ICs1
Myw3IEBAIHN0YXRpYyBzdGQ6OmFycmF5PGNoYXIsIDQ+IGZyYWN0aW9uRGlnaXQKICAgICByZXR1
cm4geyB7IGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMCArIDB4N0YpIC8gMHhGRiksICdcMCcsICdc
MCcsICdcMCcgfSB9OwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTaW1wbGVDb2xv
ciBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
KQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAgIHN3
aXRjaCAoYWxwaGEpIHsKQEAgLTY2LDE1ICs2NiwxNSBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhTaW1wbGVDb2xvciBjCiAgICAgfQogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckhU
TUwoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8
dWludDhfdD4gY29sb3IpCiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0g
Y29sb3I7Ci0gICAgaWYgKGNvbG9yLmlzT3BhcXVlKCkpCisgICAgaWYgKGFscGhhID09IDB4RkYp
CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwg
aGV4KGdyZWVuLCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CiAgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAg
YXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CiAgICAgaWYgKGFscGhhIDwg
MHhGRikKQEAgLTEyNCwyMSArMTI0LDIxIEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IENvbG9yJiAKIHsKICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzU2ltcGxlKCkpOworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbG9yLmFzSW5saW5lKCkpOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVk
KCkpCiAgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0V4dGVuZGVk
KCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc1NpbXBsZSgpKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNJbmxpbmUoKSk7CiB9CiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzU2ltcGxlKCkpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvci5hc0lubGlu
ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxNSArMjksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b2xvcjsKIGNsYXNzIEV4dGVuZGVkQ29sb3I7Ci1jbGFzcyBTaW1wbGVDb2xvcjsKKwordGVtcGxh
dGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKIAogLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9r
ZS1zdHlsZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKIC8vIHNlcmlhbGl6YXRpb25Gb3JDU1MgcmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gQ1NTCiAvLyBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGZvciBE
dW1wUmVuZGVyVHJlZSwgI1JSR0dCQiwgI1JSR0dCQkFBIG9yIHRoZSBDU1Mgc2VyaWFsaXphdGlv
bgogCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTaW1wbGVDb2xv
cik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU2ltcGxlQ29s
b3IpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KFNpbXBsZUNvbG9yKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKFNSR0JBPHVpbnQ4X3Q+KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChTUkdCQTx1aW50OF90Pik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwogCiBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7CiBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xv
ciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlw
ZXMuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAgICAgcmV0dXJuICEoYSA9PSBiKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
Tm9uQWxwaGFDb21wb25lbnQoU1JHQkE8VD4mIGNvbG9yLCBGdW5jdG9yJiYgZikKLXsKLSAgICBj
b2xvci5yZWQgPSBmKGNvbG9yLnJlZCk7Ci0gICAgY29sb3IuZ3JlZW4gPSBmKGNvbG9yLmdyZWVu
KTsKLSAgICBjb2xvci5ibHVlID0gZihjb2xvci5ibHVlKTsKLX0KLQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgewogICAgIFQgcmVkOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4NiBAQCB0ZW1wbGF0ZTx0ZW1wbGF0
ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sCiAgICAgcmV0dXJuIHsgY2xhbXBUb0NvbXBvbmVudEZs
b2F0KHIpLCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoZyksIGNsYW1wVG9Db21wb25lbnRGbG9hdChi
KSwgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGEpIH07CiB9CiAKKworLy8gQ29sb3IgbXV0YXRvcnMK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5
cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBtYWRlIHRvIHdvcmsgd2l0aCBjb2xvcidzIHRoYXQgZG9uJ3QgdXNlIHRoZSBuYW1lcyByZWQs
IGdyZWVuLCBhbmQgYmx1ZSBmb3IgdGhlaXIgY2hhbm5lbHMuCisgICAgQ29sb3JUeXBlIGNvcHkg
PSBjb2xvcjsKKyAgICBjb3B5LnJlZCA9IGZ1bmN0b3IoY29sb3IucmVkKTsKKyAgICBjb3B5Lmdy
ZWVuID0gZnVuY3Rvcihjb2xvci5ncmVlbik7CisgICAgY29weS5ibHVlID0gZnVuY3Rvcihjb2xv
ci5ibHVlKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFQgY29udmVydENvbXBvbmVudEJ5dGVUbyh1aW50OF90KTsKKwordGVtcGxhdGU8PiBj
b25zdGV4cHIgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBm
bG9hdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0Pih1aW50OF90IHZhbHVlKQoreworICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydENvbXBvbmVudEZsb2F0VG8oZmxvYXQpOworCit0ZW1wbGF0ZTw+
IGlubGluZSB1aW50OF90IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPHVpbnQ4X3Q+KGZsb2F0IHZh
bHVlKQoreworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHZhbHVlKTsKK30KKwor
dGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydENvbXBvbmVudEZsb2F0VG88ZmxvYXQ+KGZs
b2F0IHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVy
cmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7CisgICAgY29weS5hbHBo
YSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRl
QWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7
CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHku
YWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY29uc3RleHBy
IHVpbnQ4X3QgaW52ZXJ0Q29tcG9uZW50KHVpbnQ4X3QgY29tcG9uZW50KQoreworICAgIHJldHVy
biAyNTUgLSBjb21wb25lbnQ7Cit9CisKK2NvbnN0ZXhwciBmbG9hdCBpbnZlcnRDb21wb25lbnQo
ZmxvYXQgY29tcG9uZW50KQoreworICAgIHJldHVybiAxLjBmIC0gY29tcG9uZW50OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92
ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBo
YSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7CisgICAgICAgIHJldHVybiBpbnZl
cnRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAgICBjb3B5LmFscGhhID0gY29udmVy
dENvbXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Cisg
ICAgcmV0dXJuIGNvcHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JU
eXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xv
ciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yQnlN
b2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7
CisgICAgICAgIHJldHVybiBpbnZlcnRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAg
ICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBo
YSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCisKIGNvbnN0ZXhwciB1
aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4g
KHZhbHVlIDw8IDgpIC0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDc4ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvckJ1aWxkZXIuaCIK
LSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAj
aW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTaW1wbGVDb2xvciB7Ci1wdWJsaWM6Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IFNpbXBsZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IHZhbHVlKSA6IG1fdmFsdWUgeyB2YWx1ZSB9IHsgfQotCi0gICAg
Y29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
LmFscGhhOyB9Ci0gICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KG1fdmFsdWUuYWxwaGEpOyB9Ci0K
LSAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuYWxw
aGEgPT0gMHhGRjsgfQotICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUuYWxwaGE7IH0KLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldp
dGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgbV92
YWx1ZS5yZWQsIG1fdmFsdWUuZ3JlZW4sIG1fdmFsdWUuYmx1ZSwgYWxwaGEgfTsKLSAgICB9Ci0K
LSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSh1aW50OF90
IGFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhf
dD4oMHhGRiAtIG1fdmFsdWUucmVkKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIG1fdmFs
dWUuZ3JlZW4pLCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gbV92YWx1ZS5ibHVlKSwgYWxw
aGEgfTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8
VD4gYXNTUkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdHMobV92YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djxULCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOwotICAgICAgICBpZiBjb25z
dGV4cHIgKCFOKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUucmVkOwotICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoTiA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuZ3JlZW47
Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDIpCi0gICAgICAgICAgICByZXR1cm4g
bV92YWx1ZS5ibHVlOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAzKQotICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWUuYWxwaGE7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0
ZXhwciBTaW1wbGVDb2xvcih1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90
IGEpIDogbV92YWx1ZSB7IHIsIGcsIGIsIGEgfSB7IH0KLQotICAgIFNSR0JBPHVpbnQ4X3Q+IG1f
dmFsdWUgeyAwLCAwLCAwLCAwIH07Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3Is
IFNpbXBsZUNvbG9yKTsKLWJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3Ip
OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIp
Ci17Ci0gICAgcmV0dXJuIGEuYXNTUkdCQTx1aW50OF90PigpID09IGIuYXNTUkdCQTx1aW50OF90
PigpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNv
bG9yIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotY29uc3RleHByIENvbG9yQnVp
bGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIp
OwotY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7Ci1Db2xvckJ1aWxk
ZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsK
LQogY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgMHhGRik7CkBAIC0xMTksMTUgKzUyLDMgQEAgaW5saW5lIENvbG9y
QnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLW5hbWVzcGFjZSBzdGQgewotCi10ZW1wbGF0ZTw+IGNsYXNzIHR1cGxlX3NpemU8V2ViQ29y
ZTo6U2ltcGxlQ29sb3I+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXpl
X3QsIDQ+IHsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+IGNsYXNzIHR1cGxlX2VsZW1l
bnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0eXBlID0g
dWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
OSArNTEsMTEgQEAgUmV0YWluUHRyPENHQ29sb3JSZWY+IFRpbnlMUlVDYWNoZVBvbGljeQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2ltcGxlQ29s
b3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQorc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogewog
ICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
cy4KKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
c2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9y
KTsKICAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMo
Y29sb3IpOwpAQCAtNzgsMzIgKzgwLDE3IEBAIHN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2lt
cGxlQ29sb3JGcm8KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KTsKIH0KIAogQ29s
b3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCisgICAgOiBDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tQ0dDb2xvcihjb2xvcikpCiB7Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotCi0gICAgaWYgKCFjb2xvcikgewotICAgICAgICBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNvbG9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9y
RnJvbUNHQ29sb3IoY29sb3IpKTsKIH0KIAotQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Is
IFNlbWFudGljVGFnKQorQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFn
IHRhZykKKyAgICA6IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSwgdGFn
KQogewotICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9y
IHNwYWNlcy4KLQotICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxl
Q29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9y
KSk7Ci0gICAgdGFnQXNTZW1hbnRpYygpOwogfQogCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0xMjgsOCArMTE1LDggQEAgc3RhdGljIENHQ29s
b3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc1NpbXBsZSgpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4
X3Q+KCkgfS52YWx1ZSkgeworICAgIGlmIChjb2xvci5pc0lubGluZSgpKSB7CisgICAgICAgIHN3
aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJbmxpbmUoKSB9LnZhbHVlKSB7CiAgICAgICAg
IGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFyZW50IH0udmFsdWU6IHsKICAgICAg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9y
KGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudENHQ29sb3I7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCwyMCArMTU4LDIwIEBAIGJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAg
ICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7Ci0gICAgICAgIGZv
ckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAg
ICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwg
WyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAgICAgICAgcmV0dXJuIDEuMGYgLSAob25lTWlu
dXNBbW91bnQgKyBjb21wb25lbnQgKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOwogICAg
ICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ09OVFJBU1Q6
IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVmICogbV9hbW91bnQpICsgMC41ZjsK
LSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9u
ZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9u
ZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpjbGFtcDxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb21wb25lbnQsIDAuMGYsIDEu
MGYpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2Ug
QlJJR0hUTkVTUzoKLSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0o
ZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5v
bkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKICAg
ICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjY0MjAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsOCArMTIyLDggQEAgQ29sb3Igc2VtYW50aWNDb2xvckZyb21OU0Nv
bG9yKE5TQ29sb3IgKgogCiBOU0NvbG9yICpuc0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAoY29sb3IuaXNTaW1wbGUoKSkgewotICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdC
QSB7IGNvbG9yLmFzU2ltcGxlKCkuYXNTUkdCQTx1aW50OF90PigpIH0udmFsdWUpIHsKKyAgICBp
ZiAoY29sb3IuaXNJbmxpbmUoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNv
bG9yLmFzSW5saW5lKCkgfS52YWx1ZSkgewogICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENv
bG9yOjp0cmFuc3BhcmVudCB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgTlNDb2xvciAq
Y2xlYXJDb2xvciA9IFtbTlNDb2xvciBjb2xvcldpdGhTUkdCUmVkOjAgZ3JlZW46MCBibHVlOjAg
YWxwaGE6MF0gcmV0YWluXTsKICAgICAgICAgICAgIHJldHVybiBjbGVhckNvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403939</attachid>
            <date>2020-07-09 18:44:49 -0700</date>
            <delta_ts>2020-07-09 19:56:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214158-20200709184448.patch</filename>
            <type>text/plain</type>
            <size>35287</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmVzIFNpbXBsZUNvbG9yIQorICAgICAgICAKKyAgICAgICAgQWxhcywgbWFrZVNpbXBs
ZUNvbG9yKCkgcmVtYWlucyBmb3Igbm93LCBzZWVraW5nIGEgbmV3IG5hbWUgaW4gYSBmb2xsb3cg
dXAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjppc09wYXF1ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNWaXNpYmxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhB
bHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdGhlIFNpbXBsZUNvbG9yIGNs
YXNzLiAgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxv
YXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjp0YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdB
c1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JH
QkFMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNJbmxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElubGluZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojppc0JsYWNrQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc1NpbXBsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6YXNTaW1wbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldFNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW5hbWUgZXhpc3RpbmcgdXNl
cyBvZiBTaW1wbGUgd2l0aCBJbmxpbmUsIGRlbm90aW5nIHRoZSBpbmxpbmUgU1JHQkE8dWludDhf
dD4uCisgICAgICAgIC0gTW92ZSBtdWx0aWxpbmUgZnVuY3Rpb25zIG91dCBvZiBsaW5lIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIC0gQWRkcyBuZXcgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRha2lu
ZyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gbWFrZSBDb2xvcihDR0NvbG9yUmVmKQorICAg
ICAgICAgIGNvbnN0cnVjdG9ycyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgLSBSZXBs
YWNlcyB1c2VzIG9mIFNpbXBsZUNvbG9yJ3MgaW50ZXJmYWNlIHdpdGggdXNlIG9mIENvbG9yVXRp
bGl0aWVzLmggaGVscGVycy4gZS5nLgorICAgICAgICAgIENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhKCkgbm93IHVzZXMgdGhlIG5ldyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhh
KCkKKyAgICAgICAgICBoZWxwZXIgZnVuY3Rpb24uIFVzZSBvZiB0aGVzZSB1dGlsaXRpZXMgd2ls
bCBiZSBleHBhbmRlZCB0byBFeHRlbmRlZENvbG9yIGluIGEgZm9sbG93CisgICAgICAgICAgdXAs
IGFsbG93aW5nIHVzIHRvIGhhdmUganVzdCBvbmUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYWxn
b3JpdGhtcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJp
YWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorICAgICAgICBSZXBsYWNlIHNlcmlhbGl6
YXRpb24gb2YgU2ltcGxlQ29sb3Igd2l0aCBzZXJpYWxpemF0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+
LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICBSZW1vdmVkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudC4gVXNlcyByZXBsYWNlZCBieSBu
ZXcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50CisgICAgICAgIGZ1bmN0aW9u
IGluIENvbG9yVXRpbGl0aWVzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxw
aGFDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzx1
aW50OF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0
Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50OF90Pik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6aW52ZXJ0Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICBBZGRlZCBoZXBsZXJzIHRvIGltcGxlbWVudCBjb2xv
ciBtdXRhdGlvbiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
YWNoZWRDR0NvbG9yKToKKyAgICAgICAgU3dpdGNoIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
IHRvIHJldHVybiBhbiBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gc3RyZWFtbGluZQorICAg
ICAgICB0aGUgY29uc3RydWN0b3JzLiBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5lIGZ1bmN0aW9u
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Om5zQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5l
IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBT
d2l0Y2ggdG8gdXNpbmcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KCkuCisK
IDIwMjAtMDctMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgIkVTUE4gRmFudGFzeSBTcG9ydHMiIGRvZXMgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZl
bnRzLCBvbmx5IHRvdWNoIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1f
Y29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBp
bnZhbGlkU2ltcGxlQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyA9IGludmFsaWRJbmxpbmVDb2xvcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTgz
LDcgKzgzLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9u
IGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gU2lt
cGxlQ29sb3IgeyBibGFjayB9KQorICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0g
YmxhY2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QK
IHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAo
aXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgd2hpdGUgfSkKKyAgICBp
ZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEo
ZmxvYXQgYWxwaGEpCiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSBhc1Np
bXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAg
ICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBo
YSk7CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBk
ZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hCiB7
CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAgICByZXR1
cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CiB9
CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTE1Niw3ICsxNTYsNyBA
QCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwg
YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNS
R0IsIGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKKyAg
ICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSkpIH07CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NjUgKzU2LDM0IEBAIGNsYXNzIENvbG9yIHsKIHB1YmxpYzoKICAgICBDb2xvcigpID0gZGVmYXVs
dDsKIAotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IoY29sb3IpOwotICAgIH0KKyAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7Cisg
ICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAogICAgIGVudW0gU2VtYW50aWNU
YWcgeyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRp
Y1RhZykKLSAgICAgICAgOiBDb2xvcihjb2xvcikKLSAgICB7Ci0gICAgICAgIHRhZ0FzU2VtYW50
aWMoKTsKLSAgICB9CisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKKyAg
ICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi0gICAgewotICAgICAgICAv
LyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2ln
bnMgdGhlCi0gICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRD
b2xvciBwb2ludGVyIGJlbG93LgotICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzID0gMDsKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENv
bG9yLmxlYWtSZWYoKTsKLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgfQorICAg
IENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
ZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBo
YXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCks
ICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBT
aW1wbGVDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAo
MSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMg
c2V0IHRoYXQgYW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgICAgICBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICAgICAgQVNT
RVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnNpbXBsZUNv
bG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBD
b2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQotICAgIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZW1w
dHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRl
bGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBsZUNv
bG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRG
bGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Ci0g
ICAgfQorICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpOwor
ICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihD
b2xvciYmKTsKIAotICAgIH5Db2xvcigpCi0gICAgewotICAgICAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLSAgICB9
CisgICAgfkNvbG9yKCk7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZFNpbXBs
ZUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29s
b3JCaXQpOyB9CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGUoKS5pc09wYXF1ZSgp
OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzU2ltcGxlKCkuaXNWaXNpYmxlKCk7IH0KKyAg
ICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29s
b3IgbmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgp
ICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0KTsgfQorCisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0g
MjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9CiAK
LSAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhh
Q29tcG9uZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21w
b25lbnRBc0Zsb2F0KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkg
OiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBhc0lubGluZSgpLmFs
cGhhOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTE0NCw5ICsxMTMsNiBA
QCBwdWJsaWM6CiAKICAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKLSAgICAvLyBU
cnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFt
ZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc1NpbXBsZSgpICYmICht
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0
KTsgfQotCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAg
ICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CkBAIC0xNzIsMTEgKzEzOCwxMSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGN5YW4gPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1
LCAyNTUpOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB5ZWxsb3cgPSBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyNTUsIDApOwogCi0gICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QgeyByZXR1cm4g
IShtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgaW52YWxpZFNpbXBsZUNvbG9yKTsg
fQotICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpOyB9Cisg
ICAgYm9vbCBpc0V4dGVuZGVkKCkgY29uc3QgeyByZXR1cm4gIShtX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzICYgaW52YWxpZElubGluZUNvbG9yKTsgfQorICAgIGJvb2wgaXNJbmxpbmUo
KSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpOyB9CiAKICAgICBjb25zdCBFeHRlbmRlZENv
bG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgU2ltcGxlQ29sb3IgYXNTaW1wbGUo
KSBjb25zdDsKKyAgICBTUkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oQ29sb3ImJik7CkBAIC0xOTMsMzAgKzE1OSwyNiBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9y
PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIENvbG9yKFNpbXBsZUNvbG9yIGNv
bG9yKQotICAgICAgICA6IENvbG9yKGNvbG9yLmFzU1JHQkE8dWludDhfdD4oKSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9p
ZCBzZXRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAgdm9pZCBzZXRFeHRlbmRlZENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAotICAgIHZvaWQgdGFnQXNTZW1hbnRpYygpIHsg
bV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljU2ltcGxlQ29sb3JC
aXQ7IH0KLSAgICB2b2lkIHRhZ0FzVmFsaWQoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgfD0gdmFsaWRTaW1wbGVDb2xvcjsgfQorICAgIHZvaWQgdGFnQXNTZW1hbnRpYygpIHsg
bV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljSW5saW5lQ29sb3JC
aXQ7IH0KKyAgICB2b2lkIHRhZ0FzVmFsaWQoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5k
RmxhZ3MgfD0gdmFsaWRJbmxpbmVDb2xvcjsgfQogCiAgICAgLy8gMHhfX19fX19fMDAgaXMgYW4g
RXh0ZW5kZWRDb2xvciBwb2ludGVyLgotICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQg
U2ltcGxlQ29sb3IuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBTaW1wbGVDb2xvci4K
KyAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIGlubGluZSBjb2xvci4KKyAgICAvLyAw
eF9fX19fX18xMSBpcyBhIHZhbGlkIGlubGluZSBjb2xvci4KICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52
YWxpZFNpbXBsZUNvbG9yID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFNp
bXBsZUNvbG9yQml0ID0gMHgyOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFNpbXBs
ZUNvbG9yID0gMHgzOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljU2ltcGxl
Q29sb3JCaXQgPSAweDQ7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRJbmxpbmVD
b2xvciA9IDB4MTsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvckJp
dCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRJbmxpbmVDb2xvciA9IDB4
MzsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY0lubGluZUNvbG9yQml0ID0g
MHg0OwogCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZG
RkZGRkZGRkZGRkZGRkQ7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVl
ID0gMHhGRkZGRkZGRkZGRkZGRkZCOwogCiAgICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBz
aW1wbGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CisgICAgICAgIHVpbnQ2
NF90IGlubGluZUNvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkSW5saW5lQ29sb3IgfTsKICAgICAgICAg
RXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKICAgICB9IG1fY29sb3JEYXRhOwogfTsKQEAg
LTIzOSw3ICsyMDEsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBj
CiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKIAotICAgIHJldHVybiBhLm1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
OworICAgIHJldHVybiBhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gYi5tX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKQEAgLTI2MCwyMSArMjIyLDc5IEBAIGlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGMKIHsKICAgICBpZiAoYS5pc0V4
dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9y
c0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzICYgfkNvbG9yOjppc1NlbWFudGljU2ltcGxlQ29sb3JCaXQpID09IChiLm1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCk7
CisgICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6
OmlzU2VtYW50aWNJbmxpbmVDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JB
bmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY0lubGluZUNvbG9yQml0KTsKK30KKworaW5saW5l
IENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKK3sKKyAgICBzZXRJbmxpbmVDb2xv
cihjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IGNvbG9yKQoreworICAgIGlmIChjb2xvcikKKyAgICAgICAgc2V0SW5saW5lQ29sb3IoKmNv
bG9yKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwgU2Vt
YW50aWNUYWcpCit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworICAgIHRhZ0FzU2VtYW50
aWMoKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4g
Y29sb3IsIFNlbWFudGljVGFnKQoreworICAgIGlmIChjb2xvcikgeworICAgICAgICBzZXRJbmxp
bmVDb2xvcigqY29sb3IpOworICAgICAgICB0YWdBc1NlbWFudGljKCk7CisgICAgfQorfQorCitp
bmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCit7
CisgICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpKTsKK30KKworaW5s
aW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCit7CisgICAg
c3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZElubGluZUNvbG9yLCAiQ29s
b3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29s
b3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1ZSAmIHZhbGlkSW5saW5l
Q29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtl
IGEgdmFsaWQgSW5saW5lQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFs
dWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21l
IGJpdHMgc2V0IHRoYXQgYW4gSW5saW5lQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgIG1fY29s
b3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSBkZWxldGVkSGFzaFZhbHVlOworICAgIEFTU0VS
VCghaXNFeHRlbmRlZCgpKTsKK30KKworaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJs
ZUVtcHR5VmFsdWVUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBp
bnZhbGlkSW5saW5lQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9v
ayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZh
bHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29t
ZSBiaXRzIHNldCB0aGF0IGFuIElubGluZUNvbG9yIHdvdWxkbid0IGhhdmUiKTsKKyAgICBtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgQVNTRVJU
KCFpc0V4dGVuZGVkKCkpOworfQorCitpbmxpbmUgQ29sb3I6On5Db2xvcigpCit7CisgICAgaWYg
KGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYo
KTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKLSAgICBy
ZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MpOworICAg
IHJldHVybiBXVEY6OmludEhhc2gobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBj
b25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBhc0V4dGVuZGVk
KCkudG9TUkdCQUxvc3N5PFQ+KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigp
OworCisKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhhc0lubGluZSgpKTsKKyAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgIHJldHVy
biBhc0lubGluZSgpOwogfQogCiBpbmxpbmUgQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRo
QWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdApAQCAtMzAzLDMwICszMjMsMzkgQEAg
aW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dAogICAgIHJldHVybiAqbV9j
b2xvckRhdGEuZXh0ZW5kZWRDb2xvcjsKIH0KIAotaW5saW5lIGNvbnN0IFNpbXBsZUNvbG9yIENv
bG9yOjphc1NpbXBsZSgpIGNvbnN0CitpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5s
aW5lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNTaW1wbGUoKSk7Ci0gICAgcmV0dXJuIFNpbXBs
ZUNvbG9yIHsgYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA+PiAzMikgfSkgfTsKKyAgICBBU1NFUlQoaXNJ
bmxpbmUoKSk7CisgICAgcmV0dXJuIGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pOwogfQog
Ci1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
CiB7Ci0gICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKKyAgICBtX2NvbG9y
RGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFBhY2tlZDo6
UkdCQSB7IGNvbG9yIH0udmFsdWUpIDw8IDMyOwogICAgIHRhZ0FzVmFsaWQoKTsKIH0KIAoraW5s
aW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0
ZW5kZWRDb2xvcikKK3sKKyAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzIt
Yml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCisgICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5
aW5nIHRoZSBFeHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCisgICAgbV9jb2xvckRhdGEuaW5s
aW5lQ29sb3JBbmRGbGFncyA9IDA7CisgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZl
eHRlbmRlZENvbG9yLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKK30KKwog
aW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5k
ZWQoKS5pc0JsYWNrKCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkgPT0gU2ltcGxlQ29s
b3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICByZXR1cm4gY29sb3IuYXNJbmxpbmUoKSA9PSBDb2xv
cjo6YmxhY2s7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVy
biBjb2xvci5hc0V4dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc1NpbXBs
ZSgpID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OndoaXRlIH07CisgICAgcmV0dXJuIGNvbG9yLmFz
SW5saW5lKCkgPT0gQ29sb3I6OndoaXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpA
QCAtMzU1LDcgKzM4NCw3IEBAIHZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b24KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlz
IHNlbWFudGljLgogCiAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgIGVuY29kZXIgPDwgUGFja2Vk
OjpSR0JBIHsgYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZTsKKyAgICBlbmNv
ZGVyIDw8IFBhY2tlZDo6UkdCQSB7IGFzSW5saW5lKCkgfS52YWx1ZTsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIFNpbXBsZUNvbG9yIG92ZXJsb2FkcworLy8gU1JHQkE8dWludDhfdD4gb3ZlcmxvYWRzCiAK
IHN0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CkBAIC01Myw3ICs1
Myw3IEBAIHN0YXRpYyBzdGQ6OmFycmF5PGNoYXIsIDQ+IGZyYWN0aW9uRGlnaXQKICAgICByZXR1
cm4geyB7IGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMCArIDB4N0YpIC8gMHhGRiksICdcMCcsICdc
MCcsICdcMCcgfSB9OwogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTaW1wbGVDb2xv
ciBjb2xvcikKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
KQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAgIHN3
aXRjaCAoYWxwaGEpIHsKQEAgLTY2LDE1ICs2NiwxNSBAQCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhTaW1wbGVDb2xvciBjCiAgICAgfQogfQogCi1TdHJpbmcgc2VyaWFsaXphdGlvbkZvckhU
TUwoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8
dWludDhfdD4gY29sb3IpCiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0g
Y29sb3I7Ci0gICAgaWYgKGNvbG9yLmlzT3BhcXVlKCkpCisgICAgaWYgKGFscGhhID09IDB4RkYp
CiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwg
aGV4KGdyZWVuLCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CiAgICAg
cmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOwogfQogCi1TdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAg
YXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CiAgICAgaWYgKGFscGhhIDwg
MHhGRikKQEAgLTEyNCwyMSArMTI0LDIxIEBAIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bnN0IENvbG9yJiAKIHsKICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzU2ltcGxlKCkpOworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9yQ1NTKGNvbG9yLmFzSW5saW5lKCkpOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVk
KCkpCiAgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0V4dGVuZGVk
KCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc1NpbXBsZSgpKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNJbmxpbmUoKSk7CiB9CiAK
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzU2ltcGxlKCkpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvci5hc0lubGlu
ZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxNSArMjksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b2xvcjsKIGNsYXNzIEV4dGVuZGVkQ29sb3I7Ci1jbGFzcyBTaW1wbGVDb2xvcjsKKwordGVtcGxh
dGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKIAogLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9r
ZS1zdHlsZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKIC8vIHNlcmlhbGl6YXRpb25Gb3JDU1MgcmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gQ1NTCiAvLyBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGZvciBE
dW1wUmVuZGVyVHJlZSwgI1JSR0dCQiwgI1JSR0dCQkFBIG9yIHRoZSBDU1Mgc2VyaWFsaXphdGlv
bgogCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTaW1wbGVDb2xv
cik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU2ltcGxlQ29s
b3IpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KFNpbXBsZUNvbG9yKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKFNSR0JBPHVpbnQ4X3Q+KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChTUkdCQTx1aW50OF90Pik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoU1JHQkE8dWludDhfdD4pOwogCiBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7CiBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xv
ciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlw
ZXMuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAgICAgcmV0dXJuICEoYSA9PSBiKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
Tm9uQWxwaGFDb21wb25lbnQoU1JHQkE8VD4mIGNvbG9yLCBGdW5jdG9yJiYgZikKLXsKLSAgICBj
b2xvci5yZWQgPSBmKGNvbG9yLnJlZCk7Ci0gICAgY29sb3IuZ3JlZW4gPSBmKGNvbG9yLmdyZWVu
KTsKLSAgICBjb2xvci5ibHVlID0gZihjb2xvci5ibHVlKTsKLX0KLQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgewogICAgIFQgcmVkOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4NiBAQCB0ZW1wbGF0ZTx0ZW1wbGF0
ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sCiAgICAgcmV0dXJuIHsgY2xhbXBUb0NvbXBvbmVudEZs
b2F0KHIpLCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoZyksIGNsYW1wVG9Db21wb25lbnRGbG9hdChi
KSwgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGEpIH07CiB9CiAKKworLy8gQ29sb3IgbXV0YXRvcnMK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5
cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBtYWRlIHRvIHdvcmsgd2l0aCBjb2xvcidzIHRoYXQgZG9uJ3QgdXNlIHRoZSBuYW1lcyByZWQs
IGdyZWVuLCBhbmQgYmx1ZSBmb3IgdGhlaXIgY2hhbm5lbHMuCisgICAgQ29sb3JUeXBlIGNvcHkg
PSBjb2xvcjsKKyAgICBjb3B5LnJlZCA9IGZ1bmN0b3IoY29sb3IucmVkKTsKKyAgICBjb3B5Lmdy
ZWVuID0gZnVuY3Rvcihjb2xvci5ncmVlbik7CisgICAgY29weS5ibHVlID0gZnVuY3Rvcihjb2xv
ci5ibHVlKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFQgY29udmVydENvbXBvbmVudEJ5dGVUbyh1aW50OF90KTsKKwordGVtcGxhdGU8PiBj
b25zdGV4cHIgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBm
bG9hdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0Pih1aW50OF90IHZhbHVlKQoreworICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydENvbXBvbmVudEZsb2F0VG8oZmxvYXQpOworCit0ZW1wbGF0ZTw+
IGlubGluZSB1aW50OF90IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPHVpbnQ4X3Q+KGZsb2F0IHZh
bHVlKQoreworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHZhbHVlKTsKK30KKwor
dGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgY29udmVydENvbXBvbmVudEZsb2F0VG88ZmxvYXQ+KGZs
b2F0IHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVy
cmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7CisgICAgY29weS5hbHBo
YSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRl
QWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7
CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHku
YWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY29uc3RleHBy
IHVpbnQ4X3QgaW52ZXJ0Q29tcG9uZW50KHVpbnQ4X3QgY29tcG9uZW50KQoreworICAgIHJldHVy
biAyNTUgLSBjb21wb25lbnQ7Cit9CisKK2NvbnN0ZXhwciBmbG9hdCBpbnZlcnRDb21wb25lbnQo
ZmxvYXQgY29tcG9uZW50KQoreworICAgIHJldHVybiAxLjBmIC0gY29tcG9uZW50OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92
ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBo
YSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7CisgICAgICAgIHJldHVybiBpbnZl
cnRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAgICBjb3B5LmFscGhhID0gY29udmVy
dENvbXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Cisg
ICAgcmV0dXJuIGNvcHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JU
eXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xv
ciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29weSA9IGNvbG9yQnlN
b2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7
CisgICAgICAgIHJldHVybiBpbnZlcnRDb21wb25lbnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAg
ICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBo
YSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCisKIGNvbnN0ZXhwciB1
aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4g
KHZhbHVlIDw8IDgpIC0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDc4ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvckJ1aWxkZXIuaCIK
LSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAj
aW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTaW1wbGVDb2xvciB7Ci1wdWJsaWM6Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IFNpbXBsZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IHZhbHVlKSA6IG1fdmFsdWUgeyB2YWx1ZSB9IHsgfQotCi0gICAg
Y29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
LmFscGhhOyB9Ci0gICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KG1fdmFsdWUuYWxwaGEpOyB9Ci0K
LSAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuYWxw
aGEgPT0gMHhGRjsgfQotICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUuYWxwaGE7IH0KLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldp
dGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgbV92
YWx1ZS5yZWQsIG1fdmFsdWUuZ3JlZW4sIG1fdmFsdWUuYmx1ZSwgYWxwaGEgfTsKLSAgICB9Ci0K
LSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IgaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSh1aW50OF90
IGFscGhhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhf
dD4oMHhGRiAtIG1fdmFsdWUucmVkKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIG1fdmFs
dWUuZ3JlZW4pLCBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gbV92YWx1ZS5ibHVlKSwgYWxw
aGEgfTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8
VD4gYXNTUkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdHMobV92YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djxULCB1aW50OF90PikKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoTiA8IDQpOwotICAgICAgICBpZiBjb25z
dGV4cHIgKCFOKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUucmVkOwotICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoTiA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuZ3JlZW47
Ci0gICAgICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDIpCi0gICAgICAgICAgICByZXR1cm4g
bV92YWx1ZS5ibHVlOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAzKQotICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWUuYWxwaGE7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0
ZXhwciBTaW1wbGVDb2xvcih1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90
IGEpIDogbV92YWx1ZSB7IHIsIGcsIGIsIGEgfSB7IH0KLQotICAgIFNSR0JBPHVpbnQ4X3Q+IG1f
dmFsdWUgeyAwLCAwLCAwLCAwIH07Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3Is
IFNpbXBsZUNvbG9yKTsKLWJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3Ip
OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIp
Ci17Ci0gICAgcmV0dXJuIGEuYXNTUkdCQTx1aW50OF90PigpID09IGIuYXNTUkdCQTx1aW50OF90
PigpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNv
bG9yIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotY29uc3RleHByIENvbG9yQnVp
bGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIp
OwotY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7Ci1Db2xvckJ1aWxk
ZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsK
LQogY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgMHhGRik7CkBAIC0xMTksMTUgKzUyLDMgQEAgaW5saW5lIENvbG9y
QnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLW5hbWVzcGFjZSBzdGQgewotCi10ZW1wbGF0ZTw+IGNsYXNzIHR1cGxlX3NpemU8V2ViQ29y
ZTo6U2ltcGxlQ29sb3I+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXpl
X3QsIDQ+IHsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+IGNsYXNzIHR1cGxlX2VsZW1l
bnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0eXBlID0g
dWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
OSArNTEsMTEgQEAgUmV0YWluUHRyPENHQ29sb3JSZWY+IFRpbnlMUlVDYWNoZVBvbGljeQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2ltcGxlQ29s
b3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQorc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQogewog
ICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
cy4KKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
c2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yR2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9y
KTsKICAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25lbnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMo
Y29sb3IpOwpAQCAtNzgsMzIgKzgwLDE3IEBAIHN0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2lt
cGxlQ29sb3JGcm8KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KTsKIH0KIAogQ29s
b3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCisgICAgOiBDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tQ0dDb2xvcihjb2xvcikpCiB7Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotCi0gICAgaWYgKCFjb2xvcikgewotICAgICAgICBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gaW52YWxpZFNpbXBsZUNvbG9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9y
RnJvbUNHQ29sb3IoY29sb3IpKTsKIH0KIAotQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Is
IFNlbWFudGljVGFnKQorQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVGFn
IHRhZykKKyAgICA6IENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSwgdGFn
KQogewotICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9y
IHNwYWNlcy4KLQotICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxl
Q29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVDb2xvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9y
KSk7Ci0gICAgdGFnQXNTZW1hbnRpYygpOwogfQogCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0xMjgsOCArMTE1LDggQEAgc3RhdGljIENHQ29s
b3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwogCiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc1NpbXBsZSgpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4
X3Q+KCkgfS52YWx1ZSkgeworICAgIGlmIChjb2xvci5pc0lubGluZSgpKSB7CisgICAgICAgIHN3
aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJbmxpbmUoKSB9LnZhbHVlKSB7CiAgICAgICAg
IGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFyZW50IH0udmFsdWU6IHsKICAgICAg
ICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9y
KGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudENHQ29sb3I7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCwyMCArMTU4LDIwIEBAIGJvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAg
ICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAxLjBmIC0gbV9hbW91bnQ7Ci0gICAgICAgIGZv
ckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAg
ICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwg
WyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAgICAgICAgcmV0dXJuIDEuMGYgLSAob25lTWlu
dXNBbW91bnQgKyBjb21wb25lbnQgKiAobV9hbW91bnQgLSBvbmVNaW51c0Ftb3VudCkpOwogICAg
ICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQ09OVFJBU1Q6
IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0gLSgwLjVmICogbV9hbW91bnQpICsgMC41ZjsK
LSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9u
ZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9u
ZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpjbGFtcDxmbG9hdD4oaW50ZXJjZXB0ICsgbV9hbW91bnQgKiBjb21wb25lbnQsIDAuMGYsIDEu
MGYpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2Ug
QlJJR0hUTkVTUzoKLSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0o
ZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5v
bkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKICAg
ICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjQyMDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29s
b3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGNvbG9yKQogewotICAgIHNldFNpbXBsZUNvbG9yKG1h
a2VTaW1wbGVDb2xvcihTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1
ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpOworICAgIHNldElubGluZUNv
bG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSk7CiB9
CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2NDIw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw4IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9t
TlNDb2xvcihOU0NvbG9yICoKIAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKGNvbG9yLmlzU2ltcGxlKCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWQ6
OlJHQkEgeyBjb2xvci5hc1NpbXBsZSgpLmFzU1JHQkE8dWludDhfdD4oKSB9LnZhbHVlKSB7Cisg
ICAgaWYgKGNvbG9yLmlzSW5saW5lKCkpIHsKKyAgICAgICAgc3dpdGNoIChQYWNrZWQ6OlJHQkEg
eyBjb2xvci5hc0lubGluZSgpIH0udmFsdWUpIHsKICAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEg
eyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5TQ29s
b3IgKmNsZWFyQ29sb3IgPSBbW05TQ29sb3IgY29sb3JXaXRoU1JHQlJlZDowIGdyZWVuOjAgYmx1
ZTowIGFscGhhOjBdIHJldGFpbl07CiAgICAgICAgICAgICByZXR1cm4gY2xlYXJDb2xvcjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCiB7Ci0gICAgc2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsg
Y29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSk7CisgICAgc2V0SW5saW5lQ29s
b3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xv
ci5iLCBjb2xvci5hIH0pKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNv
bnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403942</attachid>
            <date>2020-07-09 19:56:27 -0700</date>
            <delta_ts>2020-07-10 09:49:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214158-20200709195626.patch</filename>
            <type>text/plain</type>
            <size>35312</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmVzIFNpbXBsZUNvbG9yIQorICAgICAgICAKKyAgICAgICAgQWxhcywgbWFrZVNpbXBs
ZUNvbG9yKCkgcmVtYWlucyBmb3Igbm93LCBzZWVraW5nIGEgbmV3IG5hbWUgaW4gYSBmb2xsb3cg
dXAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjppc09wYXF1ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNWaXNpYmxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhB
bHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVDb2xvcjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdGhlIFNpbXBsZUNvbG9yIGNs
YXNzLiAgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjps
aWdodGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxv
YXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjp0YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdB
c1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JH
QkFMb3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNJbmxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElubGluZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojppc0JsYWNrQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc1NpbXBsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6YXNTaW1wbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNldFNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW5hbWUgZXhpc3RpbmcgdXNl
cyBvZiBTaW1wbGUgd2l0aCBJbmxpbmUsIGRlbm90aW5nIHRoZSBpbmxpbmUgU1JHQkE8dWludDhf
dD4uCisgICAgICAgIC0gTW92ZSBtdWx0aWxpbmUgZnVuY3Rpb25zIG91dCBvZiBsaW5lIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIC0gQWRkcyBuZXcgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRha2lu
ZyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gbWFrZSBDb2xvcihDR0NvbG9yUmVmKQorICAg
ICAgICAgIGNvbnN0cnVjdG9ycyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgLSBSZXBs
YWNlcyB1c2VzIG9mIFNpbXBsZUNvbG9yJ3MgaW50ZXJmYWNlIHdpdGggdXNlIG9mIENvbG9yVXRp
bGl0aWVzLmggaGVscGVycy4gZS5nLgorICAgICAgICAgIENvbG9yOjppbnZlcnRlZENvbG9yV2l0
aEFscGhhKCkgbm93IHVzZXMgdGhlIG5ldyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhh
KCkKKyAgICAgICAgICBoZWxwZXIgZnVuY3Rpb24uIFVzZSBvZiB0aGVzZSB1dGlsaXRpZXMgd2ls
bCBiZSBleHBhbmRlZCB0byBFeHRlbmRlZENvbG9yIGluIGEgZm9sbG93CisgICAgICAgICAgdXAs
IGFsbG93aW5nIHVzIHRvIGhhdmUganVzdCBvbmUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYWxn
b3JpdGhtcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJp
YWxpemF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwpOgorICAgICAgICAoV2ViQ29y
ZTo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorICAgICAgICBSZXBsYWNlIHNlcmlhbGl6
YXRpb24gb2YgU2ltcGxlQ29sb3Igd2l0aCBzZXJpYWxpemF0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+
LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICBSZW1vdmVkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudC4gVXNlcyByZXBsYWNlZCBieSBu
ZXcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50CisgICAgICAgIGZ1bmN0aW9u
IGluIENvbG9yVXRpbGl0aWVzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxw
aGFDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzx1
aW50OF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0
Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50OF90Pik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6aW52ZXJ0Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICBBZGRlZCBoZXBsZXJzIHRvIGltcGxlbWVudCBjb2xv
ciBtdXRhdGlvbiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpj
YWNoZWRDR0NvbG9yKToKKyAgICAgICAgU3dpdGNoIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9y
IHRvIHJldHVybiBhbiBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gc3RyZWFtbGluZQorICAg
ICAgICB0aGUgY29uc3RydWN0b3JzLiBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5lIGZ1bmN0aW9u
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Om5zQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5l
IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBT
d2l0Y2ggdG8gdXNpbmcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KCkuCisK
IDIwMjAtMDctMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgIkVTUE4gRmFudGFzeSBTcG9ydHMiIGRvZXMgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZl
bnRzLCBvbmx5IHRvdWNoIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1f
Y29sb3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBp
bnZhbGlkU2ltcGxlQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRG
bGFncyA9IGludmFsaWRJbmxpbmVDb2xvcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTgz
LDcgKzgzLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9u
IGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gU2lt
cGxlQ29sb3IgeyBibGFjayB9KQorICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0g
YmxhY2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9y
IENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QK
IHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAo
aXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgd2hpdGUgfSkKKyAgICBp
ZiAoaXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEo
ZmxvYXQgYWxwaGEpCiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSBhc1Np
bXBsZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAg
ICBDb2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBo
YSk7CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBk
ZXNpcmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hCiB7
CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAgICByZXR1
cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CiB9
CiAKIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTE1Niw3ICsxNTYsNyBA
QCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlz
RXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwg
YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNS
R0IsIGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKKyAg
ICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSkpIH07CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NjUgKzU2LDM0IEBAIGNsYXNzIENvbG9yIHsKIHB1YmxpYzoKICAgICBDb2xvcigpID0gZGVmYXVs
dDsKIAotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IoY29sb3IpOwotICAgIH0KKyAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7Cisg
ICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAogICAgIGVudW0gU2VtYW50aWNU
YWcgeyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRp
Y1RhZykKLSAgICAgICAgOiBDb2xvcihjb2xvcikKLSAgICB7Ci0gICAgICAgIHRhZ0FzU2VtYW50
aWMoKTsKLSAgICB9CisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIFNlbWFudGljVGFnKTsKKyAg
ICBDb2xvcihPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4sIFNlbWFudGljVGFnKTsKIAotICAgIENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi0gICAgewotICAgICAgICAv
LyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2ln
bnMgdGhlCi0gICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRD
b2xvciBwb2ludGVyIGJlbG93LgotICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzID0gMDsKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENv
bG9yLmxlYWtSZWYoKTsKLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgfQorICAg
IENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKIAotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
ZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBo
YXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCks
ICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBT
aW1wbGVDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAo
MSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMg
c2V0IHRoYXQgYW4gU2ltcGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgICAgICBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICAgICAgQVNT
RVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29sb3JEYXRhLnNpbXBsZUNv
bG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBD
b2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQotICAgIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZW1w
dHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRl
bGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBsZUNv
bG9yIHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRG
bGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Ci0g
ICAgfQorICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpOwor
ICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihD
b2xvciYmKTsKIAotICAgIH5Db2xvcigpCi0gICAgewotICAgICAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLSAgICB9
CisgICAgfkNvbG9yKCk7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgfHwgKG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZFNpbXBs
ZUNvbG9yQml0KTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIHZhbGlkSW5saW5lQ29s
b3JCaXQpOyB9CiAKLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGUoKS5pc09wYXF1ZSgp
OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzU2ltcGxlKCkuaXNWaXNpYmxlKCk7IH0KKyAg
ICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29s
b3IgbmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgp
ICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1hbnRpY0lubGluZUNv
bG9yQml0KTsgfQorCisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0g
MjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9CiAK
LSAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhh
Q29tcG9uZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21w
b25lbnRBc0Zsb2F0KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkg
OiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0OwogCkBAIC0xNDQsOSArMTEzLDYgQEAgcHVibGljOgogCiAgICAgQ29sb3Igc2VtYW50aWND
b2xvcigpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9t
IGEgQ1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCi0gICAgYm9vbCBpc1NlbWFudGljKCkgY29uc3Qg
eyByZXR1cm4gaXNTaW1wbGUoKSAmJiAobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAm
IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdCk7IH0KLQogI2lmIFBMQVRGT1JNKEdUSykKICAgICBD
b2xvcihjb25zdCBHZGtSR0JBJik7CiAgICAgb3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0OwpAQCAt
MTcyLDExICsxMzgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjeWFu
ID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMjU1KTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1
dG8geWVsbG93ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAwKTsKIAotICAgIGJvb2wgaXNF
eHRlbmRlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyAmIGludmFsaWRTaW1wbGVDb2xvcik7IH0KLSAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyBy
ZXR1cm4gIWlzRXh0ZW5kZWQoKTsgfQorICAgIGJvb2wgaXNFeHRlbmRlZCgpIGNvbnN0IHsgcmV0
dXJuICEobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIGludmFsaWRJbmxpbmVDb2xv
cik7IH0KKyAgICBib29sIGlzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gIWlzRXh0ZW5kZWQoKTsg
fQogCiAgICAgY29uc3QgRXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotICAgIGNv
bnN0IFNpbXBsZUNvbG9yIGFzU2ltcGxlKCkgY29uc3Q7CisgICAgU1JHQkE8dWludDhfdD4gYXNJ
bmxpbmUoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29u
c3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9yJiYp
OwpAQCAtMTkzLDMwICsxNTksMjYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToK
LSAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvcikKLSAgICAgICAgOiBDb2xvcihjb2xvci5hc1NS
R0JBPHVpbnQ4X3Q+KCkpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0U2ltcGxlQ29sb3Io
U1JHQkE8dWludDhfdD4pOworICAgIHZvaWQgc2V0SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4p
OworICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKLSAg
ICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
fD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlkKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7IH0KKyAg
ICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3Mg
fD0gaXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9CisgICAgdm9pZCB0YWdBc1ZhbGlkKCkgeyBt
X2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7IH0KIAog
ICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9pbnRlci4KLSAgICAvLyAw
eF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFNpbXBsZUNvbG9yLgotICAgIC8vIDB4X19fX19fXzEx
IGlzIGEgdmFsaWQgU2ltcGxlQ29sb3IuCisgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxp
ZCBpbmxpbmUgY29sb3IuCisgICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBpbmxpbmUgY29s
b3IuCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRTaW1wbGVDb2xvciA9IDB4MTsKLSAgICBzdGF0
aWMgY29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3Qg
dWludDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0ID0gMHg0OworICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBpbnZhbGlkSW5saW5lQ29sb3IgPSAweDE7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IHZhbGlkSW5saW5lQ29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IHZhbGlkSW5saW5lQ29sb3IgPSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlz
U2VtYW50aWNJbmxpbmVDb2xvckJpdCA9IDB4NDsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50NjRf
dCBkZWxldGVkSGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBlbXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAogICAgIHVu
aW9uIHsKLSAgICAgICAgdWludDY0X3Qgc2ltcGxlQ29sb3JBbmRGbGFncyB7IGludmFsaWRTaW1w
bGVDb2xvciB9OworICAgICAgICB1aW50NjRfdCBpbmxpbmVDb2xvckFuZEZsYWdzIHsgaW52YWxp
ZElubGluZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7CiAg
ICAgfSBtX2NvbG9yRGF0YTsKIH07CkBAIC0yMzksNyArMjAxLDcgQEAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDb2xvciYgYSwgYwogICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlz
RXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwgYik7CiAK
LSAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGIubV9jb2xv
ckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFnczsKKyAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5pbmxp
bmVDb2xvckFuZEZsYWdzID09IGIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFnczsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIp
CkBAIC0yNjAsMjEgKzIyMiw3OSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWND
b2xvcihjCiB7CiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAg
ICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKLSAgICByZXR1cm4gKGEubV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1NpbXBsZUNv
bG9yQml0KSA9PSAoYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjpp
c1NlbWFudGljU2ltcGxlQ29sb3JCaXQpOworICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5pbmxp
bmVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljSW5saW5lQ29sb3JCaXQpID09IChi
Lm1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNJbmxp
bmVDb2xvckJpdCk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4gY29s
b3IpCit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNv
bG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IpCisg
ICAgICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3Io
U1JHQkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQoreworICAgIHNldElubGluZUNvbG9y
KGNvbG9yKTsKKyAgICB0YWdBc1NlbWFudGljKCk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3Io
T3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IGNvbG9yLCBTZW1hbnRpY1RhZykKK3sKKyAgICBpZiAo
Y29sb3IpIHsKKyAgICAgICAgc2V0SW5saW5lQ29sb3IoKmNvbG9yKTsKKyAgICAgICAgdGFnQXNT
ZW1hbnRpYygpOworICAgIH0KK30KKworaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJiBleHRlbmRlZENvbG9yKQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShl
eHRlbmRlZENvbG9yKSk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAm
IGludmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90
IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0
ZWRIYXNoVmFsdWUgJiB2YWxpZElubGluZUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNo
IHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlkIElubGluZUNvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQg
aGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIElubGluZUNvbG9yIHdv
dWxkbid0IGhhdmUiKTsKKyAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZGVs
ZXRlZEhhc2hWYWx1ZTsKKyAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Cit9CisKK2lubGluZSBD
b2xvcjo6Q29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZElubGluZUNvbG9yLCAiQ29sb3IncyBlbXB0
eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAg
c3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVk
IGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBJbmxpbmVDb2xvciB3
b3VsZG4ndCBoYXZlIik7CisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IGVt
cHR5SGFzaFZhbHVlOworICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKK30KKworaW5saW5lIENv
bG9yOjp+Q29sb3IoKQoreworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6
aGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFz
RXh0ZW5kZWQoKS5oYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzKTsKKyAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRh
LmlubGluZUNvbG9yQW5kRmxhZ3MpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxU
PiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQog
ICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOwotICAgIHJldHVy
biBhc1NpbXBsZSgpLmFzU1JHQkE8VD4oKTsKKworCisgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWVfdjxULCBmbG9hdD4pCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dHMoYXNJbmxpbmUoKSk7CisgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQs
IHVpbnQ4X3Q+KQorICAgICAgICByZXR1cm4gYXNJbmxpbmUoKTsKIH0KIAogaW5saW5lIENvbG9y
IENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29u
c3QKQEAgLTMwMywzMCArMzIzLDM5IEBAIGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xv
cjo6YXNFeHQKICAgICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3I7CiB9CiAKLWlu
bGluZSBjb25zdCBTaW1wbGVDb2xvciBDb2xvcjo6YXNTaW1wbGUoKSBjb25zdAoraW5saW5lIFNS
R0JBPHVpbnQ4X3Q+IENvbG9yOjphc0lubGluZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzU2lt
cGxlKCkpOwotICAgIHJldHVybiBTaW1wbGVDb2xvciB7IGFzU1JHQkEoUGFja2VkOjpSR0JBIHsg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPj4g
MzIpIH0pIH07CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgIHJldHVybiBhc1NSR0JBKFBh
Y2tlZDo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5pbmxpbmVDb2xv
ckFuZEZsYWdzID4+IDMyKSB9KTsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6OnNldFNpbXBsZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoraW5saW5lIHZvaWQgQ29sb3I6OnNldElubGluZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9y
QW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JBIHsgY29sb3IgfS52
YWx1ZSkgPDwgMzI7CisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKICAg
ICB0YWdBc1ZhbGlkKCk7CiB9CiAKK2lubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9y
KFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCit7CisgICAgLy8gWmVybyB0aGUg
dW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQorICAg
IC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJl
bG93LgorICAgIG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSAwOworICAgIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7CisgICAgQVNT
RVJUKGlzRXh0ZW5kZWQoKSk7Cit9CisKIGlubGluZSBib29sIENvbG9yOjppc0JsYWNrQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAg
ICAgIHJldHVybiBjb2xvci5hc0V4dGVuZGVkKCkuaXNCbGFjaygpOwotICAgIHJldHVybiBjb2xv
ci5hc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgcmV0dXJu
IGNvbG9yLmFzSW5saW5lKCkgPT0gQ29sb3I6OmJsYWNrOwogfQogCiBpbmxpbmUgYm9vbCBDb2xv
cjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoY29sb3IuaXNF
eHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRlZCgpLmlzV2hpdGUoKTsK
LSAgICByZXR1cm4gY29sb3IuYXNTaW1wbGUoKSA9PSBTaW1wbGVDb2xvciB7IENvbG9yOjp3aGl0
ZSB9OworICAgIHJldHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjp3aGl0ZTsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTM1NSw3ICszODQsNyBAQCB2b2lkIENvbG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGVu
Y29kZSB3aGV0aGVyIHRoZSBjb2xvciBpcyBzZW1hbnRpYy4KIAogICAgIGVuY29kZXIgPDwgdHJ1
ZTsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZDo6UkdCQSB7IGFzU2ltcGxlKCkuYXNTUkdCQTx1aW50
OF90PigpIH0udmFsdWU7CisgICAgZW5jb2RlciA8PCBQYWNrZWQ6OlJHQkEgeyBhc0lubGluZSgp
IH0udmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHAJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBTaW1wbGVDb2xvciBvdmVybG9hZHMKKy8vIFNS
R0JBPHVpbnQ4X3Q+IG92ZXJsb2FkcwogCiBzdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWdu
ZWQgbnVtYmVyKQogewpAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0
PiBmcmFjdGlvbkRpZ2l0CiAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAg
KyAweDdGKSAvIDB4RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKIH0KIAotU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYV0gPSBjb2xvcjsKICAgICBzd2l0Y2ggKGFscGhhKSB7CkBAIC02NiwxNSArNjYsMTUg
QEAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoU2ltcGxlQ29sb3IgYwogICAgIH0KIH0KIAot
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKFNpbXBsZUNvbG9yIGNvbG9yKQorU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIGF1dG8gW3Jl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwotICAgIGlmIChjb2xvci5pc09wYXF1ZSgp
KQorICAgIGlmIChhbHBoYSA9PSAweEZGKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycs
IGhleChyZWQsIDIsIExvd2VyY2FzZSksIGhleChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJs
dWUsIDIsIExvd2VyY2FzZSkpOwogICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9y
KTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNpbXBsZUNv
bG9yIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yOwogICAgIGlmIChhbHBoYSA8IDB4RkYpCkBAIC0xMjQsMjEgKzEyNCwyMSBAQCBTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xvciYgCiB7CiAgICAgaWYgKGNvbG9yLmlz
RXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNF
eHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc1NpbXBs
ZSgpKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0lubGluZSgpKTsK
IH0KIAogU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
ICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlv
bkZvckhUTUwoY29sb3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZv
ckhUTUwoY29sb3IuYXNTaW1wbGUoKSk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KGNvbG9yLmFzSW5saW5lKCkpOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVk
KCkpCiAgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xv
ci5hc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChjb2xvci5hc1NpbXBsZSgpKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29sb3IuYXNJbmxpbmUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCShy
ZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNlcmlhbGl6YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5LDE2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7CiBjbGFzcyBFeHRlbmRlZENvbG9yOwotY2xh
c3MgU2ltcGxlQ29sb3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7CiAKIC8v
IHNlcmlhbGl6YXRpb25Gb3JIVE1MIHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3Jk
aW5nIHRvIEhUTUw1IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3Jp
cHRpbmcuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVzPiAoMTAgU2VwdGVtYmVyIDIwMTUpCiAv
LyBzZXJpYWxpemF0aW9uRm9yQ1NTIHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3Jk
aW5nIHRvIENTUwogLy8gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQgcmV0dXJucyB0
aGUgY29sb3Igc2VyaWFsaXplZCBmb3IgRHVtcFJlbmRlclRyZWUsICNSUkdHQkIsICNSUkdHQkJB
QSBvciB0aGUgQ1NTIHNlcmlhbGl6YXRpb24KIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoU2ltcGxlQ29sb3IpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKFNpbXBsZUNvbG9yKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChTaW1wbGVDb2xvcik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90Pik7CitXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4pOworV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JBPHVp
bnQ4X3Q+KTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29u
c3QgRXh0ZW5kZWRDb2xvciYpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTMgKzU4LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KFNSR0JBPFQ+JiBjb2xv
ciwgRnVuY3RvciYmIGYpCi17Ci0gICAgY29sb3IucmVkID0gZihjb2xvci5yZWQpOwotICAgIGNv
bG9yLmdyZWVuID0gZihjb2xvci5ncmVlbik7Ci0gICAgY29sb3IuYmx1ZSA9IGYoY29sb3IuYmx1
ZSk7Ci19Ci0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIHsKICAg
ICBUIHJlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiAr
OTEsODYgQEAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbAogICAgIHJl
dHVybiB7IGNsYW1wVG9Db21wb25lbnRGbG9hdChyKSwgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGcp
LCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoYiksIGNsYW1wVG9Db21wb25lbnRGbG9hdChhKSB9Owog
fQogCisKKy8vIENvbG9yIG11dGF0b3JzCisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbWFkZSB0byB3b3JrIHdpdGggY29sb3IncyB0aGF0
IGRvbid0IHVzZSB0aGUgbmFtZXMgcmVkLCBncmVlbiwgYW5kIGJsdWUgZm9yIHRoZWlyIGNoYW5u
ZWxzLgorICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7CisgICAgY29weS5yZWQgPSBmdW5jdG9y
KGNvbG9yLnJlZCk7CisgICAgY29weS5ncmVlbiA9IGZ1bmN0b3IoY29sb3IuZ3JlZW4pOworICAg
IGNvcHkuYmx1ZSA9IGZ1bmN0b3IoY29sb3IuYmx1ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8o
dWludDhfdCk7CisKK3RlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4X3QgY29udmVydENvbXBvbmVu
dEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZTsKK30K
KwordGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQgY29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9h
dD4odWludDhfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQo
dmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9h
dFRvKGZsb2F0KTsKKwordGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50
RmxvYXRUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY29udmVydFRvQ29t
cG9uZW50Qnl0ZSh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRD
b21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBU
b0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9y
VHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKK3sKKyAgICBDb2xvclR5cGUgY29w
eSA9IGNvbG9yOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGRlY2x0
eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVu
QWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKK3sKKyAg
ICBDb2xvclR5cGUgY29weSA9IGNvbG9yOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9u
ZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgcmV0
dXJuIGNvcHk7Cit9CisKK2NvbnN0ZXhwciB1aW50OF90IGludmVydENvbXBvbmVudCh1aW50OF90
IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gMjU1IC0gY29tcG9uZW50OworfQorCitjb25zdGV4
cHIgZmxvYXQgaW52ZXJ0Q29tcG9uZW50KGZsb2F0IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4g
MS4wZiAtIGNvbXBvbmVudDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCit7CisgICAgQ29sb3JUeXBlIGNvcHkgPSBjb2xv
ckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVu
dCkgeworICAgICAgICByZXR1cm4gaW52ZXJ0Q29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgfSk7
CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29weS5h
bHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFs
cGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCit7CisgICAg
Q29sb3JUeXBlIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29s
b3IsIFtdIChhdXRvIGNvbXBvbmVudCkgeworICAgICAgICByZXR1cm4gaW52ZXJ0Q29tcG9uZW50
KGNvbXBvbmVudCk7CisgICAgfSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRG
bG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4g
Y29weTsKK30KKworCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2
X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3OCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ29sb3JCdWlsZGVyLmgiCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAj
aW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNv
bnN0ZXhwciBleHBsaWNpdCBTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiB2YWx1ZSkgOiBtX3Zh
bHVlIHsgdmFsdWUgfSB7IH0KLQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5hbHBoYTsgfQotICAgIGNvbnN0ZXhwciBmbG9hdCBh
bHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChtX3ZhbHVlLmFscGhhKTsgfQotCi0gICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhID09IDB4RkY7IH0KLSAgICBjb25zdGV4cHIgYm9v
bCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhOyB9Ci0KLSAgICBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB7IG1fdmFsdWUucmVkLCBtX3ZhbHVlLmdyZWVuLCBtX3ZhbHVl
LmJsdWUsIGFscGhhIH07Ci0gICAgfQotCi0gICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGludmVy
dGVkQ29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLnJlZCksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLmdyZWVuKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
MHhGRiAtIG1fdmFsdWUuYmx1ZSksIGFscGhhIH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKG1fdmFsdWUpOwotICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICByZXR1
cm4gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgotICAgIGNv
bnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0
KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlLnJlZDsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlLmdyZWVuOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9
PSAyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYmx1ZTsKLSAgICAgICAgZWxzZSBpZiBj
b25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFscGhhOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IodWludDhfdCByLCB1aW50
OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKSA6IG1fdmFsdWUgeyByLCBnLCBiLCBhIH0geyB9
Ci0KLSAgICBTUkdCQTx1aW50OF90PiBtX3ZhbHVlIHsgMCwgMCwgMCwgMCB9OwotfTsKLQotYm9v
bCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7Ci1ib29sIG9wZXJhdG9yIT0o
U2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShTaW1w
bGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiBhLmFzU1JHQkE8dWludDhf
dD4oKSA9PSBiLmFzU1JHQkE8dWludDhfdD4oKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7
Ci19Ci0KLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVD
b2xvcihpbnQgciwgaW50IGcsIGludCBiKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci1j
b25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoU1JH
QkE8dWludDhfdD4pOwotQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29s
b3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KIGNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIDB4RkYpOwpAQCAtMTE5
LDE1ICs1MiwzIEBAIGlubGluZSBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1ha2UKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8
PiBjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlNpbXBsZUNvbG9yPiA6IHB1YmxpYyBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Ci19OwotCi10ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPiBjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OlNpbXBsZUNvbG9yPiB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgdHlwZSA9IHVpbnQ4X3Q7Ci19OwotCi19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDExIEBAIFJldGFpblB0cjxDR0NvbG9yUmVm
PiBUaW55TFJVQ2FjaGVQb2xpY3kKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgU1JH
QkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
K3N0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29s
b3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5l
ZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHNpemVfdCBudW1Db21wb25lbnRzID0gQ0dDb2xvckdl
dE51bWJlck9mQ29tcG9uZW50cyhjb2xvcik7CiAgICAgY29uc3QgQ0dGbG9hdCogY29tcG9uZW50
cyA9IENHQ29sb3JHZXRDb21wb25lbnRzKGNvbG9yKTsKQEAgLTc4LDMyICs4MCwxNyBAQCBzdGF0
aWMgU1JHQkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBy
LCBnLCBiLCBhIH0pOworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IHIsIGcsIGIsIGEgfSk7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQorICAg
IDogQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKQogewotICAgIC8vIEZJ
WE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLQotICAg
IGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9
IGludmFsaWRTaW1wbGVDb2xvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFNp
bXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSk7CiB9CiAKLUNvbG9y
OjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZykKK0NvbG9yOjpDb2xvcihDR0Nv
bG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZyB0YWcpCisgICAgOiBDb2xvcihtYWtlU2ltcGxlQ29s
b3JGcm9tQ0dDb2xvcihjb2xvciksIHRhZykKIHsKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xv
ciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCi0KLSAgICBpZiAoIWNvbG9yKSB7Ci0g
ICAgICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBpbnZhbGlkU2ltcGxlQ29s
b3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2lt
cGxlQ29sb3JGcm9tQ0dDb2xvcihjb2xvcikpOwotICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAog
c3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTI4
LDggKzExNSw4IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG8KIAog
Q0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
Y29sb3IuaXNTaW1wbGUoKSkgewotICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9y
LmFzU2ltcGxlKCkuYXNTUkdCQTx1aW50OF90PigpIH0udmFsdWUpIHsKKyAgICBpZiAoY29sb3Iu
aXNJbmxpbmUoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzSW5s
aW5lKCkgfS52YWx1ZSkgewogICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFu
c3BhcmVudCB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3Bh
cmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJh
bnNwYXJlbnRDR0NvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMjAgKzE1OCwyMCBAQCBib29s
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgSU5WRVJUOiB7CiAgICAgICAgIGZsb2F0IG9uZU1pbnVzQW1vdW50ID0gMS4w
ZiAtIG1fYW1vdW50OwotICAgICAgICBmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFsm
XShmbG9hdCBjb21wb25lbnQpIHsKKyAgICAgICAgY29sb3IgPSBjb2xvckJ5TW9kaWZpbmdFYWNo
Tm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFsmXShmbG9hdCBjb21wb25lbnQpIHsKICAgICAgICAg
ICAgIHJldHVybiAxLjBmIC0gKG9uZU1pbnVzQW1vdW50ICsgY29tcG9uZW50ICogKG1fYW1vdW50
IC0gb25lTWludXNBbW91bnQpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIENPTlRSQVNUOiB7CiAgICAgICAgIGZsb2F0IGludGVyY2VwdCA9IC0o
MC41ZiAqIG1fYW1vdW50KSArIDAuNWY7Ci0gICAgICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVu
dChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAgICAgICBjb2xvciA9IGNvbG9yQnlN
b2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkg
ewogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8ZmxvYXQ+KGludGVyY2VwdCArIG1fYW1v
dW50ICogY29tcG9uZW50LCAwLjBmLCAxLjBmKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIEJSSUdIVE5FU1M6Ci0gICAgICAgIGZvckVhY2hOb25B
bHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAgICAgICBjb2xv
ciA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0
IGNvbXBvbmVudCkgewogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PGZsb2F0PihtX2Ftb3Vu
dCAqIGNvbXBvbmVudCwgMC4wZik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9y
R3RrLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xvcikK
IHsKLSAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBzdGF0aWNfY2Fz
dDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdyZWVuKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYWxw
aGEpIH0pKTsKKyAgICBzZXRJbmxpbmVDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5hbHBoYSkgfSkpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bG9yTWFjLm1tCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMiw4ICsxMjIsOCBA
QCBDb2xvciBzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqCiAKIE5TQ29sb3IgKm5z
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc1NpbXBsZSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNTaW1wbGUoKS5hc1NSR0JB
PHVpbnQ4X3Q+KCkgfS52YWx1ZSkgeworICAgIGlmIChjb2xvci5pc0lubGluZSgpKSB7CisgICAg
ICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJbmxpbmUoKSB9LnZhbHVlKSB7CiAg
ICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFyZW50IH0udmFsdWU6IHsK
ICAgICAgICAgICAgIHN0YXRpYyBOU0NvbG9yICpjbGVhckNvbG9yID0gW1tOU0NvbG9yIGNvbG9y
V2l0aFNSR0JSZWQ6MCBncmVlbjowIGJsdWU6MCBhbHBoYTowXSByZXRhaW5dOwogICAgICAgICAg
ICAgcmV0dXJuIGNsZWFyQ29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjQyMDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogewotICAgIHNldFNpbXBsZUNvbG9y
KG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9y
LmEgfSkpOworICAgIHNldElubGluZUNvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JB
IHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSk7CiB9CiAKIENvbG9yOjpv
cGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403973</attachid>
            <date>2020-07-10 09:49:27 -0700</date>
            <delta_ts>2020-07-10 10:36:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214158-20200710094926.patch</filename>
            <type>text/plain</type>
            <size>37594</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAyMC0wNy0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCA0IG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBS
ZW1vdmVzIFNpbXBsZUNvbG9yIQorICAgICAgICAKKyAgICAgICAgQWxhcywgbWFrZVNpbXBsZUNv
bG9yKCkgcmVtYWlucyBmb3Igbm93LCBzZWVraW5nIGEgbmV3IG5hbWUgaW4gYSBmb2xsb3cgdXAu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlQ29sb3I6OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjppc09wYXF1ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNWaXNpYmxlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdGhlIFNpbXBsZUNvbG9yIGNsYXNz
LiAgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdo
dGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50aWMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjp0YWdBc1NlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1Zh
bGlkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
ZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNJbmxpbmUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElubGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpp
c0JsYWNrQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzV2hpdGVDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc1NpbXBsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6YXNTaW1wbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNl
dFNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgLSBSZW5hbWUgZXhpc3RpbmcgdXNlcyBv
ZiBTaW1wbGUgd2l0aCBJbmxpbmUsIGRlbm90aW5nIHRoZSBpbmxpbmUgU1JHQkE8dWludDhfdD4u
CisgICAgICAgIC0gTW92ZSBtdWx0aWxpbmUgZnVuY3Rpb25zIG91dCBvZiBsaW5lIGluIHRoZSBo
ZWFkZXIuCisgICAgICAgIC0gQWRkcyBuZXcgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRha2luZyBP
cHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gbWFrZSBDb2xvcihDR0NvbG9yUmVmKQorICAgICAg
ICAgIGNvbnN0cnVjdG9ycyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgLSBSZXBsYWNl
cyB1c2VzIG9mIFNpbXBsZUNvbG9yJ3MgaW50ZXJmYWNlIHdpdGggdXNlIG9mIENvbG9yVXRpbGl0
aWVzLmggaGVscGVycy4gZS5nLgorICAgICAgICAgIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFs
cGhhKCkgbm93IHVzZXMgdGhlIG5ldyBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKCkK
KyAgICAgICAgICBoZWxwZXIgZnVuY3Rpb24uIFVzZSBvZiB0aGVzZSB1dGlsaXRpZXMgd2lsbCBi
ZSBleHBhbmRlZCB0byBFeHRlbmRlZENvbG9yIGluIGEgZm9sbG93CisgICAgICAgICAgdXAsIGFs
bG93aW5nIHVzIHRvIGhhdmUganVzdCBvbmUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYWxnb3Jp
dGhtcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxp
emF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JDU1MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOgorICAgICAgICBSZXBsYWNlIHNlcmlhbGl6YXRp
b24gb2YgU2ltcGxlQ29sb3Igd2l0aCBzZXJpYWxpemF0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+Lgor
ICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpmb3JFYWNoTm9uQWxwaGFDb21wb25lbnQpOiBEZWxldGVkLgorICAgICAg
ICBSZW1vdmVkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudC4gVXNlcyByZXBsYWNlZCBieSBuZXcg
Y29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50CisgICAgICAgIGZ1bmN0aW9uIGlu
IENvbG9yVXRpbGl0aWVzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydENvbXBvbmVudEJ5dGVUbzx1aW50
OF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGZsb2F0Pik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50OF90Pik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4pOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
aW52ZXJ0Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEpOgorICAgICAgICBBZGRlZCBoZXBsZXJzIHRvIGltcGxlbWVudCBjb2xvciBt
dXRhdGlvbiBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xv
ckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNo
ZWRDR0NvbG9yKToKKyAgICAgICAgU3dpdGNoIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yIHRv
IHJldHVybiBhbiBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gdG8gc3RyZWFtbGluZQorICAgICAg
ICB0aGUgY29uc3RydWN0b3JzLiBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5lIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6Om5zQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIGlzL2FzSW5saW5lIGZ1
bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBTd2l0
Y2ggdG8gdXNpbmcgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KCkuCisKIDIw
MjAtMDctMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgIkVTUE4gRmFudGFzeSBTcG9ydHMiIGRvZXMgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRz
LCBvbmx5IHRvdWNoIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIENv
bG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiAgICAgICAgIG1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAKICAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29s
b3JEYXRhOwotICAgIG90aGVyLm1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBpbnZh
bGlkU2ltcGxlQ29sb3I7CisgICAgb3RoZXIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFn
cyA9IGludmFsaWRJbmxpbmVDb2xvcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTgzLDcg
KzgzLDcgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKIENvbG9yIENv
bG9yOjpsaWdodGVuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNh
c2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gU2ltcGxl
Q29sb3IgeyBibGFjayB9KQorICAgIGlmIChpc0lubGluZSgpICYmIGFzSW5saW5lKCkgPT0gYmxh
Y2spCiAgICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjazsKIAogICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9yIENv
bG9yOjpsaWdodGVuZWQoKSBjb25zdAogQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIHsK
ICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBpZiAoaXNT
aW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgd2hpdGUgfSkKKyAgICBpZiAo
aXNJbmxpbmUoKSAmJiBhc0lubGluZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFya2Vu
ZWRXaGl0ZTsKICAgICAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxv
YXQgYWxwaGEpCiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5k
ZWQoKS5jb2xvcldpdGhBbHBoYShhbHBoYSk7CiAKLSAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBs
ZSgpLmNvbG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAgICBD
b2xvciByZXN1bHQgPSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKQEAgLTE0MSw3
ICsxNDEsNyBAQCBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hCiB7CiAg
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5pbnZlcnRl
ZENvbG9yV2l0aEFscGhhKGFscGhhKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5pbnZlcnRlZENv
bG9yV2l0aEFscGhhKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpKTsKKyAgICByZXR1cm4g
aW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShhc0lubGluZSgpLCBhbHBoYSk7CiB9CiAK
IENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKQEAgLTE1Niw3ICsxNTYsNyBAQCBz
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0
ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNF
eHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0Is
IGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKKyAgICBy
ZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG9Db21w
b25lbnRGbG9hdHMoYXNJbmxpbmUoKSkpIH07CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNjUg
KzU2LDM0IEBAIGNsYXNzIENvbG9yIHsKIHB1YmxpYzoKICAgICBDb2xvcigpID0gZGVmYXVsdDsK
IAotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQotICAgIHsKLSAgICAgICAgc2V0U2lt
cGxlQ29sb3IoY29sb3IpOwotICAgIH0KKyAgICBDb2xvcihTUkdCQTx1aW50OF90Pik7CisgICAg
Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+KTsKIAogICAgIGVudW0gU2VtYW50aWNUYWcg
eyBTZW1hbnRpYyB9OwotICAgIENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1Rh
ZykKLSAgICAgICAgOiBDb2xvcihjb2xvcikKLSAgICB7Ci0gICAgICAgIHRhZ0FzU2VtYW50aWMo
KTsKLSAgICB9Ci0KLSAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9y
KQotICAgIHsKLSAgICAgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJp
dCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQotICAgICAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNv
cHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxvdy4KLSAgICAgICAgbV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IDA7Ci0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVk
Q29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAgICAgIEFTU0VSVChpc0V4dGVu
ZGVkKCkpOwotICAgIH0KLQotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1
ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
bm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
IShkZWxldGVkSGFzaFZhbHVlICYgdmFsaWRTaW1wbGVDb2xvckJpdCksICJDb2xvcidzIGRlbGV0
ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBTaW1wbGVDb2xvciIpOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9y
J3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gU2lt
cGxlQ29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzID0gZGVsZXRlZEhhc2hWYWx1ZTsKLSAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVk
KCkpOwotICAgIH0KKyAgICBDb2xvcihTUkdCQTx1aW50OF90PiwgU2VtYW50aWNUYWcpOworICAg
IENvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiwgU2VtYW50aWNUYWcpOwogCi0gICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOwotICAg
IH0KKyAgICBDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJik7CiAKLSAgICBleHBsaWNpdCBDb2xv
cihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRTaW1wbGVDb2xvciwgIkNvbG9yJ3MgZW1wdHkg
aGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xvciIpOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0
ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFNpbXBsZUNvbG9y
IHdvdWxkbid0IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Ci0gICAg
fQorICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpOworICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JEYXRhLmlu
bGluZUNvbG9yQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsgfQogCiAgICAgV0VCQ09SRV9F
WFBPUlQgQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDb2xv
ciYmKTsKIAotICAgIH5Db2xvcigpCi0gICAgewotICAgICAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLSAgICB9Cisg
ICAgfkNvbG9yKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgfHwgKG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZElubGluZUNv
bG9yQml0KTsgfQogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRl
ZCgpIHx8IChtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgdmFsaWRTaW1wbGVDb2xv
ckJpdCk7IH0KKyAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mg
c2VtYW50aWMgY29sb3IgbmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVy
biBpc0lubGluZSgpICYmIChtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzICYgaXNTZW1h
bnRpY0lubGluZUNvbG9yQml0KTsgfQogCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzU2ltcGxl
KCkuaXNPcGFxdWUoKTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiBhc1NpbXBsZSgpLmlzVmlz
aWJsZSgpOyB9CisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1
OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9CiAKLSAg
ICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRv
Q29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc1NpbXBsZSgpLmFscGhhQ29t
cG9uZW50KCk7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGFzU2ltcGxlKCkuYWxwaGFDb21wb25l
bnRBc0Zsb2F0KCk7IH0KKyAgICB1aW50OF90IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRl
bmRlZCgpID8gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBh
c0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OwogCkBAIC0xNDQsOSArMTEzLDYgQEAgcHVibGljOgogCiAgICAgQ29sb3Igc2VtYW50aWNDb2xv
cigpIGNvbnN0OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGUgY29sb3Igb3JpZ2luYXRlZCBmcm9tIGEg
Q1NTIHNlbWFudGljIGNvbG9yIG5hbWUuCi0gICAgYm9vbCBpc1NlbWFudGljKCkgY29uc3QgeyBy
ZXR1cm4gaXNTaW1wbGUoKSAmJiAobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIGlz
U2VtYW50aWNTaW1wbGVDb2xvckJpdCk7IH0KLQogI2lmIFBMQVRGT1JNKEdUSykKICAgICBDb2xv
cihjb25zdCBHZGtSR0JBJik7CiAgICAgb3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0OwpAQCAtMTcy
LDExICsxMzgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjeWFuID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMjU1KTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8g
eWVsbG93ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAwKTsKIAotICAgIGJvb2wgaXNFeHRl
bmRlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAm
IGludmFsaWRTaW1wbGVDb2xvcik7IH0KLSAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1
cm4gIWlzRXh0ZW5kZWQoKTsgfQorICAgIGJvb2wgaXNFeHRlbmRlZCgpIGNvbnN0IHsgcmV0dXJu
ICEobV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyAmIGludmFsaWRJbmxpbmVDb2xvcik7
IH0KKyAgICBib29sIGlzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gIWlzRXh0ZW5kZWQoKTsgfQog
CiAgICAgY29uc3QgRXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotICAgIGNvbnN0
IFNpbXBsZUNvbG9yIGFzU2ltcGxlKCkgY29uc3Q7CisgICAgU1JHQkE8dWludDhfdD4gYXNJbmxp
bmUoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0oY29uc3Qg
Q29sb3ImKTsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9yJiYpOwpA
QCAtMTkzLDMwICsxNTksMjYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAg
ICBDb2xvcihTaW1wbGVDb2xvciBjb2xvcikKLSAgICAgICAgOiBDb2xvcihjb2xvci5hc1NSR0JB
PHVpbnQ4X3Q+KCkpCi0gICAgewotICAgIH0KKyAgICB2b2lkIHNldElubGluZUNvbG9yKFNSR0JB
PHVpbnQ4X3Q+KTsKKyAgICB2b2lkIHNldEV4dGVuZGVkQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+
JiYpOwogCi0gICAgdm9pZCBzZXRTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7Ci0KLSAgICB2
b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9Ci0gICAgdm9pZCB0YWdBc1ZhbGlkKCkgeyBtX2Nv
bG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7IH0KKyAgICB2
b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgfD0g
aXNTZW1hbnRpY0lubGluZUNvbG9yQml0OyB9CisgICAgdm9pZCB0YWdBc1ZhbGlkKCkgeyBtX2Nv
bG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzIHw9IHZhbGlkSW5saW5lQ29sb3I7IH0KIAogICAg
IC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9pbnRlci4KLSAgICAvLyAweF9f
X19fX18wMSBpcyBhbiBpbnZhbGlkIFNpbXBsZUNvbG9yLgotICAgIC8vIDB4X19fX19fXzExIGlz
IGEgdmFsaWQgU2ltcGxlQ29sb3IuCisgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBp
bmxpbmUgY29sb3IuCisgICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBpbmxpbmUgY29sb3Iu
CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRTaW1wbGVDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvckJpdCA9IDB4MjsKLSAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgdmFsaWRTaW1wbGVDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0ID0gMHg0OworICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBpbnZhbGlkSW5saW5lQ29sb3IgPSAweDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IHZhbGlkSW5saW5lQ29sb3JCaXQgPSAweDI7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IHZhbGlkSW5saW5lQ29sb3IgPSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2Vt
YW50aWNJbmxpbmVDb2xvckJpdCA9IDB4NDsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBk
ZWxldGVkSGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBlbXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAogICAgIHVuaW9u
IHsKLSAgICAgICAgdWludDY0X3Qgc2ltcGxlQ29sb3JBbmRGbGFncyB7IGludmFsaWRTaW1wbGVD
b2xvciB9OworICAgICAgICB1aW50NjRfdCBpbmxpbmVDb2xvckFuZEZsYWdzIHsgaW52YWxpZElu
bGluZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7CiAgICAg
fSBtX2NvbG9yRGF0YTsKIH07CkBAIC0yMzksNyArMjAxLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYgYSwgYwogICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwgYik7CiAKLSAg
ICByZXR1cm4gYS5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID09IGIubV9jb2xvckRh
dGEuc2ltcGxlQ29sb3JBbmRGbGFnczsKKyAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzID09IGIubV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFnczsKIH0KIAog
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCkBA
IC0yNjAsMjEgKzIyMiw3NyBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xv
cihjCiB7CiAgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQogICAgICAg
ICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKLSAgICByZXR1cm4gKGEubV9jb2xv
ckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1NpbXBsZUNvbG9y
Qml0KSA9PSAoYi5tX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1Nl
bWFudGljU2ltcGxlQ29sb3JCaXQpOworICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5pbmxpbmVD
b2xvckFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljSW5saW5lQ29sb3JCaXQpID09IChiLm1f
Y29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNJbmxpbmVD
b2xvckJpdCk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3Ip
Cit7CisgICAgc2V0SW5saW5lQ29sb3IoY29sb3IpOworfQorCitpbmxpbmUgQ29sb3I6OkNvbG9y
KE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IpCisgICAg
ICAgIHNldElubGluZUNvbG9yKCpjb2xvcik7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoU1JH
QkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQoreworICAgIHNldElubGluZUNvbG9yKGNv
bG9yKTsKKyAgICB0YWdBc1NlbWFudGljKCk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoT3B0
aW9uYWw8U1JHQkE8dWludDhfdD4+IGNvbG9yLCBTZW1hbnRpY1RhZykKK3sKKyAgICBpZiAoY29s
b3IpIHsKKyAgICAgICAgc2V0SW5saW5lQ29sb3IoKmNvbG9yKTsKKyAgICAgICAgdGFnQXNTZW1h
bnRpYygpOworICAgIH0KK30KKworaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xv
cj4mJiBleHRlbmRlZENvbG9yKQoreworICAgIHNldEV4dGVuZGVkQ29sb3IoV1RGTW92ZShleHRl
bmRlZENvbG9yKSk7Cit9CisKK2lubGluZSBDb2xvcjo6Q29sb3IoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGlu
dmFsaWRJbmxpbmVDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxv
b2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRI
YXNoVmFsdWUgJiB2YWxpZElubGluZUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZh
bHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhIHZhbGlkIElubGluZUNvbG9yIik7CisgICAgc3RhdGlj
X2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQgaGFz
aCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIElubGluZUNvbG9yIHdvdWxk
bid0IGhhdmUiKTsKKyAgICBtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID0gZGVsZXRl
ZEhhc2hWYWx1ZTsKKyAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7Cit9CisKK2lubGluZSBDb2xv
cjo6Q29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKK3sKKyAgICBzdGF0aWNfYXNz
ZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZElubGluZUNvbG9yLCAiQ29sb3IncyBlbXB0eSBo
YXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgc3Rh
dGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBJbmxpbmVDb2xvciB3b3Vs
ZG4ndCBoYXZlIik7CisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IGVtcHR5
SGFzaFZhbHVlOworICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKK30KKworaW5saW5lIENvbG9y
Ojp+Q29sb3IoKQoreworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFz
aCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5oYXNoKCk7Ci0gICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5zaW1w
bGVDb2xvckFuZEZsYWdzKTsKKyAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLmlu
bGluZUNvbG9yQW5kRmxhZ3MpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiBD
b2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAg
ICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOwotICAgIHJldHVybiBh
c1NpbXBsZSgpLmFzU1JHQkE8VD4oKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIHVpbnQ4X3Q+KQorICAgICAgICByZXR1cm4gYXNJbmxpbmUoKTsKKyAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0cyhhc0lubGluZSgpKTsKIH0KIAogaW5saW5lIENvbG9yIENvbG9yOjppbnZl
cnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKQEAgLTMwMywz
MCArMzIxLDM5IEBAIGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHQKICAg
ICByZXR1cm4gKm1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3I7CiB9CiAKLWlubGluZSBjb25zdCBT
aW1wbGVDb2xvciBDb2xvcjo6YXNTaW1wbGUoKSBjb25zdAoraW5saW5lIFNSR0JBPHVpbnQ4X3Q+
IENvbG9yOjphc0lubGluZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzU2ltcGxlKCkpOwotICAg
IHJldHVybiBTaW1wbGVDb2xvciB7IGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pIH07Cisg
ICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgIHJldHVybiBhc1NSR0JBKFBhY2tlZDo6UkdCQSB7
IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5pbmxpbmVDb2xvckFuZEZsYWdzID4+
IDMyKSB9KTsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6OnNldFNpbXBsZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yKQoraW5saW5lIHZvaWQgQ29sb3I6OnNldElubGluZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yKQogewotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JBIHsgY29sb3IgfS52YWx1ZSkgPDwgMzI7
CisgICAgbV9jb2xvckRhdGEuaW5saW5lQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihQYWNrZWQ6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlk
KCk7CiB9CiAKK2lubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRl
ZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCit7CisgICAgLy8gWmVybyB0aGUgdW5pb24sIGp1c3Qg
aW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQorICAgIC8vIHRvcCAzMiBi
aXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgIG1f
Y29sb3JEYXRhLmlubGluZUNvbG9yQW5kRmxhZ3MgPSAwOworICAgIG1fY29sb3JEYXRhLmV4dGVu
ZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7CisgICAgQVNTRVJUKGlzRXh0ZW5k
ZWQoKSk7Cit9CisKIGlubGluZSBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBj
b2xvci5hc0V4dGVuZGVkKCkuaXNCbGFjaygpOwotICAgIHJldHVybiBjb2xvci5hc1NpbXBsZSgp
ID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgcmV0dXJuIGNvbG9yLmFzSW5s
aW5lKCkgPT0gQ29sb3I6OmJsYWNrOwogfQogCiBpbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQog
ICAgICAgICByZXR1cm4gY29sb3IuYXNFeHRlbmRlZCgpLmlzV2hpdGUoKTsKLSAgICByZXR1cm4g
Y29sb3IuYXNTaW1wbGUoKSA9PSBTaW1wbGVDb2xvciB7IENvbG9yOjp3aGl0ZSB9OworICAgIHJl
dHVybiBjb2xvci5hc0lubGluZSgpID09IENvbG9yOjp3aGl0ZTsKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KQEAgLTM1NSw3ICszODIsNyBAQCB2b2lkIENvbG9yOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGVuY29kZSB3aGV0aGVy
IHRoZSBjb2xvciBpcyBzZW1hbnRpYy4KIAogICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBlbmNv
ZGVyIDw8IFBhY2tlZDo6UkdCQSB7IGFzU2ltcGxlKCkuYXNTUkdCQTx1aW50OF90PigpIH0udmFs
dWU7CisgICAgZW5jb2RlciA8PCBQYWNrZWQ6OlJHQkEgeyBhc0lubGluZSgpIH0udmFsdWU7CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9u
IDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFs
aXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0vLyBTaW1wbGVDb2xvciBvdmVybG9hZHMKKy8vIFNSR0JBPHVpbnQ4X3Q+
IG92ZXJsb2FkcwogCiBzdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQog
ewpAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRp
Z2l0CiAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKIH0KIAotU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU2ltcGxlQ29sb3IgY29sb3IpCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhTUkdCQTx1
aW50OF90PiBjb2xvcikKIHsKICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0gPSBj
b2xvcjsKICAgICBzd2l0Y2ggKGFscGhhKSB7CkBAIC02NiwxNSArNjYsMTUgQEAgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JDU1MoU2ltcGxlQ29sb3IgYwogICAgIH0KIH0KIAotU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKFNpbXBsZUNvbG9yIGNvbG9yKQorU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhXSA9IGNvbG9yOwotICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKQorICAgIGlmIChh
bHBoYSA9PSAweEZGKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWQsIDIs
IExvd2VyY2FzZSksIGhleChncmVlbiwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWUsIDIsIExvd2Vy
Y2FzZSkpOwogICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKIH0KIAotU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNpbXBsZUNvbG9yIGNvbG9yKQor
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JBPHVpbnQ4X3Q+IGNv
bG9yKQogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOwogICAg
IGlmIChhbHBoYSA8IDB4RkYpCkBAIC0xMjQsMjEgKzEyNCwyMSBAQCBTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyhjb25zdCBDb2xvciYgCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkK
ICAgICAgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNFeHRlbmRlZCgpKTsK
LSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc1NpbXBsZSgpKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0lubGluZSgpKTsKIH0KIAogU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoY29s
b3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29s
b3IuYXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3Iu
YXNTaW1wbGUoKSk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzSW5s
aW5lKCkpOwogfQogCiBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29u
c3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAg
IHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvci5hc0V4dGVuZGVk
KCkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvci5h
c1NpbXBsZSgpKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
Y29sb3IuYXNJbmxpbmUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCShyZXZpc2lvbiAyNjQy
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29sb3I7CiBjbGFzcyBFeHRlbmRlZENvbG9yOwotY2xhc3MgU2ltcGxlQ29s
b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7CiAKIC8vIHNlcmlhbGl6YXRp
b25Gb3JIVE1MIHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1
IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNm
aWxsLWFuZC1zdHJva2Utc3R5bGVzPiAoMTAgU2VwdGVtYmVyIDIwMTUpCiAvLyBzZXJpYWxpemF0
aW9uRm9yQ1NTIHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIENTUwog
Ly8gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQgcmV0dXJucyB0aGUgY29sb3Igc2Vy
aWFsaXplZCBmb3IgRHVtcFJlbmRlclRyZWUsICNSUkdHQkIsICNSUkdHQkJBQSBvciB0aGUgQ1NT
IHNlcmlhbGl6YXRpb24KIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU2ltcGxlQ29sb3IpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKFNpbXBsZUNvbG9yKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChTaW1wbGVDb2xvcik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2Vy
aWFsaXphdGlvbkZvckNTUyhTUkdCQTx1aW50OF90Pik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckhUTUwoU1JHQkE8dWludDhfdD4pOworV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KFNSR0JBPHVpbnQ4X3Q+KTsKIAog
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRXh0ZW5kZWRD
b2xvciYpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0
IEV4dGVuZGVkQ29sb3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTMgKzU4
LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogICAgIHJldHVy
biAhKGEgPT0gYik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaE5vbkFscGhhQ29tcG9uZW50KFNSR0JBPFQ+JiBjb2xvciwgRnVuY3RvciYm
IGYpCi17Ci0gICAgY29sb3IucmVkID0gZihjb2xvci5yZWQpOwotICAgIGNvbG9yLmdyZWVuID0g
Zihjb2xvci5ncmVlbik7Ci0gICAgY29sb3IuYmx1ZSA9IGYoY29sb3IuYmx1ZSk7Ci19Ci0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIHsKICAgICBUIHJlZDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaAkocmV2aXNpb24gMjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMzUgQEAgU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4gcHJl
bXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5wcmVt
dWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAordWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9D
b21wb25lbnRCeXRlKGZsb2F0KTsKKwordWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZs
b2F0KTsKK2NvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90KTsK
KworY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoaW50KTsKK2NvbnN0ZXhw
ciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRGbG9hdChmbG9hdCk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydENvbXBvbmVudEJ5dGVUbyh1aW50OF90KTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydENvbXBvbmVudEZsb2F0VG8oZmxvYXQpOworCit0ZW1wbGF0ZTx0ZW1w
bGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGU8dWludDhfdD4gY29u
dmVydFRvQ29tcG9uZW50Qnl0ZXMoY29uc3QgQ29sb3JUeXBlPGZsb2F0PiYpOwordGVtcGxhdGU8
dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlw
ZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50OF90
PiYpOworCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNsYW1wVG9Db21wb25lbnRCeXRlcyhpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSk7Cit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50
RmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5TW9k
aWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiwgRnVuY3RvciYmKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9y
V2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBo
YSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVy
cmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFs
cGhhKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBo
YSk7CisKK2NvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCk7Citj
b25zdGV4cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKKworCiBpbmxpbmUg
dWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7CiAgICAg
cmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKQEAgLTU0LDYgKzgz
LDExIEBAIGlubGluZSB1aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmwKICAgICByZXR1
cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwgMGwsIDI1NWwpOwogfQogCitj
b25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQorewor
ICAgIHJldHVybiBieXRlIC8gMjU1LjBmOworfQorCiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRv
Q29tcG9uZW50Qnl0ZShpbnQgYykKIHsKICAgICByZXR1cm4gc3RkOjpjbGFtcChjLCAwLCAyNTUp
OwpAQCAtNjQsOSArOTgsMjQgQEAgY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEZs
b2F0KAogICAgIHJldHVybiBzdGQ6OmNsYW1wKGYsIDAuMGYsIDEuMGYpOwogfQogCi1jb25zdGV4
cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQordGVtcGxhdGU8
PiBjb25zdGV4cHIgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4
X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGJ5dGUgLyAyNTUuMGY7CisgICAgcmV0dXJuIHZhbHVl
OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRv
PGZsb2F0Pih1aW50OF90IHZhbHVlKQoreworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydENvbXBv
bmVudEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUodmFsdWUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252
ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4oZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIGNs
YW1wVG9Db21wb25lbnRGbG9hdCh2YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVu
YW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBDb2xvclR5cGU8dWludDhfdD4gY29udmVy
dFRvQ29tcG9uZW50Qnl0ZXMoY29uc3QgQ29sb3JUeXBlPGZsb2F0PiYgY29sb3IpCkBAIC05MSw2
ICsxNDAsNTggQEAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbAogICAg
IHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRGbG9hdChyKSwgY2xhbXBUb0NvbXBvbmVudEZsb2F0
KGcpLCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoYiksIGNsYW1wVG9Db21wb25lbnRGbG9hdChhKSB9
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENv
bG9yVHlwZSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JU
eXBlJiBjb2xvciwgRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIG1hZGUgdG8gd29yayB3aXRoIGNvbG9ycyB0aGF0IGRvbid0IHVzZSB0aGUgbmFtZXMg
cmVkLCBncmVlbiwgYW5kIGJsdWUgZm9yIHRoZWlyIGNoYW5uZWxzLgorICAgIGF1dG8gY29weSA9
IGNvbG9yOworICAgIGNvcHkucmVkID0gZnVuY3Rvcihjb2xvci5yZWQpOworICAgIGNvcHkuZ3Jl
ZW4gPSBmdW5jdG9yKGNvbG9yLmdyZWVuKTsKKyAgICBjb3B5LmJsdWUgPSBmdW5jdG9yKGNvbG9y
LmJsdWUpOworICAgIHJldHVybiBjb3B5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29s
b3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQoreworICAgIENvbG9yVHlwZSBj
b3B5ID0gY29sb3I7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVj
bHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVybiBjb3B5OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlk
ZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQorewor
ICAgIENvbG9yVHlwZSBjb3B5ID0gY29sb3I7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21w
b25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICBy
ZXR1cm4gY29weTsKK30KKworY29uc3RleHByIHVpbnQ4X3QgaW52ZXJ0Q29tcG9uZW50KHVpbnQ4
X3QgY29tcG9uZW50KQoreworICAgIHJldHVybiAyNTUgLSBjb21wb25lbnQ7Cit9CisKK2NvbnN0
ZXhwciBmbG9hdCBpbnZlcnRDb21wb25lbnQoZmxvYXQgY29tcG9uZW50KQoreworICAgIHJldHVy
biAxLjBmIC0gY29tcG9uZW50OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNv
bnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBD
b2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCit7CisgICAgYXV0byBjb3B5
ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbXSAoYXV0byBj
b21wb25lbnQpIHsKKyAgICAgICAgcmV0dXJuIGludmVydENvbXBvbmVudChjb21wb25lbnQpOwor
ICAgIH0pOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBl
KGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVy
cmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQor
eworICAgIGF1dG8gY29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChj
b2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7CisgICAgICAgIHJldHVybiBpbnZlcnRDb21wb25l
bnQoY29tcG9uZW50KTsKKyAgICB9KTsKKyAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVu
dEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIHJldHVy
biBjb3B5OworfQorCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2
X3QgdmFsdWUpCiB7CiAgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3OCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ29sb3JCdWlsZGVyLmgiCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAj
aW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNv
bnN0ZXhwciBleHBsaWNpdCBTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiB2YWx1ZSkgOiBtX3Zh
bHVlIHsgdmFsdWUgfSB7IH0KLQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5hbHBoYTsgfQotICAgIGNvbnN0ZXhwciBmbG9hdCBh
bHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChtX3ZhbHVlLmFscGhhKTsgfQotCi0gICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhID09IDB4RkY7IH0KLSAgICBjb25zdGV4cHIgYm9v
bCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmFscGhhOyB9Ci0KLSAgICBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB7IG1fdmFsdWUucmVkLCBtX3ZhbHVlLmdyZWVuLCBtX3ZhbHVl
LmJsdWUsIGFscGhhIH07Ci0gICAgfQotCi0gICAgY29uc3RleHByIFNpbXBsZUNvbG9yIGludmVy
dGVkQ29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLnJlZCksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYgLSBtX3ZhbHVlLmdyZWVuKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
MHhGRiAtIG1fdmFsdWUuYmx1ZSksIGFscGhhIH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKG1fdmFsdWUpOwotICAgICAgICBlbHNlIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICByZXR1
cm4gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgotICAgIGNv
bnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0
KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlLnJlZDsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlLmdyZWVuOwotICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9
PSAyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYmx1ZTsKLSAgICAgICAgZWxzZSBpZiBj
b25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFscGhhOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IodWludDhfdCByLCB1aW50
OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKSA6IG1fdmFsdWUgeyByLCBnLCBiLCBhIH0geyB9
Ci0KLSAgICBTUkdCQTx1aW50OF90PiBtX3ZhbHVlIHsgMCwgMCwgMCwgMCB9OwotfTsKLQotYm9v
bCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7Ci1ib29sIG9wZXJhdG9yIT0o
U2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShTaW1w
bGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiBhLmFzU1JHQkE8dWludDhf
dD4oKSA9PSBiLmFzU1JHQkE8dWludDhfdD4oKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7
Ci19Ci0KLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVD
b2xvcihpbnQgciwgaW50IGcsIGludCBiKTsKLWNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci1j
b25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoU1JH
QkE8dWludDhfdD4pOwotQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29s
b3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KIGNvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIDB4RkYpOwpAQCAtMTE5
LDE1ICs1MiwzIEBAIGlubGluZSBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IG1ha2UKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8
PiBjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OlNpbXBsZUNvbG9yPiA6IHB1YmxpYyBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Ci19OwotCi10ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPiBjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OlNpbXBsZUNvbG9yPiB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgdHlwZSA9IHVpbnQ4X3Q7Ci19OwotCi19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjY0MjAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1MSwxMyBAQCBSZXRhaW5QdHI8Q0dDb2xvclJl
Zj4gVGlueUxSVUNhY2hlUG9saWN5CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFNS
R0JBPHVpbnQ4X3Q+IG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKENHQ29sb3JSZWYgY29sb3Ip
CitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHJvdW5kQW5kQ2xhbXBUb1NSR0JBTG9z
c3koQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5l
ZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCiAKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9y
R2V0TnVtYmVyT2ZDb21wb25lbnRzKGNvbG9yKTsKICAgICBjb25zdCBDR0Zsb2F0KiBjb21wb25l
bnRzID0gQ0dDb2xvckdldENvbXBvbmVudHMoY29sb3IpOwogCkBAIC03OCwzMiArODEsMTcgQEAg
c3RhdGljIFNSR0JBPHVpbnQ4X3Q+IG1ha2VTaW1wbGVDb2xvckZybwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNSR0JB
IHsgciwgZywgYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JH
QkEgeyByLCBnLCBiLCBhIH0pOwogfQogCiBDb2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
KyAgICA6IENvbG9yKHJvdW5kQW5kQ2xhbXBUb1NSR0JBTG9zc3koY29sb3IpKQogewotICAgIC8v
IEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLQot
ICAgIGlmICghY29sb3IpIHsKLSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyA9IGludmFsaWRTaW1wbGVDb2xvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNl
dFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSk7CiB9CiAKLUNv
bG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZykKK0NvbG9yOjpDb2xvcihD
R0NvbG9yUmVmIGNvbG9yLCBTZW1hbnRpY1RhZyB0YWcpCisgICAgOiBDb2xvcihyb3VuZEFuZENs
YW1wVG9TUkdCQUxvc3N5KGNvbG9yKSwgdGFnKQogewotICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLQotICAgIGlmICghY29sb3IpIHsK
LSAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IGludmFsaWRTaW1wbGVD
b2xvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VT
aW1wbGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSk7Ci0gICAgdGFnQXNTZW1hbnRpYygpOwogfQog
CiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0x
MjgsOCArMTE2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sbwog
CiBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChjb2xvci5pc1NpbXBsZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29s
b3IuYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZSkgeworICAgIGlmIChjb2xv
ci5pc0lubGluZSgpKSB7CisgICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJ
bmxpbmUoKSB9LnZhbHVlKSB7CiAgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRy
YW5zcGFyZW50IH0udmFsdWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5z
cGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiB0
cmFuc3BhcmVudENHQ29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lv
biAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwyMCArMTU4LDIwIEBAIGJv
b2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBJTlZFUlQ6IHsKICAgICAgICAgZmxvYXQgb25lTWludXNBbW91bnQgPSAx
LjBmIC0gbV9hbW91bnQ7Ci0gICAgICAgIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwg
WyZdKGZsb2F0IGNvbXBvbmVudCkgeworICAgICAgICBjb2xvciA9IGNvbG9yQnlNb2RpZmluZ0Vh
Y2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgWyZdKGZsb2F0IGNvbXBvbmVudCkgewogICAgICAg
ICAgICAgcmV0dXJuIDEuMGYgLSAob25lTWludXNBbW91bnQgKyBjb21wb25lbnQgKiAobV9hbW91
bnQgLSBvbmVNaW51c0Ftb3VudCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGNhc2UgQ09OVFJBU1Q6IHsKICAgICAgICAgZmxvYXQgaW50ZXJjZXB0ID0g
LSgwLjVmICogbV9hbW91bnQpICsgMC41ZjsKLSAgICAgICAgZm9yRWFjaE5vbkFscGhhQ29tcG9u
ZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNvbG9yID0gY29sb3JC
eU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50
KSB7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpjbGFtcDxmbG9hdD4oaW50ZXJjZXB0ICsgbV9h
bW91bnQgKiBjb21wb25lbnQsIDAuMGYsIDEuMGYpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgQlJJR0hUTkVTUzoKLSAgICAgICAgZm9yRWFjaE5v
bkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7CisgICAgICAgIGNv
bG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxv
YXQgY29tcG9uZW50KSB7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1v
dW50ICogY29tcG9uZW50LCAwLjBmKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwCShyZXZpc2lvbiAyNjQyMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGNvbG9y
KQogewotICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5h
bHBoYSkgfSkpOworICAgIHNldElubGluZUNvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNS
R0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29sb3JNYWMubW0JKHJldmlzaW9uIDI2NDIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw4
IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICoKIAogTlNDb2xvciAq
bnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzU2ltcGxlKCkp
IHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWQ6OlJHQkEgeyBjb2xvci5hc1NpbXBsZSgpLmFzU1JH
QkE8dWludDhfdD4oKSB9LnZhbHVlKSB7CisgICAgaWYgKGNvbG9yLmlzSW5saW5lKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChQYWNrZWQ6OlJHQkEgeyBjb2xvci5hc0lubGluZSgpIH0udmFsdWUpIHsK
ICAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTog
ewogICAgICAgICAgICAgc3RhdGljIE5TQ29sb3IgKmNsZWFyQ29sb3IgPSBbW05TQ29sb3IgY29s
b3JXaXRoU1JHQlJlZDowIGdyZWVuOjAgYmx1ZTowIGFscGhhOjBdIHJldGFpbl07CiAgICAgICAg
ICAgICByZXR1cm4gY2xlYXJDb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2NDIw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCiB7Ci0gICAgc2V0U2ltcGxlQ29s
b3IobWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29s
b3IuYSB9KSk7CisgICAgc2V0SW5saW5lQ29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JH
QkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pKTsKIH0KIAogQ29sb3I6
Om9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>