<?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>213635</bug_id>
          
          <creation_ts>2020-06-25 20:49:05 -0700</creation_ts>
          <short_desc>Convert SVG related parsers over to using StringParsingBuffer</short_desc>
          <delta_ts>2020-06-28 12:54:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>213460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666360</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 20:49:05 -0700</bug_when>
    <thetext>Convert SVG related parsers over to using StringParsingBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666361</commentid>
    <comment_count>1</comment_count>
      <attachid>402846</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-25 20:52:49 -0700</bug_when>
    <thetext>Created attachment 402846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666459</commentid>
    <comment_count>2</comment_count>
      <attachid>402867</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 08:40:35 -0700</bug_when>
    <thetext>Created attachment 402867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666620</commentid>
    <comment_count>3</comment_count>
      <attachid>402906</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 14:43:44 -0700</bug_when>
    <thetext>Created attachment 402906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666637</commentid>
    <comment_count>4</comment_count>
      <attachid>402906</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-06-26 15:10:24 -0700</bug_when>
    <thetext>Comment on attachment 402906
Patch

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

&gt; Source/WebCore/svg/SVGLengthList.cpp:75
&gt; +String SVGLengthList::valueAsString() const
&gt; +{
&gt; +    StringBuilder builder;
&gt; +
&gt; +    for (const auto&amp; length : m_items) {
&gt; +        if (builder.length())
&gt; +            builder.append(&apos; &apos;);
&gt; +
&gt; +        builder.append(length-&gt;value().valueAsString());
&gt; +    }
&gt; +
&gt; +    return builder.toString();
&gt; +}

Since you are moving this function and others similar to it from the header files to cpp files, I would suggest removing all the valueAsString() methods from the SVG list classes and implement:

1. SVGValuePropertyList::valueAsString() 
2. SVGPrimitiveList::valueAsString(). 

The loop in these two functions will the same as this one. The only difference is:

1. SVGValuePropertyList will append item-&gt;valueAsString() 
2. SVGPrimitiveList will append SVGPropertyTraits&lt;PropertyType&gt;::toString(item). 

This will remove the duplicate code and will make the cpp files mainly for parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666657</commentid>
    <comment_count>5</comment_count>
      <attachid>402906</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-26 15:49:29 -0700</bug_when>
    <thetext>Comment on attachment 402906
Patch

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

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:81
&gt; +static Optional&lt;Vector&lt;UnitBezier&gt;&gt; parseKeySplines(const StringView&amp; string)

Shouldn&apos;t we prefer StringView over const StringView&amp;?

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:84
&gt; +    if (string.isEmpty())
&gt;          return WTF::nullopt;

Is this a valuable optimization? I don’t think it is. Or is it needed for correctness.

&gt; Source/WebCore/svg/SVGFitToViewBox.cpp:88
&gt;  Optional&lt;FloatRect&gt; SVGFitToViewBox::parseViewBox(const StringView&amp; value)

Shouldn&apos;t we prefer StringView over const StringView&amp;?

&gt; Source/WebCore/svg/SVGLengthList.h:55
&gt; +    bool parse(const String&amp; value);

Any downside in changing this to take StringView?

&gt; Source/WebCore/svg/SVGLengthValue.cpp:71
&gt; +    auto firstChar = *buffer;
&gt; +    ++buffer;

Why not *buffer++?

&gt; Source/WebCore/svg/SVGLengthValue.cpp:77
&gt; +    auto secondChar = *buffer;
&gt; +    ++buffer;

Ditto.

&gt; Source/WebCore/svg/SVGLengthValue.h:66
&gt; +    static Optional&lt;SVGLengthValue&gt; construct(SVGLengthMode, const StringView&amp;);
&gt; +    static SVGLengthValue construct(SVGLengthMode, const StringView&amp;, SVGParsingError&amp;, SVGLengthNegativeValuesMode = SVGLengthNegativeValuesMode::Allow);

StringView instead of const StringView&amp;?

&gt; Source/WebCore/svg/SVGLengthValue.h:90
&gt; +    ExceptionOr&lt;void&gt; setValueAsString(const StringView&amp;);
&gt; +    ExceptionOr&lt;void&gt; setValueAsString(const StringView&amp;, SVGLengthMode);

StringView instead of const StringView&amp;?

&gt; Source/WebCore/svg/SVGNumberList.cpp:65
&gt; +    StringBuilder builder;
&gt; +
&gt; +    for (const auto&amp; number : m_items) {
&gt; +        if (builder.length())
&gt; +            builder.append(&apos; &apos;);
&gt; +
&gt; +        builder.append(number-&gt;value());
&gt; +    }
&gt; +
&gt; +    return builder.toString();

Another idiom we should find a way to improve. I don’t like how we have to write these join loops.

&gt; Source/WebCore/svg/SVGNumberList.h:53
&gt; +    bool parse(const String&amp;);

StringView?

&gt; Source/WebCore/svg/SVGNumberList.h:54
&gt; +    String valueAsString() const override;

final?

&gt; Source/WebCore/svg/SVGParserUtilities.cpp:117
&gt; +            exponent += *buffer - &apos;0&apos;;
&gt; +            ++buffer;

*buffer++?

&gt; Source/WebCore/svg/SVGPathSource.h:22
&gt; +#include &quot;FloatPoint.h&quot;

Makes me a tiny bit sad. Not sure what made this happen.

&gt; Source/WebCore/svg/SVGPathStringSource.h:49
&gt; +    template&lt;typename F&gt; decltype(auto) parse(F&amp;&amp;);

I’d prefer a word rather than &quot;F&quot;. Is this a function?

&gt; Source/WebCore/svg/SVGPointList.h:53
&gt; +    bool parse(const String&amp; value);

StringView?

&gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.cpp:365
&gt; +        case SVG_PRESERVEASPECTRATIO_NONE:
&gt; +            return &quot;none&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMIN:
&gt; +            return &quot;xMinYMin&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMIN:
&gt; +            return &quot;xMidYMin&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMIN:
&gt; +            return &quot;xMaxYMin&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMID:
&gt; +            return &quot;xMinYMid&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMID:
&gt; +            return &quot;xMidYMid&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMID:
&gt; +            return &quot;xMaxYMid&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMAX:
&gt; +            return &quot;xMinYMax&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMAX:
&gt; +            return &quot;xMidYMax&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMAX:
&gt; +            return &quot;xMaxYMax&quot;;
&gt; +        case SVG_PRESERVEASPECTRATIO_UNKNOWN:
&gt; +            return &quot;unknown&quot;;

Want some &quot;_s&quot; here I think. Unless the ASCIILiteral optimization is unimportant.

&gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:55
&gt; +    SVGPreserveAspectRatioValue(const StringView&amp;);

StringView rather than const StringView&amp;?

&gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:67
&gt; +    bool parse(const StringView&amp;);

StringView rather than const StringView&amp;?

&gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:78
&gt; +    template&lt;typename CharacterType&gt;
&gt; +    bool parseInternal(StringParsingBuffer&lt;CharacterType&gt;&amp;, bool validate);

On one line?

&gt; Source/WebCore/svg/SVGStringList.h:54
&gt; +    bool parse(const String&amp; data, UChar delimiter);

StringView

&gt; Source/WebCore/svg/SVGTransformList.cpp:59
&gt; +    for (const auto&amp; transform : m_items)

I would have omitted the const here.

&gt; Source/WebCore/svg/SVGTransformList.h:61
&gt; +    void parse(const String&amp;);

StringView

&gt; Source/WebCore/svg/SVGTransformable.cpp:100
&gt; +constexpr int requiredValuesForType[] =  {0, 6, 1, 1, 1, 1, 1};
&gt; +constexpr int optionalValuesForType[] =  {0, 0, 1, 1, 2, 0, 0};

Remove the extra space before &quot;{&quot;?

Not sure we should have removed static. Because constexpr does imply const, but not necessarily internal linkage. Unclear on the considerations.

&gt; Source/WebCore/svg/SVGTransformable.h:37
&gt; +    static Optional&lt;SVGTransformValue::SVGTransformType&gt; parseTransformType(const StringView&amp;);

StringView rather than const StringView&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666664</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 16:08:22 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #4)
&gt; Comment on attachment 402906 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402906&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthList.cpp:75
&gt; &gt; +String SVGLengthList::valueAsString() const
&gt; &gt; +{
&gt; &gt; +    StringBuilder builder;
&gt; &gt; +
&gt; &gt; +    for (const auto&amp; length : m_items) {
&gt; &gt; +        if (builder.length())
&gt; &gt; +            builder.append(&apos; &apos;);
&gt; &gt; +
&gt; &gt; +        builder.append(length-&gt;value().valueAsString());
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return builder.toString();
&gt; &gt; +}
&gt; 
&gt; Since you are moving this function and others similar to it from the header
&gt; files to cpp files, I would suggest removing all the valueAsString() methods
&gt; from the SVG list classes and implement:
&gt; 
&gt; 1. SVGValuePropertyList::valueAsString() 
&gt; 2. SVGPrimitiveList::valueAsString(). 
&gt; 
&gt; The loop in these two functions will the same as this one. The only
&gt; difference is:
&gt; 
&gt; 1. SVGValuePropertyList will append item-&gt;valueAsString() 
&gt; 2. SVGPrimitiveList will append
&gt; SVGPropertyTraits&lt;PropertyType&gt;::toString(item). 
&gt; 
&gt; This will remove the duplicate code and will make the cpp files mainly for
&gt; parsing.

I am not really convinced this is worth it. Doing this for all the classes would cause a pessimization of SVGNumberList and SVGPointList due to unnecessary extra allocations of Strings. 

There might be ways to avoid this, but I am not sure it is worth the complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666705</commentid>
    <comment_count>7</comment_count>
      <attachid>402936</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 18:10:22 -0700</bug_when>
    <thetext>Created attachment 402936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666711</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 18:49:44 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 402906 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402906&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimationElement.cpp:81
&gt; &gt; +static Optional&lt;Vector&lt;UnitBezier&gt;&gt; parseKeySplines(const StringView&amp; string)
&gt; 
&gt; Shouldn&apos;t we prefer StringView over const StringView&amp;?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimationElement.cpp:84
&gt; &gt; +    if (string.isEmpty())
&gt; &gt;          return WTF::nullopt;
&gt; 
&gt; Is this a valuable optimization? I don’t think it is. Or is it needed for
&gt; correctness.

It&apos;s needed for correctness (or at least, to preserve the current behavior).

&gt; 
&gt; &gt; Source/WebCore/svg/SVGFitToViewBox.cpp:88
&gt; &gt;  Optional&lt;FloatRect&gt; SVGFitToViewBox::parseViewBox(const StringView&amp; value)
&gt; 
&gt; Shouldn&apos;t we prefer StringView over const StringView&amp;?

Fixed,

&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthList.h:55
&gt; &gt; +    bool parse(const String&amp; value);
&gt; 
&gt; Any downside in changing this to take StringView?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthValue.cpp:71
&gt; &gt; +    auto firstChar = *buffer;
&gt; &gt; +    ++buffer;
&gt; 
&gt; Why not *buffer++?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthValue.cpp:77
&gt; &gt; +    auto secondChar = *buffer;
&gt; &gt; +    ++buffer;
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthValue.h:66
&gt; &gt; +    static Optional&lt;SVGLengthValue&gt; construct(SVGLengthMode, const StringView&amp;);
&gt; &gt; +    static SVGLengthValue construct(SVGLengthMode, const StringView&amp;, SVGParsingError&amp;, SVGLengthNegativeValuesMode = SVGLengthNegativeValuesMode::Allow);
&gt; 
&gt; StringView instead of const StringView&amp;?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGLengthValue.h:90
&gt; &gt; +    ExceptionOr&lt;void&gt; setValueAsString(const StringView&amp;);
&gt; &gt; +    ExceptionOr&lt;void&gt; setValueAsString(const StringView&amp;, SVGLengthMode);
&gt; 
&gt; StringView instead of const StringView&amp;?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGNumberList.cpp:65
&gt; &gt; +    StringBuilder builder;
&gt; &gt; +
&gt; &gt; +    for (const auto&amp; number : m_items) {
&gt; &gt; +        if (builder.length())
&gt; &gt; +            builder.append(&apos; &apos;);
&gt; &gt; +
&gt; &gt; +        builder.append(number-&gt;value());
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return builder.toString();
&gt; 
&gt; Another idiom we should find a way to improve. I don’t like how we have to
&gt; write these join loops.

Yeah :(. This has been on my mind since I did the variadic append work a while back. I would like to solve it by generalizing StringTypeAdapter to be able to work in a lazier manner in some cases. Currently, StringTypeAdapter really wants to know the total length and is8Bit state upfront, or have you compute them potentially multiple times. A naive solution would end up looking something like this:


builder.append(Join(m_items, &apos; &apos;, [](auto itemToTransform) { itemToTransform-&gt;value() }));

for:

template&lt;typename List, typename Delimiter, typename ListTransformer&gt;
struct Join {
    List&amp; list;
    Delimiter delimiter;
    ListTransformer&amp; listTransformer;
};


template&lt;typename List, typename Delimiter, typename ListTransformer&gt; class StringTypeAdapter&lt;Join&lt;List, Delimiter, ListTransformer&gt;&gt; {
public:
    StringTypeAdapter(const Join&lt;List, Delimiter, ListTransformer&gt;&amp; join)
        : m_join { join }
        , m_delimiterAdapter { m_join.delimiter }
    {
        unsigned numberOfItems = std::size(m_join.list);
        unsigned numberOfDelimiters = numberOfItems &gt; 1 ? numberOfItems - 1 : 0;
        
        m_length = numberOfDelimiters * m_delimiterAdapter.length();
        m_is8Bit = m_delimiterAdapter.is8Bit();

        for (auto&amp; item : m_join.list) {
            auto transformedItem = m_join.listTransformer(item);
            StringTypeAdapter&lt;decltype(transformedItem)&gt; adaptor { transformedItem };
            m_length += adaptor.length();
            if (m_is8Bit &amp;&amp; !adaptor.is8Bit())
                m_is8Bit = false;
        }
    }

    unsigned length() const { return m_length; }
    bool is8Bit() const { return m_is8Bit; }
    template&lt;typename CharacterType&gt; void writeTo(CharacterType* destination) const
    {
        bool firstIteration = true;
        for (auto&amp; item : m_join.list) {
            if (!firstIteration) {
                m_delimiterAdapter.writeTo(destination);
                destination += m_delimiterAdapter.length();
            }

            auto transformedItem = m_join.listTransformer(item);
            StringTypeAdapter&lt;decltype(transformedItem)&gt; adaptor { transformedItem };
            m_delimiterAdapter.writeTo(destination);
            destination += adaptor.length();
        }
    }

private:
    const Join&lt;List, Delimiter, ListTransformer&gt;&amp; m_join;
    StringTypeAdapter&lt;Delimiter&gt; m_delimiterAdapter;
    unsigned m_length;
    bool m_is8Bit;
};


(I could also see a version where the adaptor stored a Vector&lt;StringTypeAdapter&lt;decltype(m_join.listTransformer(m_join.list[0]))&gt;&gt;&gt;)

Which leads to the question whether the avoidance of resizes of the StringBuilder storage is worth iterating the loop multiple times.

Other option would be to just add a StringBuilder::appendByJoining(Container&amp;, Delimiter&amp;, Transformer&amp;), Maybe that would be a good improvement even if not perfect.


&gt; 
&gt; &gt; Source/WebCore/svg/SVGNumberList.h:53
&gt; &gt; +    bool parse(const String&amp;);
&gt; 
&gt; StringView?


Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGNumberList.h:54
&gt; &gt; +    String valueAsString() const override;
&gt; 
&gt; final?

Made the class final, since it wasn&apos;t but should be. Is our style to use final on functions as well as the class? I can&apos;t recall.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGParserUtilities.cpp:117
&gt; &gt; +            exponent += *buffer - &apos;0&apos;;
&gt; &gt; +            ++buffer;
&gt; 
&gt; *buffer++?

Fixed,

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPathSource.h:22
&gt; &gt; +#include &quot;FloatPoint.h&quot;
&gt; 
&gt; Makes me a tiny bit sad. Not sure what made this happen.

Removed a different #include &quot;FloatPoint.h&quot;. The header has FloatPoint member variables, so it&apos;s hard to avoid.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPathStringSource.h:49
&gt; &gt; +    template&lt;typename F&gt; decltype(auto) parse(F&amp;&amp;);
&gt; 
&gt; I’d prefer a word rather than &quot;F&quot;. Is this a function?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPointList.h:53
&gt; &gt; +    bool parse(const String&amp; value);
&gt; 
&gt; StringView?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.cpp:365
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_NONE:
&gt; &gt; +            return &quot;none&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMIN:
&gt; &gt; +            return &quot;xMinYMin&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMIN:
&gt; &gt; +            return &quot;xMidYMin&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMIN:
&gt; &gt; +            return &quot;xMaxYMin&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMID:
&gt; &gt; +            return &quot;xMinYMid&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMID:
&gt; &gt; +            return &quot;xMidYMid&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMID:
&gt; &gt; +            return &quot;xMaxYMid&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMINYMAX:
&gt; &gt; +            return &quot;xMinYMax&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMIDYMAX:
&gt; &gt; +            return &quot;xMidYMax&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_XMAXYMAX:
&gt; &gt; +            return &quot;xMaxYMax&quot;;
&gt; &gt; +        case SVG_PRESERVEASPECTRATIO_UNKNOWN:
&gt; &gt; +            return &quot;unknown&quot;;
&gt; 
&gt; Want some &quot;_s&quot; here I think. Unless the ASCIILiteral optimization is
&gt; unimportant.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:55
&gt; &gt; +    SVGPreserveAspectRatioValue(const StringView&amp;);
&gt; 
&gt; StringView rather than const StringView&amp;?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:67
&gt; &gt; +    bool parse(const StringView&amp;);
&gt; 
&gt; StringView rather than const StringView&amp;?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPreserveAspectRatioValue.h:78
&gt; &gt; +    template&lt;typename CharacterType&gt;
&gt; &gt; +    bool parseInternal(StringParsingBuffer&lt;CharacterType&gt;&amp;, bool validate);
&gt; 
&gt; On one line?

Fixed. Drat. Thought I caught all of them.


&gt; 
&gt; &gt; Source/WebCore/svg/SVGStringList.h:54
&gt; &gt; +    bool parse(const String&amp; data, UChar delimiter);
&gt; 
&gt; StringView

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGTransformList.cpp:59
&gt; &gt; +    for (const auto&amp; transform : m_items)
&gt; 
&gt; I would have omitted the const here.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGTransformList.h:61
&gt; &gt; +    void parse(const String&amp;);
&gt; 
&gt; StringView

Fixed,

&gt; 
&gt; &gt; Source/WebCore/svg/SVGTransformable.cpp:100
&gt; &gt; +constexpr int requiredValuesForType[] =  {0, 6, 1, 1, 1, 1, 1};
&gt; &gt; +constexpr int optionalValuesForType[] =  {0, 0, 1, 1, 2, 0, 0};
&gt; 
&gt; Remove the extra space before &quot;{&quot;?
&gt; 
&gt; Not sure we should have removed static. Because constexpr does imply const,
&gt; but not necessarily internal linkage. Unclear on the considerations.

Will add back.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGTransformable.h:37
&gt; &gt; +    static Optional&lt;SVGTransformValue::SVGTransformType&gt; parseTransformType(const StringView&amp;);
&gt; 
&gt; StringView rather than const StringView&amp;?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666712</commentid>
    <comment_count>9</comment_count>
      <attachid>402938</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-26 18:50:18 -0700</bug_when>
    <thetext>Created attachment 402938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666759</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-27 08:29:36 -0700</bug_when>
    <thetext>Committed r263617: &lt;https://trac.webkit.org/changeset/263617&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402938.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666760</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-27 08:30:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/64843777&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666898</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-28 12:54:09 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; &gt; &gt; Source/WebCore/svg/SVGNumberList.h:54
&gt; &gt; &gt; +    String valueAsString() const override;
&gt; &gt; 
&gt; &gt; final?
&gt; 
&gt; Made the class final, since it wasn&apos;t but should be. Is our style to use
&gt; final on functions as well as the class?

It is.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402846</attachid>
            <date>2020-06-25 20:52:49 -0700</date>
            <delta_ts>2020-06-26 08:40:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213635-20200625205248.patch</filename>
            <type>text/plain</type>
            <size>135722</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wNi0yNSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBTVkcgcmVsYXRlZCBw
YXJzZXJzIG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIEhlYWRl
cnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGls
aXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90QVNDSUlTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJQcmVkaWNh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFVudGlsKToKKyAgICAgICAgKFdlYkNvcmU6OnNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcENoYXJh
Y3RlcnNFeGFjdGx5KToKKyAgICAgICAgKiBzdmcvU1ZHQW5nbGVWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUFuZ2xlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmdsZVZh
bHVlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGluZXMpOgorICAgICAgICAqIHN2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZp
ZXdCb3hHZW5lcmljKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6CisgICAgICAg
ICogc3ZnL1NWR0xlbmd0aExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xl
bmd0aExpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnZhbHVl
QXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGVuZ3RoVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBz
dmcvU1ZHTGVuZ3RoVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpT
VkdMZW5ndGhWYWx1ZSk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR051bWJlckxpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR051bWJlckxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdOdW1iZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQ
YXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6aXNTVkdTcGFjZU9yQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhTdHJpbmdTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpoYXNNb3JlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1h
bmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5l
VG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9pbnRMaXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBhcnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR1BvaW50TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJz
ZSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6Cisg
ICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0cmluZ0xpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0cmluZ0xpc3Q6
OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdTdHJpbmdMaXN0Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RyYW5zZm9ybUxpc3Q6OmNvbnNvbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybUxpc3Q6OnBhcnNlR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1MaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0Ojp2
YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgor
ICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlVHJhbnNmb3JtUGFyYW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3Jt
VmFsdWVHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1UeXBlR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lw
VHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHVmlld1NwZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6
OnBhcnNlVmlld1NwZWMpOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5oOgorICAgICAgICAq
IHN2Zy9TVkdab29tQW5kUGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBh
bkdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5k
UGFuKToKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBhbi5oOgorCiAyMDIwLTA2LTI1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVT
U0lPTihyMjU2MTY2LCByMjYwNTk2KSBXS05hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5hbGxIVFRQ
SGVhZGVyRmllbGRzIG5lZWRzIHRvIGNvbnRhaW4gVXNlci1BZ2VudCBhbmQgQWNjZXB0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9h
ZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjU0MCw2ICsyNTQwLDcgQEAgc3ZnL1NWR0hLZXJu
RWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VMb2FkZXIu
Y3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKK3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAogc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDksNiArMjU1MCw3IEBAIHN2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVu
dC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3ZnL1NWR051bWJlckxpc3Qu
Y3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAog
c3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2Myw2ICsyNTY1LDcgQEAgc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKIHN2
Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAorc3ZnL1NW
R1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5Z29uRWxl
bWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCkBAIC0yNTczLDYgKzI1NzYsNyBA
QCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAogc3ZnL1NW
R1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCitzdmcvU1ZHU3RyaW5nTGlz
dC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCiBzdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAK
IHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAtMjU4Niw2ICsyNTkwLDcgQEAgc3ZnL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAogc3ZnL1NW
R1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCitz
dmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAogc3ZnL1NW
R1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtub3duRWxlbWVudC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU5MCw3ICsxNTkwLDcgQEAKIAkJNTMyMDQyMDIx
RjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIz
NCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07CiAJCTUzNTFENEIxMURGOTE2QjQw
MDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFDMDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNkQ1QTIw
MTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5M0UxOEU5MDBDRTRDQUIgLyog
SFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyog
UGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAq
LzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkz
RThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM4RUM4MDIxRjk2QUY4MTAwNEQyMkE4IC8q
IFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAg
Ki87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0Yz
MUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSAqLzsgfTsKIAkJNTM4RUM4
MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0VFMUY5NkFBNTYwMDREMjJBOCAv
KiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBAIC0xMDE5Niw2ICsxMDE5NiwxMSBAQAogCQk3
Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3
RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDcw
QzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5ndGhMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3
MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVtYmVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NE
NzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3
MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NE
NzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAvKiBTZXR0aW5ncy55YW1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxlRGVjbGFyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0UxOTE0NzFGMkE5OEFGMDAyNzJGNzgg
LyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
ZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE0NSw2
ICsyNTE1MCw3IEBACiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5p
ZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQu
Y3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMwMDcyMDMxMiAvKiBTVkdMZW5ndGhDb250ZXh0
LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNWR0xlbmd0aExpc3QuY3Bw
ICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggKi8s
CiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aExpc3QuaWRsICovLAog
CQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAvKiBTVkdMZW5ndGhWYWx1ZS5jcHAgKi8sCkBA
IC0yNTE3Nyw2ICsyNTE4Myw3IEBACiAJCQkJNDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNW
R01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNW
R051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXIu
aWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBTVkdOdW1iZXJMaXN0LmNw
cCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oICov
LAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmlkbCAqLywK
IAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCAq
LywKQEAgLTI1MjQwLDYgKzI1MjQ3LDcgQEAKIAkJCQlCMjIyNzhGMzBEMDBCRjIxMDA3MUI3ODIg
LyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDQ5MURENjRBNUIwMDEyODU1
MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3OEY0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQ
b2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlz
dC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5o
ICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2ludExpc3QuaWRsICov
LAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2x5RWxlbWVudC5jcHAgKi8s
CkBAIC0yNTI3Myw2ICsyNTI4MSw3IEBACiAJCQkJQjIyMjc5MTIwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzkxMzBEMDBCRjIxMDA3MUI3ODIgLyog
U1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzkxNDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZH
U3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcwQzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdT
dHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkxNjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3Ry
aW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdM
aXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVt
ZW50LmNwcCAqLywKQEAgLTI1MzE0LDYgKzI1MzIzLDcgQEAKIAkJCQlCMjIyNzk0NDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIyMjI3OTQ2MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8sCiAJCQkJQjIyMjc5NDcwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8sCisJCQkJN0NENzBDNDYy
NEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICovLAogCQkJCUIyMjI3OTQ5
MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggKi8sCiAJCQkJQjIyMjc5NEEw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxpc3QuaWRsICovLAogCQkJCTdDRTU4RDU2
MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1ZS5oICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENoYXJUeXBlIGMpCiB7CiAg
ICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNraXBFeGFjdGx5KGNvbnN0
IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUg
ZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gZGVs
aW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1MCwxNiBAQCBib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK2Jv
b2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZm
ZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSBkZWxpbWl0ZXIpIHsK
KyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBj
aGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNTksMTMgKzcwLDMw
IEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotdm9pZCBza2lwVW50aWwo
Y29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUg
ZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJl
ZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcGFyc2luZ0J1ZmZlcikp
IHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlw
ZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQogewog
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1pdGVyKQogICAg
ICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5h
bWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
clR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdC
dWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+
CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlw
ZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJU
eXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hh
cmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdoaWxlIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVyUHJlZGljYXRlKCpwYXJz
aW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogdm9pZCBz
a2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkK
IHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3Np
dGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0
ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcGFyc2luZ0J1
ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZvaWQgcmV2ZXJz
ZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogc3Rh
cnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNoYXJhY3RlclByZWRpY2F0
ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCw0MSBAQCBib29sIHNraXBFeGFjdGx5SWdub3Jp
bmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsgbG93ZXJjYXNlTGV0dGVy
c0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9z
aXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMp
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0ZXJz
TGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+Citib29sIHNraXBFeGFj
dGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
cGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxl
dHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygp
IDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNlTGV0dGVycykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVyICs9IChsb3dlcmNhc2VM
ZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgYm9v
bCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJUeXBlKCZzdHIpW2NoYXJhY3RlckNv
dW50XSkKK3sKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFjdGVyQ291bnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobWVtY21wKHN0ciwgcHRyLCBzaXplb2YoQ2hhcmFjdGVyVHlw
ZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwdHIgKz0g
Y2hhcmFjdGVyQ291bnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgYm9vbCBz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
cGFyc2luZ0J1ZmZlciwgY29uc3QgQ2hhcmFjdGVyVHlwZSgmc3RyKVtjaGFyYWN0ZXJDb3VudF0p
Cit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCBjaGFyYWN0ZXJD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAoc3RyLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCksIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNpbmdCdWZmZXIuYWR2YW5jZUJ5KGNo
YXJhY3RlckNvdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsMTkgKzgxLDE5IEBAIFN0cmluZyBT
VkdBbmdsZVZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5n
bGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgc3dpdGNo
IChlbmQgLSBwdHIpIHsKKyAgICBzd2l0Y2ggKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5n
KCkpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5H
TEVUWVBFX1VOU1BFQ0lGSUVEOwogICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAn
ZCcgJiYgcHRyWzFdID09ICdlJyAmJiBwdHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAocGFyc2lu
Z0J1ZmZlclswXSA9PSAnZCcgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAnZScgJiYgcGFyc2luZ0J1
ZmZlclsyXSA9PSAnZycpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FO
R0xFVFlQRV9ERUc7Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ3InICYmIHB0clsxXSA9PSAnYScg
JiYgcHRyWzJdID09ICdkJykKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbMF0gPT0gJ3InICYm
IHBhcnNpbmdCdWZmZXJbMV0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2QnKQogICAg
ICAgICAgICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsx
XSA9PSAncicgJiYgcHRyWzJdID09ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlclswXSA9PSAnZycgJiYgcGFyc2luZ0J1ZmZlclsxXSA9PSAncicgJiYgcGFy
c2luZ0J1ZmZlclsyXSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlclszXSA9PSAnZCcpCiAgICAgICAg
ICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9HUkFEOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xMDYsMjcgKzEwNywxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdB
bmdsZVZhbHVlOjpzZXRWYWx1CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0
byBoZWxwZXIgPSBbJl0oYXV0byogcHRyLCBhdXRvKiBlbmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+
IHsKLSAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJzZU51bWJlcihwdHIs
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICByZXR1cm4gV1RGOjpy
ZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+
IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVkVW5pdHMg
PSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOwogICAgICAgICBpZiAoIXZhbHVlSW5TcGVjaWZpZWRVbml0cykKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgICAgIGF1dG8gdW5pdFR5cGUg
PSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7CisgICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwYXJz
ZUFuZ2xlVHlwZShwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0Fu
Z2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsK
ICAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRz
OwogICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkp
IHsKLSAgICAgICAgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0
dXJuIGhlbHBlcihwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRv
KiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRy
ICsgdmFsdWUubGVuZ3RoKCkpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdB
bmdsZVZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBl
LCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzUyMikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6aGFzVmFsaQogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlw
ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAg
IG1fdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFs
dWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAg
ICAgICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktO
T1dOOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAg
cmVzdWx0LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+
IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25h
bDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcpCiB7Ci0gICAgaWYgKHBhcnNlLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gcGFyc2UudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcGFyc2UubGVuZ3RoKCk7Ci0KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotCi0gICAgVmVjdG9yPFVuaXRCZXppZXI+IHJlc3VsdDsKLQotICAgIGJvb2wgZGVs
aW1QYXJzZWQgPSBmYWxzZTsKLSAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgIGRlbGlt
UGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5k
KTsKLSAgICAgICAgaWYgKCFwb3NBKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0
byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHsKKyAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGF1dG8g
cG9zQiA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NCKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgVmVjdG9yPFVuaXRCZXppZXI+IHJl
c3VsdDsKIAotICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAg
ICAgIGlmICghcG9zQykKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZh
bHNlOworICAgICAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7
CisgICAgICAgICAgICBpZiAoIXBvc0EpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICAgICAgaWYgKCFwb3NEKQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVt
YmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKCFwb3NCKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIpOworICAgICAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7Jykgewot
ICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXBvc0Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7
ICpwb3NBLCAqcG9zQiwgKnBvc0MsICpwb3NEIH0pOwotICAgIH0KKyAgICAgICAgICAgIGlmIChz
a2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycpKQorICAgICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKIAotICAgIGlmICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6
aWVyIHsgKnBvc0EsICpwb3NCLCAqcG9zQywgKnBvc0QgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIShwYXJzaW5nQnVmZmVyLmF0RW5kKCkgJiYgIWRlbGltUGFyc2VkKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0pOwogfQogCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omlz
U3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJz
ZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NiwyNyArODcs
MzcgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlQXR0cmlidXRlKGNvbgogCiBPcHRpb25h
bDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1Zp
ZXcmIHZhbHVlKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gdmFsdWUudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBj
aGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0
ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBy
ZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAg
ICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhwYXJzaW5nQnVmZmVyLCB2YWxpZGF0ZSk7Cit9
CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7
CisgICAgcmV0dXJuIHBhcnNlVmlld0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUp
OwogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94
KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nVmlldyBz
dHIoYywgZW5kIC0gYyk7CisgICAgU3RyaW5nVmlldyBzdHJpbmdUb1BhcnNlID0gcGFyc2luZ0J1
ZmZlci5zdHJpbmdWaWV3T2ZDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiAKLSAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoYywgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1
ZmZlcik7CiAKLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8geSA9
IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGMsIGVu
ZCk7Ci0gICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihjLCBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZl
cik7CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgYXV0byB3
aWR0aCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgIGF1dG8gaGVpZ2h0ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsK
IAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3Zp
ZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50KCk7CiAKICAgICAgICAgaWYgKCF4IHx8
ICF5IHx8ICF3aWR0aCB8fCAhaGVpZ2h0KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcg
dmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZp
ZXdCb3g9XCIiLCBzdHJpbmdUb1BhcnNlLCAiXCIiKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICB9CiAKQEAgLTEyMyw5ICsxMzQsOSBAQCBPcHRpb25hbDxGbG9h
dFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyCiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3Ro
aW5nIHNob3VsZCBjb21lIGFmdGVyIHRoZSBsYXN0LCBmb3VydGggbnVtYmVyLgotICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoYywgZW5kKTsKLSAgICAgICAgaWYgKGMgPCBlbmQpIHsKLSAg
ICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1h
a2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDEy
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwogICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlk
YXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5n
UGFyc2luZ0J1ZmZlcjxVQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0
PiBwYXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3Zp
ZXdCb3g7CiAgICAgUmVmPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvOwogICAgIGJvb2wgbV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBTVkdMZW5ndGhMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFy
YWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUocGFyc2luZ0J1ZmZlcik6OkNoYXJhY3RlclR5
cGU7CisKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigp
OworCisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFjZU9yQ29t
bWE+KHBhcnNpbmdCdWZmZXIpOworCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBh
dXRvIHZhbHVlID0gU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChtX2xlbmd0aE1vZGUsIFN0cmlu
Z1ZpZXcoc3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBh
cHBlbmQoU1ZHTGVuZ3RoOjpjcmVhdGUoV1RGTW92ZSgqdmFsdWUpKSk7CisgICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVy
ZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gcGFyc2luZ0J1
ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHTGVuZ3RoTGlzdDo6dmFsdWVB
c1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBsZW5ndGggOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxl
bmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWls
ZGVyLmFwcGVuZChsZW5ndGgtPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhMaXN0LmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR1ZhbHVlUHJvcGVydHlMaXN0LmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUzLDQ1ICs1Miw5IEBAIHB1YmxpYzoKIAogICAgIFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoTW9kZTsgfQogCi0gICAgYm9vbCBwYXJzZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgo
KTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgY29uc3QgVUNoYXIq
IHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcs
JyAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAgICAgICAgICBwdHIrKzsKLSAgICAgICAg
ICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpOwotICAgICAgICAgICAg
U1ZHTGVuZ3RoVmFsdWUgdmFsdWUobV9sZW5ndGhNb2RlKTsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlU3RyaW5nKS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKHZh
bHVlKSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIs
IGVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKLSAgICB9Cisg
ICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAotICAgIFN0cmluZyB2YWx1ZUFz
U3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6IG1faXRlbXMpIHsKLSAg
ICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxlbmd0aC0+dmFsdWUo
KS52YWx1ZUFzU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKLSAgICB9CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVy
cmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgU1ZHTGVuZ3RoTGlzdChTVkdMZW5ndGhNb2RlIGxl
bmd0aE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHJldmlz
aW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNjEsMTkgKzYyLDIxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogbGVuZ3RoVHlwZVRvU3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZH
TGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3QgVUNoYXIqIHB0ciwgY29uc3QgVUNoYXIq
IGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZH
TGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAocHRyID09IGVuZCkKKyAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVy
OwogCi0gICAgY29uc3QgVUNoYXIgZmlyc3RDaGFyID0gKnB0cjsKKyAgICBhdXRvIGZpcnN0Q2hh
ciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsKIAotICAgIGlmICgrK3B0
ciA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IGZpcnN0Q2hhciA9PSAnJScgPyBTVkdMZW5ndGhUeXBlOjpQZXJjZW50YWdlIDogU1ZHTGVuZ3Ro
VHlwZTo6VW5rbm93bjsKIAotICAgIGNvbnN0IFVDaGFyIHNlY29uZENoYXIgPSAqcHRyOworICAg
IGF1dG8gc2Vjb25kQ2hhciA9ICpwYXJzaW5nQnVmZmVyOworICAgICsrcGFyc2luZ0J1ZmZlcjsK
IAotICAgIGlmICgrK3B0ciAhPSBlbmQpCisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkp
CiAgICAgICAgIHJldHVybiBTVkdMZW5ndGhUeXBlOjpVbmtub3duOwogCiAgICAgaWYgKGZpcnN0
Q2hhciA9PSAnZScgJiYgc2Vjb25kQ2hhciA9PSAnbScpCkBAIC0xODAsNyArMTgzLDE1IEBAIFNW
R0xlbmd0aFZhbHVlOjpTVkdMZW5ndGhWYWx1ZShjb25zdCBTVkcKICAgICBzZXRWYWx1ZShjb250
ZXh0LCB2YWx1ZSk7CiB9CiAKLVNWR0xlbmd0aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1
Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcs
IFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2Rl
IG5lZ2F0aXZlVmFsdWVzTW9kZSkKK09wdGlvbmFsPFNWR0xlbmd0aFZhbHVlPiBTVkdMZW5ndGhW
YWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmll
dyYgdmFsdWVBc1N0cmluZykKK3sKKyAgICBTVkdMZW5ndGhWYWx1ZSBsZW5ndGggeyBsZW5ndGhN
b2RlIH07CisgICAgaWYgKGxlbmd0aC5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlQXNTdHJpbmcpLmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBs
ZW5ndGg7Cit9CisKK1NWR0xlbmd0aFZhbHVlIFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZH
TGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nLCBT
VkdQYXJzaW5nRXJyb3ImIHBhcnNlRXJyb3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBu
ZWdhdGl2ZVZhbHVlc01vZGUpCiB7CiAgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1v
ZGUpOwogCkBAIC0yMzksNyArMjUwLDcgQEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5n
dGhWYWx1ZTo6dAogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52
YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSwgbGVuZ3RoVHlwZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgu
bGVuZ3RoVHlwZSgpKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9k
ZSBsZW5ndGhNb2RlKQorRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVl
QXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBs
ZW5ndGhNb2RlKQogewogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gMDsKICAgICBtX2xl
bmd0aE1vZGUgPSBsZW5ndGhNb2RlOwpAQCAtMjg2LDI2ICsyOTcsMjQgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbAogICAgIHJldHVybiBzZXRWYWx1ZShjb250ZXh0
LCB2YWx1ZSk7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1
ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVu
Z3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAg
YXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07Ci0KLSAgICBhdXRvIGxlbmd0aFR5cGUg
PSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwotICAgIGlmIChsZW5ndGhUeXBlID09IFNWR0xl
bmd0aFR5cGU6OlVua25vd24pCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFsm
XShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0
byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworCisgICAgICAgIGF1
dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAg
aWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgbV9sZW5ndGhUeXBlID0gbGVu
Z3RoVHlwZTsKLSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7
Ci0gICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKKyAg
ICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqY29udmVydGVkTnVtYmVyOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhW
YWx1ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29u
dGV4dCwgU1ZHTGVuZ3RoVHlwZSBsZW5ndGhUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aFZhbHVlLmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
ZW5ndGhWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsMTQgQEAgZW51bSBjbGFz
cyBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgOgogY2xhc3MgU1ZHTGVuZ3RoVmFsdWUgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNWR0xlbmd0aFZhbHVl
KFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2YWx1
ZUFzU3RyaW5nID0gU3RyaW5nKCkpOworICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUg
PSBTVkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0geyB9
KTsKICAgICBTVkdMZW5ndGhWYWx1ZShmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMsIFNWR0xl
bmd0aFR5cGUsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAgICAgU1ZH
TGVuZ3RoVmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBl
ID0gU1ZHTGVuZ3RoVHlwZTo6TnVtYmVyLCBTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6
T3RoZXIpOwogCi0gICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5ndGhN
b2RlLCBjb25zdCBTdHJpbmcmLCBTVkdQYXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZh
bHVlc01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKKyAgICBzdGF0
aWMgT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25z
dCBTdHJpbmdWaWV3Jik7CisgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdM
ZW5ndGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiwgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3Ro
TmVnYXRpdmVWYWx1ZXNNb2RlID0gU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7
CiAgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGJsZW5kKGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBm
cm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICAKKwog
ICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmKTsKICAgICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFNWR0xlbmd0aFZhbHVlJik7CiAKQEAgLTg1LDggKzg2LDgg
QEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0
aENvbnRleHQmLCBmbG9hdCk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3Qg
U1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsK
IAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7
Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmLCBT
VkdMZW5ndGhNb2RlKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5n
KGNvbnN0IFN0cmluZ1ZpZXcmLCBTVkdMZW5ndGhNb2RlKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBTVkdM
ZW5ndGhUeXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHTnVtYmVyTGlzdDo6cGFyc2UoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICByZXR1cm4gV1RGOjpy
ZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsK
KyAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxv
dyBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9s
YXRlIHRoYXQgaW50ZW50aW9uYWxseS4KKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNl
TnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKCFudW1iZXIpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51
bWJlcikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFy
SXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAg
IHJldHVybiBwYXJzaW5nQnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBTVkdO
dW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG51bWJlciA6IG1faXRlbXMpIHsKKyAgICAg
ICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcp
OworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJlci0+dmFsdWUoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDM5ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHTnVtYmVyTGlzdChvdGhlciwgYWNj
ZXNzKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICAvLyBUaGUg
c3BlYyAoc2VjdGlvbiA0LjEpIHN0cmFuZ2VseSBkb2Vzbid0IGFsbG93IGxlYWRpbmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3NlIHRvIHZpb2xhdGUgdGhhdCBpbnRlbnRp
b25hbGx5LgotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBhdXRvIG51
bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICAgICAgICAgIGlmICghbnVtYmVyKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXBwZW5kKFNWR051bWJlcjo6Y3Jl
YXRlKCpudW1iZXIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwdHIgPT0gZW5kOwot
ICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIG51bWJlciA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgp
KQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKG51bWJlci0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00MSw3ICs0Miw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdFR5cGU+IHN0YXRpYyBpbmwK
IC8vIGF0IGEgaGlnaGVyIHByZWNpc2lvbiBpbnRlcm5hbGx5LCB3aXRob3V0IGFueSB1bm5lY2Vz
c2FyeSBydW50aW1lIGNvc3Qgb3IgY29kZQogLy8gY29tcGxleGl0eS4KIC8vIEZJWE1FOiBDYW4g
dGhpcyBiZSBzaGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+
IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5cGUgPSBmbG9hdD4gc3RhdGljIE9w
dGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1BhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAg
PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKICAgICBGbG9hdFR5cGUgbnVtYmVyID0g
MDsKICAgICBGbG9hdFR5cGUgaW50ZWdlciA9IDA7CkBAIC01MCwyNiArNTEsMjYgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgIEZsb2F0VHlwZSBleHBvbmVu
dCA9IDA7CiAgICAgaW50IHNpZ24gPSAxOwogICAgIGludCBleHBzaWduID0gMTsKLSAgICBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHB0cjsKKyAgICBhdXRvIHN0YXJ0ID0gcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpOwogCiAgICAgLy8gcmVhZCB0aGUgc2lnbgotICAgIGlmIChwdHIgPCBl
bmQgJiYgKnB0ciA9PSAnKycpCi0gICAgICAgIHB0cisrOwotICAgIGVsc2UgaWYgKHB0ciA8IGVu
ZCAmJiAqcHRyID09ICctJykgewotICAgICAgICBwdHIrKzsKKyAgICBpZiAocGFyc2luZ0J1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJysnKQorICAg
ICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgZWxzZSBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJy0nKSB7CisgICAgICAgICsr
cGFyc2luZ0J1ZmZlcjsKICAgICAgICAgc2lnbiA9IC0xOwogICAgIH0gCiAgICAgCi0gICAgaWYg
KHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0cikgJiYgKnB0ciAhPSAnLicpKQorICAg
IGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgKCFpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZm
ZXIpICYmICpwYXJzaW5nQnVmZmVyICE9ICcuJykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAvLyByZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7Ci0gICAgd2hp
bGUgKHB0ciA8IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICsrcHRyOyAvLyBB
ZHZhbmNlIHRvIGZpcnN0IG5vbi1kaWdpdC4KKyAgICBhdXRvIHB0clN0YXJ0SW50UGFydCA9IHBh
cnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKKyAgICAg
ICAgKytwYXJzaW5nQnVmZmVyOyAvLyBBZHZhbmNlIHRvIGZpcnN0IG5vbi1kaWdpdC4KIAotICAg
IGlmIChwdHIgIT0gcHRyU3RhcnRJbnRQYXJ0KSB7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5
cGUqIHB0clNjYW5JbnRQYXJ0ID0gcHRyIC0gMTsKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpICE9IHB0clN0YXJ0SW50UGFydCkgeworICAgICAgICBhdXRvIHB0clNjYW5JbnRQYXJ0
ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gMTsKICAgICAgICAgRmxvYXRUeXBlIG11bHRp
cGxpZXIgPSAxOwogICAgICAgICB3aGlsZSAocHRyU2NhbkludFBhcnQgPj0gcHRyU3RhcnRJbnRQ
YXJ0KSB7CiAgICAgICAgICAgICBpbnRlZ2VyICs9IG11bHRpcGxpZXIgKiBzdGF0aWNfY2FzdDxG
bG9hdFR5cGU+KCoocHRyU2NhbkludFBhcnQtLSkgLSAnMCcpOwpAQCAtODAsMzggKzgxLDM5IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09
ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwotICAgICAgICBwdHIrKzsKKyAgICAvLyByZWFk
IHRoZSBkZWNpbWFscworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSAnLicpIHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVy
OwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBm
b2xsb3dpbmcgdGhlIC4KLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgq
cHRyKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAhaXNBU0NJSURpZ2l0
KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRyKSkKLSAg
ICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oMC4xKSk7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKQorICAg
ICAgICAgICAgZGVjaW1hbCArPSAoKihwYXJzaW5nQnVmZmVyKyspIC0gJzAnKSAqIChmcmFjICo9
IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7CiAgICAgfQogCiAgICAgLy8gcmVhZCB0aGUg
ZXhwb25lbnQgcGFydAotICAgIGlmIChwdHIgIT0gc3RhcnQgJiYgcHRyICsgMSA8IGVuZCAmJiAo
KnB0ciA9PSAnZScgfHwgKnB0ciA9PSAnRScpIAotICAgICAgICAmJiAocHRyWzFdICE9ICd4JyAm
JiBwdHJbMV0gIT0gJ20nKSkgeyAKLSAgICAgICAgcHRyKys7CisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIucG9zaXRpb24oKSAhPSBzdGFydCAmJiBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgKyAxIDwg
cGFyc2luZ0J1ZmZlci5lbmQoKSAmJiAoKnBhcnNpbmdCdWZmZXIgPT0gJ2UnIHx8ICpwYXJzaW5n
QnVmZmVyID09ICdFJykKKyAgICAgICAgJiYgKHBhcnNpbmdCdWZmZXJbMV0gIT0gJ3gnICYmIHBh
cnNpbmdCdWZmZXJbMV0gIT0gJ20nKSkgeworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAKICAg
ICAgICAgLy8gcmVhZCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKLSAgICAgICAgaWYgKCpwdHIg
PT0gJysnKQotICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgIGVsc2UgaWYgKCpwdHIgPT0gJy0n
KSB7Ci0gICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICcr
JykKKyAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgZWxzZSBpZiAoKnBhcnNp
bmdCdWZmZXIgPT0gJy0nKSB7CisgICAgICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAg
ICAgICBleHBzaWduID0gLTE7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJl
IG11c3QgYmUgYW4gZXhwb25lbnQKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlE
aWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAhaXNBU0NJ
SURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpIHsKKyAg
ICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlz
QVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpIHsKICAgICAgICAgICAgIGV4cG9uZW50ICo9IHN0
YXRpY19jYXN0PEZsb2F0VHlwZT4oMTApOwotICAgICAgICAgICAgZXhwb25lbnQgKz0gKnB0ciAt
ICcwJzsKLSAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgZXhwb25lbnQgKz0gKnBhcnNp
bmdCdWZmZXIgLSAnMCc7CisgICAgICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlz
VmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZs
b2F0VHlwZT46Om1heF9leHBvbmVudCkKQEAgLTEyOCw0NCArMTMwLDQ0IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBpZiAoIWlzVmFsaWRSYW5nZShudW1i
ZXIpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHN0YXJ0ID09IHB0
cikKKyAgICBpZiAoc3RhcnQgPT0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHNraXAgPT0gU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OlNraXApCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwg
ZW5kKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1
ZmZlcik7CiAKICAgICByZXR1cm4gbnVtYmVyOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VO
dW1iZXIoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5IHNraXApCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0
dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBza2lwKTsKIH0KIAotT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
LCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQs
IHNraXApOworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tp
cCk7CiB9CiAKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRl
ZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3Qg
VUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNl
TnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKLSAgICBpZiAocHRyICE9IGVuZCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBXVEY6OnJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtza2lwXShhdXRvIHBhcnNpbmdCdWZmZXIp
IC0+IE9wdGlvbmFsPGZsb2F0PiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNl
TnVtYmVyKHBhcnNpbmdCdWZmZXIsIHNraXApOworICAgICAgICBpZiAoIXBhcnNpbmdCdWZmZXIu
YXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfSk7CiB9CiAKIC8vIG9ubHkgdXNlZCB0byBwYXJzZSBsYXJnZUFyY0Zs
YWcgYW5kIHN3ZWVwRmxhZyB3aGljaCBtdXN0IGJlIGEgIjAiIG9yICIxIgogLy8gYW5kIG1pZ2h0
IG5vdCBoYXZlIGFueSB3aGl0ZXNwYWNlL2NvbW1hIGFmdGVyIGl0Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Ym9vbD4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhjb25z
dCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Ym9vbD4gZ2VuZXJpY1BhcnNlQXJj
RmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQog
ewotICAgIGlmIChwdHIgPj0gZW5kKQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZs
YWdDaGFyID0gKnB0cisrOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcGFy
c2luZ0J1ZmZlcjsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAKICAgICBib29sIGZsYWc7CiAgICAg
aWYgKGZsYWdDaGFyID09ICcwJykKQEAgLTE3NSwxOSArMTc3LDE5IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb24KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVu
ZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7
CiAgICAgCiAgICAgcmV0dXJuIGZsYWc7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxh
Zyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPGJvb2w+IHBh
cnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKIHsK
LSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIGdl
bmVyaWNQYXJzZUFyY0ZsYWcocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBh
cnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFs
PGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1
ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCk7CisgICAg
cmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocGFyc2luZ0J1ZmZlcik7CiB9CiAKIE9wdGlvbmFs
PHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0
IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTE5NSwyNSArMTk3LDIzIEBAIE9wdGlvbmFsPHN0ZDo6
cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU4KICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBj
dXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciAr
IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsK
LSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdU
Rjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVy
KSAtPiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4geworICAgICAgICBhdXRvIHgg
PSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChjdXIgPT0gZW5kKQotICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIu
YXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOwogCi0g
ICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpE
b250U2tpcCk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgaWYgKGN1ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKnkp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0KIAog
T3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcp
CkBAIC0yMjEsMTE3ICsyMjEsMTEzIEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQo
Y29uc3QgU3QKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsK
LQotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IHsKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBwb2ludCA9IHBhcnNl
RmxvYXRQb2ludChjdXIsIGVuZCk7Ci0gICAgaWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5n
QnVmZmVyKTsKKyAgICAgICAgaWYgKCFwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAvLyBEaXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBl
bmQuCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKLSAgICAKLSAgICByZXR1
cm4gcG9pbnQ7CisgICAgICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQg
dGhlIGVuZC4KKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvaW50OworICAgIH0pOwogfQogCiBPcHRpb25hbDxG
bG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIAotICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0gICAgCi0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIo
cHRyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF5KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihwdHIsIGVu
ZCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBh
dXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
RG9udFNraXApOwotICAgIGlmICghaGVpZ2h0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1
dG8gcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8RmxvYXRSZWN0PiB7CisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXgpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIp
OworICAgICAgICBpZiAoIXdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIWhlaWdodCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5
LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwg
KndpZHRoLCAqaGVpZ2h0IH07CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIC8vIEZJ
WE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgogCi0gICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhwdHIsIGVuZCk7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gdmFsdWVzOwotCi0gICAgd2hpbGUg
KHB0ciA8IGVuZCkgewotICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFj
ZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBp
Z25vcmVkLgotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRTdGFydCA9IHB0cjsKLSAgICAgICAg
d2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKLSAgICAgICAgICAgICsrcHRyOworICAg
IHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFy
c2luZ0J1ZmZlcikgLT4gSGFzaFNldDxTdHJpbmc+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gdmFsdWVzOwogCi0g
ICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNw
YWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0ciAtIDE7Ci0gICAgICAgIHdo
aWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRFbmQpKQotICAg
ICAgICAgICAgLS1pbnB1dEVuZDsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGlu
ZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9y
cywgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgYXV0byBpbnB1dFN0YXJ0ID0gcGFyc2lu
Z0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlucHV0U3Rh
cnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQsICcsJyk7Ci0gICAgfQorICAgICAgICAgICAgc2tp
cFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUgYW55IHdo
aXRlc3BhY2UKKyAgICAgICAgICAgIGF1dG8gaW5wdXRFbmQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCkgLSAxOworICAgICAgICAgICAgd2hpbGUgKGlucHV0U3RhcnQgPCBpbnB1dEVuZCAmJiBp
c1NWR1NwYWNlKCppbnB1dEVuZCkpCisgICAgICAgICAgICAgICAgLS1pbnB1dEVuZDsKKworICAg
ICAgICAgICAgdmFsdWVzLmFkZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0
YXJ0ICsgMSkpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIo
cGFyc2luZ0J1ZmZlciwgJywnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVzOwor
ICAgIH0pOwogCi0gICAgcmV0dXJuIHZhbHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaWNv
ZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4gcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAobGVuZ3RoIDwgMiB8fCBj
aGFyYWN0ZXJzWzBdICE9ICdVJyB8fCBjaGFyYWN0ZXJzWzFdICE9ICcrJykKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpOworICAgIGlmIChsZW5n
dGggPCAyIHx8IHBhcnNpbmdCdWZmZXJbMF0gIT0gJ1UnIHx8IHBhcnNpbmdCdWZmZXJbMV0gIT0g
JysnKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAorCisgICAgcGFyc2luZ0J1
ZmZlci5hZHZhbmNlQnkoMik7CisKICAgICAvLyBQYXJzZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJl
ciAob3IgaXRzIHByZWZpeCkuCiAgICAgdW5zaWduZWQgc3RhcnRSYW5nZSA9IDA7CiAgICAgdW5z
aWduZWQgc3RhcnRMZW5ndGggPSAwOwogCi0gICAgY29uc3QgVUNoYXIqIHB0ciA9IGNoYXJhY3Rl
cnMgKyAyOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAg
IHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnB0cikp
CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7Cisg
ICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGgg
PiA2KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgc3RhcnRSYW5n
ZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwdHIpOwotICAgICAgICAr
K3B0cjsKKyAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhl
eFZhbHVlKCpwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgIH0K
IAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWdu
LgotICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKKyAg
ICBpZiAoMiArIHN0YXJ0TGVuZ3RoIDwgbGVuZ3RoICYmICpwYXJzaW5nQnVmZmVyID09ICctJykg
ewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcgaGV4IG51bWJlciAo
b3IgaXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gMDsKICAgICAgICAg
dW5zaWduZWQgZW5kTGVuZ3RoID0gMDsKLSAgICAgICAgKytwdHI7Ci0gICAgICAgIHdoaWxlIChw
dHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpwdHIpKQorICAg
ICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0No
YXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQo
KnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgKytl
bmRMZW5ndGg7CiAgICAgICAgICAgICBpZiAoZW5kTGVuZ3RoID4gNikKICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2Ug
PDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7Ci0gICAgICAgICAgICArK3B0cjsKKyAgICAg
ICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKCFlbmRMZW5ndGgpCkBAIC0zNDUsMTUgKzM0MSwxNSBAQCBzdGF0
aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvCiAgICAgCiAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIG9mIGEgbnVtYmVyIHdpdGggc29tZSBvcHRpb25hbCB0cmFpbGluZyBxdWVzdGlv
biBtYXJrcy4KICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9IHN0YXJ0UmFuZ2U7Ci0gICAgd2hpbGUg
KHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoKnB0ciAhPSAnPycpCisgICAgd2hpbGUgKHBhcnNp
bmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICgqcGFyc2lu
Z0J1ZmZlciAhPSAnPycpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0
aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFuZ2UgPDw9IDQ7CiAgICAgICAgIGVuZFJhbmdlID0g
KGVuZFJhbmdlIDw8IDQpIHwgMHhGOwotICAgICAgICArK3B0cjsKKyAgICAgICAgKytwYXJzaW5n
QnVmZmVyOwogICAgIH0KICAgICAKICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQpAQCAtMzY5LDUzICsz
NjUsNTEgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZQogewogICAg
IC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgogCi0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgVW5pY29kZVJhbmdl
cyByYW5nZUxpc3Q7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7Ci0KLSAgICB3aGls
ZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwot
ICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQotICAgICAgICAgICAgKytw
dHI7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10o
YXV0byBwYXJzaW5nQnVmZmVyKSAtPiBzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxT
dHJpbmc+PiB7CisgICAgICAgIFVuaWNvZGVSYW5nZXMgcmFuZ2VMaXN0OworICAgICAgICBIYXNo
U2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQp
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIGlucHV0U3RhcnQgPSBwYXJz
aW5nQnVmZmVyLnBvc2l0aW9uKCk7CiAKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUg
cmFuZ2UgZmlyc3QKLSAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShp
bnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKLSAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBl
bmQoV1RGTW92ZSgqcmFuZ2UpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nTGlz
dC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKTsKLSAgICAgICAgKytw
dHI7Ci0gICAgfQorICAgICAgICAgICAgc2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcsJyk7CisK
KyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVu
aWNvZGUgcmFuZ2UgZmlyc3QKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmlj
b2RlUmFuZ2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGlucHV0U3RhcnQsIHBhcnNpbmdCdWZmZXIu
cG9zaXRpb24oKSB9KSkKKyAgICAgICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUo
KnJhbmdlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RyaW5nTGlzdC5h
ZGQoU3RyaW5nKGlucHV0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIGlucHV0U3Rh
cnQpKTsKKyAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgfQogCi0gICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKHJhbmdlTGlzdCwgc3RyaW5nTGlzdCk7CisgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKHJhbmdlTGlzdCksIFdURk1vdmUoc3RyaW5nTGlzdCkp
OworICAgIH0pOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJp
Y1BhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJz
aW5nQnVmZmVyKQogewotICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCF4KQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAg
ICBpZiAoIXkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gRmxv
YXRQb2ludCB7ICp4LCAqeSB9OwogfQogCi1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0
UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8
RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBw
YXJzaW5nQnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZl
cik7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hh
ciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJz
ZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTIy
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw5ICsyMSw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUGFyc2lu
Z1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6
cGFpcjxVQ2hhcjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmlj
b2RlUmFuZ2U+IFVuaWNvZGVSYW5nZXM7CkBAIC0zOCwyMCArMzgsMjAgQEAgZW51bSBjbGFzcyBT
dWZmaXhTa2lwcGluZ1BvbGljeSB7CiAgICAgU2tpcAogfTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBh
cnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7Ci1PcHRpb25hbDxm
bG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5k
LCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09w
dGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1
ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiBPcHRpb25hbDxm
bG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5
ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8Zmxv
YXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7
CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNv
bnN0IExDaGFyKiBlbmQpOwotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0Zs
YWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJj
RmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiBPcHRpb25hbDxGbG9hdFBvaW50
PiBwYXJzZVBvaW50KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VSZWN0KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBj
b25zdCBVQ2hhciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChT
dHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6
cGFpcjxVbmljb2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+PiBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFy
c2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nVmlldyYpOwpAQCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIGlzU1ZHU3BhY2VPckNvbW1hKENo
YXJhY3RlclR5cGUgYykKK3sKKyAgICByZXR1cm4gaXNTVkdTcGFjZShjKSB8fCBjID09ICcsJzsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCkKIHsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0
cikpCi0gICAgICAgIHB0cisrOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1Nw
YWNlPihwdHIsIGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMpCit7CisgICAg
c2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KGNoYXJhY3RlcnMpOworICAgIHJl
dHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYm
ICFpc1NWR1NwYWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVyKQpAQCAtODQsMjggKzk0LDE3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4g
cHRyIDwgZW5kOwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYg
cHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25h
bFNWR1NwYWNlc09yRGVsaW1pdGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGNoYXJhY3RlcnMsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewotICAgIGlmIChlbmQgLSBwdHIg
PCBsZW5ndGgpCisgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYm
ICFpc1NWR1NwYWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hhcmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVD
aGFyKSAqIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3Ro
OwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3Vu
dD4KLWlubGluZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFy
KiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVu
Z3RoID0gY2hhcmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycykpIHsKKyAgICAg
ICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpjaGFyYWN0ZXJz
ID09IGRlbGltaXRlcikgeworICAgICAgICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMpOworICAgICAgICB9CiAgICAgfQotICAg
IHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEx
ICsxOSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJTVkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxv
YXRQb2ludDsKIAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU1ZHUGF0aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzNTIyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IlNWR1BhcnNlclV0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwzMyAr
MzEsMzAgQEAgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZQogewogICAg
IEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsK
LSAgICAgICAgbV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwot
ICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjggPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3Ry
aW5nLmxlbmd0aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2ID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2
ID0gbV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorICAg
IGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAgbV9wYXJzaW5nQnVmZmVyOCA9IHsgc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworICAgIGVsc2UKKyAgICAgICAgbV9w
YXJzaW5nQnVmZmVyMTYgPSB7IHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgp
IH07CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6aGFzTW9yZURhdGEoKSBjb25zdAog
ewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudC5tX2No
YXJhY3RlcjggPCBtX2VuZC5tX2NoYXJhY3Rlcjg7Ci0gICAgcmV0dXJuIG1fY3VycmVudC5tX2No
YXJhY3RlcjE2IDwgbV9lbmQubV9jaGFyYWN0ZXIxNjsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2lu
Z0J1ZmZlcjguaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpOworICAgIHJldHVybiBtX3BhcnNpbmdC
dWZmZXIxNi5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6bW92ZVRvTmV4dFRva2VuKCkKIHsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0g
ICAgICAgIHJldHVybiBza2lwT3B0aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICAgICAg
cmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1
cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fcGFyc2luZ0J1ZmZlcjE2KTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlw
ZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1Bh
dGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVscGVyKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIFNWR1BhdGhT
ZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKIHsKICAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNv
b3JkaW5hdGVzIGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCi0gICAgaWYgKCgqY3VycmVudCA9PSAn
KycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQo
KmN1cnJlbnQpKQorICAgIGlmICgoKnBhcnNpbmdCdWZmZXIgPT0gJysnIHx8ICpwYXJzaW5nQnVm
ZmVyID09ICctJyB8fCAqcGFyc2luZ0J1ZmZlciA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpwYXJz
aW5nQnVmZmVyKSkKICAgICAgICAgJiYgcHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBh
dGgpIHsKICAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKQog
ICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7CkBAIC03MywxNTAgKzY5LDEzOCBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljCiBTVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlmIChhdXRv
IG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwg
cHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29t
bWFuZEhlbHBlcihtX3BhcnNpbmdCdWZmZXI4LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAg
ICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXV0byBu
ZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBw
cmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21t
YW5kSGVscGVyKG1fcGFyc2luZ0J1ZmZlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAg
ICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9CiAKICAgICByZXR1cm4gKnBhcnNlU1ZHU2Vn
bWVudFR5cGUoKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyBTVkdQYXRoU2VnVHlwZSBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3Rl
clR5cGUqJiBjdXJyZW50KQordGVtcGxhdGU8dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZH
UGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UoRiYmIGZ1bmN0b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1
cnJlbnQrKykpIHsKLSAgICBjYXNlICdaJzoKLSAgICBjYXNlICd6JzoKLSAgICAgICAgcmV0dXJu
IFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAgY2FzZSAnTSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2Vn
TW92ZVRvQWJzOwotICAgIGNhc2UgJ20nOgotICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1Jl
bDsKLSAgICBjYXNlICdMJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAg
Y2FzZSAnbCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwotICAgIGNhc2UgJ0Mn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICBjYXNlICdjJzoK
LSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICBjYXNlICdxJzoK
LSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsOwotICAgIGNhc2UgJ0En
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY0FiczsKLSAgICBjYXNlICdhJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdBcmNSZWw7Ci0gICAgY2FzZSAnSCc6Ci0gICAgICAgIHJldHVybiBQYXRo
U2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAgICBjYXNlICdoJzoKLSAgICAgICAgcmV0dXJuIFBh
dGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4g
UGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwotICAgIGNhc2UgJ3YnOgotICAgICAgICByZXR1cm4g
UGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOwotICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgcmV0
dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICBjYXNlICd0JzoK
LSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKLSAgICB9CisgICAgaWYgKG1f
aXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZmZXI4KTsK
KyAgICByZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZmZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNW
R1BhdGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkK
IHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNW
R1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gU1ZHUGF0aFNlZ1R5cGUgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9ICpwYXJzaW5nQnVmZmVyOworICAgICAgICBwYXJzaW5nQnVmZmVy
Kys7CisgICAgICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAg
ICAgICBjYXNlICd6JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAg
ICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAg
ICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAg
ICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAg
ICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAg
ICAgICBjYXNlICdDJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJz
OworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1
YmljUmVsOworICAgICAgICBjYXNlICdRJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY0FiczsKKyAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAg
ICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdBcmNSZWw7CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0
dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAn
Vic6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAg
ICBjYXNlICd2JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7
CisgICAgICAgIGNhc2UgJ1MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNTbW9vdGhBYnM7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0
JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAg
ICAgICAgfQorICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdt
ZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1
dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4g
T3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFy
c2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBh
cnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYg
KCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IAogICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50Owot
ICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAg
ICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9
IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExp
bmVUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVy
KSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9p
bnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAg
TGluZVRvU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RG
TW92ZSgqdGFyZ2V0UG9pbnQpOwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0g
ICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAK
IE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBhdXRv
IGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9w
dGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geCA9IHBhcnNl
TnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdC
dWZmZXIpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1
dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXgpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAg
IHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAg
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGlu
ZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVu
dCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsK
LSAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8TGluZVRvVmVydGljYWxT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwog
ICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICAKICAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21l
bnQueSA9ICp5OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1f
aXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25z
dCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3Vi
aWNTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9w
dGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDEgPSBwYXJz
ZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQxKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNl
RmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxv
YXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDIpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBh
cnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTIyNSwyMSArMjA5LDE3IEBA
IE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ20KICAgICAgICAgc2VnbWVu
dC5wb2ludDIgPSAqcG9pbnQyOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdl
dFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4
Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rlcjgs
IG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNW
R1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIg
PSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VG
bG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNp
bmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAg
ICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAg
IGlmICghcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAg
ICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCkBAIC0yNDcsMjEgKzIyNywxNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRv
Q3ViaWNTbW9vCiAgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7
Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwor
ICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBh
dXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBw
YXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGlj
U2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5n
QnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3Vy
cmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChw
YXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI2OSw0OSArMjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1Bh
dGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWMKICAgICAgICAgc2VnbWVudC5wb2ludDEgPSAqcG9p
bnQxOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAg
ICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAg
ICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFj
dGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNv
bnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9R
dWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFy
c2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsK
KyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVy
KTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsK
ICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0
dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgp
OwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1Nl
Z21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICBh
dXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+
IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gewotICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikg
LT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJl
cihwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFyeCkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQp
OworICAgICAgICBhdXRvIHJ5ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAg
IGlmICghcnkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRv
IGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBhbmdsZSA9
IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNl
QXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNG
bGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIWxhcmdlQXJjKQogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBzd2VlcCA9IHBhcnNlQXJjRmxhZyhj
dXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdC
dWZmZXIpOwogICAgICAgICBpZiAoIXN3ZWVwKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50
LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNp
bmdCdWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICsyOTEsNyBAQCBPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7CiAg
ICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVy
biBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
LSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzUyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU1ZHUGF0aFNvdXJj
ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTcg
KzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKICAgICBP
cHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNsdHlwZShhdXRvKSBwYXJzZShGJiYpOworCiAgICAgU3Ry
aW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7CiAKICAgICB1bmlvbiB7Ci0g
ICAgICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3Rlcjg7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBt
X2NoYXJhY3RlcjE2OwotICAgIH0gbV9jdXJyZW50OwotICAgIHVuaW9uIHsKLSAgICAgICAgY29u
c3QgTENoYXIqIG1fY2hhcmFjdGVyODsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVy
MTY7Ci0gICAgfSBtX2VuZDsKKyAgICAgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gbV9w
YXJzaW5nQnVmZmVyODsKKyAgICAgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4gbV9wYXJz
aW5nQnVmZmVyMTY7CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRM
aXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNs
ZWFySXRlbXMoKTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2
YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNl
OworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGF1dG8g
eFBvcyA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKCF4UG9z
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgYXV0byB5UG9z
ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsK
KworICAgICAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcsJykpCisgICAg
ICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdQb2lu
dDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9zIH0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9y
bUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOworICAgIH0pOworfQor
CitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVt
cykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBw
b2ludC0+eSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjM1MjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDU1ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUG9p
bnRMaXN0KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHZhbHVlLmxlbmd0aCgpOwot
Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgYm9v
bCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAg
ICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHhQb3MgPSBw
YXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXhQb3MpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJl
cihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICAgICAgICAg
IGlmICgheVBvcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXIg
PCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgY3VyKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgICAgICBhcHBlbmQoU1ZH
UG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gIWRlbGltUGFyc2VkOwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVtcykgewotICAgICAgICAgICAg
aWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAn
KTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+
eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0g
ICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgU3RyaW5nIHZh
bHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCShyZXZpc2lv
biAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM3LDcgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewogfQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3Qg
U3RyaW5nVmlldyYgdmFsdWUpCiB7CiAgICAgcGFyc2UodmFsdWUpOwogfQpAQCAtNTksMTkgKzYw
LDMwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8KICAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJz
ZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNv
bnN0IFVDaGFyKiBiZWdpbiA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUludGVy
bmFsKGJlZ2luLCBiZWdpbiArIHZhbHVlLmxlbmd0aCgpLCB0cnVlKTsKKyAgICByZXR1cm4gV1RG
OjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIp
IHsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdHJ1ZSk7Cisg
ICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25z
dCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jv
b2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVy
PExDaGFyPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFy
c2VJbnRlcm5hbChjdXJyUGFyYW0sIGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUlu
dGVybmFsKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNv
bnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIs
IGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZl
ciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25z
dGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZlckRlc2NbXSA9ICB7J2QnLCAnZScsICdmJywgJ2UnLCAn
cid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3Rl
clR5cGUgbm9uZURlc2NbXSA9ICB7J24nLCAnbycsICduJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1lZXREZXNjW10gPSAg
eydtJywgJ2UnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzbGljZURlc2NbXSA9ICB7J3MnLCAnbCcsICdpJywgJ2Mn
LCAnZSd9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
SURZTUlEOwogICAgIFNWR01lZXRPclNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JT
TElDRV9NRUVUOwpAQCAtNzksMTAwICs5MSwxMDAgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OnBhcnNlSQogICAgIG1fYWxpZ24gPSBhbGlnbjsKICAgICBtX21lZXRPclNsaWNl
ID0gbWVldE9yU2xpY2U7CiAKLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFy
YW0sIGVuZCkpCisgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgqY3VyclBhcmFtID09ICdkJykgewot
ICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIpKSB7CisgICAg
aWYgKCpwYXJzaW5nQnVmZmVyID09ICdkJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJz
RXhhY3RseShwYXJzaW5nQnVmZmVyLCBkZWZlckRlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqZGVmZXIqIHZh
bHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVmZXIiIGhlcmUuCi0gICAgICAgIGlmIChj
dXJyUGFyYW0gPT0gZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoY3VyclBhcmFtLCBlbmQpKQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhw
YXJzaW5nQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
ZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJh
bSwgZW5kLCAibm9uZSIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICduJykgeworICAg
ICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBub25lRGVzYzxD
aGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJz
ZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkU7
Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgfSBl
bHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewotICAgICAgICBpZiAoKGVuZCAtIGN1cnJQYXJh
bSkgPCA4KQorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7Cisg
ICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneCcpIHsKKyAgICAgICAgaWYgKHBhcnNp
bmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCA4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoY3VyclBhcmFtWzFdICE9ICdNJyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1kn
IHx8IGN1cnJQYXJhbVs1XSAhPSAnTScpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzFdICE9
ICdNJyB8fCBwYXJzaW5nQnVmZmVyWzRdICE9ICdZJyB8fCBwYXJzaW5nQnVmZmVyWzVdICE9ICdN
JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9
PSAnaScpIHsKLSAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bM10gPT0gJ24nKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzJdID09
ICdpJykgeworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ24nKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU47Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDsKICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFy
YW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2
XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAg
IGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
fSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1
cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3
XSA9PSAnbicpCisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ2Qn
KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU47Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAm
JiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2lu
Z0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAg
ICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAmJiBjdXJyUGFyYW1bM10gPT0gJ3gnKSB7Ci0g
ICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAgICAgICAgICAgICAgIGlm
IChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJb
Ml0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0gJ3gnKSB7CisgICAgICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1
ZmZlcls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1BWFlNSU47Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFt
WzddID09ICdkJykKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzddID09
ICdkJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAm
JiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzaW5nQnVm
ZmVyWzZdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAgICAg
ICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGN1cnJQYXJhbSArPSA4OwotICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOworICAgICAgICBwYXJzaW5nQnVm
ZmVyLmFkdmFuY2VCeSg4KTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdC
dWZmZXIpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY3Vy
clBhcmFtIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqY3VyclBhcmFtID09ICdtJykgewotICAgICAg
ICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibWVldCIpKSB7CisgICAgaWYg
KHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgIGlmICgq
cGFyc2luZ0J1ZmZlciA9PSAnbScpIHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNF
eGFjdGx5KHBhcnNpbmdCdWZmZXIsIG1lZXREZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICptZWV0KiBv
ciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVu
ZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJhbSA9PSAncycpIHsKLSAgICAgICAgICAg
IGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgInNsaWNlIikpIHsKKyAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlm
ICgqcGFyc2luZ0J1ZmZlciA9PSAncycpIHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3Rl
cnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNsaWNlRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVl
dCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFt
LCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIp
OwogICAgICAgICAgICAgaWYgKGFsaWduICE9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUp
CiAgICAgICAgICAgICAgICAgbWVldE9yU2xpY2UgPSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZW5kICE9IGN1cnJQYXJhbSAmJiB2YWxpZGF0ZSkK
KyAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSAmJiB2YWxpZGF0ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgbV9hbGlnbiA9IGFsaWduOwpAQCAtMzI4LDUyICszNDAsNDQgQEAg
QWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYQogCiBTdHJpbmcgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICBTdHJp
bmcgYWxpZ25UeXBlOworICAgIGF1dG8gYWxpZ25UeXBlID0gWyZdKCkgeworICAgICAgICBzd2l0
Y2ggKG1fYWxpZ24pIHsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05F
OgorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUlOWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNaW4iOworICAg
ICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgorICAgICAgICAgICAg
cmV0dXJuICJ4TWlkWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1BWFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWluIjsKKyAgICAgICAgY2FzZSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKKyAgICAgICAgICAgIHJldHVybiAieE1p
bllNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOgor
ICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1BWFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWlkIjsKKyAg
ICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoKKyAgICAgICAgICAg
IHJldHVybiAieE1pbllNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1heCI7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhN
YXhZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOOgor
ICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICAgICAgfTsKIAotICAgIHN3aXRjaCAo
bV9hbGlnbikgewotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKLSAgICAg
ICAgYWxpZ25UeXBlID0gIm5vbmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaW4i
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaW4iOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOOgotICAgICAgICBhbGlnblR5
cGUgPSAieE1heFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNSU5ZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaWQiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOgot
ICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAi
eE1heFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNSU5ZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNYXgiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgotICAgICAg
ICBhbGlnblR5cGUgPSAieE1pZFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlN
YXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1VO
S05PV046Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ1bmtub3duIjsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gInVua25vd24iOwog
ICAgIH07CiAKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKICAgICBkZWZhdWx0OgogICAg
IGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBhbGlnblR5cGU7
CisgICAgICAgIHJldHVybiBhbGlnblR5cGUoKTsKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9N
RUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBtZWV0IjsKKyAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgbWVldCIpOwogICAgIGNhc2UgU1ZHX01FRVRPUlNM
SUNFX1NMSUNFOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBzbGljZSI7CisgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIHNsaWNlIik7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsKLSAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9ydCBhbGlnbigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0LDggKzY0LDkgQEAgcHVibGljOgogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dpY2FsWCwgZmxvYXQgbG9naWNhbFks
IGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNhbEhlaWdodCwgZmxvYXQgcGh5c2ljYWxX
aWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0OwogCi0gICAgdm9pZCBwYXJzZShjb25z
dCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBjb25z
dCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNlKGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiwgYm9v
bCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYs
IGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIApA
QCAtNzMsNyArNzQsOCBAQCBwcml2YXRlOgogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBl
IG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVldE9yU2xpY2U7CiAKLSAgICBi
b29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBl
bmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CisgICAgYm9vbCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mLCBib29sIHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHJpbmdMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZH
U3RyaW5nTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpCit7
CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBpc1NWR1NwYWNlT3JEZWxpbWl0ZXIgPSBb
ZGVsaW1pdGVyXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIGlzU1ZHU3BhY2UoYykgfHwgYyA9
PSBkZWxpbWl0ZXI7CisgICAgfTsKKworICAgIHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9y
UGFyc2luZyhkYXRhLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChw
YXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0
byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGEgbmljZSBpbXByb3ZlbWVudCB0byBhZGQgYSB2
YXJpYW50IG9mIHNraXBVbnRpbCB3aGljaCB3b3JrZWQKKyAgICAgICAgICAgIC8vIHdpdGggbGFt
YmRhIHByZWRpY2F0ZXMuCisgICAgICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2VPckRlbGltaXRlcigqcGFyc2luZ0J1ZmZl
cikpCisgICAgICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOworCisgICAgICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0LCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlciwgZGVsaW1pdGVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNW
R1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gcGFyc2luZ0J1ZmZlci5hdEVu
ZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZygp
IGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBh
dXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVu
ZChzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24gMjYzNTIyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsMzkgKzUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoZW1wdHlT
dHJpbmcoKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVD
aGFyIGRlbGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBh
dXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoZGF0YSkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBkYXRhLmxlbmd0aCgpOwot
ICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3Rh
cnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gZGVsaW1p
dGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAg
ICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpKTsKLSAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDog
bV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
c3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0
ZXIpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4Y2VwdGlvbk9y
PFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25zb2xpZGF0ZSgpCit7
CisgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAg
ICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKworICAgIC8vIFNwZWM6IElm
IHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0dXJuZWQuCisg
ICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihhdCgw
KS5nZXQoKSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25j
YXRlbmF0ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBhdXRvIGl0ZW0gPSBhcHBlbmQo
V1RGTW92ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hhbmdlKCk7CisgICAgcmV0dXJuIG1ha2VS
ZWZQdHIoaXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0
Ojpjb25jYXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHJlc3VsdDsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCisgICAgICAgIHJlc3VsdCAq
PSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6
cGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdC
dWZmZXIpCit7CisgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgIHdoaWxlIChwYXJz
aW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBkZWxpbVBhcnNl
ZCA9IGZhbHNlOworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7
CisgICAgICAgIAorICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICgh
cGFyc2VkVHJhbnNmb3JtVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFu
c2Zvcm1WYWx1ZSgqcGFyc2VkVHJhbnNmb3JtVHlwZSwgcGFyc2luZ0J1ZmZlcik7CisgICAgICAg
IGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1
ZSkpOworCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKwor
ICAgICAgICBpZiAoc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJywnKSkKKyAgICAgICAgICAg
IGRlbGltUGFyc2VkID0gdHJ1ZTsKKworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFy
c2luZ0J1ZmZlcik7CisgICAgfQorICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Cit9CisKK3ZvaWQg
U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVh
ckl0ZW1zKCk7CisKKyAgICBib29sIHBhcnNpbmdTdWNjZWVkZWQgPSBXVEY6OnJlYWRDaGFyYWN0
ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1ZmZlcikgeworICAgICAgICBy
ZXR1cm4gcGFyc2VHZW5lcmljKHBhcnNpbmdCdWZmZXIpOworICAgIH0pOworICAgIAorICAgIGlm
ICghcGFyc2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgY2xlYXJJdGVtcygpOworfQorCitib29sIFNW
R1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5n
QnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisK
K2Jvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
IHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhwYXJzaW5nQnVmZmVy
KTsKK30KKworU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5z
ZnJvbSA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRyYW5z
ZnJvbS0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOworfQorCit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsODYgKzU2LDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN2Z1RyYW5zZm9ybTsKICAgICB9CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQ
dHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKQotICAgIHsKLSAgICAgICAgYXV0byByZXN1
bHQgPSBjYW5BbHRlckxpc3QoKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgICAgICBB
U1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLQotICAgICAgICAvLyBTcGVjOiBJ
ZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1ZSBvZiBudWxsIGlzIHJldHVybmVkLgot
ICAgICAgICBpZiAobV9pdGVtcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBpZiAobV9pdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVy
biBtYWtlUmVmUHRyKGF0KDApLmdldCgpKTsKLQotICAgICAgICBhdXRvIG5ld0l0ZW0gPSBTVkdU
cmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKLSAgICAgICAgY2xlYXJJdGVtcygpOwot
Ci0gICAgICAgIGF1dG8gaXRlbSA9IGFwcGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsKLSAgICAgICAg
Y29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGl0ZW0uZ2V0KCkpOwot
ICAgIH0KLQotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25z
dCBVQ2hhciogc3RhcnQgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGlmICghcGFy
c2Uoc3RhcnQsIHN0YXJ0ICsgdmFsdWUubGVuZ3RoKCkpKQotICAgICAgICAgICAgY2xlYXJJdGVt
cygpOwotICAgIH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcmVzdWx0OwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCi0gICAgICAgICAgICByZXN1bHQgKj0gdHJhbnNm
b3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
LSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNm
cm9tIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKCk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IGNvbmNhdGVuYXRlKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAg
IGJvb2wgcGFyc2UoY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCkKLSAgICB7
Ci0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0
IDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0
LCBlbmQpOwotICAgICAgICAgICAgaWYgKCF0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQpOwotICAgICAg
ICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2Vk
VHJhbnNmb3JtVmFsdWUpKTsKLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0
YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcp
IHsKLSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
KytzdGFydDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7
Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VH
ZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICBib29sIHBh
cnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMjYzNTIy
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4NSArMjcsODYgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgcGFyc2VUcmFu
c2Zvcm1QYXJhbUxpc3QoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0
KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQorU1ZHVHJhbnNmb3JtYWJsZTo6
flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlciwgZmxvYXQqIHZhbHVlcywgaW50
IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCiB7CiAgICAgaW50IG9wdGlvbmFsUGFyYW1zID0gMCwg
cmVxdWlyZWRQYXJhbXMgPSAwOwogICAgIAotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHB0ciwgZW5kKSB8fCAqcHRyICE9ICcoJykKKyAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnKCcpCiAgICAgICAgIHJldHVy
biAtMTsKICAgICAKLSAgICBwdHIrKzsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAKLSAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhwYXJzaW5nQnVmZmVyKTsKIAogICAgIHdoaWxlIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVk
KSB7Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBhdXRvIHBhcnNlZE51bWJl
ciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgIGlmICghcGFyc2VkTnVt
YmVyKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJh
bXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVxdWlyZWRQYXJhbXMrKzsKICAgICAgICAg
aWYgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsKICAgICB9Ci0gICAgaWYgKCFza2lw
T3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgYm9vbCBk
ZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsK
KyAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIo
cGFyc2luZ0J1ZmZlcik7CiAKLSAgICBpZiAocHRyID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgaWYgKCpwdHIgPT0g
JyknKSB7IC8vIHNraXAgb3B0aW9uYWxzCi0gICAgICAgIHB0cisrOworICAgIGlmICgqcGFyc2lu
Z0J1ZmZlciA9PSAnKScpIHsKKyAgICAgICAgLy8gc2tpcCBvcHRpb25hbHMKKyAgICAgICAgKytw
YXJzaW5nQnVmZmVyOwogICAgICAgICBpZiAoZGVsaW1QYXJzZWQpCiAgICAgICAgICAgICByZXR1
cm4gLTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgd2hpbGUgKG9wdGlvbmFsUGFyYW1zIDwgb3B0
aW9uYWwpIHsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgaWYgKHBh
cnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAg
ICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBw
YXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OwogICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOwogICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXNd
ID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1zKys7CiAgICAgICAg
ICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKLSAgICAgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5k
KSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAotICAgICAgICBkZWxpbVBhcnNlZCA9IHNr
aXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgZGVsaW1Q
YXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwYXJzaW5nQnVmZmVyKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknIHx8IGRlbGlt
UGFyc2VkKQorICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpIHx8ICpwYXJzaW5nQnVm
ZmVyICE9ICcpJyB8fCBkZWxpbVBhcnNlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgcHRyKys7CisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICB9CiAKICAgICByZXR1cm4g
cmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtczsKIH0KIAogLy8gVGhlc2Ugc2hvdWxkIGJl
IGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNmb3JtVHlwZQotc3RhdGljIGNvbnN0IGlu
dCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07Ci1zdGF0
aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAxLCAyLCAw
LCAwfTsKK2NvbnN0ZXhwciBpbnQgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDYsIDEs
IDEsIDEsIDEsIDF9OworY29uc3RleHByIGludCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbXSA9ICB7
MCwgMCwgMSwgMSwgMiwgMCwgMH07CiAKLS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4g
b3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFuc2Zvcm1hYmxl
Ojp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVD
aGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGludCB2YWx1ZUNvdW50ID0gMDsKICAgICBmbG9hdCB2YWx1ZXNbXSA9IHsw
LCAwLCAwLCAwLCAwLCAwfTsKLSAgICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5zZm9ybVBh
cmFtTGlzdChwdHIsIGVuZCwgdmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9w
dGlvbmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkKKyAgICBpZiAoKHZhbHVlQ291bnQgPSBw
YXJzZVRyYW5zZm9ybVBhcmFtTGlzdChwYXJzaW5nQnVmZmVyLCB2YWx1ZXMsIHJlcXVpcmVkVmFs
dWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgU1ZHVHJhbnNmb3JtVmFsdWUgdHJhbnNm
b3JtOwpAQCAtMTQ1LDQyICsxNDYsNjMgQEAgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNW
R1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXN0YXRpYyBjb25zdCBVQ2hh
ciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9Owotc3RhdGljIGNvbnN0
IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdZJ307Ci1zdGF0aWMg
Y29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAnYScsICdsJywgJ2UnfTsKLXN0
YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywg
J3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2Nb
XSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIg
bWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsKK09wdGlvbmFs
PFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVl
KFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdC
dWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9y
bVZhbHVlR2VuZXJpYyh0eXBlLCBwYXJzaW5nQnVmZmVyKTsKK30KKworT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxV
Q2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVH
ZW5lcmljKHR5cGUsIHBhcnNpbmdCdWZmZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WERlc2NbXSA9ICB7J3MnLCAn
aycsICdlJywgJ3cnLCAnWCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIENoYXJhY3RlclR5cGUgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3Jywg
J1knfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywgJ2EnLCAnbCcsICdlJ307Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB0cmFuc2xh
dGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9
OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hdHJp
eERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAnaScsICd4J307CiAKLU9wdGlvbmFsPFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVu
ZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJp
YyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewot
ICAgIGlmIChjdXJyVHJhbnNmb3JtID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCpjdXJyVHJhbnNm
b3JtID09ICdzJykgewotICAgICAgICBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQs
IHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WERlc2MpKSkKKyAgICBpZiAoKnBhcnNp
bmdCdWZmZXIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFy
c2luZ0J1ZmZlciwgc2tld1hEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWDsKLSAgICAgICAgZWxzZSBp
ZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdZRGVzYywgV1RGX0FSUkFZX0xF
TkdUSChza2V3WURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJz
aW5nQnVmZmVyLCBza2V3WURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOwotICAgICAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVO
R1RIKHNjYWxlRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNp
bmdCdWZmZXIsIHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4g
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSBlbHNlIGlmIChza2lwU3RyaW5n
KGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFu
c2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAg
aWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB0cmFuc2xhdGVEZXNjPENo
YXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJB
TlNGT1JNX1RSQU5TTEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0s
IGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChyb3RhdGVEZXNjKSkpCisgICAgaWYg
KHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCByb3RhdGVEZXNjPENoYXJhY3Rl
clR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1JPVEFURTsKLSAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0
cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkpCisgICAgaWYgKHNraXBDaGFy
YWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBtYXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkK
ICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsK
IAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBT
dHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmlu
Z1ZpZXcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcoc3RyaW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNl
VHJhbnNmb3JtVHlwZShwYXJzaW5nQnVmZmVyKTsKKyAgICB9KTsKK30KKworT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikK
K3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsK
K30KKworT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFy
PiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0
cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcmV0dXJuIHBh
cnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJpbmcubGVuZ3Ro
KCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTik7Cisg
ICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtMzIsOSArMzEsMTIgQEAgY2xhc3Mg
U1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1YWwg
flNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1W
YWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3Jt
VHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwotICAgIHN0YXRpYyBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29u
c3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9y
bSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZh
bHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKKworICAgIHN0
YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VU
cmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShTdHJp
bmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+Jik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRl
U3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDk5ICs2
MSw5MCBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFuZFBhbjo6cmVz
ZXQoKTsKIH0KIAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndics
ICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3Qm94U3Bl
Y1tdID0geyd2JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0aWMgY29uc3Qg
VUNoYXIgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycsICdl
JywgJ3InLCAndicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAnYScs
ICd0JywgJ2knLCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNwZWNbXSA9IHsn
dCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywgJ0EnLCAnbics
ICdkJywgJ1AnLCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1RhcmdldFNwZWNb
XSA9ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3QnfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZp
ZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHByZXNl
cnZlQXNwZWN0UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdyJywgJ3Yn
LCAnZScsICdBJywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcsICdpJywg
J28nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAn
bycsICdyJywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBDaGFyYWN0ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywgJ20nLCAn
QScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2Jywg
J2knLCAnZScsICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJvb2wgU1ZH
Vmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKK2Jvb2wgU1ZH
Vmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3BlYykudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3BlYyA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZpZXdTcGVjICsg
dmlld1NwZWMubGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAhbV9j
b250ZXh0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFza2lwU3Ry
aW5nKGN1cnJWaWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xFTkdUSChzdmdW
aWV3U3BlYykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVj
ID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGN1cnJWaWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAq
Y3VyclZpZXdTcGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndicp
IHsKLSAgICAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94
U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMr
KzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNl
Vmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICgh
dmlld0JveCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAgICAgICAgICAgICAgIGlmIChj
dXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHZpZXdU
YXJnZXRTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiB2aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAg
ICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBpZiAoY3Vy
clZpZXdTcGVjID49IGVuZCkKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcoc3RyaW5nLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAgdXNp
bmcgQ2hhcmFjdGVyVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFy
YWN0ZXJUeXBlOworCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgIW1fY29u
dGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc3ZnVmlld1NwZWM8Q2hhcmFjdGVy
VHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2tpcEV4
YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KnBhcnNpbmdCdWZmZXIgIT0gJyknKSB7CisgICAgICAgICAgICBpZiAoKnBhcnNpbmdCdWZmZXIg
PT0gJ3YnKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJz
aW5nQnVmZmVyLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdC
b3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChwYXJzaW5nQnVmZmVyLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3Zl
KCp2aWV3Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCB2aWV3VGFyZ2V0U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdUYXJn
ZXRTdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
c2tpcFVudGlsKHBhcnNpbmdCdWZmZXIsICcpJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzaW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3
VGFyZ2V0U3RhcnQsIHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIHZpZXdUYXJnZXRTdGFydCk7
CisgICAgICAgICAgICAgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBl
bHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAneicpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNr
aXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0
ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcoJykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBhdXRvIHpvb21BbmRQYW4gPSBT
Vkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4ocGFyc2luZ0J1ZmZlcik7CisgICAgICAgICAg
ICAgICAgaWYgKCF6b29tQW5kUGFuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgc2V0Wm9vbUFuZFBhbigqem9vbUFuZFBhbik7CisgICAgICAgICAg
ICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXJzaW5nQnVm
ZmVyID09ICdwJykgeworICAgICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5
KHBhcnNpbmdCdWZmZXIsIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjPENoYXJhY3RlclR5cGU+KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICgh
c2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBw
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RS
YXRpby5wYXJzZShwYXJzaW5nQnVmZmVyLCBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNl
cnZlQXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAndCcpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCB0cmFuc2Zvcm1TcGVj
PENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwgJygnKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1fdHJhbnNmb3Jt
LT5wYXJzZShwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5
KHBhcnNpbmdCdWZmZXIsICcpJykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0
YXJ0LCBjdXJyVmlld1NwZWMgLSB2aWV3VGFyZ2V0U3RhcnQpOwotICAgICAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3onKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHpvb21BbmRQYW5TcGVj
LCBXVEZfQVJSQVlfTEVOR1RIKHpvb21BbmRQYW5TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJW
aWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBpZiAoIVNWR1pvb21BbmRQYW46OnBhcnNl
Wm9vbUFuZFBhbihjdXJyVmlld1NwZWMsIGVuZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3Bl
YyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3Vy
clZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAncCcpIHsK
LSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgcHJlc2VydmVB
c3BlY3RSYXRpb1NwZWMsIFdURl9BUlJBWV9MRU5HVEgocHJlc2VydmVBc3BlY3RSYXRpb1NwZWMp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZp
ZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgICAgICAg
ICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kLCBmYWxz
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2V0UHJlc2Vy
dmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKLSAgICAgICAgICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVs
c2UgaWYgKCpjdXJyVmlld1NwZWMgPT0gJ3QnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJp
bmcoY3VyclZpZXdTcGVjLCBlbmQsIHRyYW5zZm9ybVNwZWMsIFdURl9BUlJBWV9MRU5HVEgodHJh
bnNmb3JtU3BlYykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAg
ICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kKTsKLSAgICAgICAg
ICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
Y3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgPT0gJzsnKQotICAgICAgICAgICAg
Y3VyclZpZXdTcGVjKys7Ci0gICAgfQotICAgIAotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5k
IHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnOycpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnKScpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdW
aWV3U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5o
CShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRFbGVtZW50KSk7CiAgICAgfQogCi0gICAg
Ym9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgcGFyc2VWaWV3U3Bl
Yyhjb25zdCBTdHJpbmdWaWV3Jik7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgcmVzZXRD
b250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7IH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwy
NSArMjIsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdab29tQW5kUGFu
LmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBh
bihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgZGlzYWJsZVtdID0geyAn
ZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hZ25pZnlbXSA9IHsgJ20nLCAn
YScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5k
UGFuR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVm
ZmVyKQogewotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAn
cycsICdhJywgJ2InLCAnbCcsICdlJyB9OwotICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQs
IGRpc2FibGUsIFdURl9BUlJBWV9MRU5HVEgoZGlzYWJsZSkpKSB7Ci0gICAgICAgIG1fem9vbUFu
ZFBhbiA9IFNWR1pvb21BbmRQYW5EaXNhYmxlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgbWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAn
bicsICdpJywgJ2YnLCAneScgfTsKLSAgICBpZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBtYWdu
aWZ5LCBXVEZfQVJSQVlfTEVOR1RIKG1hZ25pZnkpKSkgewotICAgICAgICBtX3pvb21BbmRQYW4g
PSBTVkdab29tQW5kUGFuTWFnbmlmeTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAg
IGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgZGlzYWJsZTxDaGFyYWN0
ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuRGlzYWJsZTsKKworICAgIGlm
IChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgbWFnbmlmeTxDaGFyYWN0ZXJU
eXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFnbmlmeTsKKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxTVkdab29t
QW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdC
dWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVpvb21BbmRQ
YW5HZW5lcmljKHBhcnNpbmdCdWZmZXIpOworfQorCitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlw
ZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNo
YXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmlj
KHBhcnNpbmdCdWZmZXIpOwogfQogCiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lvbiAyNjM1MjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdab29tQW5kUGFuKCkg
PSBkZWZhdWx0OwogCi0gICAgYm9vbCBwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiwgY29u
c3QgVUNoYXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNl
Wm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8VUNoYXI+Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUFuZFBhblR5cGUgbV96b29tQW5k
UGFuIHsgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHWm9vbUFuZFBhblR5cGU+Ojppbml0aWFsVmFsdWUo
KSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402867</attachid>
            <date>2020-06-26 08:40:35 -0700</date>
            <delta_ts>2020-06-26 14:43:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213635-20200626084034.patch</filename>
            <type>text/plain</type>
            <size>135690</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAyMC0wNi0yNSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBTVkcgcmVsYXRlZCBw
YXJzZXJzIG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0KKworICAgICAgICAqIEhlYWRl
cnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGls
aXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90QVNDSUlTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwRXhhY3RseSk6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJQcmVkaWNh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcFVudGlsKToKKyAgICAgICAgKFdlYkNvcmU6OnNr
aXBFeGFjdGx5SWdub3JpbmdBU0NJSUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcENoYXJh
Y3RlcnNFeGFjdGx5KToKKyAgICAgICAgKiBzdmcvU1ZHQW5nbGVWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUFuZ2xlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmdsZVZh
bHVlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGluZXMpOgorICAgICAgICAqIHN2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZp
ZXdCb3hHZW5lcmljKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94Lmg6CisgICAgICAg
ICogc3ZnL1NWR0xlbmd0aExpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xl
bmd0aExpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnZhbHVl
QXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGhMaXN0OjpwYXJzZSk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGVuZ3RoVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBz
dmcvU1ZHTGVuZ3RoVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpT
VkdMZW5ndGhWYWx1ZSk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR051bWJlckxpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR051bWJlckxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdOdW1iZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQ
YXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6aXNTVkdTcGFjZU9yQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1Bh
dGhTdHJpbmdTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpoYXNNb3JlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1h
bmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENv
bW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5l
VG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9pbnRMaXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBhcnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BvaW50TGlzdDo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR1BvaW50TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJz
ZSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6Cisg
ICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0cmluZ0xpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0cmluZ0xpc3Q6
OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdTdHJpbmdMaXN0Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RyYW5zZm9ybUxpc3Q6OmNvbnNvbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybUxpc3Q6OnBhcnNlR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1MaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0Ojp2
YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgor
ICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlVHJhbnNmb3JtUGFyYW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3Jt
VmFsdWVHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUcmFuc2Zvcm1UeXBlR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lw
VHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHVmlld1NwZWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6
OnBhcnNlVmlld1NwZWMpOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5oOgorICAgICAgICAq
IHN2Zy9TVkdab29tQW5kUGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBh
bkdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5k
UGFuKToKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUFuZFBhbi5oOgorCiAyMDIwLTA2LTI1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVT
U0lPTihyMjU2MTY2LCByMjYwNTk2KSBXS05hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5hbGxIVFRQ
SGVhZGVyRmllbGRzIG5lZWRzIHRvIGNvbnRhaW4gVXNlci1BZ2VudCBhbmQgQWNjZXB0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9h
ZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjU0MCw2ICsyNTQwLDcgQEAgc3ZnL1NWR0hLZXJu
RWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VMb2FkZXIu
Y3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKK3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAogc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDksNiArMjU1MCw3IEBAIHN2Zy9TVkdNYXJrZXJF
bGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVu
dC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcAorc3ZnL1NWR051bWJlckxpc3Qu
Y3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAog
c3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2Myw2ICsyNTY1LDcgQEAgc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKIHN2
Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAorc3ZnL1NW
R1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5Z29uRWxl
bWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCkBAIC0yNTczLDYgKzI1NzYsNyBA
QCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAogc3ZnL1NW
R1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCitzdmcvU1ZHU3RyaW5nTGlz
dC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCiBzdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAK
IHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAtMjU4Niw2ICsyNTkwLDcgQEAgc3ZnL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcvU1ZHVGl0bGVFbGVtZW50LmNwcAogc3ZnL1NW
R1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCitz
dmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAogc3ZnL1NW
R1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtub3duRWxlbWVudC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU5MCw3ICsxNTkwLDcgQEAKIAkJNTMyMDQyMDIx
RjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIz
NCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAgKi87IH07CiAJCTUzNTFENEIxMURGOTE2QjQw
MDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFDMDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzNkQ1QTIw
MTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzZENUExRjE5M0UxOEU5MDBDRTRDQUIgLyog
SFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyog
UGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAq
LzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkz
RThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTM4RUM4MDIxRjk2QUY4MTAwNEQyMkE4IC8q
IFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAg
Ki87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0Yz
MUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSAqLzsgfTsKIAkJNTM4RUM4
MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0VFMUY5NkFBNTYwMDREMjJBOCAv
KiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBAIC0xMDE5Niw2ICsxMDE5NiwxMSBAQAogCQk3
Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3
RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDcw
QzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5ndGhMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3
MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVtYmVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NE
NzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3
MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NE
NzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAvKiBTZXR0aW5ncy55YW1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxlRGVjbGFyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0UxOTE0NzFGMkE5OEFGMDAyNzJGNzgg
LyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
ZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE0NSw2
ICsyNTE1MCw3IEBACiAJCQkJQjIyMjc4OUUwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5p
ZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQu
Y3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMwMDcyMDMxMiAvKiBTVkdMZW5ndGhDb250ZXh0
LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAwRTYxMDQwIC8qIFNWR0xlbmd0aExpc3QuY3Bw
ICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggKi8s
CiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aExpc3QuaWRsICovLAog
CQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAvKiBTVkdMZW5ndGhWYWx1ZS5jcHAgKi8sCkBA
IC0yNTE3Nyw2ICsyNTE4Myw3IEBACiAJCQkJNDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNW
R01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNW
R051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXIu
aWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkwMEU2MTA0MCAvKiBTVkdOdW1iZXJMaXN0LmNw
cCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oICov
LAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmlkbCAqLywK
IAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCAq
LywKQEAgLTI1MjQwLDYgKzI1MjQ3LDcgQEAKIAkJCQlCMjIyNzhGMzBEMDBCRjIxMDA3MUI3ODIg
LyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAogCQkJCTdDRTU4RDQ5MURENjRBNUIwMDEyODU1
MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3OEY0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQ
b2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlz
dC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5o
ICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2ludExpc3QuaWRsICov
LAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2x5RWxlbWVudC5jcHAgKi8s
CkBAIC0yNTI3Myw2ICsyNTI4MSw3IEBACiAJCQkJQjIyMjc5MTIwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlCMjIyNzkxMzBEMDBCRjIxMDA3MUI3ODIgLyog
U1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIyNzkxNDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZH
U3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcwQzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdT
dHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkxNjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3Ry
aW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdM
aXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVt
ZW50LmNwcCAqLywKQEAgLTI1MzE0LDYgKzI1MzIzLDcgQEAKIAkJCQlCMjIyNzk0NDBEMDBCRjIx
MDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIyMjI3OTQ2MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8sCiAJCQkJQjIyMjc5NDcwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8sCisJCQkJN0NENzBDNDYy
NEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9ybUxpc3QuY3BwICovLAogCQkJCUIyMjI3OTQ5
MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggKi8sCiAJCQkJQjIyMjc5NEEw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybUxpc3QuaWRsICovLAogCQkJCTdDRTU4RDU2
MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zvcm1WYWx1ZS5oICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYz
NTIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIgYykKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlPgoraW5saW5lIGJvb2wgaXNOb3RBU0NJSVNwYWNlKENoYXJUeXBlIGMpCiB7CiAg
ICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZT4KLWJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29u
c3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUgZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIHR5cGVuYW1lIERlbGltaXRlclR5cGU+Citib29sIHNraXBFeGFjdGx5KGNvbnN0
IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUg
ZGVsaW1pdGVyKQogewogICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gZGVs
aW1pdGVyKSB7CiAgICAgICAgICsrcG9zaXRpb247CkBAIC00OSw2ICs1MCwxNiBAQCBib29sIHNr
aXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5hbWUgRGVsaW1pdGVyVHlwZT4KK2Jv
b2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZm
ZXIsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqcGFyc2luZ0J1ZmZlciA9PSBkZWxpbWl0ZXIpIHsK
KyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBj
aGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogYm9vbCBza2lwRXhhY3RseShjb25zdCBDaGFy
VHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogZW5kKQogewpAQCAtNTksMTMgKzcwLDMw
IEBAIGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgotdm9pZCBza2lwVW50aWwo
Y29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCwgQ2hhclR5cGUg
ZGVsaW1pdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJl
ZGljYXRlKENoYXJUeXBlKT4KK2Jvb2wgc2tpcEV4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcGFyc2luZ0J1ZmZlcikp
IHsKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlw
ZW5hbWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9z
aXRpb24sIGNvbnN0IENoYXJUeXBlKiBlbmQsIERlbGltaXRlclR5cGUgZGVsaW1pdGVyKQogewog
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gIT0gZGVsaW1pdGVyKQogICAg
ICAgICArK3Bvc2l0aW9uOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgdHlwZW5h
bWUgRGVsaW1pdGVyVHlwZT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
clR5cGU+JiBwYXJzaW5nQnVmZmVyLCBEZWxpbWl0ZXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICB3
aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdC
dWZmZXIgIT0gZGVsaW1pdGVyKQorICAgICAgICArK3BhcnNpbmdCdWZmZXI7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJUeXBlLCBib29sIGNoYXJhY3RlclByZWRpY2F0ZShDaGFyVHlwZSk+
CiB2b2lkIHNraXBVbnRpbChjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlw
ZSogZW5kKQogewpAQCAtNzQsNiArMTAyLDEzIEBAIHZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJU
eXBlKiYgcG9zaXRpb24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hh
cmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3ZvaWQgc2tpcFVudGlsKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHdoaWxlIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhY2hhcmFjdGVyUHJlZGljYXRlKCpwYXJz
aW5nQnVmZmVyKSkKKyAgICAgICAgKytwYXJzaW5nQnVmZmVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgogdm9pZCBz
a2lwV2hpbGUoY29uc3QgQ2hhclR5cGUqJiBwb3NpdGlvbiwgY29uc3QgQ2hhclR5cGUqIGVuZCkK
IHsKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3Np
dGlvbikpCkBAIC04MSw2ICsxMTYsMTMgQEAgdm9pZCBza2lwV2hpbGUoY29uc3QgQ2hhclR5cGUq
JiBwb3NpdGlvbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0
ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgordm9pZCBza2lwV2hpbGUoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxDaGFyVHlwZT4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIu
aGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGNoYXJhY3RlclByZWRpY2F0ZSgqcGFyc2luZ0J1
ZmZlcikpCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KIHZvaWQgcmV2ZXJz
ZVNraXBXaGlsZShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlwZSogc3Rh
cnQpCiB7CiAgICAgd2hpbGUgKHBvc2l0aW9uID49IHN0YXJ0ICYmIGNoYXJhY3RlclByZWRpY2F0
ZSgqcG9zaXRpb24pKQpAQCAtOTIsMTEgKzEzNCw0MSBAQCBib29sIHNraXBFeGFjdGx5SWdub3Jp
bmdBU0NJSUNhc2UoY29uc3QgCiB7CiAgICAgaWYgKHBvc2l0aW9uICsgbG93ZXJjYXNlTGV0dGVy
c0xlbmd0aCA+IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghV1RGOjplcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9z
aXRpb24gKz0gKGxvd2VyY2FzZUxldHRlcnNMZW5ndGggLSAxKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAotICAgIGJvb2wgcmVzdWx0ID0gV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShwb3NpdGlvbiwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEsIGxvd2VyY2FzZUxldHRlcnMp
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHBvc2l0aW9uICs9IChsb3dlcmNhc2VMZXR0ZXJz
TGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHVuc2lnbmVkIGxvd2VyY2FzZUxldHRlcnNMZW5ndGg+Citib29sIHNraXBFeGFj
dGx5SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
cGFyc2luZ0J1ZmZlciwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xvd2VyY2FzZUxl
dHRlcnNMZW5ndGhdKQoreworICAgIGlmIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygp
IDwgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIVdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2luZ0J1ZmZlci5w
b3NpdGlvbigpLCBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0gMSwgbG93ZXJjYXNlTGV0dGVycykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJzaW5nQnVmZmVyICs9IChsb3dlcmNhc2VM
ZXR0ZXJzTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgYm9v
bCBza2lwQ2hhcmFjdGVyc0V4YWN0bHkoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBDaGFyYWN0ZXJUeXBlKCZzdHIpW2NoYXJhY3RlckNv
dW50XSkKK3sKKyAgICBpZiAoZW5kIC0gcHRyIDwgY2hhcmFjdGVyQ291bnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobWVtY21wKHN0ciwgcHRyLCBzaXplb2YoQ2hhcmFjdGVyVHlw
ZSkgKiBjaGFyYWN0ZXJDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwdHIgKz0g
Y2hhcmFjdGVyQ291bnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGUsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBjb25zdGV4cHIgYm9vbCBz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYg
cGFyc2luZ0J1ZmZlciwgY29uc3QgQ2hhcmFjdGVyVHlwZSgmc3RyKVtjaGFyYWN0ZXJDb3VudF0p
Cit7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCBjaGFyYWN0ZXJD
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAoc3RyLCBwYXJzaW5n
QnVmZmVyLnBvc2l0aW9uKCksIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcnNpbmdCdWZmZXIgKz0gY2hhcmFjdGVy
Q291bnQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVO
dW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDE5ICs4MSwxOSBAQCBTdHJpbmcgU1ZHQW5nbGVW
YWx1ZTo6dmFsdWVBc1N0cmluZygpIGNvCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFNWR0FuZ2xlVmFsdWU6
OlR5cGUgcGFyc2VBbmdsZVR5cGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMg
aW5saW5lIFNWR0FuZ2xlVmFsdWU6OlR5cGUgcGFyc2VBbmdsZVR5cGUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBwYXJzaW5nQnVmZmVyKQogewotICAgIHN3aXRjaCAoZW5kIC0g
cHRyKSB7CisgICAgc3dpdGNoIChwYXJzaW5nQnVmZmVyLmxlbmd0aFJlbWFpbmluZygpKSB7CiAg
ICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gU1ZHQW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9V
TlNQRUNJRklFRDsKICAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2QnICYmIHB0
clsxXSA9PSAnZScgJiYgcHRyWzJdID09ICdnJykKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXJb
MF0gPT0gJ2QnICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0gJ2UnICYmIHBhcnNpbmdCdWZmZXJbMl0g
PT0gJ2cnKQogICAgICAgICAgICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVf
REVHOwotICAgICAgICBpZiAocHRyWzBdID09ICdyJyAmJiBwdHJbMV0gPT0gJ2EnICYmIHB0clsy
XSA9PSAnZCcpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzBdID09ICdyJyAmJiBwYXJzaW5n
QnVmZmVyWzFdID09ICdhJyAmJiBwYXJzaW5nQnVmZmVyWzJdID09ICdkJykKICAgICAgICAgICAg
IHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1JBRDsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA0OgotICAgICAgICBpZiAocHRyWzBdID09ICdnJyAmJiBwdHJbMV0gPT0gJ3In
ICYmIHB0clsyXSA9PSAnYScgJiYgcHRyWzNdID09ICdkJykKKyAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXJbMF0gPT0gJ2cnICYmIHBhcnNpbmdCdWZmZXJbMV0gPT0gJ3InICYmIHBhcnNpbmdCdWZm
ZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZmZXJbM10gPT0gJ2QnKQogICAgICAgICAgICAgcmV0
dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfR1JBRDsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTA2LDI3ICsxMDcsMTkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1
ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gaGVscGVy
ID0gWyZdKGF1dG8qIHB0ciwgYXV0byogZW5kKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7Ci0gICAg
ICAgIGF1dG8gdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBFeGNlcHRp
b25Pcjx2b2lkPiB7CisgICAgICAgIGF1dG8gdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VO
dW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKICAg
ICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAotICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VB
bmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmdsZVR5
cGUocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICh1bml0VHlwZSA9PSBTVkdBbmdsZVZhbHVl
OjpTVkdfQU5HTEVUWVBFX1VOS05PV04pCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U3ludGF4RXJyb3IgfTsKIAogICAgICAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7CiAgICAgICAg
IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gKnZhbHVlSW5TcGVjaWZpZWRVbml0czsKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9OwotCi0gICAgaWYgKHZhbHVlLmlzOEJpdCgpKSB7Ci0gICAg
ICAgIGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIHJldHVybiBoZWxw
ZXIocHRyLCBwdHIgKyB2YWx1ZS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgYXV0byogcHRyID0g
dmFsdWUuY2hhcmFjdGVyczE2KCk7Ci0gICAgcmV0dXJuIGhlbHBlcihwdHIsIHB0ciArIHZhbHVl
Lmxlbmd0aCgpKTsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1
ZTo6bmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZmxvYXQg
dmFsdWVJblNwZWNpZmllZFVuaXRzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhh
c1ZhbGkKIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikgewotICAgICAgICBtX3R5cGUgPSBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUodmFsdWUpOworICAgICAgICBtX3R5cGUg
PSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUodmFsdWUpLnZhbHVlT3IoU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CiAgICAgICAgIGlmIChtX3R5
cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fTUFUUklYKQogICAgICAgICAg
ICAgbV90eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjsKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDU0ICs3OCw1MCBAQCBmYWlsOgogICAgIHJlc3VsdC5j
bGVhcigpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtl
eVNwbGluZXMoY29uc3QgU3RyaW5nVmlldyYgcGFyc2UpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9y
PFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQog
ewotICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IHBhcnNlLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBj
dXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciAr
IHBhcnNlLmxlbmd0aCgpOwotCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsK
LQotICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7Ci0KLSAgICBib29sIGRlbGltUGFyc2Vk
ID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICBkZWxpbVBhcnNlZCA9
IGZhbHNlOwotICAgICAgICBhdXRvIHBvc0EgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAg
ICAgIGlmICghcG9zQSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIFdURjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2lu
Z0J1ZmZlcikgLT4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiB7CisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBhdXRvIHBvc0IgPSBw
YXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgICAgIGlmICghcG9zQikKLSAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CiAK
LSAgICAgICAgYXV0byBwb3NDID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAo
IXBvc0MpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBib29sIGRl
bGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgICAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgYXV0byBwb3NEID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAgIGlmICghcG9zRCkKLSAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQikKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CisgICAgICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsK
KyAgICAgICAgICAgIGlmICghcG9zQykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnOycpIHsKLSAgICAgICAg
ICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGN1cisrOwotICAgICAgICB9Cisg
ICAgICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCFwb3NEKQorICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJz
aW5nQnVmZmVyKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwg
KnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0
bHkocGFyc2luZ0J1ZmZlciwgJzsnKSkKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRy
dWU7CiAKLSAgICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFy
c2luZ0J1ZmZlcik7CisKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpw
b3NBLCAqcG9zQiwgKnBvc0MsICpwb3NEIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEo
cGFyc2luZ0J1ZmZlci5hdEVuZCgpICYmICFkZWxpbVBhcnNlZCkpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9KTsKIH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODYsMjcgKzg3LDM3IEBAIGJv
b2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJpYnV0ZShjb24KIAogT3B0aW9uYWw8RmxvYXRS
ZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1
ZSkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHZhbHVlLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwotICAgIHJldHVybiBwYXJzZVZpZXdCb3goY2hhcmFjdGVycywgY2hhcmFjdGVy
cyArIHZhbHVlLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBh
cnNlVmlld0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlcik7CisgICAgfSk7Cit9CisKK09wdGlvbmFs
PEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1
ZmZlcjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAgcmV0dXJu
IHBhcnNlVmlld0JveEdlbmVyaWMocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCitPcHRp
b25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNp
bmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJl
dHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKHBhcnNpbmdCdWZmZXIsIHZhbGlkYXRlKTsKIH0KIAot
T3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBV
Q2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VWaWV3Qm94R2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBw
YXJzaW5nQnVmZmVyLCBib29sIHZhbGlkYXRlKQogewotICAgIFN0cmluZ1ZpZXcgc3RyKGMsIGVu
ZCAtIGMpOworICAgIFN0cmluZ1ZpZXcgc3RyaW5nVG9QYXJzZSA9IHBhcnNpbmdCdWZmZXIuc3Ry
aW5nVmlld09mQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGMsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOwog
Ci0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKLSAgICBhdXRvIHkgPSBwYXJzZU51
bWJlcihjLCBlbmQpOwotICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAg
IGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIoYywgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
RG9udFNraXApOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAg
IGF1dG8geSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOworICAgIGF1dG8gd2lkdGggPSBw
YXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVy
KHBhcnNpbmdCdWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAKICAgICBp
ZiAodmFsaWRhdGUpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbV92aWV3Qm94LT5j
b250ZXh0RWxlbWVudCgpLT5kb2N1bWVudCgpOwogCiAgICAgICAgIGlmICgheCB8fCAheSB8fCAh
d2lkdGggfHwgIWhlaWdodCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9
XCIiLCBzdHIsICJcIiIpKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
Iiwgc3RyaW5nVG9QYXJzZSwgIlwiIikpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQogCkBAIC0xMjMsOSArMTM0LDkgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcgogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91
bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KLSAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGMsIGVuZCk7Ci0gICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAg
ICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5n
KCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJz
aW5nIHZpZXdCb3g9XCIiLCBzdHJpbmdUb1BhcnNlLCAiXCIiKSk7CiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpdFRvVmlld0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHBhcnNlVmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSk7Ci0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIq
IGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSA9IHRy
dWUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+JiwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VW
aWV3Qm94R2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9vbCB2
YWxpZGF0ZSA9IHRydWUpOworCiAgICAgUmVmPFNWR0FuaW1hdGVkUmVjdD4gbV92aWV3Qm94Owog
ICAgIFJlZjxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RS
YXRpbzsKICAgICBib29sIG1faXNWaWV3Qm94VmFsaWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGVuZ3RoTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0
LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgU1ZHTGVuZ3RoTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVh
ckl0ZW1zKCk7CisKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFs
dWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlw
ZSA9IHR5cGVuYW1lIGRlY2x0eXBlKHBhcnNpbmdCdWZmZXIpOjpDaGFyYWN0ZXJUeXBlOworCisg
ICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgewor
ICAgICAgICAgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKKworICAg
ICAgICAgICAgc2tpcFVudGlsPENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2VPckNvbW1hPihwYXJz
aW5nQnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9
PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgYXV0byB2YWx1
ZSA9IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QobV9sZW5ndGhNb2RlLCBTdHJpbmdWaWV3KHN0
YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgLSBzdGFydCkpOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgYXBwZW5kKFNW
R0xlbmd0aDo6Y3JlYXRlKFdURk1vdmUoKnZhbHVlKSkpOworICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBT
VkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRF
bmQoKTsKKyAgICB9KTsKK30KKworU3RyaW5nIFNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmco
KSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3Qg
YXV0byYgbGVuZ3RoIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQobGVuZ3RoLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3Ro
TGlzdC5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3Ro
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKICNpbmNsdWRlICJTVkdWYWx1ZVByb3BlcnR5TGlzdC5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw0
NSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aE1vZGU7IH0KIAotICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFj
dGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
OwotICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IHB0cjsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcgJiYgIWlz
U1ZHU3BhY2UoKnB0cikpCi0gICAgICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAo
cHRyID09IHN0YXJ0KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJp
bmcgdmFsdWVTdHJpbmcoc3RhcnQsIHB0ciAtIHN0YXJ0KTsKLSAgICAgICAgICAgIFNWR0xlbmd0
aFZhbHVlIHZhbHVlKG1fbGVuZ3RoTW9kZSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUuc2V0VmFs
dWVBc1N0cmluZyh2YWx1ZVN0cmluZykuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGFwcGVuZChTVkdMZW5ndGg6OmNyZWF0ZSh2YWx1ZSkpOwot
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQorICAgIGJvb2wg
cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0K
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBsZW5ndGggOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAg
ICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOwotCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsZW5ndGgtPnZhbHVlKCkudmFsdWVB
c1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7Ci0gICAgfQorICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgCiBwcml2YXRlOgogICAgIFNWR0xlbmd0aExpc3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2Rl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZm
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTYxLDE5ICs2MiwyMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGxlbmd0
aFR5cGVUb1N0CiAgICAgcmV0dXJuICIiOwogfQogCi1zdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5
cGUgcGFyc2VMZW5ndGhUeXBlKGNvbnN0IFVDaGFyKiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5
cGUgcGFyc2VMZW5ndGhUeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBh
cnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKHB0ciA9PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6Ok51bWJlcjsKIAotICAg
IGNvbnN0IFVDaGFyIGZpcnN0Q2hhciA9ICpwdHI7CisgICAgYXV0byBmaXJzdENoYXIgPSAqcGFy
c2luZ0J1ZmZlcjsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAKLSAgICBpZiAoKytwdHIgPT0gZW5k
KQorICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmaXJzdENo
YXIgPT0gJyUnID8gU1ZHTGVuZ3RoVHlwZTo6UGVyY2VudGFnZSA6IFNWR0xlbmd0aFR5cGU6OlVu
a25vd247CiAKLSAgICBjb25zdCBVQ2hhciBzZWNvbmRDaGFyID0gKnB0cjsKKyAgICBhdXRvIHNl
Y29uZENoYXIgPSAqcGFyc2luZ0J1ZmZlcjsKKyAgICArK3BhcnNpbmdCdWZmZXI7CiAKLSAgICBp
ZiAoKytwdHIgIT0gZW5kKQorICAgIGlmICghcGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAg
ICByZXR1cm4gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAogICAgIGlmIChmaXJzdENoYXIgPT0g
J2UnICYmIHNlY29uZENoYXIgPT0gJ20nKQpAQCAtMTgwLDcgKzE4MywxNSBAQCBTVkdMZW5ndGhW
YWx1ZTo6U1ZHTGVuZ3RoVmFsdWUoY29uc3QgU1ZHCiAgICAgc2V0VmFsdWUoY29udGV4dCwgdmFs
dWUpOwogfQogCi1TVkdMZW5ndGhWYWx1ZSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xl
bmd0aE1vZGUgbGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJz
aW5nRXJyb3ImIHBhcnNlRXJyb3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2
ZVZhbHVlc01vZGUpCitPcHRpb25hbDxTVkdMZW5ndGhWYWx1ZT4gU1ZHTGVuZ3RoVmFsdWU6OmNv
bnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVl
QXNTdHJpbmcpCit7CisgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoIHsgbGVuZ3RoTW9kZSB9Owor
ICAgIGlmIChsZW5ndGguc2V0VmFsdWVBc1N0cmluZyh2YWx1ZUFzU3RyaW5nKS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbGVuZ3RoOwor
fQorCitTVkdMZW5ndGhWYWx1ZSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1v
ZGUgbGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5nVmlldyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2lu
Z0Vycm9yJiBwYXJzZUVycm9yLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVW
YWx1ZXNNb2RlKQogewogICAgIFNWR0xlbmd0aFZhbHVlIGxlbmd0aChsZW5ndGhNb2RlKTsKIApA
QCAtMjM5LDcgKzI1MCw3IEBAIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gU1ZHTGVuZ3RoVmFsdWU6
OnQKICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgudmFsdWVJblNw
ZWNpZmllZFVuaXRzKCksIGxlbmd0aFR5cGVUb1ByaW1pdGl2ZVR5cGUobGVuZ3RoLmxlbmd0aFR5
cGUoKSkpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcsIFNWR0xlbmd0aE1vZGUgbGVuZ3Ro
TW9kZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5n
KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlQXNTdHJpbmcsIFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9k
ZSkKIHsKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IDA7CiAgICAgbV9sZW5ndGhNb2Rl
ID0gbGVuZ3RoTW9kZTsKQEAgLTI4NiwyNiArMjk3LDI0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNW
R0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICByZXR1cm4gc2V0VmFsdWUoY29udGV4dCwgdmFsdWUp
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykKK0V4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVl
OjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGF1dG8gY29u
dmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpEb250U2tpcCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciB9OwotCi0gICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VM
ZW5ndGhUeXBlKHB0ciwgZW5kKTsKLSAgICBpZiAobGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBl
OjpVbmtub3duKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKyAg
ICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBw
YXJzaW5nQnVmZmVyKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAgICAgIGF1dG8gY29udmVy
dGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCisgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIGxlbmd0
aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmIChsZW5n
dGhUeXBlID09IFNWR0xlbmd0aFR5cGU6OlVua25vd24pCisgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAotICAgIG1fbGVuZ3RoVHlwZSA9IGxlbmd0aFR5cGU7
Ci0gICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqY29udmVydGVkTnVtYmVyOwotICAgIHJl
dHVybiB7IH07CisgICAgICAgIG1fbGVuZ3RoVHlwZSA9IGxlbmd0aFR5cGU7CisgICAgICAgIG1f
dmFsdWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OmNv
bnZlcnRUb1NwZWNpZmllZFVuaXRzKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmIGNvbnRleHQsIFNW
R0xlbmd0aFR5cGUgbGVuZ3RoVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTMgKzU4LDE0IEBAIGVudW0gY2xhc3MgU1ZHTGVu
Z3RoTmVnYXRpdmVWYWx1ZXNNb2RlIDoKIGNsYXNzIFNWR0xlbmd0aFZhbHVlIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTVkdMZW5ndGhWYWx1ZShTVkdMZW5n
dGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmlu
ZyA9IFN0cmluZygpKTsKKyAgICBTVkdMZW5ndGhWYWx1ZShTVkdMZW5ndGhNb2RlID0gU1ZHTGVu
Z3RoTW9kZTo6T3RoZXIsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZyA9IHsgfSk7CiAgICAg
U1ZHTGVuZ3RoVmFsdWUoZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzLCBTVkdMZW5ndGhUeXBl
LCBTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3RoZXIpOwogICAgIFNWR0xlbmd0aFZh
bHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCwgU1ZHTGVuZ3RoVHlwZSA9IFNWR0xl
bmd0aFR5cGU6Ok51bWJlciwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyKTsK
IAotICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgY29u
c3QgU3RyaW5nJiwgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2Rl
ID0gU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CisgICAgc3RhdGljIE9wdGlv
bmFsPFNWR0xlbmd0aFZhbHVlPiBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgY29uc3QgU3RyaW5n
VmlldyYpOworICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9k
ZSwgY29uc3QgU3RyaW5nVmlldyYsIFNWR1BhcnNpbmdFcnJvciYsIFNWR0xlbmd0aE5lZ2F0aXZl
VmFsdWVzTW9kZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZTo6QWxsb3cpOwogICAgIHN0
YXRpYyBTVkdMZW5ndGhWYWx1ZSBibGVuZChjb25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29u
c3QgU1ZHTGVuZ3RoVmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0gICAgCisKICAgICBzdGF0
aWMgU1ZHTGVuZ3RoVmFsdWUgZnJvbUNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJik7CiAgICAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9DU1NQcmltaXRp
dmVWYWx1ZShjb25zdCBTVkdMZW5ndGhWYWx1ZSYpOwogCkBAIC04NSw4ICs4Niw4IEBAIHB1Ymxp
YzoKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0
JiwgZmxvYXQpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0
aENvbnRleHQmLCBmbG9hdCwgU1ZHTGVuZ3RoVHlwZSwgU1ZHTGVuZ3RoTW9kZSk7CiAKLSAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiwgU1ZHTGVuZ3Ro
TW9kZSk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmdWaWV3Jik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmdWaWV3JiwgU1ZHTGVuZ3RoTW9kZSk7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252
ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgU1ZHTGVuZ3RoVHlw
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIFNWR051bWJlckxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBwYXJzaW5nQnVmZmVyKSB7CisgICAgICAg
IC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVhZGlu
ZyB3aGl0ZXNwYWNlLgorICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8gdmlvbGF0ZSB0aGF0
IGludGVudGlvbmFsbHkuCisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBudW1iZXIgPSBwYXJzZU51bWJlcihw
YXJzaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghbnVtYmVyKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgYXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkg
b24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4g
cGFyc2luZ0J1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHTnVtYmVyTGlz
dDo6dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiBudW1iZXIgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChi
dWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAg
ICAgICBidWlsZGVyLmFwcGVuZChudW1iZXItPnZhbHVlKCkpOworICAgIH0KKworICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR051bWJlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVt
YmVyTGlzdC5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVt
YmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwzOSArNTAsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR051bWJlckxpc3Qob3RoZXIsIGFjY2VzcykpOwog
ICAgIH0KIAotICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25z
dCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0KLSAgICAgICAgLy8gVGhlIHNwZWMgKHNl
Y3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCi0g
ICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4K
LSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgYXV0byBudW1iZXIgPSBw
YXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIW51bWJlcikKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFwcGVuZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVt
YmVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHRyID09IGVuZDsKLSAgICB9Ci0K
LSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBudW1i
ZXIgOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWlsZGVyLmFw
cGVuZChudW1iZXItPnZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyAr
NDIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBhdCBh
IGhpZ2hlciBwcmVjaXNpb24gaW50ZXJuYWxseSwgd2l0aG91dCBhbnkgdW5uZWNlc3NhcnkgcnVu
dGltZSBjb3N0IG9yIGNvZGUKIC8vIGNvbXBsZXhpdHkuCiAvLyBGSVhNRTogQ2FuIHRoaXMgYmUg
c2hhcmVkL3JlcGxhY2VkIHdpdGggbnVtYmVyIHBhcnNpbmcgaW4gV1RGPwotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBzdGF0aWMg
T3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBz
a2lwID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxG
bG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3Rl
clR5cGU+JiBwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwID0gU3VmZml4
U2tpcHBpbmdQb2xpY3k6OlNraXApCiB7CiAgICAgRmxvYXRUeXBlIG51bWJlciA9IDA7CiAgICAg
RmxvYXRUeXBlIGludGVnZXIgPSAwOwpAQCAtNTAsMjYgKzUxLDI3IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBGbG9hdFR5cGUgZXhwb25lbnQgPSAwOwog
ICAgIGludCBzaWduID0gMTsKICAgICBpbnQgZXhwc2lnbiA9IDE7Ci0gICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3RhcnQgPSBwdHI7CisgICAgYXV0byBzdGFydCA9IHBhcnNpbmdCdWZmZXIucG9z
aXRpb24oKTsKIAogICAgIC8vIHJlYWQgdGhlIHNpZ24KLSAgICBpZiAocHRyIDwgZW5kICYmICpw
dHIgPT0gJysnKQotICAgICAgICBwdHIrKzsKLSAgICBlbHNlIGlmIChwdHIgPCBlbmQgJiYgKnB0
ciA9PSAnLScpIHsKLSAgICAgICAgcHRyKys7CisgICAgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICcrJykKKyAgICAgICAgKytw
YXJzaW5nQnVmZmVyOworICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyID09ICctJykgeworICAgICAgICArK3BhcnNpbmdC
dWZmZXI7CiAgICAgICAgIHNpZ24gPSAtMTsKICAgICB9IAogICAgIAotICAgIGlmIChwdHIgPT0g
ZW5kIHx8ICghaXNBU0NJSURpZ2l0KCpwdHIpICYmICpwdHIgIT0gJy4nKSkKKyAgICBpZiAocGFy
c2luZ0J1ZmZlci5hdEVuZCgpIHx8ICghaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSAmJiAq
cGFyc2luZ0J1ZmZlciAhPSAnLicpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgLy8gcmVhZCB0aGUgaW50ZWdlciBwYXJ0LCBidWlsZCByaWdodC10by1sZWZ0Ci0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogcHRyU3RhcnRJbnRQYXJ0ID0gcHRyOwotICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICArK3B0cjsgLy8gQWR2YW5jZSB0
byBmaXJzdCBub24tZGlnaXQuCisgICAgYXV0byBwdHJTdGFydEludFBhcnQgPSBwYXJzaW5nQnVm
ZmVyLnBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gQWR2YW5jZSB0byBmaXJzdCBub24tZGlnaXQu
CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUsIGlzQVNDSUlEaWdpdD4ocGFyc2luZ0J1ZmZl
cik7CiAKLSAgICBpZiAocHRyICE9IHB0clN0YXJ0SW50UGFydCkgewotICAgICAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBwdHJTY2FuSW50UGFydCA9IHB0ciAtIDE7CisgICAgaWYgKHBhcnNpbmdC
dWZmZXIucG9zaXRpb24oKSAhPSBwdHJTdGFydEludFBhcnQpIHsKKyAgICAgICAgYXV0byBwdHJT
Y2FuSW50UGFydCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSAtIDE7CiAgICAgICAgIEZsb2F0
VHlwZSBtdWx0aXBsaWVyID0gMTsKICAgICAgICAgd2hpbGUgKHB0clNjYW5JbnRQYXJ0ID49IHB0
clN0YXJ0SW50UGFydCkgewogICAgICAgICAgICAgaW50ZWdlciArPSBtdWx0aXBsaWVyICogc3Rh
dGljX2Nhc3Q8RmxvYXRUeXBlPigqKHB0clNjYW5JbnRQYXJ0LS0pIC0gJzAnKTsKQEAgLTgwLDM4
ICs4MiwzOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmIChwdHIgPCBlbmQg
JiYgKnB0ciA9PSAnLicpIHsgLy8gcmVhZCB0aGUgZGVjaW1hbHMKLSAgICAgICAgcHRyKys7Cisg
ICAgLy8gcmVhZCB0aGUgZGVjaW1hbHMKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgJiYgKnBhcnNpbmdCdWZmZXIgPT0gJy4nKSB7CisgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYSBsZWFzdCBv
bmUgZGlnaXQgZm9sbG93aW5nIHRoZSAuCi0gICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwgIWlz
QVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICAKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc0FTQ0lJRGlnaXQo
KnB0cikpCi0gICAgICAgICAgICBkZWNpbWFsICs9ICgqKHB0cisrKSAtICcwJykgKiAoZnJhYyAq
PSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuMSkpOworICAgICAgICB3aGlsZSAocGFyc2luZ0J1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVm
ZmVyKSkKKyAgICAgICAgICAgIGRlY2ltYWwgKz0gKCoocGFyc2luZ0J1ZmZlcisrKSAtICcwJykg
KiAoZnJhYyAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuMSkpOwogICAgIH0KIAogICAgIC8v
IHJlYWQgdGhlIGV4cG9uZW50IHBhcnQKLSAgICBpZiAocHRyICE9IHN0YXJ0ICYmIHB0ciArIDEg
PCBlbmQgJiYgKCpwdHIgPT0gJ2UnIHx8ICpwdHIgPT0gJ0UnKSAKLSAgICAgICAgJiYgKHB0clsx
XSAhPSAneCcgJiYgcHRyWzFdICE9ICdtJykpIHsgCi0gICAgICAgIHB0cisrOworICAgIGlmIChw
YXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgIT0gc3RhcnQgJiYgcGFyc2luZ0J1ZmZlci5wb3NpdGlv
bigpICsgMSA8IHBhcnNpbmdCdWZmZXIuZW5kKCkgJiYgKCpwYXJzaW5nQnVmZmVyID09ICdlJyB8
fCAqcGFyc2luZ0J1ZmZlciA9PSAnRScpCisgICAgICAgICYmIChwYXJzaW5nQnVmZmVyWzFdICE9
ICd4JyAmJiBwYXJzaW5nQnVmZmVyWzFdICE9ICdtJykpIHsKKyAgICAgICAgKytwYXJzaW5nQnVm
ZmVyOwogCiAgICAgICAgIC8vIHJlYWQgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50Ci0gICAgICAg
IGlmICgqcHRyID09ICcrJykKLSAgICAgICAgICAgIHB0cisrOwotICAgICAgICBlbHNlIGlmICgq
cHRyID09ICctJykgewotICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGlmICgqcGFyc2luZ0J1
ZmZlciA9PSAnKycpCisgICAgICAgICAgICArK3BhcnNpbmdCdWZmZXI7CisgICAgICAgIGVsc2Ug
aWYgKCpwYXJzaW5nQnVmZmVyID09ICctJykgeworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVy
OwogICAgICAgICAgICAgZXhwc2lnbiA9IC0xOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBUaGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kIHx8
ICFpc0FTQ0lJRGlnaXQoKnB0cikpCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkg
fHwgIWlzQVNDSUlEaWdpdCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKSB7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5p
bmcoKSAmJiBpc0FTQ0lJRGlnaXQoKnBhcnNpbmdCdWZmZXIpKSB7CiAgICAgICAgICAgICBleHBv
bmVudCAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDEwKTsKLSAgICAgICAgICAgIGV4cG9uZW50
ICs9ICpwdHIgLSAnMCc7Ci0gICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGV4cG9uZW50
ICs9ICpwYXJzaW5nQnVmZmVyIC0gJzAnOworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwog
ICAgICAgICB9CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBleHBvbmVudCBpcyB2YWxpZC4KICAgICAg
ICAgaWYgKCFpc1ZhbGlkUmFuZ2UoZXhwb25lbnQpIHx8IGV4cG9uZW50ID4gc3RkOjpudW1lcmlj
X2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZXhwb25lbnQpCkBAIC0xMjgsNDQgKzEzMSw0NCBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgaWYgKCFpc1ZhbGlk
UmFuZ2UobnVtYmVyKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChz
dGFydCA9PSBwdHIpCisgICAgaWYgKHN0YXJ0ID09IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChza2lwID09IFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpTa2lwKQotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
aXRlcihwdHIsIGVuZCk7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVy
KHBhcnNpbmdCdWZmZXIpOwogCiAgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXAp
OworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgc2tpcCk7CiB9
CiAKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3Qg
VUNoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBw
YXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlciwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVy
KHB0ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHBhcnNpbmdC
dWZmZXIsIHNraXApOwogfQogCiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IGdl
bmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7Ci0gICAgaWYgKHB0ciAhPSBlbmQpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbc2tpcF0oYXV0byBwYXJz
aW5nQnVmZmVyKSAtPiBPcHRpb25hbDxmbG9hdD4geworICAgICAgICBhdXRvIHJlc3VsdCA9IGdl
bmVyaWNQYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBza2lwKTsKKyAgICAgICAgaWYgKCFwYXJz
aW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0pOwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2Ug
bGFyZ2VBcmNGbGFnIGFuZCBzd2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8v
IGFuZCBtaWdodCBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFy
Y0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
KQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVy
aWNQYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2lu
Z0J1ZmZlcikKIHsKLSAgICBpZiAocHRyID49IGVuZCkKKyAgICBpZiAocGFyc2luZ0J1ZmZlci5h
dEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSBmbGFnQ2hhciA9ICpwdHIrKzsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdD
aGFyID0gKnBhcnNpbmdCdWZmZXI7CisgICAgKytwYXJzaW5nQnVmZmVyOwogCiAgICAgYm9vbCBm
bGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCkBAIC0xNzUsMTkgKzE3OCwxOSBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uCiAgICAgZWxzZQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOworICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNp
bmdCdWZmZXIpOwogICAgIAogICAgIHJldHVybiBmbGFnOwogfQogCi1PcHRpb25hbDxib29sPiBw
YXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25h
bDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIHBhcnNpbmdC
dWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOworICAg
IHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogfQogCi1PcHRpb25h
bDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQp
CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogfQog
CiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51
bWJlcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCkBAIC0xOTUsMjUgKzE5OCwyMyBAQCBPcHRp
b25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOCiAgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihj
dXIsIGVuZCk7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHJldHVybiBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gcGFy
c2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHsKKyAgICAg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICgheCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyID09IGVuZCkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CisgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngs
ICp4KTsKIAotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChjdXIgIT0gZW5kKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIXBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp5KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CisgICAg
fSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nKQpAQCAtMjIxLDExNyArMjIyLDExMyBAQCBPcHRpb25hbDxGbG9hdFBvaW50PiBw
YXJzZVBvaW50KGNvbnN0IFN0CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0
cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcu
bGVuZ3RoKCk7Ci0KLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCkpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURjo6cmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxG
bG9hdFBvaW50PiB7CisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdC
dWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gcG9p
bnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VyLCBlbmQpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcG9pbnQgPSBwYXJzZUZsb2F0UG9p
bnQocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICghcG9pbnQpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxsb3cgYW55dGhpbmcgZXhjZXB0IHNwYWNl
cyBhdCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBEaXNhbGxvdyBhbnl0aGluZyBleGNlcHQg
c3BhY2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5n
QnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICB9KTsKIH0KIAog
T3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQog
ewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICAKLSAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotICAgIAotICAgIGF1dG8geCA9IHBh
cnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgheSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOwotICAgIGlmICghd2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3Ry
aW5nLCBbXShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UmVjdD4geworICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIAorICAg
ICAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF4
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB5ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CisgICAgICAgIGlmICgheSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihwYXJz
aW5nQnVmZmVyKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZl
ciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCFoZWlnaHQp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZsb2F0UmVj
dCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07CisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qg
eyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgIH0pOwogfQogCiBPcHRpb25hbDxIYXNo
U2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsK
ICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KIAotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMocHRyLCBlbmQpOwotCi0gICAgSGFzaFNldDxTdHJpbmc+IHZhbHVlczsKLQot
ICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcg
d2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRvcnMs
IHdpbGwgYmUgaWdub3JlZC4KLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7
Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcpCi0gICAgICAgICAgICAr
K3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBb
XShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IEhhc2hTZXQ8U3RyaW5nPiB7CisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKIAotICAgICAgICBpZiAocHRyID09IGlu
cHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHZh
bHVlczsKIAotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBh
bnkgd2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwot
ICAgICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0
RW5kKSkKLSAgICAgICAgICAgIC0taW5wdXRFbmQ7CisgICAgICAgIHdoaWxlIChwYXJzaW5nQnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgLy8gTGVhZGluZyBh
bmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVy
IHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgICAgIGF1dG8gaW5wdXRTdGFy
dCA9IHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICB2YWx1ZXMuYWRkKFN0cmlu
ZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwotICAgIH0KKyAgICAg
ICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVmZmVyLCAnLCcpOworCisgICAgICAgICAgICBpZiAo
cGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpID09IGlucHV0U3RhcnQpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdu
b3JlIGFueSB3aGl0ZXNwYWNlCisgICAgICAgICAgICBhdXRvIGlucHV0RW5kID0gcGFyc2luZ0J1
ZmZlci5wb3NpdGlvbigpIC0gMTsKKyAgICAgICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5w
dXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRFbmQpKQorICAgICAgICAgICAgICAgIC0taW5wdXRF
bmQ7CisKKyAgICAgICAgICAgIHZhbHVlcy5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5k
IC0gaW5wdXRTdGFydCArIDEpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09y
RGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIsICcsJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHZhbHVlczsKKyAgICB9KTsKIAotICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgaWYgKGxlbmd0
aCA8IDIgfHwgY2hhcmFjdGVyc1swXSAhPSAnVScgfHwgY2hhcmFjdGVyc1sxXSAhPSAnKycpCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gcGFyc2luZ0J1ZmZlci5sZW5ndGhSZW1haW5pbmcoKTsKKyAg
ICBpZiAobGVuZ3RoIDwgMiB8fCBwYXJzaW5nQnVmZmVyWzBdICE9ICdVJyB8fCBwYXJzaW5nQnVm
ZmVyWzFdICE9ICcrJykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKKworICAg
IHBhcnNpbmdCdWZmZXIgKz0gMjsKKwogICAgIC8vIFBhcnNlIHRoZSBzdGFydGluZyBoZXggbnVt
YmVyIChvciBpdHMgcHJlZml4KS4KICAgICB1bnNpZ25lZCBzdGFydFJhbmdlID0gMDsKICAgICB1
bnNpZ25lZCBzdGFydExlbmd0aCA9IDA7CiAKLSAgICBjb25zdCBVQ2hhciogcHRyID0gY2hhcmFj
dGVycyArIDI7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0g
ICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcHRy
KSkKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsK
KyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnBhcnNpbmdCdWZmZXIpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0
aCA+IDYpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBzdGFydFJh
bmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7Ci0gICAgICAg
ICsrcHRyOworICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJ
SGV4VmFsdWUoKnBhcnNpbmdCdWZmZXIpOworICAgICAgICArK3BhcnNpbmdCdWZmZXI7CiAgICAg
fQogCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdlcyBzZXBhcmF0ZWQgYnkgIi0iIHNp
Z24uCi0gICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAmJiAqcHRyID09ICctJykgewor
ICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnBhcnNpbmdCdWZmZXIgPT0gJy0n
KSB7CiAgICAgICAgIGlmICghc3RhcnRMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAKICAgICAgICAgLy8gUGFyc2UgdGhlIGVuZGluZyBoZXggbnVtYmVy
IChvciBpdHMgcHJlZml4KS4KICAgICAgICAgdW5zaWduZWQgZW5kUmFuZ2UgPSAwOwogICAgICAg
ICB1bnNpZ25lZCBlbmRMZW5ndGggPSAwOwotICAgICAgICArK3B0cjsKLSAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKnB0cikpCisg
ICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdp
dCgqcGFyc2luZ0J1ZmZlcikpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAr
K2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiA2KQogICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5n
ZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKLSAgICAgICAgICAgICsrcHRyOworICAg
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnBh
cnNpbmdCdWZmZXIpOworICAgICAgICAgICAgKytwYXJzaW5nQnVmZmVyOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKQEAgLTM0NSwxNSArMzQyLDE1IEBAIHN0
YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY28KICAgICAKICAgICAvLyBIYW5k
bGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0
aW9uIG1hcmtzLgogICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gc3RhcnRSYW5nZTsKLSAgICB3aGls
ZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcHRyICE9ICc/JykKKyAgICB3aGlsZSAocGFy
c2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCpwYXJz
aW5nQnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3N0YXJ0TGVu
Z3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0gNDsKICAgICAgICAgZW5kUmFuZ2Ug
PSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsrcHRyOworICAgICAgICArK3BhcnNp
bmdCdWZmZXI7CiAgICAgfQogICAgIAogICAgIGlmICghc3RhcnRMZW5ndGgpCkBAIC0zNjksNTMg
KzM2Niw1NSBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNlCiB7CiAg
ICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3NpbmcuCiAKLSAgICBh
dXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBVbmljb2RlUmFu
Z2VzIHJhbmdlTGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKLQotICAgIHdo
aWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7
Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcpCi0gICAgICAgICAgICAr
K3B0cjsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBb
XShhdXRvIHBhcnNpbmdCdWZmZXIpIC0+IHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBIYXNoU2V0
PFN0cmluZz4+IHsKKyAgICAgICAgVW5pY29kZVJhbmdlcyByYW5nZUxpc3Q7CisgICAgICAgIEhh
c2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFy
dCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAg
YXV0byBpbnB1dFN0YXJ0ID0gcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpOwogCi0gICAgICAgIC8v
IFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0Ci0gICAgICAgIGlmIChhdXRvIHJhbmdl
ID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkpCi0gICAg
ICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1
dFN0YXJ0KSk7Ci0gICAgICAgICsrcHRyOwotICAgIH0KKyAgICAgICAgICAgIHNraXBVbnRpbChw
YXJzaW5nQnVmZmVyLCAnLCcpOworCisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5wb3Np
dGlvbigpID09IGlucHV0U3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0CisgICAgICAgICAgICBpZiAo
YXV0byByYW5nZSA9IHBhcnNlVW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXIgeyBpbnB1
dFN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0aW9uKCkgfSkpCisgICAgICAgICAgICAgICAgcmFu
Z2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwYXJzaW5nQnVmZmVy
LnBvc2l0aW9uKCkgLSBpbnB1dFN0YXJ0KSk7CisKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVm
ZmVyLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICsrcGFy
c2luZ0J1ZmZlcjsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhbmdl
TGlzdCwgc3RyaW5nTGlzdCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZNb3Zl
KHJhbmdlTGlzdCksIFdURk1vdmUoc3RyaW5nTGlzdCkpOworICAgIH0pOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdl
bmVyaWNQYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIo
cGFyc2luZ0J1ZmZlcik7CiAgICAgaWYgKCF4KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHkg
PSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICBpZiAoIXkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludCB7ICp4LCAqeSB9OwogfQog
Ci1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJy
ZW50LCBjb25zdCBMQ2hhciogZW5kKQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBv
aW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBwYXJzaW5nQnVmZmVyKQogewotICAgIHJl
dHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIGdl
bmVyaWNQYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPEZsb2F0
UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFy
KiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChwYXJzaW5nQnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5ICsyMSw5IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hhcjMyLCBVQ2hhcjMyPiBV
bmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+IFVuaWNvZGVSYW5nZXM7
CkBAIC0zOCwyMCArMzgsMjAgQEAgZW51bSBjbGFzcyBTdWZmaXhTa2lwcGluZ1BvbGljeSB7CiAg
ICAgU2tpcAogfTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYg
Y3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6U2tpcCk7Ci1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3Qg
VUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJl
cihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0
cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6U2tpcCk7CiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3Qg
U3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6
OlNraXApOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJP
cHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNl
QXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOwotT3B0aW9u
YWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIq
IGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxM
Q2hhcj4mKTsKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVy
PFVDaGFyPiYpOwogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZ1ZpZXcm
KTsKIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYg
Y3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZs
b2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKK09wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFy
PiYpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBIYXNo
U2V0PFN0cmluZz4+PiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcm
KTsKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5n
VmlldyYpOwpAQCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xu
JyB8fCBjID09ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBib29sIGlzU1ZHU3BhY2VPckNvbW1hKENoYXJhY3RlclR5cGUgYykKK3sKKyAgICBy
ZXR1cm4gaXNTVkdTcGFjZShjKSB8fCBjID09ICcsJzsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICB3
aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgIHB0cisrOworICAg
IHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIsIGVuZCk7CiAgICAgcmV0
dXJuIHB0ciA8IGVuZDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29u
c3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxlPENoYXJhY3RlclR5cGUs
IGlzU1ZHU3BhY2U+KGNoYXJhY3RlcnMpOworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJh
Y3RlcnNSZW1haW5pbmcoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hh
cmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRl
ciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1NwYWNlKCpwdHIpICYmICpw
dHIgIT0gZGVsaW1pdGVyKQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1jb25zdGV4
cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMsIGNoYXIgZGVsaW1p
dGVyID0gJywnKQogewotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCisgICAgaWYgKGNoYXJh
Y3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNlKCpjaGFyYWN0ZXJz
KSAmJiAqY2hhcmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGluZSBib29sIHNraXBTdHJp
bmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIp
W2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQgLSAx
OwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChwdHJbaV0g
IT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChza2lwT3B0aW9u
YWxTVkdTcGFjZXMoY2hhcmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hh
cmFjdGVyc1JlbWFpbmluZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGltaXRlcikgeworICAgICAg
ICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNo
YXJhY3RlcnMpOworICAgICAgICB9CiAgICAgfQotICAgIHB0ciArPSBsZW5ndGg7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U291cmNlLmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKIAogY2xhc3MgU1ZHUGF0
aFNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0aFNvdXJjZSk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJp
bmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3Ry
aW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgogCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHko
KSk7CiAKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAgbV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3Rl
cjggPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3RyaW5nLmNoYXJhY3RlcnMx
NigpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAg
ICAgICAgbV9wYXJzaW5nQnVmZmVyOCA9IHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5s
ZW5ndGgoKSB9OworICAgIGVsc2UKKyAgICAgICAgbV9wYXJzaW5nQnVmZmVyMTYgPSB7IHN0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpIH07CiB9CiAKIGJvb2wgU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6aGFzTW9yZURhdGEoKSBjb25zdAogewogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjggPCBtX2VuZC5tX2NoYXJh
Y3Rlcjg7Ci0gICAgcmV0dXJuIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2IDwgbV9lbmQubV9jaGFy
YWN0ZXIxNjsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2luZ0J1ZmZlcjguaGFzQ2hhcmFjdGVyc1Jl
bWFpbmluZygpOworICAgIHJldHVybiBtX3BhcnNpbmdCdWZmZXIxNi5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCk7CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRva2Vu
KCkKIHsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBza2lwT3B0aW9u
YWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
LSAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2
LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KG1fcGFyc2luZ0J1ZmZlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFu
ZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZH
UGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVscGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIHBhcnNpbmdCdWZmZXIsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkK
IHsKICAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50
IGNvbW1hbmQuCi0gICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8
ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgIGlmICgoKnBh
cnNpbmdCdWZmZXIgPT0gJysnIHx8ICpwYXJzaW5nQnVmZmVyID09ICctJyB8fCAqcGFyc2luZ0J1
ZmZlciA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgJiYg
cHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKICAgICAgICAgaWYgKHByZXZp
b3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKQogICAgICAgICAgICAgcmV0dXJuIFBhdGhT
ZWdMaW5lVG9BYnM7CkBAIC03MywxNTAgKzY5LDEzOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljCiBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpu
ZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCiB7CiAgICAgaWYgKG1f
aXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1h
bmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAg
ICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX3BhcnNpbmdCdWZm
ZXI4LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsK
ICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5k
SGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAg
ICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fcGFyc2luZ0J1ZmZl
cjE2LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsK
ICAgICB9CiAKICAgICByZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRoU2VnVHlwZSBwYXJzZVNW
R1NlZ21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50KQordGVtcGxh
dGU8dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2Uo
RiYmIGZ1bmN0b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKLSAgICBjYXNlICda
JzoKLSAgICBjYXNlICd6JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAg
Y2FzZSAnTSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwotICAgIGNhc2UgJ20n
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBjYXNlICdMJzoKLSAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6Ci0gICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvUmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAgICByZXR1cm4gUGF0aFNl
Z0N1cnZlVG9DdWJpY0FiczsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY0FiczsKLSAgICBjYXNlICdxJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljUmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAgICByZXR1cm4gUGF0aFNl
Z0FyY0FiczsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7Ci0g
ICAgY2FzZSAnSCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsK
LSAgICBjYXNlICdoJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVs
OwotICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJz
OwotICAgIGNhc2UgJ3YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVs
OwotICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290
aEFiczsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNT
bW9vdGhSZWw7Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aEFiczsKLSAgICBjYXNlICd0JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnVW5rbm93bjsKLSAgICB9CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICBy
ZXR1cm4gZnVuY3RvcihtX3BhcnNpbmdCdWZmZXI4KTsKKyAgICByZXR1cm4gZnVuY3RvcihtX3Bh
cnNpbmdCdWZmZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKLSAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1
ZmZlcikgLT4gU1ZHUGF0aFNlZ1R5cGUgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9ICpwYXJz
aW5nQnVmZmVyOworICAgICAgICBwYXJzaW5nQnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAoY2hh
cmFjdGVyKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNlICdR
JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAgICAg
ICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNS
ZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7
CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7Cisg
ICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9u
dGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGlu
ZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1cm4g
UGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAg
IHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgorICAg
ICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAgIGNh
c2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7
CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVybiBQ
YXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQogCiBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0
byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4g
ewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVu
ZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFs
PE1vdmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBNb3ZlVG9TZWdtZW50
IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQ
b2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhC
aXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwg
bV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZH
UGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5l
VG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50
LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKLSAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJl
dHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdt
ZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2lu
Z0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvU2VnbWVudCBzZWdtZW50Owog
ICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwogICAg
ICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8q
JiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxT
ZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPExpbmVU
b0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsK
ICAgICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07
Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsK
IH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB5ID0gcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1
ZmZlcikgLT4gT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
eSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvVmVydGlj
YWxTZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQueSA9ICp5OwogICAgICAgICByZXR1
cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9D
dWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVu
dCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3Qg
YXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7Ci0gICAgICAgIGF1
dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBh
cnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21l
bnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZl
cik7CiAgICAgICAgIGlmICghcG9pbnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQp
OworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsK
ICAgICAgICAgaWYgKCFwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5k
KTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVm
ZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKQEAgLTIyNSwyMSArMjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkN1cnZlVG9DdWJpY1NlZ20KICAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwogICAg
ICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4g
c2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0g
ICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVu
dCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50
PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7
CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIHBhcnNpbmdCdWZmZXIpIC0+IE9wdGlvbmFsPEN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZs
b2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQyKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFy
c2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBw
YXJzZUZsb2F0UG9pbnQocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQp
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcsMjEgKzIyNywxNyBA
QCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAgICAgICAgIHNlZ21l
bnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4
LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBb
XShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQ
b2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBwYXJzaW5nQnVm
ZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRv
IHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCFw
b2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAg
aWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAg
LTI2OSw0OSArMjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0
aWMKICAgICAgICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9
OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7
CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25z
dCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7
Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5k
KTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2lu
dCA9IHBhcnNlRmxvYXRQb2ludChwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQ
b2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQot
ICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1
dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4g
ewotICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1
cm4gcGFyc2UoW10oYXV0byYgcGFyc2luZ0J1ZmZlcikgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50
PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihwYXJzaW5nQnVmZmVyKTsKICAgICAg
ICAgaWYgKCFyeCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1
dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0gcGFy
c2VOdW1iZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIGlmICghcnkpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKHBhcnNpbmdCdWZm
ZXIpOwogICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOwor
ICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAg
ICAgICBpZiAoIWxhcmdlQXJjKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAgICAgYXV0byBzd2VlcCA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBh
dXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAoIXN3
ZWVwKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byB0YXJn
ZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIz
LDExICsyOTEsNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAg
ICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSAqdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAg
ICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0
cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3Ry
aW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAg
T3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBh
cnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNs
dHlwZShhdXRvKSBwYXJzZShGJiYpOworCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wg
bV9pczhCaXRTb3VyY2U7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBtX2No
YXJhY3Rlcjg7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcjE2OwotICAgIH0gbV9j
dXJyZW50OwotICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVyODsK
LSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2VuZDsKKyAgICAg
ICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4gbV9wYXJzaW5nQnVmZmVyODsKKyAgICAgICAg
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4gbV9wYXJzaW5nQnVmZmVyMTY7CisgICAgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
b2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJz
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVy
biBXVEY6OnJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gcGFyc2luZ0J1
ZmZlcikgeworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisK
KyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAocGFyc2lu
Z0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKHBhcnNp
bmdCdWZmZXIpOworICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1
ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgh
eVBvcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKKworICAgICAgICAgICAgaWYgKHNraXBF
eGFjdGx5KHBhcnNpbmdCdWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQg
PSB0cnVlOworCisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZl
cik7CisKKyAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgKnhQb3MsICp5UG9z
IH0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0
ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICBy
ZXR1cm4gIWRlbGltUGFyc2VkOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2
YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBvaW50IDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRl
ci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDU1ICs1MCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHUG9pbnRMaXN0KG90aGVyLCBhY2Nlc3MpKTsK
ICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29u
c3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IGN1ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwot
ICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZh
bHNlOwotCi0gICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0g
ICAgICAgICAgICBpZiAoIXhQb3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICAgICAgICAgIGlmICgheVBvcykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
dXIsIGVuZCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAnLCcpIHsK
LSAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY3Vy
Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAq
eVBvcyB9KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwotICAg
IH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHBvaW50IDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQocG9pbnQtPngoKSwgJyAnLCBwb2ludC0+eSgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVy
cmlkZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlNWR1Bh
cnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2
LDcgKzM3LDcgQEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZQogewog
fQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7CiAg
ICAgcGFyc2UodmFsdWUpOwogfQpAQCAtNTksMTkgKzYwLDMwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBTdHJpbmdWaWV3JiB2YWx1
ZSkKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUludGVybmFsKGJlZ2luLCBiZWdpbiArIHZhbHVl
Lmxlbmd0aCgpLCB0cnVlKTsKKyAgICByZXR1cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNp
bmcodmFsdWUsIFsmXShhdXRvIHBhcnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNl
SW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29u
c3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlciwg
Ym9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFyYW0sIGVu
ZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKHBhcnNpbmdCdWZmZXIsIHZh
bGlkYXRlKTsKIH0KIAotYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50
ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFs
aWRhdGUpCitib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIsIGJvb2wgdmFsaWRhdGUpCit7CisgICAg
cmV0dXJuIHBhcnNlSW50ZXJuYWwocGFyc2luZ0J1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZl
ckRlc2NbXSA9ICB7J2QnLCAnZScsICdmJywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7J24n
LCAnbycsICduJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBz
bGljZURlc2NbXSA9ICB7J3MnLCAnbCcsICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBh
cnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1
ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBh
bGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRPclNs
aWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAwICs5
MSwxMDAgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAgIG1f
YWxpZ24gPSBhbGlnbjsKICAgICBtX21lZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAgICBp
ZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFza2lw
T3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICgqY3VyclBhcmFtID09ICdkJykgewotICAgICAgICBpZiAoIXNraXBTdHJpbmco
Y3VyclBhcmFtLCBlbmQsICJkZWZlciIpKSB7CisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdk
JykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBk
ZWZlckRlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBw
ZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3Jl
IHRoZSAiZGVmZXIiIGhlcmUuCi0gICAgICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAgICAg
ICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpKQorICAg
ICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsK
LSAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAg
aWYgKCpwYXJzaW5nQnVmZmVyID09ICduJykgeworICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJz
RXhhY3RseShwYXJzaW5nQnVmZmVyLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1
ZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhbGln
biA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4
JykgewotICAgICAgICBpZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CisgICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1
ZmZlciA9PSAneCcpIHsKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIubGVuZ3RoUmVtYWluaW5n
KCkgPCA4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBhcmFt
WzFdICE9ICdNJyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1knIHx8IGN1cnJQYXJhbVs1XSAhPSAnTScp
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzFdICE9ICdNJyB8fCBwYXJzaW5nQnVmZmVyWzRd
ICE9ICdZJyB8fCBwYXJzaW5nQnVmZmVyWzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAgIGlm
IChjdXJyUGFyYW1bM10gPT0gJ24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2
XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicp
CisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyWzJdID09ICdpJykgeworICAgICAgICAgICAgaWYg
KHBhcnNpbmdCdWZmZXJbM10gPT0gJ24nKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNpbmdC
dWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVy
WzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JTllNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQ
YXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdCdWZm
ZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19YTUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFyc2luZ0J1ZmZl
cls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1JTllNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10g
PT0gJ2QnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAgICB9
IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbM10gPT0gJ2QnKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBhcnNpbmdCdWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJz
aW5nQnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBh
cnNpbmdCdWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnYScgJiYgcGFy
c2luZ0J1ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09
ICdhJyAmJiBjdXJyUGFyYW1bM10gPT0gJ3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFt
WzZdID09ICdpJykgewotICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQor
ICAgICAgICB9IGVsc2UgaWYgKHBhcnNpbmdCdWZmZXJbMl0gPT0gJ2EnICYmIHBhcnNpbmdCdWZm
ZXJbM10gPT0gJ3gnKSB7CisgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls2XSA9PSAnaScp
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlcls3XSA9PSAnbicpCiAgICAgICAg
ICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU47Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAg
ICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzaW5nQnVmZmVyWzZdID09ICdhJyAmJiBwYXJzaW5n
QnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNQVhZTUFYOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGN1cnJQYXJhbSArPSA4OwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
clBhcmFtLCBlbmQpOworICAgICAgICBwYXJzaW5nQnVmZmVyICs9IDg7CisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKICAgICB9IGVsc2UKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGN1cnJQYXJhbSA8IGVuZCkgewotICAgICAgICBpZiAoKmN1
cnJQYXJhbSA9PSAnbScpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0s
IGVuZCwgIm1lZXQiKSkgeworICAgIGlmIChwYXJzaW5nQnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1h
aW5pbmcoKSkgeworICAgICAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ20nKSB7CisgICAgICAg
ICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBtZWV0RGVzYzxD
aGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8g
cGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyUGFy
YW0gPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQs
ICJzbGljZSIpKSB7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1
ZmZlcik7CisgICAgICAgIH0gZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3MnKSB7CisgICAg
ICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBzbGljZURl
c2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVk
IHRvIHBhcnNlIGV4Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKTsKICAgICAgICAgICAgIGlmIChhbGlnbiAhPSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICAgICAgICAgIG1lZXRPclNsaWNlID0g
U1ZHX01FRVRPUlNMSUNFX1NMSUNFOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGVuZCAh
PSBjdXJyUGFyYW0gJiYgdmFsaWRhdGUpCisgICAgaWYgKCFwYXJzaW5nQnVmZmVyLmF0RW5kKCkg
JiYgdmFsaWRhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fYWxpZ24gPSBhbGln
bjsKQEAgLTMyOCw1MiArMzQwLDQ0IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmEKIAogU3RyaW5nIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6dmFsdWVBc1N0
cmluZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGFsaWduVHlwZTsKKyAgICBhdXRvIGFsaWduVHlw
ZSA9IFsmXSgpIHsKKyAgICAgICAgc3dpdGNoIChtX2FsaWduKSB7CisgICAgICAgIGNhc2UgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKKyAgICAgICAgICAgIHJldHVybiAibm9uZSI7Cisg
ICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46CisgICAgICAgICAg
ICByZXR1cm4gInhNaW5ZTWluIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlEWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1pZFlNaW4iOworICAgICAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOOgorICAgICAgICAgICAgcmV0dXJuICJ4
TWF4WU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6
CisgICAgICAgICAgICByZXR1cm4gInhNaW5ZTWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19YTUlEWU1JRDoKKyAgICAgICAgICAgIHJldHVybiAieE1pZFlNaWQiOwor
ICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOgorICAgICAgICAg
ICAgcmV0dXJuICJ4TWF4WU1pZCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JTllNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNaW5ZTWF4IjsKKyAgICAgICAgY2Fz
ZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1BWDoKKyAgICAgICAgICAgIHJldHVybiAi
eE1pZFlNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFY
OgorICAgICAgICAgICAgcmV0dXJuICJ4TWF4WU1heCI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fVU5LTk9XTjoKKyAgICAgICAgICAgIHJldHVybiAidW5rbm93biI7Cisg
ICAgICAgIH07CiAKLSAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKLSAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX05PTkU6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJub25lIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoKLSAgICAg
ICAgYWxpZ25UeXBlID0gInhNaW5ZTWluIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInhNaWRZ
TWluIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUFYWU1JTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInhNYXhZTWluIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKLSAgICAgICAgYWxp
Z25UeXBlID0gInhNaW5ZTWlkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19YTUlEWU1JRDoKLSAgICAgICAgYWxpZ25UeXBlID0gInhNaWRZTWlkIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1J
RDoKLSAgICAgICAgYWxpZ25UeXBlID0gInhNYXhZTWlkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoKLSAgICAgICAgYWxpZ25UeXBl
ID0gInhNaW5ZTWF4IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19YTUlEWU1BWDoKLSAgICAgICAgYWxpZ25UeXBlID0gInhNaWRZTWF4IjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDoKLSAg
ICAgICAgYWxpZ25UeXBlID0gInhNYXhZTWF4IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOOgotICAgICAgICBhbGlnblR5cGUgPSAidW5r
bm93biI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuICJ1bmtub3duIjsKICAgICB9OwogCiAgICAgc3dpdGNoIChtX21lZXRPclNs
aWNlKSB7CiAgICAgZGVmYXVsdDoKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9VTktOT1dOOgot
ICAgICAgICByZXR1cm4gYWxpZ25UeXBlOworICAgICAgICByZXR1cm4gYWxpZ25UeXBlKCk7CiAg
ICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfTUVFVDoKLSAgICAgICAgcmV0dXJuIGFsaWduVHlwZSAr
ICIgbWVldCI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIG1lZXQi
KTsKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9TTElDRToKLSAgICAgICAgcmV0dXJuIGFsaWdu
VHlwZSArICIgc2xpY2UiOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUoKSwg
IiBzbGljZSIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlKCk7Ci0gICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0
cmluZyYpOworICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShjb25zdCBTdHJpbmdWaWV3
Jik7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCk7CiAg
ICAgdW5zaWduZWQgc2hvcnQgYWxpZ24oKSBjb25zdCB7IHJldHVybiBtX2FsaWduOyB9CkBAIC02
NCw4ICs2NCw5IEBAIHB1YmxpYzoKIAogICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oZmxvYXQg
bG9naWNhbFgsIGZsb2F0IGxvZ2ljYWxZLCBmbG9hdCBsb2dpY2FsV2lkdGgsIGZsb2F0IGxvZ2lj
YWxIZWlnaHQsIGZsb2F0IHBoeXNpY2FsV2lkdGgsIGZsb2F0IHBoeXNpY2FsSGVpZ2h0KSBjb25z
dDsKIAotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBwYXJzZShjb25z
dCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSk7Cisg
ICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQ
YXJzaW5nQnVmZmVyPExDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOworICAgIGJvb2wgcGFyc2UoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mLCBib29sIHZhbGlkYXRlKTsKIAogICAgIFN0cmluZyB2
YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTczLDcgKzc0LDggQEAgcHJpdmF0ZToKICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduOwogICAgIFNWR01lZXRPclNsaWNlVHlw
ZSBtX21lZXRPclNsaWNlOwogCi0gICAgYm9vbCBwYXJzZUludGVybmFsKGNvbnN0IFVDaGFyKiYg
Y3VyclBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcGFyc2VJbnRlcm5hbChTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9vbCB2YWxpZGF0ZSk7CiB9OwogCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU+IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU1ZHU3RyaW5nTGlzdC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIFNWR1N0cmluZ0xpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYg
ZGF0YSwgVUNoYXIgZGVsaW1pdGVyKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIGF1dG8g
aXNTVkdTcGFjZU9yRGVsaW1pdGVyID0gW2RlbGltaXRlcl0oYXV0byBjKSB7CisgICAgICAgIHJl
dHVybiBpc1NWR1NwYWNlKGMpIHx8IGMgPT0gZGVsaW1pdGVyOworICAgIH07CisKKyAgICByZXR1
cm4gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGF0YSwgWyZdKGF1dG8gcGFyc2luZ0J1
ZmZlcikgeworICAgICAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWlu
aW5nKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBhIG5p
Y2UgaW1wcm92ZW1lbnQgdG8gYWRkIGEgdmFyaWFudCBvZiBza2lwVW50aWwgd2hpY2ggd29ya2Vk
CisgICAgICAgICAgICAvLyB3aXRoIGxhbWJkYSBwcmVkaWNhdGVzLgorICAgICAgICAgICAgd2hp
bGUgKHBhcnNpbmdCdWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1NwYWNl
T3JEZWxpbWl0ZXIoKnBhcnNpbmdCdWZmZXIpKQorICAgICAgICAgICAgICAgICsrcGFyc2luZ0J1
ZmZlcjsKKworICAgICAgICAgICAgaWYgKHBhcnNpbmdCdWZmZXIucG9zaXRpb24oKSA9PSBzdGFy
dCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFN0
cmluZyhzdGFydCwgcGFyc2luZ0J1ZmZlci5wb3NpdGlvbigpIC0gc3RhcnQpKTsKKyAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIsIGRlbGlt
aXRlcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJ
dGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAg
cmV0dXJuIHBhcnNpbmdCdWZmZXIuYXRFbmQoKTsKKyAgICB9KTsKK30KKworU3RyaW5nIFNWR1N0
cmluZ0xpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV9pdGVtcykgeworICAgICAg
ICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7
CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyaW5nKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3RyaW5nTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDM5ICs1MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1faXRlbXMuYXBwZW5kKGVtcHR5U3RyaW5nKCkpOwogICAgIH0KIAotICAgIGJvb2wgcGFy
c2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpCi0gICAgewotICAgICAgICBj
bGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KGRhdGEpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hh
ciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5k
ID0gcHRyICsgZGF0YS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hpbGUgKHB0
ciA8IGVuZCAmJiAqcHRyICE9IGRlbGltaXRlciAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAg
ICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmcoc3RhcnQs
IHB0ciAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
aXRlcihwdHIsIGVuZCwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBw
dHIgPT0gZW5kOwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWls
ZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZyk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNvbnN0IFN0
cmluZyYgZGF0YSwgVUNoYXIgZGVsaW1pdGVyKTsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygp
IGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtTGlzdC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitFeGNlcHRpb25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gU1ZHVHJhbnNm
b3JtTGlzdDo6Y29uc29saWRhdGUoKQoreworICAgIGF1dG8gcmVzdWx0ID0gY2FuQWx0ZXJMaXN0
KCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgQVNTRVJUKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7CisKKyAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1
ZSBvZiBudWxsIGlzIHJldHVybmVkLgorICAgIGlmIChtX2l0ZW1zLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobV9pdGVtcy5zaXplKCkgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkpOworCisgICAgYXV0byBuZXdJdGVtID0g
U1ZHVHJhbnNmb3JtOjpjcmVhdGUoY29uY2F0ZW5hdGUoKSk7CisgICAgY2xlYXJJdGVtcygpOwor
CisgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1vdmUobmV3SXRlbSkpOworICAgIGNvbW1pdENo
YW5nZSgpOworICAgIHJldHVybiBtYWtlUmVmUHRyKGl0ZW0uZ2V0KCkpOworfQorCitBZmZpbmVU
cmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5hdGUoKSBjb25zdAoreworICAgIEFm
ZmluZVRyYW5zZm9ybSByZXN1bHQ7CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2Zvcm0gOiBt
X2l0ZW1zKQorICAgICAgICByZXN1bHQgKj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIGJvb2wgZGVsaW1QYXJzZWQg
PSBmYWxzZTsKKyAgICB3aGlsZSAocGFyc2luZ0J1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkpIHsKKyAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOworICAgICAgICAKKyAgICAgICAgYXV0byBwYXJzZWRU
cmFuc2Zvcm1UeXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKHBhcnNp
bmdCdWZmZXIpOworICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVR5cGUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnBhcnNlZFRyYW5zZm9ybVR5cGUs
IHBhcnNpbmdCdWZmZXIpOworICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNy
ZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKworICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMocGFyc2luZ0J1ZmZlcik7CisKKyAgICAgICAgaWYgKHNraXBFeGFjdGx5KHBhcnNpbmdC
dWZmZXIsICcsJykpCisgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CisKKyAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHBhcnNpbmdCdWZmZXIpOworICAgIH0KKyAgICByZXR1cm4g
IWRlbGltUGFyc2VkOworfQorCit2b2lkIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYm9vbCBwYXJzaW5nU3Vj
Y2VlZGVkID0gV1RGOjpyZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIHBh
cnNpbmdCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhwYXJzaW5nQnVmZmVy
KTsKKyAgICB9KTsKKyAgICAKKyAgICBpZiAoIXBhcnNpbmdTdWNjZWVkZWQpCisgICAgICAgIGNs
ZWFySXRlbXMoKTsKK30KKworYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VHZW5l
cmljKHBhcnNpbmdCdWZmZXIpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJldHVybiBw
YXJzZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK1N0cmluZyBTVkdUcmFuc2Zvcm1MaXN0
Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2Zyb20gOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChi
dWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAg
ICAgICBidWlsZGVyLmFwcGVuZCh0cmFuc2Zyb20tPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsK
KyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQorCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDg2ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdmdUcmFuc2Zvcm07CiAgICAg
fQogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKCkK
LSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gY2FuQWx0ZXJMaXN0KCk7Ci0gICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Ci0KLSAgICAgICAgLy8gU3BlYzogSWYgdGhlIGxpc3Qgd2FzIGVtcHR5LCB0aGVuIGEgdmFs
dWUgb2YgbnVsbCBpcyByZXR1cm5lZC4KLSAgICAgICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKG1faXRlbXMuc2l6ZSgp
ID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQoKSk7Ci0KLSAg
ICAgICAgYXV0byBuZXdJdGVtID0gU1ZHVHJhbnNmb3JtOjpjcmVhdGUoY29uY2F0ZW5hdGUoKSk7
Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIGl0ZW0gPSBhcHBlbmQoV1RG
TW92ZShuZXdJdGVtKSk7Ci0gICAgICAgIGNvbW1pdENoYW5nZSgpOwotICAgICAgICByZXR1cm4g
bWFrZVJlZlB0cihpdGVtLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBhcnNlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgICAgICBpZiAoIXBhcnNlKHN0YXJ0LCBzdGFydCArIHZhbHVlLmxlbmd0aCgp
KSkKLSAgICAgICAgICAgIGNsZWFySXRlbXMoKTsKLSAgICB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gY29uY2F0ZW5hdGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHJl
c3VsdDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2Zvcm0gOiBtX2l0ZW1zKQotICAg
ICAgICAgICAgcmVzdWx0ICo9IHRyYW5zZm9ybS0+bWF0cml4KCktPnZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZnJvbSA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlm
IChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7
Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRyYW5zZnJvbS0+dmFsdWUoKS52YWx1ZUFz
U3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci0gICAgfQorICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0
ZSgpOworICAgIEFmZmluZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0OworICAgIHZvaWQg
cGFyc2UoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQpCi0gICAgewotICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFs
c2U7Ci0gICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewotICAgICAgICAgICAgZGVsaW1QYXJz
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5k
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byB0eXBlID0gU1ZHVHJhbnNmb3JtYWJs
ZTo6cGFyc2VBbmRTa2lwVHlwZShzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghdHlwZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGF1dG8gcGFyc2Vk
VHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCp0
eXBlLCBzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhcHBlbmQoU1ZH
VHJhbnNmb3JtOjpjcmVhdGUoKnBhcnNlZFRyYW5zZm9ybVZhbHVlKSk7Ci0KLSAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIGlmIChzdGFy
dCA8IGVuZCAmJiAqc3RhcnQgPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICsrc3RhcnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+Jik7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYp
OworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsODUgKzI3LDg2IEBACiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFy
c2VyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgaW50IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KGNvbnN0IFVDaGFyKiYgcHRy
LCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCogdmFsdWVzLCBpbnQgcmVxdWlyZWQsIGludCBvcHRp
b25hbCkKK1NWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW50IHBhcnNlVHJhbnNm
b3JtUGFyYW1MaXN0KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIHBhcnNpbmdC
dWZmZXIsIGZsb2F0KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQogewogICAg
IGludCBvcHRpb25hbFBhcmFtcyA9IDAsIHJlcXVpcmVkUGFyYW1zID0gMDsKICAgICAKLSAgICBp
ZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCkgfHwgKnB0ciAhPSAnKCcpCisgICAg
aWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcikgfHwgKnBhcnNpbmdCdWZm
ZXIgIT0gJygnKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgcHRyKys7CisgICAgKytw
YXJzaW5nQnVmZmVyOwogICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsK
KyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocGFyc2luZ0J1ZmZlcik7CiAKICAgICB3aGlsZSAo
cmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkgewotICAgICAgICBpZiAocHRyID49IGVuZCkKKyAg
ICAgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBw
YXJzZU51bWJlcihwYXJzaW5nQnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OwogICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKICAgICAgICAgICAgIHJldHVybiAtMTsKICAg
ICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJl
cXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQot
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwor
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocGFyc2luZ0J1ZmZl
cik7CiAgICAgfQotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKSkKKyAg
ICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhwYXJzaW5nQnVmZmVyKSkKICAgICAgICAgcmV0
dXJuIC0xOwogICAgIAotICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHBhcnNpbmdCdWZmZXIpOwogCi0gICAgaWYgKHB0ciA+
PSBlbmQpCisgICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIC0x
OwogICAgIAotICAgIGlmICgqcHRyID09ICcpJykgeyAvLyBza2lwIG9wdGlvbmFscwotICAgICAg
ICBwdHIrKzsKKyAgICBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJyknKSB7CisgICAgICAgIC8vIHNr
aXAgb3B0aW9uYWxzCisgICAgICAgICsrcGFyc2luZ0J1ZmZlcjsKICAgICAgICAgaWYgKGRlbGlt
UGFyc2VkKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHdo
aWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBpZiAocHRyID49
IGVuZCkKKyAgICAgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51
bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAg
ICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocGFyc2luZ0J1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKICAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVy
KQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJl
ZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBv
cHRpb25hbFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9u
YWwpCi0gICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRy
LCBlbmQpOworICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVy
KHBhcnNpbmdCdWZmZXIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIXNraXBP
cHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCkpCisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHBhcnNpbmdCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAK
LSAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCk7CisgICAgICAgIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JE
ZWxpbWl0ZXIocGFyc2luZ0J1ZmZlcik7CiAgICAgICAgIAotICAgICAgICBpZiAocHRyID49IGVu
ZCB8fCAqcHRyICE9ICcpJyB8fCBkZWxpbVBhcnNlZCkKKyAgICAgICAgaWYgKHBhcnNpbmdCdWZm
ZXIuYXRFbmQoKSB8fCAqcGFyc2luZ0J1ZmZlciAhPSAnKScgfHwgZGVsaW1QYXJzZWQpCiAgICAg
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHB0cisrOworICAgICAgICArK3BhcnNpbmdCdWZm
ZXI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXM7
CiB9CiAKIC8vIFRoZXNlIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBlbnVtIFNWR1RyYW5z
Zm9ybVR5cGUKLXN0YXRpYyBjb25zdCBpbnQgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW10gPSAgezAs
IDYsIDEsIDEsIDEsIDEsIDF9Owotc3RhdGljIGNvbnN0IGludCBvcHRpb25hbFZhbHVlc0ZvclR5
cGVbXSA9ICB7MCwgMCwgMSwgMSwgMiwgMCwgMH07Citjb25zdGV4cHIgaW50IHJlcXVpcmVkVmFs
dWVzRm9yVHlwZVtdID0gIHswLCA2LCAxLCAxLCAxLCAxLCAxfTsKK2NvbnN0ZXhwciBpbnQgb3B0
aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDAsIDEsIDEsIDIsIDAsIDB9OwogCi0vLyBUaGlz
IGRlc3RydWN0b3IgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGxpbmsgY29ycmVjdGx5IHdpdGggSW50
ZWwgSUNDLgotU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7
Ci0KLU9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRy
YW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNv
bnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5z
Zm9ybVZhbHVlR2VuZXJpYyhTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBl
LCBTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBwYXJzaW5nQnVmZmVyKQogewog
ICAgIGlmICh0eXBlID09IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04p
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpbnQgdmFsdWVDb3VudCA9IDA7
CiAgICAgZmxvYXQgdmFsdWVzW10gPSB7MCwgMCwgMCwgMCwgMCwgMH07Ci0gICAgaWYgKCh2YWx1
ZUNvdW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QocHRyLCBlbmQsIHZhbHVlcywgcmVxdWly
ZWRWYWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbdHlwZV0pKSA8IDAp
CisgICAgaWYgKCh2YWx1ZUNvdW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QocGFyc2luZ0J1
ZmZlciwgdmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9wdGlvbmFsVmFsdWVz
Rm9yVHlwZVt0eXBlXSkpIDwgMCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IFNWR1RyYW5zZm9ybVZhbHVlIHRyYW5zZm9ybTsKQEAgLTE0NSw0MiArMTQ2LDYzIEBAIE9wdGlv
bmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm0KICAgICByZXR1cm4gdHJhbnNmb3Jt
OwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc2tld1hEZXNjW10gPSAgeydzJywgJ2snLCAnZScs
ICd3JywgJ1gnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WURlc2NbXSA9ICB7J3MnLCAnaycs
ICdlJywgJ3cnLCAnWSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNjYWxlRGVzY1tdID0gIHsncycs
ICdjJywgJ2EnLCAnbCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdHJhbnNsYXRlRGVzY1td
ID0gIHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2wnLCAnYScsICd0JywgJ2UnfTsKLXN0YXRp
YyBjb25zdCBVQ2hhciByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcsICdhJywgJ3QnLCAn
ZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0Jywg
J3InLCAnaScsICd4J307CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3Jt
VHlwZSB0eXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sK
KyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1WYWx1ZUdlbmVyaWModHlwZSwgcGFyc2luZ0J1ZmZl
cik7Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5
cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBwYXJzaW5nQnVmZmVyKQoreworICAgIHJl
dHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBwYXJzaW5nQnVmZmVyKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgc2tld1hEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3JywgJ1gnfTsKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNrZXdZRGVzY1td
ID0gIHsncycsICdrJywgJ2UnLCAndycsICdZJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzY2FsZURlc2NbXSA9ICB7J3MnLCAnYycs
ICdhJywgJ2wnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3Rl
eHByIENoYXJhY3RlclR5cGUgdHJhbnNsYXRlRGVzY1tdID0gIHsndCcsICdyJywgJ2EnLCAnbics
ICdzJywgJ2wnLCAnYScsICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0
JywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25z
dGV4cHIgQ2hhcmFjdGVyVHlwZSBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdyJywg
J2knLCAneCd9OwogCi1PcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlw
ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJU
cmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+
IHBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBpZiAoY3VyclRyYW5zZm9ybSA+PSBlbmQpCisg
ICAgaWYgKHBhcnNpbmdCdWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsKLSAgICAgICAgaWYgKHNraXBT
dHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tl
d1hEZXNjKSkpCisgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICdzJykgeworICAgICAgICBpZiAo
c2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZmZXIsIHNrZXdYRGVzYzxDaGFyYWN0ZXJU
eXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZP
Uk1fU0tFV1g7Ci0gICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5k
LCBza2V3WURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1lEZXNjKSkpCisgICAgICAgIGlmIChz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgc2tld1lEZXNjPENoYXJhY3RlclR5
cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWTsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQs
IHNjYWxlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChzY2FsZURlc2MpKSkKKyAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBzY2FsZURlc2M8Q2hhcmFjdGVyVHlw
ZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1NDQUxFOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHRyYW5zbGF0ZURl
c2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2lu
Z0J1ZmZlciwgdHJhbnNsYXRlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU7Ci0gICAgZWxzZSBpZiAo
c2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHJvdGF0ZURlc2MsIFdURl9BUlJBWV9MRU5H
VEgocm90YXRlRGVzYykpKQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1
ZmZlciwgcm90YXRlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU7Ci0gICAgZWxzZSBpZiAoc2tpcFN0cmlu
ZyhjdXJyVHJhbnNmb3JtLCBlbmQsIG1hdHJpeERlc2MsIFdURl9BUlJBWV9MRU5HVEgobWF0cml4
RGVzYykpKQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgbWF0
cml4RGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
Ci1TVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQorT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdU
Rjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBwYXJzaW5nQnVmZmVy
KSB7CisgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGUocGFyc2luZ0J1ZmZlcik7Cisg
ICAgfSk7Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
PiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVHlw
ZUdlbmVyaWMocGFyc2luZ0J1ZmZlcik7Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIHBhcnNpbmdCdWZmZXIpCiB7Ci0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzOwotICAgIHJldHVybiBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJh
Y3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1VOS05PV04pOworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5l
cmljKHBhcnNpbmdCdWZmZXIpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFu
c2Zvcm1hYmxlLmgJKHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
cmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1
ZGUgIlNWR0xvY2F0YWJsZS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
QEAgLTMyLDkgKzMxLDEyIEBAIGNsYXNzIFNWR1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9j
YXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0
aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kKTsKLSAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGUgcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShj
b25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOworICAgIHN0YXRp
YyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4m
KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3Jt
VmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIFN0cmluZ1BhcnNpbmdC
dWZmZXI8VUNoYXI+Jik7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmdWaWV3Jik7
CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
PiBwYXJzZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKKyAgICBz
dGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNl
VHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RN
U2NvcGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsg
fQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDI2
MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02MCw5OSArNjEsOTAgQEAgdm9pZCBTVkdWaWV3U3BlYzo6cmVzZXQo
KQogICAgIFNWR1pvb21BbmRQYW46OnJlc2V0KCk7CiB9CiAKLXN0YXRpYyBjb25zdCBVQ2hhciBz
dmdWaWV3U3BlY1tdID0geydzJywgJ3YnLCAnZycsICdWJywgJ2knLCAnZScsICd3J307Ci1zdGF0
aWMgY29uc3QgVUNoYXIgdmlld0JveFNwZWNbXSA9IHsndicsICdpJywgJ2UnLCAndycsICdCJywg
J28nLCAneCd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjW10g
PSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdBJywgJ3MnLCAncCcs
ICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcsICdpJywgJ28nfTsKLXN0YXRpYyBjb25zdCBV
Q2hhciB0cmFuc2Zvcm1TcGVjW10gPSB7J3QnLCAncicsICdhJywgJ24nLCAncycsICdmJywgJ28n
LCAncicsICdtJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgem9vbUFuZFBhblNwZWNbXSA9IHsneics
ICdvJywgJ28nLCAnbScsICdBJywgJ24nLCAnZCcsICdQJywgJ2EnLCAnbid9Owotc3RhdGljIGNv
bnN0IFVDaGFyIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScsICd3JywgJ1QnLCAn
YScsICdyJywgJ2cnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzdmdWaWV3U3BlY1tdID0geydzJywgJ3YnLCAnZycs
ICdWJywgJ2knLCAnZScsICd3J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB2aWV3Qm94U3BlY1tdID0geyd2JywgJ2knLCAnZScsICd3
JywgJ0InLCAnbycsICd4J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25z
dGV4cHIgQ2hhcmFjdGVyVHlwZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0geydwJywgJ3In
LCAnZScsICdzJywgJ2UnLCAncicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAnZScsICdjJywg
J3QnLCAnUicsICdhJywgJ3QnLCAnaScsICdvJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB0cmFuc2Zvcm1TcGVjW10gPSB7J3QnLCAn
cicsICdhJywgJ24nLCAncycsICdmJywgJ28nLCAncicsICdtJ307Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB6b29tQW5kUGFuU3BlY1td
ID0geyd6JywgJ28nLCAnbycsICdtJywgJ0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB2
aWV3VGFyZ2V0U3BlY1tdID0gIHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2EnLCAncicsICdn
JywgJ2UnLCAndCd9OwogCi1ib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0
cmluZyYgdmlld1NwZWMpCitib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0
cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0
cmluZ1ZpZXcodmlld1NwZWMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVD
aGFyKiBjdXJyVmlld1NwZWMgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNo
YXIqIGVuZCA9IGN1cnJWaWV3U3BlYyArIHZpZXdTcGVjLmxlbmd0aCgpOwotCi0gICAgaWYgKGN1
cnJWaWV3U3BlYyA+PSBlbmQgfHwgIW1fY29udGV4dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgc3ZnVmlld1Nw
ZWMsIFdURl9BUlJBWV9MRU5HVEgoc3ZnVmlld1NwZWMpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjdXJyVmlld1NwZWMrKzsKLQotICAgIHdoaWxl
IChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyAhPSAnKScpIHsKLSAgICAgICAg
aWYgKCpjdXJyVmlld1NwZWMgPT0gJ3YnKSB7Ci0gICAgICAgICAgICBpZiAoc2tpcFN0cmluZyhj
dXJyVmlld1NwZWMsIGVuZCwgdmlld0JveFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld0JveFNw
ZWMpKSkgewotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJy
Vmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICAgICAgYXV0byB2aWV3Qm94
ID0gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXdCb3gpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnZpZXdCb3gp
KTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdT
cGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwU3RyaW5n
KGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3VGFyZ2V0U3BlYywgV1RGX0FSUkFZX0xFTkdUSCh2aWV3
VGFyZ2V0U3BlYykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQg
fHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogdmlld1RhcmdldFN0YXJ0ID0gKytjdXJy
Vmlld1NwZWM7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAq
Y3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQpCisgICAgcmV0dXJuIFdU
Rjo6cmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gcGFyc2luZ0J1ZmZl
cikgLT4gYm9vbCB7CisgICAgICAgIHVzaW5nIENoYXJhY3RlclR5cGUgPSB0eXBlbmFtZSBkZWNs
dHlwZShwYXJzaW5nQnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICBpZiAocGFyc2lu
Z0J1ZmZlci5hdEVuZCgpIHx8ICFtX2NvbnRleHRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdCdWZm
ZXIsIHN2Z1ZpZXdTcGVjPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcoJykpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKHBhcnNpbmdCdWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpwYXJzaW5nQnVmZmVyICE9ICcpJykgeworICAgICAg
ICAgICAgaWYgKCpwYXJzaW5nQnVmZmVyID09ICd2JykgeworICAgICAgICAgICAgICAgIGlmIChz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgdmlld0JveFNwZWM8Q2hhcmFjdGVy
VHlwZT4pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB2aWV3Qm94ID0gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3gocGFyc2luZ0J1ZmZlciwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXZpZXdC
b3gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwQ2hh
cmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZlciwgdmlld1RhcmdldFNwZWM8Q2hhcmFjdGVyVHlw
ZT4pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZl
ciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byB2aWV3VGFyZ2V0U3RhcnQgPSBwYXJzaW5nQnVmZmVyLnBvc2l0aW9u
KCk7CisgICAgICAgICAgICAgICAgICAgIHNraXBVbnRpbChwYXJzaW5nQnVmZmVyLCAnKScpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2luZ0J1ZmZlci5hdEVuZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3ZpZXdU
YXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBwYXJzaW5nQnVmZmVyLnBvc2l0
aW9uKCkgLSB2aWV3VGFyZ2V0U3RhcnQpOworICAgICAgICAgICAgICAgICAgICArK3BhcnNpbmdC
dWZmZXI7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIgPT0gJ3onKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFyc2luZ0J1ZmZl
ciwgem9vbUFuZFBhblNwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVm
ZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYXV0byB6b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKHBh
cnNpbmdCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmICghem9vbUFuZFBhbikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFpvb21BbmRQYW4o
Knpvb21BbmRQYW4pOworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocGFyc2luZ0J1
ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfSBlbHNlIGlmICgqcGFyc2luZ0J1ZmZlciA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShwYXJzaW5nQnVmZmVyLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcoJykp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UocGFyc2luZ0J1ZmZlciwgZmFsc2Up
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgc2V0
UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5KHBhcnNpbmdCdWZmZXIsICcpJykpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnBhcnNpbmdCdWZmZXIg
PT0gJ3QnKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkocGFy
c2luZ0J1ZmZlciwgdHJhbnNmb3JtU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KHBh
cnNpbmdCdWZmZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFyc2UocGFyc2luZ0J1ZmZlcik7CisgICAgICAg
ICAgICAgICAgaWYgKCFza2lwRXhhY3RseShwYXJzaW5nQnVmZmVyLCAnKScpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbV92aWV3VGFyZ2V0U3Ry
aW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgY3VyclZpZXdTcGVjIC0gdmlld1RhcmdldFN0
YXJ0KTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICgqY3Vy
clZpZXdTcGVjID09ICd6JykgewotICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3
U3BlYywgZW5kLCB6b29tQW5kUGFuU3BlYywgV1RGX0FSUkFZX0xFTkdUSCh6b29tQW5kUGFuU3Bl
YykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAg
aWYgKCFTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oY3VyclZpZXdTcGVjLCBlbmQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1Nw
ZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UgaWYg
KCpjdXJyVmlld1NwZWMgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3Vy
clZpZXdTcGVjLCBlbmQsIHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjLCBXVEZfQVJSQVlfTEVOR1RI
KHByZXNlcnZlQXNwZWN0UmF0aW9TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7Ci0gICAgICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgcHJlc2Vy
dmVBc3BlY3RSYXRpbzsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJz
ZShjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIHNldFByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRp
byk7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVj
ICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJy
Vmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclZpZXdTcGVjID09ICd0Jykgewot
ICAgICAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB0cmFuc2Zvcm1T
cGVjLCBXVEZfQVJSQVlfTEVOR1RIKHRyYW5zZm9ybVNwZWMpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3Vy
clZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIG1fdHJhbnNmb3JtLT5wYXJzZShjdXJy
Vmlld1NwZWMsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAq
Y3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdT
cGVjID09ICc7JykKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2tpcEV4YWN0bHkocGFyc2luZ0J1ZmZlciwg
JzsnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJzaW5nQnVmZmVyLmF0RW5kKCkgfHwg
KnBhcnNpbmdCdWZmZXIgIT0gJyknKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdWaWV3U3BlYyhjb250ZXh0
RWxlbWVudCkpOwogICAgIH0KIAotICAgIGJvb2wgcGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcm
KTsKKyAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYpOwogICAgIHZvaWQg
cmVzZXQoKTsKICAgICB2b2lkIHJlc2V0Q29udGV4dEVsZW1lbnQoKSB7IG1fY29udGV4dEVsZW1l
bnQgPSBudWxscHRyOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJ
KHJldmlzaW9uIDI2MzUyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjUgKzIyLDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHWm9vbUFuZFBhbi5oIgogCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTVkda
b29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIGRpc2FibGVbXSA9IHsgJ2QnLCAnaScsICdzJywgJ2EnLCAnYicsICdsJywgJ2Un
IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVy
VHlwZSBtYWduaWZ5W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywgJ2knLCAnZicsICd5JyB9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9v
bUFuZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgcGFyc2luZ0J1ZmZlcikKIHsKLSAgICBzdGF0aWMgY29uc3QgVUNoYXIg
ZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKLSAgICBp
ZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBkaXNhYmxlLCBXVEZfQVJSQVlfTEVOR1RIKGRpc2Fi
bGUpKSkgewotICAgICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuRGlzYWJsZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IFVDaGFyIG1hZ25p
ZnlbXSA9IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07Ci0gICAgaWYgKHNr
aXBTdHJpbmcoc3RhcnQsIGVuZCwgbWFnbmlmeSwgV1RGX0FSUkFZX0xFTkdUSChtYWduaWZ5KSkp
IHsKLSAgICAgICAgbV96b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbk1hZ25pZnk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNp
bmdCdWZmZXIsIGRpc2FibGU8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICByZXR1cm4gU1ZHWm9v
bUFuZFBhbkRpc2FibGU7CisKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KHBhcnNpbmdC
dWZmZXIsIG1hZ25pZnk8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICByZXR1cm4gU1ZHWm9vbUFu
ZFBhbk1hZ25pZnk7CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQogCi0gICAgcmV0dXJu
IGZhbHNlOworT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IFNWR1pvb21BbmRQYW46OnBhcnNl
Wm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sK
KyAgICByZXR1cm4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKK30KKwor
T3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBh
bihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgcGFyc2luZ0J1ZmZlcikKK3sKKyAgICByZXR1
cm4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhwYXJzaW5nQnVmZmVyKTsKIH0KIAogdm9pZCBTVkda
b29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
Vkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkocmV2aXNpb24gMjYzNTIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgU1ZHWm9vbUFuZFBhbigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgcGFyc2Vab29t
QW5kUGFuKGNvbnN0IFVDaGFyKiYsIGNvbnN0IFVDaGFyKik7CisgICAgc3RhdGljIE9wdGlvbmFs
PFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxM
Q2hhcj4mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9v
bUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiBwcml2YXRlOgogICAgIFNW
R1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBhbiB7IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1pvb21B
bmRQYW5UeXBlPjo6aW5pdGlhbFZhbHVlKCkgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402906</attachid>
            <date>2020-06-26 14:43:44 -0700</date>
            <delta_ts>2020-06-26 18:10:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213635-20200626144344.patch</filename>
            <type>text/plain</type>
            <size>131524</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBAQAorMjAyMC0wNi0yNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBTVkcgcmVsYXRlZCBw
YXJzZXJzIG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZG9wdCBTdHJpbmdQYXJzaW5nQnVm
ZmVyIGFjcm9zcyBTVkcgY29kZS4KKyAgICAgICAgLSBSZW1vdmUgVVRGLTE2IHVwY29udmVyc2lv
bnMgaW4gU1ZHQW5pbWF0aW9uRWxlbWVudCwgU1ZHRml0VG9WaWV3Qm94LCBTVkdMZW5ndGhMaXN0
LCAKKyAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSwgU1ZHTnVtYmVyTGlzdCwgU1ZHUGFyc2VyVXRp
bGl0aWVzLCBTVkdQb2ludExpc3QsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSwgCisgICAg
ICAgICAgU1ZHU3RyaW5nTGlzdCwgU1ZHVHJhbnNmb3JtTGlzdCwgU1ZHVHJhbnNmb3JtYWJsZSBh
bmQgU1ZHVmlld1NwZWMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3J0IFBhcnNpbmdV
dGlsaXRpZXMuaCwgd2hpY2ggaXMgbm93IGluY2x1ZGVkIGJ5IFNWR1BhcnNlclV0aWxpdGllcy5o
CisgICAgICAgIAorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICBBZGQgaW1wbGVtZW50
YXRpb24gZmlsZXMgZm9yIFNWR0xlbmd0aExpc3QsIFNWR051bWJlckxpc3QsIFNWR1BvaW50TGlz
dCwgU1ZHU3RyaW5nTGlzdAorICAgICAgICBhbmQgU1ZHVHJhbnNmb3JtTGlzdCB0byBob2xkIGxh
cmdlIGZ1bmN0aW9ucyBhcmUgdW5saWtlbHkgdG8gYmVuZWZpdCBmcm9tIGlubGluaW5nLgorICAg
ICAgICAKKyAgICAgICAgKiBodG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmg6CisgICAgICAg
IChXZWJDb3JlOjpza2lwQ2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICBBZGQgbmV3IHNraXBD
aGFyYWN0ZXJzRXhhY3RseSwgd2hpY2ggdGFrZXMgYSBjLWFycmF5IChOT1QgbnVsbC10ZXJtaW5h
dGVkKSBvZiBjaGFyYWN0ZXJzCisgICAgICAgIHRvIGNvbXBhcmUgYWdhaW5zdC4KKworICAgICAg
ICAqIHN2Zy9TVkdBbmdsZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQW5nbGVU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcp
OgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyLgorCisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIEFkYXB0IHRvIG5l
dyBzaGFyZWQgcGFyc2VUcmFuc2Zvcm1UeXBlLCB3aGljaCBub3cgcmV0dXJucyBhbiBPcHRpb25h
bCBhbmQgZGVmYXVsdCB0bworICAgICAgICBTVkdfVFJBTlNGT1JNX1VOS05PV04gb24gcGFyc2Ug
ZmFpbHVyZSBhcyB0aGUgb2xkIHBhcnNlVHJhbnNmb3JtVHlwZSBkaWQuCisgICAgICAgIAorICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlS2V5U3BsaW5lcyk6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAg
ICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkKKyAgICAgICAgCisgICAg
ICAgICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRU
b1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3gu
aDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdW
aWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKQorCisgICAgICAgICogc3ZnL1NWR0xlbmd0aExp
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgor
ICAgICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNp
bmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNz
YXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCku
IE1vdmUgcGFyc2UgYW5kIHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBz
dmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAq
IHN2Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVy
IGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxs
IHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpCisKKyAgICAg
ICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6dmFs
dWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAg
ICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5n
IHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNv
bnZlcnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFsdWVBc1N0cmluZyBvdXQgb2Yg
bGluZS4KKworICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0
aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFy
c2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAg
ICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNTVkdT
cGFjZU9yQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICBBZG9wdCBTdHJp
bmdQYXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1
bm5lY2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFj
dGVycygpLiBNb3ZlIHBhcnNlIGFuZCB2YWx1ZUFzU3RyaW5nIG91dCBvZiBsaW5lLgorCisgICAg
ICAgICogc3ZnL1NWR1BhdGhTb3VyY2UuaDoKKyAgICAgICAgQWRkIG1pc3NpbmcgaW5jbHVkZSwg
d2hpY2ggaXMgbm93IG5lZWRlZCBkbyB0byByZW1vdmluZyB1bm5jZXNzYXJ5IGluY2x1ZGVzIGlu
IG90aGVyIGZpbGVzLgorCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpoYXNNb3JlRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTVkdTZWdtZW50
VHlwZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
aDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlci4gUmVwbGFjZSBleGlzdGluZyBz
ZXQgb2YgdW5pb25zIHdpdGggYSBzaW5nbGUKKyAgICAgICAgdW5pb24gb2YgU3RyaW5nUGFyc2lu
Z0J1ZmZlcnMuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQ
b2ludExpc3QuaDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENo
YXJhY3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAg
ICBTdHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFs
dWVBc1N0cmluZyBvdXQgb2YgbGluZS4KKworICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAgICAgIEFk
b3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byBy
ZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCkuIAorCisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0cmluZ0xpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0cmluZ0xpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdTdHJpbmdMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5k
IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8K
KyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIE1vdmUgcGFyc2Ug
YW5kIHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNm
b3JtTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6
Y29uc29saWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0
ZW5hdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VH
ZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgor
ICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1Bh
cnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVj
ZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCkuIE1vdmUgcGFyc2UsIHZhbHVlQXNTdHJpbmcsIGNvbnNvbGlkYXRlIGFuZCAKKyAgICAgICAg
Y29uY2F0ZW5hdGUgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIg
YW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwg
dG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIFVuaWZ5IHBh
cnNlVHJhbnNmb3JtVHlwZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWxsCisgICAgICAgIHVzZSBhIHNp
bmdsZSBpbXBsZW1lbnRhdGlvbiBhbmQgcmV0dXJuIGFuIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVR5
cGU+LgorCisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMu
aDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNG
b3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdW
aWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAgICAqIHN2Zy9TVkdab29tQW5k
UGFuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBhbkdlbmVyaWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKToKKyAgICAgICAg
KiBzdmcvU1ZHWm9vbUFuZFBhbi5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVy
LgorCiAyMDIwLTA2LTI2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDb252ZXJ0IENvbnRlbnRTZWN1cml0eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1
c2luZyBTdHJpbmdQYXJzaW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9u
IDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1Bh
cnNpbmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAg
ICAgaHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
NjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjU0MCw2ICsyNTQwLDcgQEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVs
ZW1lbnQuY3BwCiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5j
cHAKK3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1
NDksNiArMjU1MCw3IEBAIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVt
ZW50LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhF
bGVtZW50LmNwcAorc3ZnL1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVz
LmNwcAogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAt
MjU2Myw2ICsyNTY1LDcgQEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5
RWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVs
ZW1lbnQuY3BwCkBAIC0yNTczLDYgKzI1NzYsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2
Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3Rv
cEVsZW1lbnQuY3BwCitzdmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQu
Y3BwCiBzdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApA
QCAtMjU4Niw2ICsyNTkwLDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBz
dmcvU1ZHVGl0bGVFbGVtZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBz
dmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdV
bmtub3duRWxlbWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTU5MCw3ICsxNTkwLDcgQEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2Vu
dFNjcmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5j
cHAgKi87IH07CiAJCTUzNTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkx
NkFDMDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jj
c2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzZENUExRjE5M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9Owot
CQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAw
Q0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAw
Q0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRp
bGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTM4RUM4MDIxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAw
MDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEw
MDREMjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVk
U291cmNlMS1tbS5tbSAqLzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZp
ZWRTb3VyY2UyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzOEVDN0VFMUY5NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07
CkBAIC0xMDE5Niw2ICsxMDE5NiwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyog
SlNNdXRhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxs
YmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQw
MDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdM
ZW5ndGhMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZH
TnVtYmVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNW
R1BvaW50TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZH
U3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNW
R1RyYW5zZm9ybUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMx
MiAvKiBTZXR0aW5ncy55YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAv
KiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENTU1N0eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0UxOTE0NzFGMkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE0NSw2ICsyNTE1MCw3IEBACiAJCQkJQjIyMjc4OUUw
RDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFC
MzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQx
QjMwMDcyMDMxMiAvKiBTVkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEz
QTAwRTYxMDQwIC8qIFNWR0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAw
MDcxQjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFC
NzgyIC8qIFNWR0xlbmd0aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1
MiAvKiBTVkdMZW5ndGhWYWx1ZS5jcHAgKi8sCkBAIC0yNTE3Nyw2ICsyNTE4Myw3IEBACiAJCQkJ
NDREOERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJ
N0NFNThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5
MEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhB
QzkwMEU2MTA0MCAvKiBTVkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIw
MDA3MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcx
Qjc4MiAvKiBTVkdOdW1iZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3
ODIgLyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjQwLDYgKzI1MjQ3LDcgQEAK
IAkJCQlCMjIyNzhGMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICov
LAogCQkJCTdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIy
MjI3OEY0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIy
NEEyOEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAw
QkYyMTAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEw
MDcxQjc4MiAvKiBTVkdQb2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcx
Qjc4MiAvKiBTVkdQb2x5RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI3Myw2ICsyNTI4MSw3IEBACiAJ
CQkJQjIyMjc5MTIwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJ
CQlCMjIyNzkxMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlC
MjIyNzkxNDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdD
RDcwQzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIy
NzkxNjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3
MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBE
MDBCRjIxMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1MzE0LDYgKzI1
MzIzLDcgQEAKIAkJCQlCMjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJs
ZS5oICovLAogCQkJCUIyMjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0
YW5jZS5jcHAgKi8sCiAJCQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9y
bURpc3RhbmNlLmggKi8sCisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5z
Zm9ybUxpc3QuY3BwICovLAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFu
c2Zvcm1MaXN0LmggKi8sCiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5z
Zm9ybUxpc3QuaWRsICovLAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFu
c2Zvcm1WYWx1ZS5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2lu
Z1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1Bh
cnNpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNCArMTQy
LDI0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmUKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQg
Y2hhcmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShjb25z
dCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IENo
YXJhY3RlclR5cGUoJnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChlbmQgLSBwdHIg
PCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAo
c3RyLCBwdHIsIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHB0ciArPSBjaGFyYWN0ZXJDb3VudDsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hh
cmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGNvbnN0IENoYXJhY3RlclR5cGUo
JnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5n
KCkgPCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1j
bXAoc3RyLCBidWZmZXIucG9zaXRpb24oKSwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFj
dGVyQ291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYnVmZmVyICs9IGNoYXJhY3Rl
ckNvdW50OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xl
VmFsdWU6OnZhbHVlQXNTdHJpbmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVl
OjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hh
cmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdC
dWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIHN3aXRjaCAoZW5kIC0gcHRyKSB7
CisgICAgc3dpdGNoIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkpIHsKICAgICBjYXNlIDA6CiAg
ICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOwog
ICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAnZCcgJiYgcHRyWzFdID09ICdlJyAm
JiBwdHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICdkJyAmJiBidWZmZXJb
MV0gPT0gJ2UnICYmIGJ1ZmZlclsyXSA9PSAnZycpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5n
bGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9ERUc7Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ3InICYm
IHB0clsxXSA9PSAnYScgJiYgcHRyWzJdID09ICdkJykKKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9
PSAncicgJiYgYnVmZmVyWzFdID09ICdhJyAmJiBidWZmZXJbMl0gPT0gJ2QnKQogICAgICAgICAg
ICAgcmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsxXSA9PSAn
cicgJiYgcHRyWzJdID09ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAoYnVmZmVy
WzBdID09ICdnJyAmJiBidWZmZXJbMV0gPT0gJ3InICYmIGJ1ZmZlclsyXSA9PSAnYScgJiYgYnVm
ZmVyWzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5H
TEVUWVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwyNyArMTA3LDE5IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBwdHIsIGF1dG8qIGVu
ZCkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRV
bml0cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRv
IGJ1ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBhdXRvIHZhbHVlSW5TcGVj
aWZpZWRVbml0cyA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKICAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAotICAgICAgICBhdXRvIHVuaXRU
eXBlID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBhdXRvIHVuaXRUeXBlID0g
cGFyc2VBbmdsZVR5cGUoYnVmZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xl
VmFsdWU6OlNWR19BTkdMRVRZUEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAg
ICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRzOwog
ICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkpIHsK
LSAgICAgICAgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0dXJu
IGhlbHBlcihwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBw
dHIgPSB2YWx1ZS5jaGFyYWN0ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsg
dmFsdWUubGVuZ3RoKCkpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmds
ZVZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBm
bG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6aGFzVmFsaQogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7
CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9
IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAgIG1f
dHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFsdWVP
cihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAgaWYg
KG1fdHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAgICAg
ICAgICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dO
OwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAgcmVz
dWx0LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBh
cnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxW
ZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmcpCiB7Ci0gICAgaWYgKHBhcnNlLmlzRW1wdHkoKSkKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzID0gcGFyc2UudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNo
YXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
Y3VyICsgcGFyc2UubGVuZ3RoKCk7Ci0KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwotCi0gICAgVmVjdG9yPFVuaXRCZXppZXI+IHJlc3VsdDsKLQotICAgIGJvb2wgZGVsaW1Q
YXJzZWQgPSBmYWxzZTsKLSAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0gICAgICAgIGRlbGltUGFy
c2VkID0gZmFsc2U7Ci0gICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsK
LSAgICAgICAgaWYgKCFwb3NBKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgWyZdKGF1dG8gYnVmZmVy
KSAtPiBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGJ1ZmZlcik7CiAKLSAgICAgICAgYXV0byBwb3NCID0gcGFyc2VOdW1iZXIoY3Vy
LCBlbmQpOwotICAgICAgICBpZiAoIXBvc0IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwogCi0gICAgICAgIGF1dG8g
cG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKLSAgICAgICAgaWYgKCFwb3NDKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZh
bHNlOworICAgICAgICB3aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgewor
ICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gcG9zQSA9
IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoIXBvc0EpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51
bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICAgICAg
aWYgKCFwb3NEKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
IGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoIXBvc0Ip
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAgYXV0byBwb3NDID0gcGFyc2VO
dW1iZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGlmIChjdXIgPCBlbmQgJiYgKmN1ciA9PSAn
OycpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGN1cisr
OwotICAgICAgICB9CisgICAgICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihidWZmZXIs
IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXBvc0Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGJ1ZmZlcik7CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0Es
ICpwb3NCLCAqcG9zQywgKnBvc0QgfSk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKHNraXBFeGFj
dGx5KGJ1ZmZlciwgJzsnKSkKKyAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CiAK
LSAgICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsK
KworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpwb3NCLCAq
cG9zQywgKnBvc0QgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShidWZmZXIuYXRFbmQo
KSAmJiAhZGVsaW1QYXJzZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9CiAK
IGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3
Qm94LmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRv
Vmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Bh
cnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTg2LDI3ICs4NywzNyBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VBdHRyaWJ1dGUoY29uCiAKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCiB7Ci0gICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICByZXR1
cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVm
ZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKGJ1ZmZlcik7CisgICAg
fSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sK
KyAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhidWZmZXIsIHZhbGlkYXRlKTsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdQ
YXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVy
biBwYXJzZVZpZXdCb3hHZW5lcmljKGJ1ZmZlciwgdmFsaWRhdGUpOwogfQogCi1PcHRpb25hbDxG
bG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywg
Y29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgYm9v
bCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKKyAgICBTdHJp
bmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBidWZmZXIuc3RyaW5nVmlld09mQ2hhcmFjdGVyc1JlbWFp
bmluZygpOwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGMsIGVuZCk7CisgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CiAKLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjLCBl
bmQpOwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihjLCBl
bmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoYnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihidWZmZXIpOworICAgIGF1
dG8gd2lkdGggPSBwYXJzZU51bWJlcihidWZmZXIpOworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VO
dW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogCiAgICAgaWYg
KHZhbGlkYXRlKSB7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fdmlld0JveC0+Y29u
dGV4dEVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKIAogICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdp
ZHRoIHx8ICFoZWlnaHQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
Iiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIs
IHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIH0KIApAQCAtMTIzLDkgKzEzNCw5IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXIKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxk
IGNvbWUgYWZ0ZXIgdGhlIGxhc3QsIGZvdXJ0aCBudW1iZXIuCi0gICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjLCBlbmQpOwotICAgICAgICBpZiAoYyA8IGVuZCkgewotICAgICAgICAgICAg
ZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcobWFrZVN0cmluZygi
UHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHIsICJcIiIpKTsKKyAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgICAgIGlmIChidWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIs
IHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5o
CShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDEyIEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbVN0cmluZyYpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94
KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNl
Vmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlk
YXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mLCBi
b29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3hHZW5lcmljKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7
CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdCb3g7CiAgICAgUmVmPFNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGJvb2wg
bV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJz
aW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdMZW5ndGhMaXN0
OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAg
IHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikg
eworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUoYnVmZmVy
KTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNS
ZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBzdGFydCA9IGJ1ZmZlci5wb3NpdGlvbigp
OworCisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFjZU9yQ29t
bWE+KGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBzdGFy
dCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IFNW
R0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QobV9sZW5ndGhNb2RlLCBTdHJpbmdWaWV3KHN0YXJ0LCBi
dWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhcHBlbmQoU1ZHTGVuZ3RoOjpjcmVh
dGUoV1RGTW92ZSgqdmFsdWUpKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNP
ckRlbGltaXRlcihidWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZHVHJhbnNmb3JtTGlzdCBkb2Vz
PworCisgICAgICAgIHJldHVybiBidWZmZXIuYXRFbmQoKTsKKyAgICB9KTsKK30KKworU3RyaW5n
IFNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGVuZ3RoIDogbV9pdGVtcykgewor
ICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobGVuZ3RoLT52YWx1ZSgpLnZhbHVlQXNT
dHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCShyZXZpc2lvbiAyNjM1ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdWYWx1
ZVByb3BlcnR5TGlzdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw0NSArNTIsOSBAQCBwdWJsaWM6CiAKICAgICBT
VkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aE1vZGU7IH0K
IAotICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNs
ZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmlu
Z1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hh
ciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgICAgICBjb25zdCBVQ2hhciogZW5k
ID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdoaWxlIChw
dHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0gICAgICAgICAg
ICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcoc3RhcnQsIHB0ciAt
IHN0YXJ0KTsKLSAgICAgICAgICAgIFNWR0xlbmd0aFZhbHVlIHZhbHVlKG1fbGVuZ3RoTW9kZSk7
Ci0gICAgICAgICAgICBpZiAodmFsdWUuc2V0VmFsdWVBc1N0cmluZyh2YWx1ZVN0cmluZykuaGFz
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGFwcGVu
ZChTVkdMZW5ndGg6OmNyZWF0ZSh2YWx1ZSkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHB0ciA9PSBlbmQ7Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CiAKLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBs
ZW5ndGggOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKLSAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChsZW5ndGgtPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiBwcml2YXRlOgogICAgIFNWR0xlbmd0
aExpc3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYxLDE5ICs2MiwyMSBAQCBz
dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGxlbmd0aFR5cGVUb1N0CiAgICAgcmV0dXJuICIiOwog
fQogCi1zdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5cGUgcGFyc2VMZW5ndGhUeXBlKGNvbnN0IFVD
aGFyKiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgaW5saW5lIFNWR0xlbmd0aFR5cGUgcGFyc2VMZW5ndGhUeXBlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBpZiAocHRyID09IGVu
ZCkKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBTVkdMZW5ndGhUeXBl
OjpOdW1iZXI7CiAKLSAgICBjb25zdCBVQ2hhciBmaXJzdENoYXIgPSAqcHRyOworICAgIGF1dG8g
Zmlyc3RDaGFyID0gKmJ1ZmZlcjsKKyAgICArK2J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciA9PSBl
bmQpCisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09
ICclJyA/IFNWR0xlbmd0aFR5cGU6OlBlcmNlbnRhZ2UgOiBTVkdMZW5ndGhUeXBlOjpVbmtub3du
OwogCi0gICAgY29uc3QgVUNoYXIgc2Vjb25kQ2hhciA9ICpwdHI7CisgICAgYXV0byBzZWNvbmRD
aGFyID0gKmJ1ZmZlcjsKKyAgICArK2J1ZmZlcjsKIAotICAgIGlmICgrK3B0ciAhPSBlbmQpCisg
ICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVu
a25vd247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdlJyAmJiBzZWNvbmRDaGFyID09ICdtJykK
QEAgLTE4MCw3ICsxODMsMTUgQEAgU1ZHTGVuZ3RoVmFsdWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0
IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUg
U1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0
IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2luZ0Vycm9yJiBwYXJzZUVycm9yLCBTVkdM
ZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVWYWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZH
TGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5n
dGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFzU3RyaW5nKQoreworICAgIFNWR0xlbmd0
aFZhbHVlIGxlbmd0aCB7IGxlbmd0aE1vZGUgfTsKKyAgICBpZiAobGVuZ3RoLnNldFZhbHVlQXNT
dHJpbmcodmFsdWVBc1N0cmluZykuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVu
Z3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmlu
Z1ZpZXcmIHZhbHVlQXNTdHJpbmcsIFNWR1BhcnNpbmdFcnJvciYgcGFyc2VFcnJvciwgU1ZHTGVu
Z3RoTmVnYXRpdmVWYWx1ZXNNb2RlIG5lZ2F0aXZlVmFsdWVzTW9kZSkKIHsKICAgICBTVkdMZW5n
dGhWYWx1ZSBsZW5ndGgobGVuZ3RoTW9kZSk7CiAKQEAgLTIzOSw3ICsyNTAsNyBAQCBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjp0CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpLCBsZW5ndGhUeXBl
VG9QcmltaXRpdmVUeXBlKGxlbmd0aC5sZW5ndGhUeXBlKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8
dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCitFeGNlcHRpb25Pcjx2b2lkPiBT
VkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZUFz
U3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3BlY2lm
aWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYsMjYg
KzI5NywyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAg
cmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4g
U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitF
eGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmdWaWV3JiBzdHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBz
dHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVy
KHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghY29u
dmVydGVkTnVtYmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsK
LQotICAgIGF1dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShwdHIsIGVuZCk7Ci0gICAg
aWYgKGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9y
UGFyc2luZyhzdHJpbmcsIFsmXShhdXRvIGJ1ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewor
ICAgICAgICBhdXRvIGNvbnZlcnRlZE51bWJlciA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIp
CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAg
ICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUoYnVmZmVyKTsKKyAgICAgICAgaWYg
KGxlbmd0aFR5cGUgPT0gU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgbV9sZW5ndGhUeXBlID0gbGVuZ3Ro
VHlwZTsKLSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7Ci0g
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsKKyAgICAg
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqY29udmVydGVkTnVtYmVyOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1
ZTo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4
dCwgU1ZHTGVuZ3RoVHlwZSBsZW5ndGhUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aFZhbHVlLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsMTQgQEAgZW51bSBjbGFzcyBT
VkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgOgogY2xhc3MgU1ZHTGVuZ3RoVmFsdWUgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNWR0xlbmd0aFZhbHVlKFNW
R0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFz
U3RyaW5nID0gU3RyaW5nKCkpOworICAgIFNWR0xlbmd0aFZhbHVlKFNWR0xlbmd0aE1vZGUgPSBT
VkdMZW5ndGhNb2RlOjpPdGhlciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0geyB9KTsK
ICAgICBTVkdMZW5ndGhWYWx1ZShmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMsIFNWR0xlbmd0
aFR5cGUsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7CiAgICAgU1ZHTGVu
Z3RoVmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBlID0g
U1ZHTGVuZ3RoVHlwZTo6TnVtYmVyLCBTVkdMZW5ndGhNb2RlID0gU1ZHTGVuZ3RoTW9kZTo6T3Ro
ZXIpOwogCi0gICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5ndGhNb2Rl
LCBjb25zdCBTdHJpbmcmLCBTVkdQYXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVl
c01vZGUgPSBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGU6OkFsbG93KTsKKyAgICBzdGF0aWMg
T3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBT
dHJpbmdWaWV3Jik7CisgICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnN0cnVjdChTVkdMZW5n
dGhNb2RlLCBjb25zdCBTdHJpbmdWaWV3JiwgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVn
YXRpdmVWYWx1ZXNNb2RlID0gU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CiAg
ICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGJsZW5kKGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBmcm9t
LCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICAKKwogICAg
IHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmKTsKICAgICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NTU1By
aW1pdGl2ZVZhbHVlKGNvbnN0IFNWR0xlbmd0aFZhbHVlJik7CiAKQEAgLTg1LDggKzg2LDggQEAg
cHVibGljOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENv
bnRleHQmLCBmbG9hdCk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZH
TGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsKIAot
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0g
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmLCBTVkdM
ZW5ndGhNb2RlKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0
IFN0cmluZ1ZpZXcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZ1ZpZXcmLCBTVkdMZW5ndGhNb2RlKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBTVkdMZW5n
dGhUeXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHTnVtYmVyTGlzdDo6cGFyc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICByZXR1cm4gcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBidWZmZXIpIHsKKyAgICAgICAgLy8gVGhl
IHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRl
c3BhY2UuCisgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50
aW9uYWxseS4KKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkp
IHsKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmICghbnVtYmVyKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
YXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1Ry
YW5zZm9ybUxpc3QgZG9lcz8KKworICAgICAgICByZXR1cm4gYnVmZmVyLmF0RW5kKCk7CisgICAg
fSk7Cit9CisKK1N0cmluZyBTVkdOdW1iZXJMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG51bWJl
ciA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJlci0+
dmFsdWUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
fQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzU4MikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDM5ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZH
TnVtYmVyTGlzdChvdGhlciwgYWNjZXNzKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgo
KTsKLQotICAgICAgICAvLyBUaGUgc3BlYyAoc2VjdGlvbiA0LjEpIHN0cmFuZ2VseSBkb2Vzbid0
IGFsbG93IGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgLy8gV2UgbWlnaHQgY2hvb3NlIHRv
IHZpb2xhdGUgdGhhdCBpbnRlbnRpb25hbGx5LgotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7
Ci0gICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKLSAgICAg
ICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
YXBwZW5kKFNWR051bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBwdHIgPT0gZW5kOwotICAgIH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG51bWJlciA6IG1faXRlbXMpIHsKLSAgICAgICAgICAg
IGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcg
Jyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG51bWJlci0+dmFsdWUoKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBi
b29sIHBhcnNlKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBG
bG9hdFR5cGU+IHN0YXRpYyBpbmwKIC8vIGF0IGEgaGlnaGVyIHByZWNpc2lvbiBpbnRlcm5hbGx5
LCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBydW50aW1lIGNvc3Qgb3IgY29kZQogLy8gY29tcGxl
eGl0eS4KIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIg
cGFyc2luZyBpbiBXVEY/Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
bWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQ
YXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
U2tpcCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5
cGUgPSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1BhcnNlTnVtYmVy
KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgU3VmZml4U2tpcHBp
bmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogewogICAgIEZsb2F0
VHlwZSBudW1iZXIgPSAwOwogICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKQEAgLTUwLDI2ICs1
MSwyNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgRmxv
YXRUeXBlIGV4cG9uZW50ID0gMDsKICAgICBpbnQgc2lnbiA9IDE7CiAgICAgaW50IGV4cHNpZ24g
PSAxOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOworICAgIGF1dG8gc3Rh
cnQgPSBidWZmZXIucG9zaXRpb24oKTsKIAogICAgIC8vIHJlYWQgdGhlIHNpZ24KLSAgICBpZiAo
cHRyIDwgZW5kICYmICpwdHIgPT0gJysnKQotICAgICAgICBwdHIrKzsKLSAgICBlbHNlIGlmIChw
dHIgPCBlbmQgJiYgKnB0ciA9PSAnLScpIHsKLSAgICAgICAgcHRyKys7CisgICAgaWYgKGJ1ZmZl
ci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKmJ1ZmZlciA9PSAnKycpCisgICAgICAgICsr
YnVmZmVyOworICAgIGVsc2UgaWYgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
KmJ1ZmZlciA9PSAnLScpIHsKKyAgICAgICAgKytidWZmZXI7CiAgICAgICAgIHNpZ24gPSAtMTsK
ICAgICB9IAogICAgIAotICAgIGlmIChwdHIgPT0gZW5kIHx8ICghaXNBU0NJSURpZ2l0KCpwdHIp
ICYmICpwdHIgIT0gJy4nKSkKKyAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgKCFpc0FTQ0lJRGln
aXQoKmJ1ZmZlcikgJiYgKmJ1ZmZlciAhPSAnLicpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgLy8gcmVhZCB0aGUgaW50ZWdlciBwYXJ0LCBidWlsZCByaWdodC10by1sZWZ0
Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyU3RhcnRJbnRQYXJ0ID0gcHRyOwotICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICArK3B0cjsgLy8g
QWR2YW5jZSB0byBmaXJzdCBub24tZGlnaXQuCisgICAgYXV0byBwdHJTdGFydEludFBhcnQgPSBi
dWZmZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBBZHZhbmNlIHRvIGZpcnN0IG5vbi1kaWdp
dC4KKyAgICBza2lwV2hpbGU8Q2hhcmFjdGVyVHlwZSwgaXNBU0NJSURpZ2l0PihidWZmZXIpOwog
Ci0gICAgaWYgKHB0ciAhPSBwdHJTdGFydEludFBhcnQpIHsKLSAgICAgICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSogcHRyU2NhbkludFBhcnQgPSBwdHIgLSAxOworICAgIGlmIChidWZmZXIucG9zaXRp
b24oKSAhPSBwdHJTdGFydEludFBhcnQpIHsKKyAgICAgICAgYXV0byBwdHJTY2FuSW50UGFydCA9
IGJ1ZmZlci5wb3NpdGlvbigpIC0gMTsKICAgICAgICAgRmxvYXRUeXBlIG11bHRpcGxpZXIgPSAx
OwogICAgICAgICB3aGlsZSAocHRyU2NhbkludFBhcnQgPj0gcHRyU3RhcnRJbnRQYXJ0KSB7CiAg
ICAgICAgICAgICBpbnRlZ2VyICs9IG11bHRpcGxpZXIgKiBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+
KCoocHRyU2NhbkludFBhcnQtLSkgLSAnMCcpOwpAQCAtODAsMzggKzgyLDM5IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAv
LyByZWFkIHRoZSBkZWNpbWFscwotICAgICAgICBwdHIrKzsKKyAgICAvLyByZWFkIHRoZSBkZWNp
bWFscworICAgIGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpidWZmZXIg
PT0gJy4nKSB7CisgICAgICAgICsrYnVmZmVyOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUg
bXVzdCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBmb2xsb3dpbmcgdGhlIC4KLSAgICAgICAgaWYgKHB0
ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVu
ZCgpIHx8ICFpc0FTQ0lJRGlnaXQoKmJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICAKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc0FTQ0lJRGln
aXQoKnB0cikpCi0gICAgICAgICAgICBkZWNpbWFsICs9ICgqKHB0cisrKSAtICcwJykgKiAoZnJh
YyAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuMSkpOworICAgICAgICB3aGlsZSAoYnVmZmVy
Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcikpCisgICAg
ICAgICAgICBkZWNpbWFsICs9ICgqKGJ1ZmZlcisrKSAtICcwJykgKiAoZnJhYyAqPSBzdGF0aWNf
Y2FzdDxGbG9hdFR5cGU+KDAuMSkpOwogICAgIH0KIAogICAgIC8vIHJlYWQgdGhlIGV4cG9uZW50
IHBhcnQKLSAgICBpZiAocHRyICE9IHN0YXJ0ICYmIHB0ciArIDEgPCBlbmQgJiYgKCpwdHIgPT0g
J2UnIHx8ICpwdHIgPT0gJ0UnKSAKLSAgICAgICAgJiYgKHB0clsxXSAhPSAneCcgJiYgcHRyWzFd
ICE9ICdtJykpIHsgCi0gICAgICAgIHB0cisrOworICAgIGlmIChidWZmZXIucG9zaXRpb24oKSAh
PSBzdGFydCAmJiBidWZmZXIucG9zaXRpb24oKSArIDEgPCBidWZmZXIuZW5kKCkgJiYgKCpidWZm
ZXIgPT0gJ2UnIHx8ICpidWZmZXIgPT0gJ0UnKQorICAgICAgICAmJiAoYnVmZmVyWzFdICE9ICd4
JyAmJiBidWZmZXJbMV0gIT0gJ20nKSkgeworICAgICAgICArK2J1ZmZlcjsKIAogICAgICAgICAv
LyByZWFkIHRoZSBzaWduIG9mIHRoZSBleHBvbmVudAotICAgICAgICBpZiAoKnB0ciA9PSAnKycp
Ci0gICAgICAgICAgICBwdHIrKzsKLSAgICAgICAgZWxzZSBpZiAoKnB0ciA9PSAnLScpIHsKLSAg
ICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnKycpCisgICAgICAgICAg
ICArK2J1ZmZlcjsKKyAgICAgICAgZWxzZSBpZiAoKmJ1ZmZlciA9PSAnLScpIHsKKyAgICAgICAg
ICAgICsrYnVmZmVyOwogICAgICAgICAgICAgZXhwc2lnbiA9IC0xOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50Ci0gICAgICAgIGlmIChw
dHIgPj0gZW5kIHx8ICFpc0FTQ0lJRGlnaXQoKnB0cikpCisgICAgICAgIGlmIChidWZmZXIuYXRF
bmQoKSB8fCAhaXNBU0NJSURpZ2l0KCpidWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRy
KSkgeworICAgICAgICB3aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiBp
c0FTQ0lJRGlnaXQoKmJ1ZmZlcikpIHsKICAgICAgICAgICAgIGV4cG9uZW50ICo9IHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oMTApOwotICAgICAgICAgICAgZXhwb25lbnQgKz0gKnB0ciAtICcwJzsK
LSAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgZXhwb25lbnQgKz0gKmJ1ZmZlciAtICcw
JzsKKyAgICAgICAgICAgICsrYnVmZmVyOwogICAgICAgICB9CiAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSBleHBvbmVudCBpcyB2YWxpZC4KICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoZXhwb25lbnQp
IHx8IGV4cG9uZW50ID4gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZXhwb25l
bnQpCkBAIC0xMjgsNDQgKzEzMSw0NCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hCiAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UobnVtYmVyKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChzdGFydCA9PSBwdHIpCisgICAgaWYgKHN0YXJ0ID09
IGJ1ZmZlci5wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
aWYgKHNraXAgPT0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCi0gICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsKIAogICAgIHJldHVybiBudW1iZXI7CiB9CiAK
LU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENo
YXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQs
IHNraXApOworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIoYnVmZmVyLCBza2lwKTsKIH0K
IAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBh
cnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIsIFN1ZmZpeFNraXBw
aW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVu
ZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihidWZmZXIsIHNraXApOwog
fQogCiBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5n
LCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0
ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJl
cihwdHIsIGVuZCwgc2tpcCk7Ci0gICAgaWYgKHB0ciAhPSBlbmQpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgW3NraXBdKGF1dG8gYnVmZmVyKSAtPiBPcHRpb25hbDxmbG9h
dD4geworICAgICAgICBhdXRvIHJlc3VsdCA9IGdlbmVyaWNQYXJzZU51bWJlcihidWZmZXIsIHNr
aXApOworICAgICAgICBpZiAoIWJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogLy8gb25s
eSB1c2VkIHRvIHBhcnNlIGxhcmdlQXJjRmxhZyBhbmQgc3dlZXBGbGFnIHdoaWNoIG11c3QgYmUg
YSAiMCIgb3IgIjEiCiAvLyBhbmQgbWlnaHQgbm90IGhhdmUgYW55IHdoaXRlc3BhY2UvY29tbWEg
YWZ0ZXIgaXQKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb25hbDxib29s
PiBnZW5lcmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRp
b25hbDxib29sPiBnZW5lcmljUGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBpZiAocHRyID49IGVuZCkKKyAgICBpZiAoYnVmZmVy
LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisrOworICAgIGNvbnN0IENoYXJhY3RlclR5cGUgZmxh
Z0NoYXIgPSAqYnVmZmVyOworICAgICsrYnVmZmVyOwogCiAgICAgYm9vbCBmbGFnOwogICAgIGlm
IChmbGFnQ2hhciA9PSAnMCcpCkBAIC0xNzUsMTkgKzE3OCwxOSBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGJ1ZmZlcik7CiAgICAgCiAg
ICAgcmV0dXJuIGZsYWc7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBM
Q2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCkKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxh
ZyhTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQogewotICAgIHJldHVybiBnZW5l
cmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhidWZmZXIpOwogfQogCi1PcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlQXJjRmxhZyhwdHIsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcoYnVm
ZmVyKTsKIH0KIAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMTk1LDI1ICsxOTgs
MjMgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTgogICAgIGlmIChz
dHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gY3VyICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgYXV0byB4ID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0
byBidWZmZXIpIC0+IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiB7CisgICAgICAg
IGF1dG8geCA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgIGlmICgheCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoY3VyID09IGVuZCkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CisgICAgICAgIGlmIChidWZmZXIuYXRFbmQo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwgKngpOwogCi0gICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tp
cCk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBh
dXRvIHkgPSBwYXJzZU51bWJlcihidWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tp
cCk7CisgICAgICAgIGlmICgheSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAoY3VyICE9IGVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpAQCAtMjIxLDExNyArMjIyLDEx
MyBAQCBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBvaW50KGNvbnN0IFN0CiAgICAgaWYgKHN0
cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRv
IHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
LSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIXNraXBPcHRp
b25hbFNWR1NwYWNlcyhjdXIsIGVuZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtdKGF1dG8gYnVmZmVy
KSAtPiBPcHRpb25hbDxGbG9hdFBvaW50PiB7CisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
YXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7Ci0gICAgaWYgKCFwb2ludCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBwb2ludCA9IHBhcnNl
RmxvYXRQb2ludChidWZmZXIpOworICAgICAgICBpZiAoIXBvaW50KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFj
ZXMgYXQgdGhlIGVuZC4KLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwotICAg
IAotICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgLy8gRGlzYWxsb3cgYW55dGhpbmcgZXhjZXB0
IHNwYWNlcyBhdCB0aGUgZW5kLgorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVy
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBwb2ludDsKKyAgICB9KTsKIH0KIAogT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVJlY3QoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLSAgICAKLSAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotICAgIAotICAgIGF1dG8geCA9IHBhcnNlTnVt
YmVyKHB0ciwgZW5kKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgheSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQpOwotICAgIGlmICghd2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0
byBidWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UmVjdD4geworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoYnVmZmVyKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVy
KGJ1ZmZlcik7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgIGlmICgh
eSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gd2lkdGgg
PSBwYXJzZU51bWJlcihidWZmZXIpOworICAgICAgICBpZiAoIXdpZHRoKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51bWJlcihi
dWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICghaGVp
Z2h0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGbG9h
dFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OworICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8
SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcp
CiB7CiAgICAgLy8gRklYTUU6IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3NpbmcuCiAK
LSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7
Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcgYW5kIHRyYWls
aW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBzZXBhcmF0
b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0g
cHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJywnKQotICAgICAgICAg
ICAgKytwdHI7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyhzdHJpbmcsIFtd
KGF1dG8gYnVmZmVyKSAtPiBIYXNoU2V0PFN0cmluZz4geworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoYnVmZmVyKTsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHZhbHVlczsKIAotICAgICAg
ICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQot
ICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAgICAgICB3aGlsZSAo
aW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKLSAgICAgICAg
ICAgIC0taW5wdXRFbmQ7CisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpKSB7CisgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFj
ZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdG9ycywgd2lsbCBiZSBp
Z25vcmVkLgorICAgICAgICAgICAgYXV0byBpbnB1dFN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uKCk7
CiAKLSAgICAgICAgdmFsdWVzLmFkZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1
dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCwgJywnKTsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwoYnVmZmVyLCAnLCcp
OworCisgICAgICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJv
bSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGF1dG8gaW5wdXRF
bmQgPSBidWZmZXIucG9zaXRpb24oKSAtIDE7CisgICAgICAgICAgICB3aGlsZSAoaW5wdXRTdGFy
dCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKKyAgICAgICAgICAgICAgICAt
LWlucHV0RW5kOworCisgICAgICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBp
bnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihidWZmZXIsICcsJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHZhbHVlczsKKyAgICB9KTsKIAotICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+IGJ1ZmZlcikKIHsKLSAgICBpZiAobGVuZ3RoIDwgMiB8
fCBjaGFyYWN0ZXJzWzBdICE9ICdVJyB8fCBjaGFyYWN0ZXJzWzFdICE9ICcrJykKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBidWZmZXIubGVuZ3RoUmVtYWluaW5nKCk7CisgICAgaWYgKGxlbmd0aCA8
IDIgfHwgYnVmZmVyWzBdICE9ICdVJyB8fCBidWZmZXJbMV0gIT0gJysnKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIAorCisgICAgYnVmZmVyICs9IDI7CisKICAgICAvLyBQYXJz
ZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgdW5zaWduZWQg
c3RhcnRSYW5nZSA9IDA7CiAgICAgdW5zaWduZWQgc3RhcnRMZW5ndGggPSAwOwogCi0gICAgY29u
c3QgVUNoYXIqIHB0ciA9IGNoYXJhY3RlcnMgKyAyOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
aGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgaWYg
KCFpc0FTQ0lJSGV4RGlnaXQoKnB0cikpCisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJz
UmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmJ1ZmZlcikpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYgKHN0
YXJ0TGVuZ3RoID4gNikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IHN0YXJ0UmFuZ2UgPSAoc3RhcnRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsK
LSAgICAgICAgKytwdHI7CisgICAgICAgIHN0YXJ0UmFuZ2UgPSAoc3RhcnRSYW5nZSA8PCA0KSB8
IHRvQVNDSUlIZXhWYWx1ZSgqYnVmZmVyKTsKKyAgICAgICAgKytidWZmZXI7CiAgICAgfQogCiAg
ICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdlcyBzZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCi0g
ICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAmJiAqcHRyID09ICctJykgeworICAgIGlm
ICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKmJ1ZmZlciA9PSAnLScpIHsKICAgICAgICAg
aWYgKCFzdGFydExlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUgZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVm
aXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGVu
ZExlbmd0aCA9IDA7Ci0gICAgICAgICsrcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICAgICAgKytidWZm
ZXI7CisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7Cisg
ICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqYnVmZmVyKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICsrZW5kTGVuZ3RoOwogICAgICAgICAgICAgaWYgKGVuZExl
bmd0aCA+IDYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
ICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpwdHIpOwot
ICAgICAgICAgICAgKytwdHI7CisgICAgICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0
KSB8IHRvQVNDSUlIZXhWYWx1ZSgqYnVmZmVyKTsKKyAgICAgICAgICAgICsrYnVmZmVyOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKQEAgLTM0NSwxNSArMzQy
LDE1IEBAIHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY28KICAgICAKICAg
ICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlvbmFsIHRyYWls
aW5nIHF1ZXN0aW9uIG1hcmtzLgogICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gc3RhcnRSYW5nZTsK
LSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIGlmICgqcHRyICE9ICc/JykKKyAgICB3
aGlsZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAoKmJ1
ZmZlciAhPSAnPycpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0aDsK
ICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFuZ2UgPDw9IDQ7CiAgICAgICAgIGVuZFJhbmdlID0gKGVu
ZFJhbmdlIDw8IDQpIHwgMHhGOwotICAgICAgICArK3B0cjsKKyAgICAgICAgKytidWZmZXI7CiAg
ICAgfQogICAgIAogICAgIGlmICghc3RhcnRMZW5ndGgpCkBAIC0zNjksNTMgKzM2Niw1NSBAQCBP
cHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNlCiB7CiAgICAgLy8gRklYTUU6
IFBhcnNpbmcgZXJyb3IgZGV0ZWN0aW9uIGlzIG1pc3NpbmcuCiAKLSAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25z
dCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlz
dDsKLSAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKLQotICAgIHdoaWxlIChwdHIgPCBl
bmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICBy
ZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+
IHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+IHsKKyAgICAgICAgVW5p
Y29kZVJhbmdlcyByYW5nZUxpc3Q7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0
OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgYXV0byBpbnB1dFN0YXJ0ID0gYnVmZmVy
LnBvc2l0aW9uKCk7CiAKLSAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmly
c3QKLSAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0
LCBwdHIgLSBpbnB1dFN0YXJ0KSkKLSAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92
ZSgqcmFuZ2UpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3Ry
aW5nKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKTsKLSAgICAgICAgKytwdHI7Ci0gICAg
fQorICAgICAgICAgICAgc2tpcFVudGlsKGJ1ZmZlciwgJywnKTsKKworICAgICAgICAgICAgaWYg
KGJ1ZmZlci5wb3NpdGlvbigpID09IGlucHV0U3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJhbmdlIGZpcnN0CisgICAg
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IHBhcnNlVW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdC
dWZmZXIgeyBpbnB1dFN0YXJ0LCBidWZmZXIucG9zaXRpb24oKSB9KSkKKyAgICAgICAgICAgICAg
ICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIGJ1ZmZlci5w
b3NpdGlvbigpIC0gaW5wdXRTdGFydCkpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyLmF0RW5k
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICsrYnVmZmVyOworICAg
ICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdMaXN0
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUocmFuZ2VMaXN0KSwgV1RG
TW92ZShzdHJpbmdMaXN0KSk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxG
bG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXJyZW50
LCBlbmQpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CiAgICAgaWYgKCF4KQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB5ID0gcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kKTsKKyAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihidWZmZXIpOwogICAgIGlm
ICgheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHJldHVybiBGbG9hdFBv
aW50IHsgKngsICp5IH07CiB9CiAKLU9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2lu
dChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpCitPcHRpb25hbDxGbG9h
dFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZl
cikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOwor
ICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFs
PEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0
IFVDaGFyKiBlbmQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
RmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBv
aW50KGJ1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSArMjEsOSBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogdHlwZWRlZiBzdGQ6OnBhaXI8VUNoYXIzMiwgVUNoYXIzMj4gVW5pY29kZVJh
bmdlOwogdHlwZWRlZiBWZWN0b3I8VW5pY29kZVJhbmdlPiBVbmljb2RlUmFuZ2VzOwpAQCAtMzgs
MjAgKzM4LDIwIEBAIGVudW0gY2xhc3MgU3VmZml4U2tpcHBpbmdQb2xpY3kgewogICAgIFNraXAK
IH07CiAKLU9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIGN1cnJlbnQs
IGNvbnN0IExDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQ
b2xpY3k6OlNraXApOwotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYg
Y3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhT
a2lwcGluZ1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQ
b2xpY3k6OlNraXApOwogT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFN0cmluZ1Zp
ZXcmLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsK
IAogT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIoY29uc3QgU3RyaW5nVmlldyYpOwogCi1PcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWco
Y29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKTsKLU9wdGlvbmFsPGJvb2w+
IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOwor
T3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7
CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4m
KTsKIAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3Jik7
CiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQs
IGNvbnN0IExDaGFyKiBlbmQpOwotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50
KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CitPcHRpb25hbDxGbG9h
dFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKK09w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVD
aGFyPiYpOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJp
bmc+Pj4gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7CiBPcHRp
b25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZ1ZpZXcmKTsK
QEAgLTY0LDEzICs2NCwyMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25z
dGV4CiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9
PSAnXHInOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIg
Ym9vbCBpc1NWR1NwYWNlT3JDb21tYShDaGFyYWN0ZXJUeXBlIGMpCit7CisgICAgcmV0dXJuIGlz
U1ZHU3BhY2UoYykgfHwgYyA9PSAnLCc7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgd2hpbGUgKHB0
ciA8IGVuZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICBwdHIrKzsKKyAgICBza2lwV2hp
bGU8Q2hhcmFjdGVyVHlwZSwgaXNTVkdTcGFjZT4ocHRyLCBlbmQpOwogICAgIHJldHVybiBwdHIg
PCBlbmQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBi
b29sIHNraXBPcHRpb25hbFNWR1NwYWNlcyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBjaGFyYWN0ZXJzKQoreworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1Nw
YWNlPihjaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gY2hhcmFjdGVycy5oYXNDaGFyYWN0ZXJzUmVt
YWluaW5nKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhw
ciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGNvbnN0IENoYXJhY3RlclR5
cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcp
CiB7CiAgICAgaWYgKHB0ciA8IGVuZCAmJiAhaXNTVkdTcGFjZSgqcHRyKSAmJiAqcHRyICE9IGRl
bGltaXRlcikKQEAgLTg0LDI4ICs5NCwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBjb25zdGV4CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAotY29uc3RleHByIGJvb2wg
c2tpcFN0cmluZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNo
YXIqIG5hbWUsIGludCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBj
b25zdGV4cHIgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBjaGFyYWN0ZXJzLCBjaGFyIGRlbGltaXRlciA9ICcs
JykKIHsKLSAgICBpZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQorICAgIGlmIChjaGFyYWN0ZXJzLmhh
c0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAhaXNTVkdTcGFjZSgqY2hhcmFjdGVycykgJiYgKmNo
YXJhY3RlcnMgIT0gZGVsaW1pdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1l
bWNtcChuYW1lLCBwdHIsIHNpemVvZihVQ2hhcikgKiBsZW5ndGgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcHRyICs9IGxlbmd0aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxh
dGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci1pbmxpbmUgYm9vbCBza2lwU3RyaW5nKGNvbnN0
IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyICgmc3RyKVtjaGFyYWN0
ZXJDb3VudF0pCi17Ci0gICAgaW50IGxlbmd0aCA9IGNoYXJhY3RlckNvdW50IC0gMTsKLSAgICBp
ZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAocHRyW2ldICE9IHN0cltp
XSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGNoYXJhY3RlcnMpKSB7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNS
ZW1haW5pbmcoKSAmJiAqY2hhcmFjdGVycyA9PSBkZWxpbWl0ZXIpIHsKKyAgICAgICAgICAgIGNo
YXJhY3RlcnMrKzsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjaGFyYWN0ZXJz
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBjaGFyYWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5o
CShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMSArMTksMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CiAKIGNsYXNzIFNWR1BhdGhTb3VyY2Ug
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR1BhdGhTb3VyY2UpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3Ry
aW5nU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTdHJpbmdTb3VyY2UuaCIKIAotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzIsMzMgKzMxLDMwIEBAIFNWR1BhdGhTdHJpbmdTb3VyY2U6OlNW
R1BhdGhTdHJpbmdTb3VyY2UKIHsKICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwogCi0g
ICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3Rlcjgg
PSBzdHJpbmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgbV9lbmQubV9jaGFyYWN0ZXI4ID0gbV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCArIHN0cmluZy5sZW5ndGgoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKLSAg
ICAgICAgbV9lbmQubV9jaGFyYWN0ZXIxNiA9IG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ICsgc3Ry
aW5nLmxlbmd0aCgpOwotICAgIH0KKyAgICBpZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIG1f
YnVmZmVyOCA9IHsgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSB9OworICAg
IGVsc2UKKyAgICAgICAgbV9idWZmZXIxNiA9IHsgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJp
bmcubGVuZ3RoKCkgfTsKIH0KIAogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpoYXNNb3JlRGF0
YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gbV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCA8IG1fZW5kLm1fY2hhcmFjdGVyODsKLSAgICByZXR1cm4gbV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYgPCBtX2VuZC5tX2NoYXJhY3RlcjE2OworICAgICAgICByZXR1
cm4gbV9idWZmZXI4Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKKyAgICByZXR1cm4gbV9idWZm
ZXIxNi5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCk7CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6bW92ZVRvTmV4dFRva2VuKCkKIHsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAg
ICAgIHJldHVybiBza2lwT3B0aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwg
bV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICAgICAgcmV0
dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2J1ZmZlcjgpOworICAgIHJldHVybiBza2lwT3B0
aW9uYWxTVkdTcGFjZXMobV9idWZmZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVs
cGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlv
bmFsPFNWR1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihTdHJpbmdQYXJzaW5nQnVmZmVy
PENoYXJhY3RlclR5cGU+JiBidWZmZXIsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkK
IHsKICAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50
IGNvbW1hbmQuCi0gICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8
ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgIGlmICgoKmJ1
ZmZlciA9PSAnKycgfHwgKmJ1ZmZlciA9PSAnLScgfHwgKmJ1ZmZlciA9PSAnLicgfHwgaXNBU0NJ
SURpZ2l0KCpidWZmZXIpKQogICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0gUGF0aFNlZ0Ns
b3NlUGF0aCkgewogICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9B
YnMpCiAgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKQEAgLTczLDE1MCArNjks
MTM4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMKIFNWR1BhdGhT
ZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHBy
ZXZpb3VzQ29tbWFuZCkKIHsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAgaWYg
KGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5l
eHRDb21tYW5kSGVscGVyKG1fYnVmZmVyOCwgcHJldmlvdXNDb21tYW5kKSkKICAgICAgICAgICAg
IHJldHVybiAqbmV4dENvbW1hbmQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF1dG8gbmV4
dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJl
dmlvdXNDb21tYW5kKSkKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFu
ZEhlbHBlcihtX2J1ZmZlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJu
ICpuZXh0Q29tbWFuZDsKICAgICB9CiAKICAgICByZXR1cm4gKnBhcnNlU1ZHU2VnbWVudFR5cGUo
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBTVkdQYXRo
U2VnVHlwZSBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBj
dXJyZW50KQordGVtcGxhdGU8dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2UoRiYmIGZ1bmN0b3IpCiB7Ci0gICAgc3dpdGNoICgqKGN1cnJlbnQrKykp
IHsKLSAgICBjYXNlICdaJzoKLSAgICBjYXNlICd6JzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdD
bG9zZVBhdGg7Ci0gICAgY2FzZSAnTSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJz
OwotICAgIGNhc2UgJ20nOgotICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICBj
YXNlICdMJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgY2FzZSAnbCc6
Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwotICAgIGNhc2UgJ0MnOgotICAgICAg
ICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICBjYXNlICdjJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgY2FzZSAnUSc6Ci0gICAgICAgIHJl
dHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICBjYXNlICdxJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsOwotICAgIGNhc2UgJ0EnOgotICAgICAg
ICByZXR1cm4gUGF0aFNlZ0FyY0FiczsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgcmV0dXJuIFBh
dGhTZWdBcmNSZWw7Ci0gICAgY2FzZSAnSCc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRv
SG9yaXpvbnRhbEFiczsKLSAgICBjYXNlICdoJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5l
VG9Ib3Jpem9udGFsUmVsOwotICAgIGNhc2UgJ1YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb1ZlcnRpY2FsQWJzOwotICAgIGNhc2UgJ3YnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb1ZlcnRpY2FsUmVsOwotICAgIGNhc2UgJ1MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1
cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7Ci0gICAgY2FzZSAnVCc6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICBjYXNlICd0JzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKLSAgICB9CisgICAgaWYgKG1faXM4Qml0U291
cmNlKQorICAgICAgICByZXR1cm4gZnVuY3RvcihtX2J1ZmZlcjgpOworICAgIHJldHVybiBmdW5j
dG9yKG1fYnVmZmVyMTYpOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgpCiB7Ci0gICAgaWYgKG1faXM4Qml0U291
cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNik7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikg
LT4gU1ZHUGF0aFNlZ1R5cGUgeworICAgICAgICBhdXRvIGNoYXJhY3RlciA9ICpidWZmZXI7Cisg
ICAgICAgIGJ1ZmZlcisrOworICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgeworICAgICAgICBj
YXNlICdaJzoKKyAgICAgICAgY2FzZSAneic6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0Ns
b3NlUGF0aDsKKyAgICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ01v
dmVUb0FiczsKKyAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ01v
dmVUb1JlbDsKKyAgICAgICAgY2FzZSAnTCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb0FiczsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb1JlbDsKKyAgICAgICAgY2FzZSAnQyc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1
cnZlVG9DdWJpY0FiczsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICByZXR1cm4gUGF0
aFNlZ0N1cnZlVG9DdWJpY1JlbDsKKyAgICAgICAgY2FzZSAnUSc6CisgICAgICAgICAgICByZXR1
cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM7CisgICAgICAgIGNhc2UgJ3EnOgorICAgICAg
ICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsOworICAgICAgICBjYXNlICdB
JzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOworICAgICAgICBjYXNlICdhJzoK
KyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQXJjUmVsOworICAgICAgICBjYXNlICdIJzoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKKyAgICAgICAgY2Fz
ZSAnaCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw7Cisg
ICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bEFiczsKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVU
b1ZlcnRpY2FsUmVsOworICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRo
U2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOworICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOworICAgICAgICBjYXNlICdUJzoK
KyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKKyAg
ICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNTbW9vdGhSZWw7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNl
Z1Vua25vd247CisgICAgICAgIH0KKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6TW92ZVRvU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50
KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB0YXJn
ZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJz
ZShbXShhdXRvJiBidWZmZXIpIC0+IE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHsKKyAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
CiAgICAgICAgIE1vdmVUb1NlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0g
ICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlciht
X2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBo
ZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAg
IH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0g
W10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGlu
ZVRvU2VnbWVudD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50
KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikgLT4gT3B0
aW9uYWw8TGluZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VG
bG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvU2VnbWVudCBz
ZWdtZW50OwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9p
bnQpOwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0
U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1f
ZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1Bh
dGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpw
YXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhlbHBlciA9IFtdKGNv
bnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hv
cml6b250YWxTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQs
IGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikgLT4gT3B0aW9uYWw8TGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVm
ZmVyKTsKICAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAgICAgCiAgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CiAgICAg
ICAgIHNlZ21lbnQueCA9ICp4OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0g
ICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAK
IE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1ZlcnRpY2FsU2VnbWVudD4gU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVs
cGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9u
YWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikgLT4gT3B0
aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVt
YmVyKGJ1ZmZlcik7CiAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIAogICAgICAgICBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgc2VnbWVudDsK
ICAgICAgICAgc2VnbWVudC55ID0gKnk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07
Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsK
IH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVudD4gU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBhdXRvIGhl
bHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlv
bmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgYnVmZmVy
KSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQx
ID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghcG9pbnQxKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNl
RmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxv
YXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAoIXBvaW50MikKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9h
dFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yMjUsMjEgKzIwOSwxNyBAQCBPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtCiAgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBv
aW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAg
ICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAg
ICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5k
Lm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0
byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21v
b3RoU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBidWZmZXIpIC0+IE9wdGlvbmFs
PEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJz
ZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCFwb2ludDIpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNl
RmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMjQ3LDIxICsyMjcsMTcgQEAgT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vbwogICAgICAgICBzZWdtZW50LnBvaW50MiA9
ICpwb2ludDI7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAg
ICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2Up
Ci0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9j
aGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0
byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVu
dCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxv
YXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAoIXBvaW50MSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9h
dFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNjksNDkgKzI0NSw0MSBAQCBPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljCiAgICAgICAgIHNlZ21lbnQucG9pbnQxID0gKnBv
aW50MTsKICAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAg
ICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAg
ICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5k
Lm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShj
b25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFy
c2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1
ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAg
ICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
ICAgICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsK
LSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7Cisg
ICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0g
W10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8QXJj
VG9TZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQp
OworICAgIHJldHVybiBwYXJzZShbXShhdXRvJiBidWZmZXIpIC0+IE9wdGlvbmFsPEFyY1RvU2Vn
bWVudD4geworICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKICAgICAgICAg
aWYgKCFyeCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8g
cnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHJ5ID0gcGFyc2VO
dW1iZXIoYnVmZmVyKTsKICAgICAgICAgaWYgKCFyeSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gYW5nbGUgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQp
OworICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKICAgICAgICAgaWYg
KCFhbmdsZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8g
bGFyZ2VBcmMgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byBsYXJn
ZUFyYyA9IHBhcnNlQXJjRmxhZyhidWZmZXIpOwogICAgICAgICBpZiAoIWxhcmdlQXJjKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBzd2VlcCA9IHBhcnNl
QXJjRmxhZyhjdXJyZW50LCBlbmQpOworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFn
KGJ1ZmZlcik7CiAgICAgICAgIGlmICghc3dlZXApCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVm
ZmVyKTsKICAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKQEAgLTMyMywxMSArMjkxLDcgQEAgT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
QXJjVG9TZWdtZW50PiBTVgogICAgICAgICBzZWdtZW50LnN3ZWVwID0gKnN3ZWVwOwogICAgICAg
ICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2Vn
bWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIx
Nik7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNWR1BhdGhTb3VyY2UuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDE3ICs0Niwx
NSBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CiAgICAgT3B0aW9u
YWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZpbmFsOwogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRj4gZGVjbHR5cGUoYXV0bykgcGFyc2UoRiYmKTsKKwogICAgIFN0cmluZyBt
X3N0cmluZzsKICAgICBib29sIG1faXM4Qml0U291cmNlOwogCiAgICAgdW5pb24gewotICAgICAg
ICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXI4OwotICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFy
YWN0ZXIxNjsKLSAgICB9IG1fY3VycmVudDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGNvbnN0IExD
aGFyKiBtX2NoYXJhY3Rlcjg7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcjE2Owot
ICAgIH0gbV9lbmQ7CisgICAgICAgIFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+IG1fYnVmZmVy
ODsKKyAgICAgICAgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4gbV9idWZmZXIxNjsKKyAgICB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BvaW50TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bv
aW50TGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJz
aW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTVkdQb2ludExpc3Q6
OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAg
cmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVmZmVyKSB7
CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworCisgICAgICAgIGJvb2wg
ZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJz
UmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisKKyAgICAg
ICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAo
IXhQb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRv
IHlQb3MgPSBwYXJzZU51bWJlcihidWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tp
cCk7CisgICAgICAgICAgICBpZiAoIXlQb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAg
ICAgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwgJywnKSkKKyAgICAgICAgICAgICAgICBkZWxp
bVBhcnNlZCA9IHRydWU7CisKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZm
ZXIpOworCisgICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBv
cyB9KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJ
dGVtcygpIG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAg
cmV0dXJuICFkZWxpbVBhcnNlZDsKKyAgICB9KTsKK30KKworU3RyaW5nIFNWR1BvaW50TGlzdDo6
dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisg
ICAgZm9yIChjb25zdCBhdXRvJiBwb2ludCA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKHBvaW50LT54KCksICcgJywgcG9pbnQtPnkoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BvaW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2ludExpc3QuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvaW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw1NSArNTAsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1BvaW50TGlzdChvdGhlciwgYWNjZXNzKSk7
CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
ID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBlbmQgPSBjdXIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsK
LSAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBm
YWxzZTsKLQotICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwot
ICAgICAgICAgICAgaWYgKCF4UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAgICAgICBpZiAoIXlQb3MpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOwotCi0gICAgICAgICAgICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywnKSB7
Ci0gICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGN1
cisrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywg
KnlQb3MgfSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwb2ludCA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQot
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHBvaW50LT54KCksICcgJywgcG9pbnQtPnkoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBib29sIHBhcnNlKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3Zl
cnJpZGU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
Niw3ICszNyw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUKIHsK
IH0KIAotU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewog
ICAgIHBhcnNlKHZhbHVlKTsKIH0KQEAgLTU5LDE5ICs2MCwyOSBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCitib29s
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nVmlldyYgdmFs
dWUpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVl
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogYmVnaW4gPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgcGFyc2VJbnRlcm5hbChiZWdpbiwgYmVnaW4gKyB2YWx1
ZS5sZW5ndGgoKSwgdHJ1ZSk7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2
YWx1ZSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZUludGVybmFsKGJ1
ZmZlciwgdHJ1ZSk7CisgICAgfSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpwYXJzZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9v
bCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJp
bmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyLCBib29sIHZhbGlkYXRlKQogewotICAgIHJl
dHVybiBwYXJzZUludGVybmFsKGN1cnJQYXJhbSwgZW5kLCB2YWxpZGF0ZSk7CisgICAgcmV0dXJu
IHBhcnNlSW50ZXJuYWwoYnVmZmVyLCB2YWxpZGF0ZSk7CiB9CiAKLWJvb2wgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUludGVybmFsKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBj
b25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKQorYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIsIGJvb2wg
dmFsaWRhdGUpCit7CisgICAgcmV0dXJuIHBhcnNlSW50ZXJuYWwoYnVmZmVyLCB2YWxpZGF0ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIGRlZmVyRGVzY1tdID0gIHsnZCcsICdlJywgJ2YnLCAnZScsICdyJ307Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBub25lRGVz
Y1tdID0gIHsnbicsICdvJywgJ24nLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbWVldERlc2NbXSA9ICB7J20nLCAnZScsICdl
JywgJ3QnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFy
YWN0ZXJUeXBlIHNsaWNlRGVzY1tdID0gIHsncycsICdsJywgJ2knLCAnYycsICdlJ307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlw
ZSBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgIFNWR01lZXRP
clNsaWNlVHlwZSBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9NRUVUOwpAQCAtNzksMTAw
ICs5MCwxMDAgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSQogICAg
IG1fYWxpZ24gPSBhbGlnbjsKICAgICBtX21lZXRPclNsaWNlID0gbWVldE9yU2xpY2U7CiAKLSAg
ICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCpjdXJyUGFyYW0gPT0gJ2QnKSB7Ci0gICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJy
UGFyYW0sIGVuZCwgImRlZmVyIikpIHsKKyAgICBpZiAoKmJ1ZmZlciA9PSAnZCcpIHsKKyAgICAg
ICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBkZWZlckRlc2M8Q2hhcmFjdGVy
VHlwZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0
IGZvciAqZGVmZXIqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgaWdub3JlIHRoZSAiZGVmZXIiIGhlcmUu
Ci0gICAgICAgIGlmIChjdXJyUGFyYW0gPT0gZW5kKQorICAgICAgICBpZiAoYnVmZmVyLmF0RW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIXNraXBPcHRpb25h
bFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCkpCisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKGJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
aWYgKCpjdXJyUGFyYW0gPT0gJ24nKSB7Ci0gICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFy
YW0sIGVuZCwgIm5vbmUiKSkgeworICAgIGlmICgqYnVmZmVyID09ICduJykgeworICAgICAgICBp
ZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIG5vbmVEZXNjPENoYXJhY3RlclR5cGU+
KSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3Ig
Km5vbmUqIHZhbHVlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORTsKLSAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKLSAgICB9IGVsc2UgaWYgKCpjdXJy
UGFyYW0gPT0gJ3gnKSB7Ci0gICAgICAgIGlmICgoZW5kIC0gY3VyclBhcmFtKSA8IDgpCisgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgIH0gZWxzZSBpZiAoKmJ1ZmZl
ciA9PSAneCcpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGhSZW1haW5pbmcoKSA8IDgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyUGFyYW1bMV0gIT0gJ00n
IHx8IGN1cnJQYXJhbVs0XSAhPSAnWScgfHwgY3VyclBhcmFtWzVdICE9ICdNJykKKyAgICAgICAg
aWYgKGJ1ZmZlclsxXSAhPSAnTScgfHwgYnVmZmVyWzRdICE9ICdZJyB8fCBidWZmZXJbNV0gIT0g
J00nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VyclBhcmFtWzJd
ID09ICdpJykgewotICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVszXSA9PSAnbicpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdpJykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAgaWYgKGJ1ZmZlclsyXSA9PSAnaScp
IHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbM10gPT0gJ24nKSB7CisgICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcls3
XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNSU5ZTUlOOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyUGFy
YW1bN10gPT0gJ2QnKQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChidWZmZXJbN10gPT0g
J2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlOWU1JRDsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBh
cmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYnVmZmVyWzZdID09ICdhJyAmJiBidWZmZXJbN10gPT0gJ3gnKQogICAgICAgICAg
ICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzNdID09ICdkJykgewotICAgICAgICAgICAg
ICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2knKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXJbM10gPT0g
J2QnKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlcls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjdXJyUGFyYW1bN10gPT0gJ2QnKQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChidWZmZXJbN10gPT0gJ2QnKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxp
Z24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRDsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0g
J3gnKQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyWzZdID09ICdhJyAmJiBidWZm
ZXJbN10gPT0gJ3gnKQogICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNSURZTUFYOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVsyXSA9PSAnYScgJiYg
Y3VyclBhcmFtWzNdID09ICd4JykgewotICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAn
aScpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAgICAg
fSBlbHNlIGlmIChidWZmZXJbMl0gPT0gJ2EnICYmIGJ1ZmZlclszXSA9PSAneCcpIHsKKyAgICAg
ICAgICAgIGlmIChidWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
cls3XSA9PSAnbicpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1BWFlNSU47Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzdd
ID09ICdkJykKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChidWZmZXJbN10gPT0gJ2QnKQogICAg
ICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlE
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJh
bVs3XSA9PSAneCcpCisgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlcls2XSA9PSAnYScgJiYg
YnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNQVhZTUFYOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGN1cnJQYXJhbSArPSA4OwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
clBhcmFtLCBlbmQpOworICAgICAgICBidWZmZXIgKz0gODsKKyAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGJ1ZmZlcik7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChjdXJyUGFyYW0gPCBlbmQpIHsKLSAgICAgICAgaWYgKCpjdXJyUGFyYW0gPT0gJ20n
KSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJtZWV0Iikp
IHsKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBp
ZiAoKmJ1ZmZlciA9PSAnbScpIHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFj
dGx5KGJ1ZmZlciwgbWVldERlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSog
dmFsdWUuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKLSAgICAg
ICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICdzJykgewotICAgICAgICAgICAgaWYgKCFza2lw
U3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAic2xpY2UiKSkgeworICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSBpZiAoKmJ1ZmZlciA9PSAncycp
IHsKKyAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgc2xpY2VE
ZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBl
ZCB0byBwYXJzZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoYnVmZmVyKTsKICAgICAgICAgICAgIGlmIChhbGlnbiAhPSBTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICAgICAgICAgIG1lZXRPclNsaWNlID0gU1ZHX01F
RVRPUlNMSUNFX1NMSUNFOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGVuZCAhPSBjdXJy
UGFyYW0gJiYgdmFsaWRhdGUpCisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSAmJiB2YWxpZGF0ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9hbGlnbiA9IGFsaWduOwpAQCAtMzI4LDUy
ICszMzksNDQgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYQogCiBT
dHJpbmcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QK
IHsKLSAgICBTdHJpbmcgYWxpZ25UeXBlOworICAgIGF1dG8gYWxpZ25UeXBlID0gWyZdKCkgewor
ICAgICAgICBzd2l0Y2ggKG1fYWxpZ24pIHsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19OT05FOgorICAgICAgICAgICAgcmV0dXJuICJub25lIjsKKyAgICAgICAgY2FzZSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1p
bllNaW4iOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgor
ICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiI7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1BWFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhNYXhZTWluIjsKKyAg
ICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKKyAgICAgICAgICAg
IHJldHVybiAieE1pbllNaWQiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCI7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6CisgICAgICAgICAgICByZXR1cm4gInhN
YXhZTWlkIjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoK
KyAgICAgICAgICAgIHJldHVybiAieE1pbllNYXgiOworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1heCI7Cisg
ICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6CisgICAgICAgICAg
ICByZXR1cm4gInhNYXhZTWF4IjsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19VTktOT1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICAgICAgfTsKIAot
ICAgIHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
Tk9ORToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOOgotICAgICAgICBhbGlnblR5cGUg
PSAieE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaW4iOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOOgotICAg
ICAgICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNW
R19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1p
bllNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNaWQiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlEOgotICAgICAgICBh
bGlnblR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNYXgi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlNYXgiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgotICAgICAgICBhbGlnblR5
cGUgPSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ1bmtub3duIjsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
InVua25vd24iOwogICAgIH07CiAKICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKICAgICBk
ZWZhdWx0OgogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX1VOS05PV046Ci0gICAgICAgIHJldHVy
biBhbGlnblR5cGU7CisgICAgICAgIHJldHVybiBhbGlnblR5cGUoKTsKICAgICBjYXNlIFNWR19N
RUVUT1JTTElDRV9NRUVUOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBtZWV0IjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoYWxpZ25UeXBlKCksICIgbWVldCIpOwogICAgIGNhc2Ug
U1ZHX01FRVRPUlNMSUNFX1NMSUNFOgotICAgICAgICByZXR1cm4gYWxpZ25UeXBlICsgIiBzbGlj
ZSI7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIHNsaWNlIik7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZS5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUo
KTsKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAogICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBz
aG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0LDggKzY0LDkgQEAg
cHVibGljOgogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dpY2FsWCwgZmxv
YXQgbG9naWNhbFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNhbEhlaWdodCwgZmxv
YXQgcGh5c2ljYWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0OwogCi0gICAgdm9p
ZCBwYXJzZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgY3Vy
clBhcmFtLCBjb25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNl
KGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmco
KSBjb25zdDsKIApAQCAtNzMsNyArNzQsOCBAQCBwcml2YXRlOgogICAgIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVldE9yU2xp
Y2U7CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBjdXJyUGFyYW0sIGNv
bnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CisgICAgYm9vbCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8
Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdTdHJp
bmdMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgU1ZHU3RyaW5nTGlzdDo6cGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBk
ZWxpbWl0ZXIpCit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBpc1NWR1NwYWNlT3JE
ZWxpbWl0ZXIgPSBbZGVsaW1pdGVyXShhdXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIGlzU1ZHU3Bh
Y2UoYykgfHwgYyA9PSBkZWxpbWl0ZXI7CisgICAgfTsKKworICAgIHJldHVybiByZWFkQ2hhcmFj
dGVyc0ZvclBhcnNpbmcoZGF0YSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChi
dWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0
ID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJdCB3b3VsZCBiZSBhIG5pY2UgaW1wcm92ZW1lbnQgdG8gYWRkIGEgdmFyaWFudCBvZiBza2lw
VW50aWwgd2hpY2ggd29ya2VkCisgICAgICAgICAgICAvLyB3aXRoIGxhbWJkYSBwcmVkaWNhdGVz
LgorICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYg
IWlzU1ZHU3BhY2VPckRlbGltaXRlcigqYnVmZmVyKSkKKyAgICAgICAgICAgICAgICArK2J1ZmZl
cjsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0YXJ0
LCBidWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIsIGRlbGltaXRlcik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUgbGlrZSBT
VkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci5hdEVuZCgpOwor
ICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0
Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBhdXRvJiBz
dHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJp
bmcpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMzkg
KzUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoZW1wdHlTdHJpbmco
KSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVDaGFyIGRl
bGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoZGF0YSkudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBkYXRhLmxlbmd0aCgpOwotICAgICAg
ICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBw
dHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gZGVsaW1pdGVyICYm
ICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgICAg
aWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1f
aXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5n
IHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV9pdGVt
cykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyaW5n
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAg
fQorICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJiBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpOwor
ICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4Y2VwdGlvbk9yPFJlZlB0
cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25zb2xpZGF0ZSgpCit7CisgICAg
YXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICBBU1NF
UlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKworICAgIC8vIFNwZWM6IElmIHRoZSBs
aXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0dXJuZWQuCisgICAgaWYg
KG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICht
X2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQo
KSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0
ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAgICBhdXRvIGl0ZW0gPSBhcHBlbmQoV1RGTW92
ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hhbmdlKCk7CisgICAgcmV0dXJuIG1ha2VSZWZQdHIo
aXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25j
YXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHJlc3VsdDsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCisgICAgICAgIHJlc3VsdCAqPSB0cmFu
c2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VH
ZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3sKKyAg
ICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKKyAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgICAgIAorICAgICAgICBhdXRvIHBh
cnNlZFRyYW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUo
YnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1UeXBlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCpwYXJzZWRUcmFuc2Zvcm1UeXBlLCBi
dWZmZXIpOworICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFy
c2VkVHJhbnNmb3JtVmFsdWUpKTsKKworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVm
ZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVyLCAnLCcpKQorICAgICAgICAg
ICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhi
dWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gIWRlbGltUGFyc2VkOworfQorCit2b2lkIFNWR1Ry
YW5zZm9ybUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY2xlYXJJdGVt
cygpOworCisgICAgYm9vbCBwYXJzaW5nU3VjY2VlZGVkID0gcmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKHZhbHVlLCBbJl0oYXV0byBidWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJp
YyhidWZmZXIpOworICAgIH0pOworICAgIAorICAgIGlmICghcGFyc2luZ1N1Y2NlZWRlZCkKKyAg
ICAgICAgY2xlYXJJdGVtcygpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2Vu
ZXJpYyhidWZmZXIpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhi
dWZmZXIpOworfQorCitTdHJpbmcgU1ZHVHJhbnNmb3JtTGlzdDo6dmFsdWVBc1N0cmluZygpIGNv
bnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoY29uc3QgYXV0byYg
dHJhbnNmcm9tIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
dHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7CisgICAgfQorICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4NiArNTYsMTUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gc3ZnVHJhbnNmb3JtOwogICAgIH0KIAotICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZSgpCi0gICAgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAg
ICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwotCi0gICAgICAgIC8vIFNw
ZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0dXJu
ZWQuCi0gICAgICAgIGlmIChtX2l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICAgICAg
cmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gbmV3SXRlbSA9
IFNWR1RyYW5zZm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOwotICAgICAgICBjbGVhckl0ZW1z
KCk7Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1vdmUobmV3SXRlbSkpOwotICAg
ICAgICBjb21taXRDaGFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgaWYg
KCFwYXJzZShzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgoKSkpCi0gICAgICAgICAgICBjbGVh
ckl0ZW1zKCk7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7Ci0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9pdGVtcykKLSAgICAgICAgICAgIHJlc3VsdCAqPSB0
cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0
cmFuc2Zyb20gOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCh0cmFuc2Zyb20tPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBFeGNlcHRp
b25PcjxSZWZQdHI8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoKTsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gY29uY2F0ZW5hdGUoKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYp
OworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6
Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKQot
ICAgIHsKLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAo
c3RhcnQgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUo
c3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXR5cGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqdHlwZSwgc3RhcnQsIGVuZCk7Ci0g
ICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3JlYXRlKCpw
YXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOwotCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgPCBlbmQgJiYgKnN0YXJ0ID09
ICcsJykgewotICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICArK3N0YXJ0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICFkZWxpbVBh
cnNlZDsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBw
YXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIGJv
b2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKKyAgICBib29sIHBhcnNlKFN0
cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAy
NjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDg1ICsyNyw4NiBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGludCBwYXJz
ZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwg
ZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwpCitTVkdUcmFuc2Zvcm1h
YmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChTdHJpbmdQ
YXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGZsb2F0KiB2YWx1ZXMsIGludCBy
ZXF1aXJlZCwgaW50IG9wdGlvbmFsKQogewogICAgIGludCBvcHRpb25hbFBhcmFtcyA9IDAsIHJl
cXVpcmVkUGFyYW1zID0gMDsKICAgICAKLSAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhw
dHIsIGVuZCkgfHwgKnB0ciAhPSAnKCcpCisgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YnVmZmVyKSB8fCAqYnVmZmVyICE9ICcoJykKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAotICAg
IHB0cisrOworICAgICsrYnVmZmVyOwogICAgCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0
ciwgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKIAogICAgIHdoaWxl
IChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlmIChwdHIgPj0gZW5kKQor
ICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VO
dW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwogICAgICAgICBp
ZiAoIXBhcnNlZE51bWJlcikKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgdmFsdWVz
W3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1z
Kys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQotICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsKICAgICB9Ci0gICAgaWYg
KCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBib29sIGRl
bGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwor
ICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihi
dWZmZXIpOwogCi0gICAgaWYgKHB0ciA+PSBlbmQpCisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgaWYgKCpwdHIgPT0gJyknKSB7IC8vIHNraXAg
b3B0aW9uYWxzCi0gICAgICAgIHB0cisrOworICAgIGlmICgqYnVmZmVyID09ICcpJykgeworICAg
ICAgICAvLyBza2lwIG9wdGlvbmFscworICAgICAgICArK2J1ZmZlcjsKICAgICAgICAgaWYgKGRl
bGltUGFyc2VkKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBpZiAocHRy
ID49IGVuZCkKKyAgICAgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVy
KHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAg
YXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihidWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpEb250U2tpcCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKICAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXMgKyBv
cHRpb25hbFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICAgICAgb3B0aW9uYWxQYXJh
bXMrKzsKICAgICAgICAgICAgIGlmIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKQotICAgICAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAg
ICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhw
dHIsIGVuZCkpCisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcikpCiAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAotICAgICAgICBkZWxpbVBhcnNlZCA9IHNr
aXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgZGVsaW1Q
YXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKScgfHwgZGVsaW1QYXJzZWQp
CisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSB8fCAqYnVmZmVyICE9ICcpJyB8fCBkZWxpbVBh
cnNlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcHRyKys7CisgICAgICAgICsr
YnVmZmVyOwogICAgIH0KIAogICAgIHJldHVybiByZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFy
YW1zOwogfQogCiAvLyBUaGVzZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBTVkdU
cmFuc2Zvcm1UeXBlCi1zdGF0aWMgY29uc3QgaW50IHJlcXVpcmVkVmFsdWVzRm9yVHlwZVtdID0g
IHswLCA2LCAxLCAxLCAxLCAxLCAxfTsKLXN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNG
b3JUeXBlW10gPSAgezAsIDAsIDEsIDEsIDIsIDAsIDB9OworY29uc3RleHByIGludCByZXF1aXJl
ZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwgMSwgMSwgMX07Citjb25zdGV4cHIgaW50
IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0gIHswLCAwLCAxLCAxLCAyLCAwLCAwfTsKIAotLy8g
VGhpcyBkZXN0cnVjdG9yIGlzIG5lZWRlZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRo
IEludGVsIElDQy4KLVNWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZh
dWx0OwotCi1PcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBl
LCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VU
cmFuc2Zvcm1WYWx1ZUdlbmVyaWMoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUg
dHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewogICAg
IGlmICh0eXBlID09IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpbnQgdmFsdWVDb3VudCA9IDA7CiAg
ICAgZmxvYXQgdmFsdWVzW10gPSB7MCwgMCwgMCwgMCwgMCwgMH07Ci0gICAgaWYgKCh2YWx1ZUNv
dW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QocHRyLCBlbmQsIHZhbHVlcywgcmVxdWlyZWRW
YWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbdHlwZV0pKSA8IDApCisg
ICAgaWYgKCh2YWx1ZUNvdW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoYnVmZmVyLCB2YWx1
ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5
cGVdKSkgPCAwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgU1ZHVHJhbnNm
b3JtVmFsdWUgdHJhbnNmb3JtOwpAQCAtMTQ1LDQyICsxNDYsNjMgQEAgT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybQogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKLXN0
YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9
Owotc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdZRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycs
ICdZJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2NhbGVEZXNjW10gPSAgeydzJywgJ2MnLCAnYScs
ICdsJywgJ2UnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeyd0Jywg
J3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVD
aGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307Ci1zdGF0
aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywg
J3gnfTsKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUs
IFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNl
VHJhbnNmb3JtVmFsdWVHZW5lcmljKHR5cGUsIGJ1ZmZlcik7Cit9CisKK09wdGlvbmFsPFNWR1Ry
YW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8
VUNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmlj
KHR5cGUsIGJ1ZmZlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycs
ICdYJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFj
dGVyVHlwZSBza2V3WURlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWSd9OwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2NhbGVE
ZXNjW10gPSAgeydzJywgJ2MnLCAnYScsICdsJywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRyYW5zbGF0ZURlc2NbXSA9ICB7
J3QnLCAncicsICdhJywgJ24nLCAncycsICdsJywgJ2EnLCAndCcsICdlJ307Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNj
W10gPSAgeydyJywgJ28nLCAndCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbWF0cml4RGVzY1tdID0gIHsn
bScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsKIAotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR1RyYW5zZm9ybVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUo
Y29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKFN0cmluZ1BhcnNp
bmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBpZiAoY3VyclRyYW5zZm9y
bSA+PSBlbmQpCisgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgaWYgKCpjdXJyVHJhbnNmb3JtID09ICdzJykgewotICAgICAgICBpZiAo
c2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdU
SChza2V3WERlc2MpKSkKKyAgICBpZiAoKmJ1ZmZlciA9PSAncycpIHsKKyAgICAgICAgaWYgKHNr
aXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHNrZXdYRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAg
ICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1g7
Ci0gICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WURl
c2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1lEZXNjKSkpCisgICAgICAgIGlmIChza2lwQ2hhcmFj
dGVyc0V4YWN0bHkoYnVmZmVyLCBza2V3WURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOwotICAgICAg
ICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZf
QVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFj
dGx5KGJ1ZmZlciwgc2NhbGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TQ0FMRTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9IGVsc2UgaWYgKHNraXBTdHJp
bmcoY3VyclRyYW5zZm9ybSwgZW5kLCB0cmFuc2xhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHRy
YW5zbGF0ZURlc2MpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgdHJhbnNsYXRlRGVzYzxDaGFyYWN0
ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9S
TV9UUkFOU0xBVEU7Ci0gICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQs
IHJvdGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgocm90YXRlRGVzYykpKQorICAgIGlmIChza2lw
Q2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCByb3RhdGVEZXNjPENoYXJhY3RlclR5cGU+KSkKICAg
ICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKLSAg
ICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RG
X0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkpCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3Rs
eShidWZmZXIsIG1hdHJpeERlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fTUFUUklYOwogCiAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAotU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgU1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykK
K09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQorewor
ICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZl
cikgeworICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKGJ1ZmZlcik7CisgICAgfSk7
Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hh
cj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhidWZm
ZXIpOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
VUNoYXI+JiBidWZmZXIpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHR5cGVTdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHJldHVybiBwYXJz
ZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgp
KS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOworICAg
IHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKGJ1ZmZlcik7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMjYzNTgyKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtMzIsOSArMzEsMTIgQEAgY2xhc3MgU1ZHVHJhbnNm
b3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5z
Zm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFy
c2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwotICAgIHN0YXRpYyBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5n
Jik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3Qg
VUNoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJz
ZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJp
bmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKKworICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1U
eXBlKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR1RyYW5zZm9ybVR5cGU+IHBhcnNlVHJhbnNmb3JtVHlwZShTdHJpbmdQYXJzaW5n
QnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8
VUNoYXI+Jik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFu
c2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Zp
ZXdTcGVjLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Zp
ZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlNW
R1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2lu
Z0J1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDk5ICs2MSw5MCBAQCB2
b2lkIFNWR1ZpZXdTcGVjOjpyZXNldCgpCiAgICAgU1ZHWm9vbUFuZFBhbjo6cmVzZXQoKTsKIH0K
IAotc3RhdGljIGNvbnN0IFVDaGFyIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndicsICdnJywgJ1Yn
LCAnaScsICdlJywgJ3cnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3Qm94U3BlY1tdID0geyd2
JywgJ2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Ci1zdGF0aWMgY29uc3QgVUNoYXIgcHJl
c2VydmVBc3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAn
dicsICdlJywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAnYScsICd0JywgJ2kn
LCAnbyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywg
J2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywgJ20nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB6
b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywgJ0EnLCAnbicsICdkJywgJ1An
LCAnYScsICduJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdmlld1RhcmdldFNwZWNbXSA9ICB7J3Yn
LCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3QnfTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHN2Z1ZpZXdT
cGVjW10gPSB7J3MnLCAndicsICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdCb3hTcGVj
W10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHByZXNlcnZlQXNwZWN0
UmF0aW9TcGVjW10gPSB7J3AnLCAncicsICdlJywgJ3MnLCAnZScsICdyJywgJ3YnLCAnZScsICdB
JywgJ3MnLCAncCcsICdlJywgJ2MnLCAndCcsICdSJywgJ2EnLCAndCcsICdpJywgJ28nfTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHRy
YW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdyJywg
J20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0
ZXJUeXBlIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywgJ20nLCAnQScsICduJywg
J2QnLCAnUCcsICdhJywgJ24nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNv
bnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHZpZXdUYXJnZXRTcGVjW10gPSAgeyd2JywgJ2knLCAnZScs
ICd3JywgJ1QnLCAnYScsICdyJywgJ2cnLCAnZScsICd0J307CiAKLWJvb2wgU1ZHVmlld1NwZWM6
OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJiB2aWV3U3BlYykKK2Jvb2wgU1ZHVmlld1NwZWM6
OnBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewotICAgIGF1dG8gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2aWV3U3BlYykudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJWaWV3U3BlYyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyclZpZXdTcGVjICsgdmlld1NwZWMu
bGVuZ3RoKCk7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAhbV9jb250ZXh0RWxl
bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFza2lwU3RyaW5nKGN1cnJW
aWV3U3BlYywgZW5kLCBzdmdWaWV3U3BlYywgV1RGX0FSUkFZX0xFTkdUSChzdmdWaWV3U3BlYykp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGN1cnJW
aWV3U3BlYysrOwotCi0gICAgd2hpbGUgKGN1cnJWaWV3U3BlYyA8IGVuZCAmJiAqY3VyclZpZXdT
cGVjICE9ICcpJykgewotICAgICAgICBpZiAoKmN1cnJWaWV3U3BlYyA9PSAndicpIHsKLSAgICAg
ICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94U3BlYywgV1RG
X0FSUkFZX0xFTkdUSCh2aWV3Qm94U3BlYykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAg
ICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChj
dXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICghdmlld0JveCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFZp
ZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1Nw
ZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHZpZXdUYXJnZXRTcGVj
LCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdUYXJnZXRTcGVjKSkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB2
aWV3VGFyZ2V0U3RhcnQgPSArK2N1cnJWaWV3U3BlYzsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
Y3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVj
ID49IGVuZCkKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nKHN0cmluZywgWyZd
KGF1dG8gYnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAgdXNpbmcgQ2hhcmFjdGVyVHlwZSA9IHR5
cGVuYW1lIGRlY2x0eXBlKGJ1ZmZlcik6OkNoYXJhY3RlclR5cGU7CisKKyAgICAgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpIHx8ICFtX2NvbnRleHRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgc3ZnVmll
d1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYm
ICpidWZmZXIgIT0gJyknKSB7CisgICAgICAgICAgICBpZiAoKmJ1ZmZlciA9PSAndicpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgdmlld0JveFNw
ZWM8Q2hhcmFjdGVyVHlwZT4pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0
bHkoYnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIHZpZXdCb3ggPSBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNl
Vmlld0JveChidWZmZXIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3Qm94
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnZpZXdCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFza2lwRXhhY3RseShidWZmZXIsICcpJykpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwQ2hhcmFjdGVyc0V4
YWN0bHkoYnVmZmVyLCB2aWV3VGFyZ2V0U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlld1Rh
cmdldFN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIHNraXBV
bnRpbChidWZmZXIsICcpJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIuYXRFbmQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV92aWV3VGFyZ2V0U3RyaW5nID0gU3RyaW5nKHZpZXdUYXJnZXRTdGFydCwgYnVmZmVy
LnBvc2l0aW9uKCkgLSB2aWV3VGFyZ2V0U3RhcnQpOworICAgICAgICAgICAgICAgICAgICArK2J1
ZmZlcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqYnVmZmVyID09ICd6JykgeworICAgICAg
ICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgem9vbUFuZFBhblNw
ZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBhdXRvIHpvb21BbmRQYW4g
PSBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oYnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXpvb21BbmRQYW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBzZXRab29tQW5kUGFuKCp6b29tQW5kUGFuKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgqYnVmZmVyID09ICdwJykgeworICAg
ICAgICAgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgcHJlc2VydmVB
c3BlY3RSYXRpb1NwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UoYnVmZmVyLCBmYWxzZSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZXRQcmVzZXJ2
ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICAgICAgICAgIGlmICgh
c2tpcEV4YWN0bHkoYnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpidWZmZXIgPT0gJ3QnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCB0cmFuc2Zvcm1TcGVjPENo
YXJhY3RlclR5cGU+KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnKCcpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBhcnNlKGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcpJykpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3ZpZXdU
YXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBjdXJyVmlld1NwZWMgLSB2aWV3
VGFyZ2V0U3RhcnQpOwotICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2Ug
aWYgKCpjdXJyVmlld1NwZWMgPT0gJ3onKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmco
Y3VyclZpZXdTcGVjLCBlbmQsIHpvb21BbmRQYW5TcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHpvb21B
bmRQYW5TcGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAg
ICAgICAgICBpZiAoIVNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihjdXJyVmlld1NwZWMs
IGVuZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1
cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAncCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0
cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgcHJlc2VydmVBc3BlY3RSYXRpb1NwZWMsIFdURl9BUlJB
WV9MRU5HVEgocHJlc2VydmVBc3BlY3RSYXRpb1NwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZp
ZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFzcGVjdFJh
dGlvLnBhcnNlKGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJy
Vmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UgaWYgKCpjdXJyVmlld1NwZWMgPT0g
J3QnKSB7Ci0gICAgICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHRy
YW5zZm9ybVNwZWMsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNmb3JtU3BlYykpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5k
IHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgbV90cmFuc2Zvcm0tPnBh
cnNlKGN1cnJWaWV3U3BlYywgZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0g
ZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpj
dXJyVmlld1NwZWMgPT0gJzsnKQotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgfQot
ICAgIAotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJykn
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBza2lwRXhhY3RseShidWZmZXIs
ICc7Jyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgKmJ1ZmZl
ciAhPSAnKScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdWaWV3U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWaWV3U3BlYy5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Vmlld1NwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZpZXdTcGVjKGNvbnRleHRFbGVtZW50KSk7CiAg
ICAgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wg
cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3Jik7CiAgICAgdm9pZCByZXNldCgpOwogICAg
IHZvaWQgcmVzZXRDb250ZXh0RWxlbWVudCgpIHsgbV9jb250ZXh0RWxlbWVudCA9IG51bGxwdHI7
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFuLmNwcAkocmV2aXNpb24gMjYz
NTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiwyNSArMjIsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
Vkdab29tQW5kUGFuLmgiCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR1pvb21BbmRQYW46OnBh
cnNlWm9vbUFuZFBhbihjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKQordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgZGlz
YWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hZ25pZnlb
XSA9IHsgJ20nLCAnYScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4g
cGFyc2Vab29tQW5kUGFuR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
JiBidWZmZXIpCiB7Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIGRpc2FibGVbXSA9IHsgJ2QnLCAn
aScsICdzJywgJ2EnLCAnYicsICdsJywgJ2UnIH07Ci0gICAgaWYgKHNraXBTdHJpbmcoc3RhcnQs
IGVuZCwgZGlzYWJsZSwgV1RGX0FSUkFZX0xFTkdUSChkaXNhYmxlKSkpIHsKLSAgICAgICAgbV96
b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbkRpc2FibGU7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBtYWduaWZ5W10gPSB7ICdtJywgJ2EnLCAn
ZycsICduJywgJ2knLCAnZicsICd5JyB9OwotICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQs
IG1hZ25pZnksIFdURl9BUlJBWV9MRU5HVEgobWFnbmlmeSkpKSB7Ci0gICAgICAgIG1fem9vbUFu
ZFBhbiA9IFNWR1pvb21BbmRQYW5NYWduaWZ5OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIGRpc2FibGU8Q2hhcmFjdGVy
VHlwZT4pKQorICAgICAgICByZXR1cm4gU1ZHWm9vbUFuZFBhbkRpc2FibGU7CisKKyAgICBpZiAo
c2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgbWFnbmlmeTxDaGFyYWN0ZXJUeXBlPikpCisg
ICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuTWFnbmlmeTsKKworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CiAKLSAgICByZXR1cm4gZmFsc2U7CitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlw
ZT4gU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENo
YXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMoYnVmZmVy
KTsKK30KKworT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IFNWR1pvb21BbmRQYW46OnBhcnNl
Wm9vbUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQoreworICAgIHJl
dHVybiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKGJ1ZmZlcik7CiB9CiAKIHZvaWQgU1ZHWm9vbUFu
ZFBhbjo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwg
Y29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9v
bUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFu
LmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tQW5kUGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIFNWR1pvb21BbmRQYW4oKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIHBhcnNlWm9vbUFuZFBh
bihjb25zdCBVQ2hhciomLCBjb25zdCBVQ2hhciopOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkda
b29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQ
YW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogcHJpdmF0ZToKICAgICBTVkdab29t
QW5kUGFuVHlwZSBtX3pvb21BbmRQYW4geyBTVkdQcm9wZXJ0eVRyYWl0czxTVkdab29tQW5kUGFu
VHlwZT46OmluaXRpYWxWYWx1ZSgpIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402936</attachid>
            <date>2020-06-26 18:10:22 -0700</date>
            <delta_ts>2020-06-26 18:50:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213635-20200626181021.patch</filename>
            <type>text/plain</type>
            <size>132213</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBAQAorMjAyMC0wNi0yNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBTVkcgcmVsYXRlZCBw
YXJzZXJzIG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgLSBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVy
IGFjcm9zcyBTVkcgY29kZS4KKyAgICAgICAgLSBSZW1vdmUgVVRGLTE2IHVwY29udmVyc2lvbnMg
aW4gU1ZHQW5pbWF0aW9uRWxlbWVudCwgU1ZHRml0VG9WaWV3Qm94LCBTVkdMZW5ndGhMaXN0LCAK
KyAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSwgU1ZHTnVtYmVyTGlzdCwgU1ZHUGFyc2VyVXRpbGl0
aWVzLCBTVkdQb2ludExpc3QsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSwgCisgICAgICAg
ICAgU1ZHU3RyaW5nTGlzdCwgU1ZHVHJhbnNmb3JtTGlzdCwgU1ZHVHJhbnNmb3JtYWJsZSBhbmQg
U1ZHVmlld1NwZWMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3J0IFBhcnNpbmdVdGls
aXRpZXMuaCwgd2hpY2ggaXMgbm93IGluY2x1ZGVkIGJ5IFNWR1BhcnNlclV0aWxpdGllcy5oCisg
ICAgICAgIAorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICBBZGQgaW1wbGVtZW50YXRp
b24gZmlsZXMgZm9yIFNWR0xlbmd0aExpc3QsIFNWR051bWJlckxpc3QsIFNWR1BvaW50TGlzdCwg
U1ZHU3RyaW5nTGlzdAorICAgICAgICBhbmQgU1ZHVHJhbnNmb3JtTGlzdCB0byBob2xkIGxhcmdl
IGZ1bmN0aW9ucyBhcmUgdW5saWtlbHkgdG8gYmVuZWZpdCBmcm9tIGlubGluaW5nLgorICAgICAg
ICAKKyAgICAgICAgKiBodG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwQ2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICBBZGQgbmV3IHNraXBDaGFy
YWN0ZXJzRXhhY3RseSwgd2hpY2ggdGFrZXMgYSBjLWFycmF5IChOT1QgbnVsbC10ZXJtaW5hdGVk
KSBvZiBjaGFyYWN0ZXJzCisgICAgICAgIHRvIGNvbXBhcmUgYWdhaW5zdC4KKworICAgICAgICAq
IHN2Zy9TVkdBbmdsZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQW5nbGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgor
ICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyLgorCisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIEFkYXB0IHRvIG5ldyBz
aGFyZWQgcGFyc2VUcmFuc2Zvcm1UeXBlLCB3aGljaCBub3cgcmV0dXJucyBhbiBPcHRpb25hbCBh
bmQgZGVmYXVsdCB0bworICAgICAgICBTVkdfVFJBTlNGT1JNX1VOS05PV04gb24gcGFyc2UgZmFp
bHVyZSBhcyB0aGUgb2xkIHBhcnNlVHJhbnNmb3JtVHlwZSBkaWQuCisgICAgICAgIAorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
S2V5U3BsaW5lcyk6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAg
ICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkKKyAgICAgICAgCisgICAgICAg
ICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1Zp
ZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3
Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKQorCisgICAgICAgICogc3ZnL1NWR0xlbmd0aExpc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdC
dWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5
IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIE1v
dmUgcGFyc2UgYW5kIHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcv
U1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2
Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyIGFu
ZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRv
CisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpCisKKyAgICAgICAg
KiBzdmcvU1ZHTnVtYmVyTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVt
YmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6dmFsdWVB
c1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAg
QWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRv
IHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZl
cnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFsdWVBc1N0cmluZyBvdXQgb2YgbGlu
ZS4KKworICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9u
YWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VG
bG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAg
ICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNTVkdTcGFj
ZU9yQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICBBZG9wdCBTdHJpbmdQ
YXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5l
Y2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVy
cygpLiBNb3ZlIHBhcnNlIGFuZCB2YWx1ZUFzU3RyaW5nIG91dCBvZiBsaW5lLgorCisgICAgICAg
ICogc3ZnL1NWR1BhdGhTb3VyY2UuaDoKKyAgICAgICAgQWRkIG1pc3NpbmcgaW5jbHVkZSwgd2hp
Y2ggaXMgbm93IG5lZWRlZCBkbyB0byByZW1vdmluZyB1bm5jZXNzYXJ5IGluY2x1ZGVzIGluIG90
aGVyIGZpbGVzLgorCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpoYXNNb3JlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9r
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlci4gUmVwbGFjZSBleGlzdGluZyBzZXQg
b2YgdW5pb25zIHdpdGggYSBzaW5nbGUKKyAgICAgICAgdW5pb24gb2YgU3RyaW5nUGFyc2luZ0J1
ZmZlcnMuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQb2lu
dExpc3QuaDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBT
dHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFsdWVB
c1N0cmluZyBvdXQgb2YgbGluZS4KKworICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAgICAgIEFkb3B0
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBs
YWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCkuIAorCisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1N0cmluZ0xpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0cmluZ0xpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdTdHJpbmdMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAg
ICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIE1vdmUgcGFyc2UgYW5k
IHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3Jt
TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29u
c29saWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5h
dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5l
cmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNp
bmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNz
YXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCku
IE1vdmUgcGFyc2UsIHZhbHVlQXNTdHJpbmcsIGNvbnNvbGlkYXRlIGFuZCAKKyAgICAgICAgY29u
Y2F0ZW5hdGUgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5k
IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8K
KyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIFVuaWZ5IHBhcnNl
VHJhbnNmb3JtVHlwZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWxsCisgICAgICAgIHVzZSBhIHNpbmds
ZSBpbXBsZW1lbnRhdGlvbiBhbmQgcmV0dXJuIGFuIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVR5cGU+
LgorCisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3
Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAgICAqIHN2Zy9TVkdab29tQW5kUGFu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBhbkdlbmVyaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKToKKyAgICAgICAgKiBz
dmcvU1ZHWm9vbUFuZFBhbi5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyLgor
CiAyMDIwLTA2LTI2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBD
b252ZXJ0IENvbnRlbnRTZWN1cml0eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2lu
ZyBTdHJpbmdQYXJzaW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2
MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAg
aHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjM1
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjU0
MCw2ICsyNTQwLDcgQEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1l
bnQuY3BwCiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAK
K3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDks
NiArMjU1MCw3IEBAIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50
LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVt
ZW50LmNwcAorc3ZnL1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cAogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2
Myw2ICsyNTY1LDcgQEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxl
bWVudC5jcHAKIHN2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuY3BwCkBAIC0yNTczLDYgKzI1NzYsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9T
VkdTY3JpcHRFbGVtZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVs
ZW1lbnQuY3BwCitzdmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
CiBzdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAt
MjU4Niw2ICsyNTkwLDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcv
U1ZHVGl0bGVFbGVtZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcv
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtu
b3duRWxlbWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU5
MCw3ICsxNTkwLDcgQEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNj
cmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAg
Ki87IH07CiAJCTUzNTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFD
MDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0
UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzZENUExRjE5M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1
MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0
Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0
Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0
aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTM4RUM4MDIxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDRE
MjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDRE
MjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291
cmNlMS1tbS5tbSAqLzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRT
b3VyY2UyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzOEVDN0VFMUY5NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBA
IC0xMDE5Niw2ICsxMDE5NiwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNN
dXRhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBB
ODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5n
dGhMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVt
YmVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1Bv
aW50TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3Ry
aW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1Ry
YW5zZm9ybUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAv
KiBTZXR0aW5ncy55YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1N0eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0UxOTE0NzFGMkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNTE0NSw2ICsyNTE1MCw3IEBACiAJCQkJQjIyMjc4OUUwRDAw
QkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAw
NzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMw
MDcyMDMxMiAvKiBTVkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAw
RTYxMDQwIC8qIFNWR0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcx
Qjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAv
KiBTVkdMZW5ndGhWYWx1ZS5jcHAgKi8sCkBAIC0yNTE3Nyw2ICsyNTE4Myw3IEBACiAJCQkJNDRE
OERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NF
NThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkw
MEU2MTA0MCAvKiBTVkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3
MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjQwLDYgKzI1MjQ3LDcgQEAKIAkJ
CQlCMjIyNzhGMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAog
CQkJCTdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3
OEY0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEy
OEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcx
Qjc4MiAvKiBTVkdQb2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4
MiAvKiBTVkdQb2x5RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI3Myw2ICsyNTI4MSw3IEBACiAJCQkJ
QjIyMjc5MTIwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlC
MjIyNzkxMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIy
NzkxNDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcw
QzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkx
NjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQw
MEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1MzE0LDYgKzI1MzIz
LDcgQEAKIAkJCQlCMjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5o
ICovLAogCQkJCUIyMjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZS5jcHAgKi8sCiAJCQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURp
c3RhbmNlLmggKi8sCisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9y
bUxpc3QuY3BwICovLAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zv
cm1MaXN0LmggKi8sCiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9y
bUxpc3QuaWRsICovLAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zv
cm1WYWx1ZS5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNCArMTQyLDI0
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmUKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hh
cmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IENoYXJh
Y3RlclR5cGUoJnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChlbmQgLSBwdHIgPCBj
aGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAoc3Ry
LCBwdHIsIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHB0ciArPSBjaGFyYWN0ZXJDb3VudDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hhcmFj
dGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGNvbnN0IENoYXJhY3RlclR5cGUoJnN0
cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkg
PCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAo
c3RyLCBidWZmZXIucG9zaXRpb24oKSwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFjdGVy
Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYnVmZmVyICs9IGNoYXJhY3RlckNv
dW50OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xlVmFs
dWU6OnZhbHVlQXNTdHJpbmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpU
eXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlu
bGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIHN3aXRjaCAoZW5kIC0gcHRyKSB7Cisg
ICAgc3dpdGNoIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkpIHsKICAgICBjYXNlIDA6CiAgICAg
ICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOwogICAg
IGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAnZCcgJiYgcHRyWzFdID09ICdlJyAmJiBw
dHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICdkJyAmJiBidWZmZXJbMV0g
PT0gJ2UnICYmIGJ1ZmZlclsyXSA9PSAnZycpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVW
YWx1ZTo6U1ZHX0FOR0xFVFlQRV9ERUc7Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ3InICYmIHB0
clsxXSA9PSAnYScgJiYgcHRyWzJdID09ICdkJykKKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAn
cicgJiYgYnVmZmVyWzFdID09ICdhJyAmJiBidWZmZXJbMl0gPT0gJ2QnKQogICAgICAgICAgICAg
cmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsxXSA9PSAncicg
JiYgcHRyWzJdID09ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAoYnVmZmVyWzBd
ID09ICdnJyAmJiBidWZmZXJbMV0gPT0gJ3InICYmIGJ1ZmZlclsyXSA9PSAnYScgJiYgYnVmZmVy
WzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVU
WVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwyNyArMTA3LDE5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBwdHIsIGF1dG8qIGVuZCkg
LT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRVbml0
cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1
ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZp
ZWRVbml0cyA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKICAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAotICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFy
c2VBbmdsZVR5cGUoYnVmZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFs
dWU6OlNWR19BTkdMRVRZUEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTeW50YXhFcnJvciB9OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAgICAg
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAg
ICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKLSAg
ICAgICAgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0dXJuIGhl
bHBlcihwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBwdHIg
PSB2YWx1ZS5jaGFyYWN0ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFs
dWUubGVuZ3RoKCkpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZh
bHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9h
dCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
aGFzVmFsaQogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9IFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAgIG1fdHlw
ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFsdWVPcihT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAgaWYgKG1f
dHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAgICAgICAg
ICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNl
S2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhTdHJpbmdWaWV3IHN0cmluZykKIHsKLSAg
ICBpZiAocGFyc2UuaXNFbXB0eSgpKQorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBwYXJzZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJz
ZS5sZW5ndGgoKTsKLQotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAg
ICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwotCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZh
bHNlOwotICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLSAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBp
ZiAoIXBvc0EpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBy
ZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBidWZmZXIpIC0+IE9wdGlv
bmFsPFZlY3RvcjxVbml0QmV6aWVyPj4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YnVmZmVyKTsKIAotICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0g
ICAgICAgIGlmICghcG9zQikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CiAKLSAgICAgICAgYXV0byBwb3NDID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0MpCi0gICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAg
ICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1i
ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgICAgICBpZiAoIXBvc0Qp
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBwb3NC
ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihidWZm
ZXIpOworICAgICAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgewotICAg
ICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcG9zRCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVy
KTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpw
b3NDLCAqcG9zRCB9KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVy
LCAnOycpKQorICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKIAotICAgIGlmICgh
KGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9z
RCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGJ1ZmZlci5hdEVuZCgpICYmICFkZWxp
bVBhcnNlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogYm9vbCBTVkdB
bmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShy
ZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtODQsMjkgKzg1LDM5IEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJp
YnV0ZShjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCitPcHRp
b25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1ZpZXcg
dmFsdWUpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJh
Y3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdC
b3hHZW5lcmljKGJ1ZmZlcik7CisgICAgfSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1
ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhi
dWZmZXIsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyLCBib29s
IHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKGJ1ZmZlciwgdmFs
aWRhdGUpOwogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIGJ1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0
cihjLCBlbmQgLSBjKTsKKyAgICBTdHJpbmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBidWZmZXIuc3Ry
aW5nVmlld09mQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGMsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CiAKLSAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGMs
IGVuZCk7Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byBo
ZWlnaHQgPSBwYXJzZU51bWJlcihjLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tp
cCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJz
ZU51bWJlcihidWZmZXIpOworICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihidWZmZXIpOwor
ICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6RG9udFNraXApOwogCiAgICAgaWYgKHZhbGlkYXRlKSB7CiAgICAgICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IG1fdmlld0JveC0+Y29udGV4dEVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKIAogICAg
ICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKLSAgICAgICAgICAgIGRv
Y3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlBy
b2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICBkb2N1
bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIApAQCAtMTIzLDkgKzEzNCw5IEBA
IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXIKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGxhc3QsIGZvdXJ0aCBudW1i
ZXIuCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwotICAgICAgICBpZiAo
YyA8IGVuZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
cG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHIs
ICJcIiIpKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgICAg
IGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEwICs2NSwx
MyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nVmlldyk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRl
ID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBw
YXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBi
b29sIHZhbGlkYXRlID0gdHJ1ZSk7CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdC
b3g7CiAgICAgUmVmPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvOwogICAgIGJvb2wgbV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBTVkdMZW5ndGhMaXN0OjpwYXJzZShTdHJpbmdWaWV3IHZhbHVlKQoreworICAgIGNs
ZWFySXRlbXMoKTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUs
IFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5h
bWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAoYnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBzdGFydCA9
IGJ1ZmZlci5wb3NpdGlvbigpOworCisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlw
ZSwgaXNTVkdTcGFjZU9yQ29tbWE+KGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIu
cG9zaXRpb24oKSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgYXV0byB2YWx1ZSA9IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QobV9sZW5ndGhNb2RlLCBT
dHJpbmdWaWV3KHN0YXJ0LCBidWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhcHBl
bmQoU1ZHTGVuZ3RoOjpjcmVhdGUoV1RGTW92ZSgqdmFsdWUpKSk7CisgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZH
VHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiBidWZmZXIuYXRFbmQoKTsKKyAg
ICB9KTsKK30KKworU3RyaW5nIFNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGVu
Z3RoIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobGVuZ3Ro
LT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCShy
ZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTAgQEAKIAogI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR1ZhbHVlUHJvcGVydHlMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0xlbmd0
aExpc3QgOiBwdWJsaWMgU1ZHVmFsdWVQcm9wZXJ0eUxpc3Q8U1ZHTGVuZ3RoPiB7CitjbGFzcyBT
VkdMZW5ndGhMaXN0IGZpbmFsIDogcHVibGljIFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR0xlbmd0
aD4gewogICAgIHVzaW5nIEJhc2UgPSBTVkdWYWx1ZVByb3BlcnR5TGlzdDxTVkdMZW5ndGg+Owog
ICAgIHVzaW5nIEJhc2U6OkJhc2U7CiAKQEAgLTUzLDQ1ICs1Miw5IEBAIHB1YmxpYzoKIAogICAg
IFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoTW9kZTsg
fQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
Y2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewot
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJyAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAg
ICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyhzdGFydCwgcHRy
IC0gc3RhcnQpOwotICAgICAgICAgICAgU1ZHTGVuZ3RoVmFsdWUgdmFsdWUobV9sZW5ndGhNb2Rl
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlU3RyaW5nKS5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYXBw
ZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKHZhbHVlKSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcHRyID09IGVuZDsKLSAgICB9CisgICAgYm9vbCBwYXJzZShTdHJpbmdWaWV3KTsKIAotICAg
IFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6
IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgU3RyaW5nIHZhbHVlQXNTdHJp
bmcoKSBjb25zdCBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgU1ZHTGVuZ3RoTGlzdChT
VkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhW
YWx1ZS5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJT
VkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMTkgKzYyLDE5IEBAIHN0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogbGVuZ3RoVHlwZVRvU3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3QgVUNoYXIqIHB0
ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwdHIgPT0gZW5kKQorICAg
IGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6Ok51bWJl
cjsKIAotICAgIGNvbnN0IFVDaGFyIGZpcnN0Q2hhciA9ICpwdHI7CisgICAgYXV0byBmaXJzdENo
YXIgPSAqYnVmZmVyKys7CiAKLSAgICBpZiAoKytwdHIgPT0gZW5kKQorICAgIGlmIChidWZmZXIu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBTVkdMZW5ndGhUeXBl
OjpQZXJjZW50YWdlIDogU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAotICAgIGNvbnN0IFVDaGFy
IHNlY29uZENoYXIgPSAqcHRyOworICAgIGF1dG8gc2Vjb25kQ2hhciA9ICpidWZmZXIrKzsKIAot
ICAgIGlmICgrK3B0ciAhPSBlbmQpCisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVua25vd247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdl
JyAmJiBzZWNvbmRDaGFyID09ICdtJykKQEAgLTE4MCw3ICsxODEsMTUgQEAgU1ZHTGVuZ3RoVmFs
dWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVl
KTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5n
dGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2lu
Z0Vycm9yJiBwYXJzZUVycm9yLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVW
YWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25z
dHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBTdHJpbmdWaWV3IHZhbHVlQXNTdHJpbmcp
Cit7CisgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoIHsgbGVuZ3RoTW9kZSB9OworICAgIGlmIChs
ZW5ndGguc2V0VmFsdWVBc1N0cmluZyh2YWx1ZUFzU3RyaW5nKS5oYXNFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitTVkdM
ZW5ndGhWYWx1ZSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVuZ3Ro
TW9kZSwgU3RyaW5nVmlldyB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBhcnNlRXJy
b3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUpCiB7CiAg
ICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1vZGUpOwogCkBAIC0yMzksNyArMjQ4LDcg
QEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6dAogICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSwg
bGVuZ3RoVHlwZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgubGVuZ3RoVHlwZSgpKSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorRXhjZXB0aW9u
T3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nVmlldyB2YWx1
ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYs
MjYgKzI5NSwyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAg
ICAgcmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9p
ZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CitFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhTdHJp
bmdWaWV3IHN0cmluZykKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhz
dHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmlu
Zy5sZW5ndGgoKTsKLQotICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFjb252ZXJ0
ZWROdW1iZXIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwotCi0g
ICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0ciwgZW5kKTsKLSAgICBpZiAo
bGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3duKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKHN0cmluZywgWyZdKGF1dG8gYnVmZmVyKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAg
ICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworCisgICAgICAgIGF1
dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShidWZmZXIpOworICAgICAgICBpZiAobGVu
Z3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBl
OwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICBy
ZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpj
b252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBT
VkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xl
bmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBjbGFzcyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVu
Z3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJp
bmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xl
bmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAg
IFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlw
ZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhW
YWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdM
ZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7
CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNv
bnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJvciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9k
ZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIFN0cmluZ1ZpZXcp
OworICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgU3Ry
aW5nVmlldywgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0g
U1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CiAgICAgc3RhdGljIFNWR0xlbmd0
aFZhbHVlIGJsZW5kKGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhW
YWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICAKKwogICAgIHN0YXRpYyBTVkdMZW5ndGhW
YWx1ZSBmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAg
ICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0
IFNWR0xlbmd0aFZhbHVlJik7CiAKQEAgLTg1LDggKzg2LDggQEAgcHVibGljOgogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCk7CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZs
b2F0LCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmLCBTVkdMZW5ndGhNb2RlKTsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ1ZpZXcpOworICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoU3RyaW5nVmlldywgU1ZHTGVuZ3RoTW9kZSk7
CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBT
VkdMZW5ndGhDb250ZXh0JiwgU1ZHTGVuZ3RoVHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R051bWJlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgorCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR051
bWJlckxpc3Q6OnBhcnNlKFN0cmluZ1ZpZXcgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOwor
CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVm
ZmVyKSB7CisgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNu
J3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2Ug
dG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCisgICAgICAgIHdoaWxlIChidWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNl
TnVtYmVyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoIW51bWJlcikKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGFwcGVuZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygp
IG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJu
IGJ1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHTnVtYmVyTGlzdDo6dmFs
dWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAg
Zm9yIChjb25zdCBhdXRvJiBudW1iZXIgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVy
Lmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBi
dWlsZGVyLmFwcGVuZChudW1iZXItPnZhbHVlKCkpOworICAgIH0KKworICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051
bWJlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlz
dC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU1ZHTnVtYmVyTGlzdCA6IHB1YmxpYyBTVkdWYWx1ZVByb3BlcnR5TGlzdDxT
VkdOdW1iZXI+IHsKK2NsYXNzIFNWR051bWJlckxpc3QgZmluYWwgOiBwdWJsaWMgU1ZHVmFsdWVQ
cm9wZXJ0eUxpc3Q8U1ZHTnVtYmVyPiB7CiAgICAgdXNpbmcgQmFzZSA9IFNWR1ZhbHVlUHJvcGVy
dHlMaXN0PFNWR051bWJlcj47CiAgICAgdXNpbmcgQmFzZTo6QmFzZTsKIApAQCAtNTAsMzkgKzUw
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdOdW1iZXJMaXN0
KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAg
ICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVh
ZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8gdmlvbGF0ZSB0
aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgICAgICAgICAgaWYg
KCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQoU1ZH
TnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0
ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgbnVtYmVyIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2Uo
U3RyaW5nVmlldyk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZm
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0VHlwZT4gc3Rh
dGljIGlubAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55
IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgogLy8gRklY
TUU6IENhbiB0aGlzIGJlIHNoYXJlZC9yZXBsYWNlZCB3aXRoIG51bWJlciBwYXJzaW5nIGluIFdU
Rj8KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5cGUg
PSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1BhcnNlTnVtYmVyKGNv
bnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBz
dGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lw
ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCiB7CiAgICAgRmxvYXRUeXBlIG51bWJlciA9
IDA7CiAgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOwpAQCAtNTAsMjYgKzUxLDI3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBGbG9hdFR5cGUgZXhwb25l
bnQgPSAwOwogICAgIGludCBzaWduID0gMTsKICAgICBpbnQgZXhwc2lnbiA9IDE7Ci0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBwdHI7CisgICAgYXV0byBzdGFydCA9IGJ1ZmZlci5w
b3NpdGlvbigpOwogCiAgICAgLy8gcmVhZCB0aGUgc2lnbgotICAgIGlmIChwdHIgPCBlbmQgJiYg
KnB0ciA9PSAnKycpCi0gICAgICAgIHB0cisrOwotICAgIGVsc2UgaWYgKHB0ciA8IGVuZCAmJiAq
cHRyID09ICctJykgewotICAgICAgICBwdHIrKzsKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyID09ICcrJykKKyAgICAgICAgKytidWZmZXI7CisgICAg
ZWxzZSBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyID09ICct
JykgeworICAgICAgICArK2J1ZmZlcjsKICAgICAgICAgc2lnbiA9IC0xOwogICAgIH0gCiAgICAg
Ci0gICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0cikgJiYgKnB0ciAhPSAn
LicpKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSB8fCAoIWlzQVNDSUlEaWdpdCgqYnVmZmVyKSAm
JiAqYnVmZmVyICE9ICcuJykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAv
LyByZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQKLSAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7Ci0gICAgd2hpbGUgKHB0ciA8IGVu
ZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICsrcHRyOyAvLyBBZHZhbmNlIHRvIGZp
cnN0IG5vbi1kaWdpdC4KKyAgICBhdXRvIHB0clN0YXJ0SW50UGFydCA9IGJ1ZmZlci5wb3NpdGlv
bigpOworICAgIAorICAgIC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LgorICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CiAKLSAgICBpZiAocHRy
ICE9IHB0clN0YXJ0SW50UGFydCkgewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJT
Y2FuSW50UGFydCA9IHB0ciAtIDE7CisgICAgaWYgKGJ1ZmZlci5wb3NpdGlvbigpICE9IHB0clN0
YXJ0SW50UGFydCkgeworICAgICAgICBhdXRvIHB0clNjYW5JbnRQYXJ0ID0gYnVmZmVyLnBvc2l0
aW9uKCkgLSAxOwogICAgICAgICBGbG9hdFR5cGUgbXVsdGlwbGllciA9IDE7CiAgICAgICAgIHdo
aWxlIChwdHJTY2FuSW50UGFydCA+PSBwdHJTdGFydEludFBhcnQpIHsKICAgICAgICAgICAgIGlu
dGVnZXIgKz0gbXVsdGlwbGllciAqIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oKihwdHJTY2FuSW50
UGFydC0tKSAtICcwJyk7CkBAIC04MCwzOCArODIsMzggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy4nKSB7IC8vIHJlYWQgdGhlIGRl
Y2ltYWxzCi0gICAgICAgIHB0cisrOworICAgIC8vIHJlYWQgdGhlIGRlY2ltYWxzCisgICAgaWYg
KGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKmJ1ZmZlciA9PSAnLicpIHsKKyAg
ICAgICAgKytidWZmZXI7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVh
c3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgotICAgICAgICBpZiAocHRyID49IGVuZCB8fCAh
aXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgIWlzQVND
SUlEaWdpdCgqYnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRyKSkKLSAg
ICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oMC4xKSk7CisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKSkKKyAgICAgICAgICAgIGRlY2lt
YWwgKz0gKCooYnVmZmVyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oMC4xKSk7CiAgICAgfQogCiAgICAgLy8gcmVhZCB0aGUgZXhwb25lbnQgcGFydAotICAgIGlm
IChwdHIgIT0gc3RhcnQgJiYgcHRyICsgMSA8IGVuZCAmJiAoKnB0ciA9PSAnZScgfHwgKnB0ciA9
PSAnRScpIAotICAgICAgICAmJiAocHRyWzFdICE9ICd4JyAmJiBwdHJbMV0gIT0gJ20nKSkgeyAK
LSAgICAgICAgcHRyKys7CisgICAgaWYgKGJ1ZmZlci5wb3NpdGlvbigpICE9IHN0YXJ0ICYmIGJ1
ZmZlci5wb3NpdGlvbigpICsgMSA8IGJ1ZmZlci5lbmQoKSAmJiAoKmJ1ZmZlciA9PSAnZScgfHwg
KmJ1ZmZlciA9PSAnRScpCisgICAgICAgICYmIChidWZmZXJbMV0gIT0gJ3gnICYmIGJ1ZmZlclsx
XSAhPSAnbScpKSB7CisgICAgICAgICsrYnVmZmVyOwogCiAgICAgICAgIC8vIHJlYWQgdGhlIHNp
Z24gb2YgdGhlIGV4cG9uZW50Ci0gICAgICAgIGlmICgqcHRyID09ICcrJykKLSAgICAgICAgICAg
IHB0cisrOwotICAgICAgICBlbHNlIGlmICgqcHRyID09ICctJykgewotICAgICAgICAgICAgcHRy
Kys7CisgICAgICAgIGlmICgqYnVmZmVyID09ICcrJykKKyAgICAgICAgICAgICsrYnVmZmVyOwor
ICAgICAgICBlbHNlIGlmICgqYnVmZmVyID09ICctJykgeworICAgICAgICAgICAgKytidWZmZXI7
CiAgICAgICAgICAgICBleHBzaWduID0gLTE7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIFRoZXJlIG11c3QgYmUgYW4gZXhwb25lbnQKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwg
IWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpIHx8ICFpc0FT
Q0lJRGlnaXQoKmJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKSB7CisgICAgICAg
IHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgq
YnVmZmVyKSkgewogICAgICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBl
PigxMCk7Ci0gICAgICAgICAgICBleHBvbmVudCArPSAqcHRyIC0gJzAnOwotICAgICAgICAgICAg
cHRyKys7CisgICAgICAgICAgICBleHBvbmVudCArPSAqYnVmZmVyKysgLSAnMCc7CiAgICAgICAg
IH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAo
IWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKQEAgLTEyOCw0NCArMTMwLDQ0IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBpZiAoIWlzVmFsaWRSYW5nZShu
dW1iZXIpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHN0YXJ0ID09
IHB0cikKKyAgICBpZiAoc3RhcnQgPT0gYnVmZmVyLnBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoc2tpcCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
U2tpcCkKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOwogCiAg
ICAgcmV0dXJuIG51bWJlcjsKIH0KIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0
IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lw
KQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
JiBidWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51
bWJlcihidWZmZXIsIHNraXApOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXApCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2Vu
ZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
TnVtYmVyKGJ1ZmZlciwgc2tpcCk7CiB9CiAKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0g
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIGF1dG8gcmVz
dWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKLSAgICBpZiAocHRyICE9
IGVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbc2tpcF0oYXV0byBi
dWZmZXIpIC0+IE9wdGlvbmFsPGZsb2F0PiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJp
Y1BhcnNlTnVtYmVyKGJ1ZmZlciwgc2tpcCk7CisgICAgICAgIGlmICghYnVmZmVyLmF0RW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0pOwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBz
d2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2
ZSBhbnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwdHIg
Pj0gZW5kKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcHRyKys7CisgICAg
Y29uc3QgQ2hhcmFjdGVyVHlwZSBmbGFnQ2hhciA9ICpidWZmZXI7CisgICAgKytidWZmZXI7CiAK
ICAgICBib29sIGZsYWc7CiAgICAgaWYgKGZsYWdDaGFyID09ICcwJykKQEAgLTE3NSwxOSArMTc3
LDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb24KICAgICBlbHNl
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIoYnVmZmVyKTsKICAgICAKICAgICByZXR1cm4gZmxhZzsKIH0KIAotT3B0aW9uYWw8Ym9v
bD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKQorT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBidWZm
ZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOworICAgIHJl
dHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBh
cnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFs
PGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQog
ewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4g
Z2VuZXJpY1BhcnNlQXJjRmxhZyhidWZmZXIpOwogfQogCiBPcHRpb25hbDxzdGQ6OnBhaXI8Zmxv
YXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcpCkBAIC0xOTUsMjUgKzE5NywyMyBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgaWYgKCF4KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPGZs
b2F0LCBmbG9hdD4+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAg
ICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
IChjdXIgPT0gZW5kKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKKyAg
ICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChjdXIgIT0gZW5kKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwg
KnkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0K
IAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmcpCkBAIC0yMjEsMTE3ICsyMjEsMTEzIEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9p
bnQoY29uc3QgU3QKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgo
KTsKLQotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5n
KHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHsKKyAgICAg
ICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1ciwg
ZW5kKTsKLSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CisgICAgICAgIGlmICgh
cG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxs
b3cgYW55dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXIsIGVuZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBE
aXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvaW50
OworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJp
bmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxl
bmd0aCgpOwotICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0gICAg
Ci0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVu
ZCk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8g
d2lkdGggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghaGVpZ2h0KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gT3B0aW9uYWw8RmxvYXRSZWN0PiB7
CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgICAgICAKKyAgICAg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIo
YnVmZmVyKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgIGlm
ICghd2lkdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRv
IGhlaWdodCA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9Owor
ICAgIH0pOwogfQogCiBPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBk
ZXRlY3Rpb24gaXMgbWlzc2luZy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
c3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotCi0gICAg
SGFzaFNldDxTdHJpbmc+IHZhbHVlczsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAg
ICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBi
ZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAgICAgICAgY29u
c3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYg
KnB0ciAhPSAnLCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gcmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+IEhhc2hTZXQ8U3RyaW5nPiB7
CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOwogCi0gICAgICAgIGlmIChw
dHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBIYXNoU2V0PFN0
cmluZz4gdmFsdWVzOwogCi0gICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8g
aWdub3JlIGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0
ciAtIDE7Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFj
ZSgqaW5wdXRFbmQpKQotICAgICAgICAgICAgLS1pbnB1dEVuZDsKKyAgICAgICAgd2hpbGUgKGJ1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIExlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRl
ciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBhdXRvIGlucHV0U3Rh
cnQgPSBidWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1
dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwotICAgIH0KKyAgICAgICAgICAg
IHNraXBVbnRpbChidWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIucG9zaXRp
b24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQor
ICAgICAgICAgICAgYXV0byBpbnB1dEVuZCA9IGJ1ZmZlci5wb3NpdGlvbigpIC0gMTsKKyAgICAg
ICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRF
bmQpKQorICAgICAgICAgICAgICAgIC0taW5wdXRFbmQ7CisKKyAgICAgICAgICAgIHZhbHVlcy5h
ZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKKyAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGJ1ZmZlciwgJywnKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVzOworICAgIH0pOwogCi0gICAgcmV0dXJuIHZh
bHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFu
Z2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNl
VW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQog
ewotICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3Rl
cnNbMV0gIT0gJysnKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGhSZW1haW5p
bmcoKTsKKyAgICBpZiAobGVuZ3RoIDwgMiB8fCBidWZmZXJbMF0gIT0gJ1UnIHx8IGJ1ZmZlclsx
XSAhPSAnKycpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCisKKyAgICBidWZm
ZXIgKz0gMjsKKwogICAgIC8vIFBhcnNlIHRoZSBzdGFydGluZyBoZXggbnVtYmVyIChvciBpdHMg
cHJlZml4KS4KICAgICB1bnNpZ25lZCBzdGFydFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFy
dExlbmd0aCA9IDA7CiAKLSAgICBjb25zdCBVQ2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHB0
ciA8IGVuZCkgewotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICB3aGls
ZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAoIWlzQVND
SUlIZXhEaWdpdCgqYnVmZmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3N0YXJ0
TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFydFJhbmdlIDw8IDQpIHwg
dG9BU0NJSUhleFZhbHVlKCpwdHIpOwotICAgICAgICArK3B0cjsKKyAgICAgICAgc3RhcnRSYW5n
ZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpidWZmZXIpOworICAgICAg
ICArK2J1ZmZlcjsKICAgICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgcmFuZ2VzIHNl
cGFyYXRlZCBieSAiLSIgc2lnbi4KLSAgICBpZiAoMiArIHN0YXJ0TGVuZ3RoIDwgbGVuZ3RoICYm
ICpwdHIgPT0gJy0nKSB7CisgICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAmJiAqYnVm
ZmVyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcg
aGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVkIGVuZFJhbmdlID0g
MDsKICAgICAgICAgdW5zaWduZWQgZW5kTGVuZ3RoID0gMDsKLSAgICAgICAgKytwdHI7Ci0gICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0
KCpwdHIpKQorICAgICAgICArK2J1ZmZlcjsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpi
dWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgKytlbmRMZW5ndGg7
CiAgICAgICAgICAgICBpZiAoZW5kTGVuZ3RoID4gNikKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0
b0FTQ0lJSGV4VmFsdWUoKnB0cik7Ci0gICAgICAgICAgICArK3B0cjsKKyAgICAgICAgICAgIGVu
ZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpidWZmZXIpOworICAg
ICAgICAgICAgKytidWZmZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghZW5k
TGVuZ3RoKQpAQCAtMzQ1LDE1ICszNDEsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5n
ZT4gcGFyc2VVbmljbwogICAgIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiBhIG51bWJlciB3
aXRoIHNvbWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVlc3Rpb24gbWFya3MuCiAgICAgdW5zaWduZWQg
ZW5kUmFuZ2UgPSBzdGFydFJhbmdlOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAg
aWYgKCpwdHIgIT0gJz8nKQorICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgIGlmICgqYnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0gNDsK
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsrcHRy
OworICAgICAgICArK2J1ZmZlcjsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzdGFydExlbmd0aCkK
QEAgLTM2OSw1MyArMzY1LDU1IEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBI
YXNoU2UKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2lu
Zy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3Rl
cnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAg
IFVuaWNvZGVSYW5nZXMgcmFuZ2VMaXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0
OwotCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRT
dGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKLSAg
ICAgICAgICAgICsrcHRyOworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3Ry
aW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gc3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8
U3RyaW5nPj4geworICAgICAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7CiAKLSAgICAgICAgaWYgKHB0ciA9PSBpbnB1dFN0YXJ0
KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBh
dXRvIGlucHV0U3RhcnQgPSBidWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICAvLyBUcnkgdG8g
cGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5nZSA9IHBhcnNl
VW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAgICAgICAgICAg
cmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkp
OwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwoYnVmZmVyLCAn
LCcpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVu
aWNvZGUgcmFuZ2UgZmlyc3QKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmlj
b2RlUmFuZ2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGlucHV0U3RhcnQsIGJ1ZmZlci5wb3NpdGlv
bigpIH0pKQorICAgICAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2Up
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJp
bmcoaW5wdXRTdGFydCwgYnVmZmVyLnBvc2l0aW9uKCkgLSBpbnB1dFN0YXJ0KSk7CisKKyAgICAg
ICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgKytidWZmZXI7CisgICAgICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihyYW5nZUxpc3QsIHN0cmluZ0xpc3QpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
V1RGTW92ZShyYW5nZUxpc3QpLCBXVEZNb3ZlKHN0cmluZ0xpc3QpKTsKKyAgICB9KTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFBv
aW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIo
YnVmZmVyKTsKICAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGJ1ZmZlcik7CiAgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwgKnkgfTsKIH0KIAotT3B0aW9uYWw8Rmxv
YXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENo
YXIqIGVuZCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQo
YnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0
IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+
IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0
dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw5ICsyMSw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hh
cjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+
IFVuaWNvZGVSYW5nZXM7CkBAIC0zOCwyMCArMzgsMjAgQEAgZW51bSBjbGFzcyBTdWZmaXhTa2lw
cGluZ1BvbGljeSB7CiAgICAgU2tpcAogfTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQ
b2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7Ci1PcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhT
a2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZs
b2F0PiBwYXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1ZmZpeFNraXBw
aW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+
IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4U2tpcHBpbmdQ
b2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiBPcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4
U2tpcHBpbmdQb2xpY3k6OlNraXApOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9wdGlv
bmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFy
KiBlbmQpOwotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVu
dCwgY29uc3QgVUNoYXIqIGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBv
aW50KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNv
bnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50
KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxGbG9h
dFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmlj
b2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+PiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNv
bnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5h
bWUoY29uc3QgU3RyaW5nVmlldyYpOwpAQCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAn
XHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIGlzU1ZHU3BhY2VPckNvbW1hKENoYXJhY3RlclR5
cGUgYykKK3sKKyAgICByZXR1cm4gaXNTVkdTcGFjZShjKSB8fCBjID09ICcsJzsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUq
IGVuZCkKIHsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAg
ICAgIHB0cisrOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIs
IGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KGNoYXJhY3RlcnMpOworICAgIHJldHVybiBjaGFy
YWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1Nw
YWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVyKQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5k
OwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNl
c09yRGVsaW1pdGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3Rl
cnMsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgp
CisgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1Nw
YWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hhcmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGlu
ZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNv
bnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hh
cmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNo
YXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGlt
aXRlcikgeworICAgICAgICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMpOworICAgICAgICB9CiAgICAgfQotICAgIHB0ciArPSBs
ZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJT
VkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsK
IAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0
aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCgh
c3RyaW5nLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAg
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBt
X2VuZC5tX2NoYXJhY3RlcjggPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0
aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3Ry
aW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKKyAgICAgICAgbV9idWZmZXI4ID0geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpIH07CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlcjE2ID0geyBzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSB9OwogfQogCiBib29sIFNWR1BhdGhT
dHJpbmdTb3VyY2U6Omhhc01vcmVEYXRhKCkgY29uc3QKIHsKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4IDwgbV9lbmQubV9jaGFy
YWN0ZXI4OwotICAgIHJldHVybiBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiA8IG1fZW5kLm1fY2hh
cmFjdGVyMTY7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjguaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpOworICAgIHJldHVybiBtX2J1ZmZlcjE2Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKIH0K
IAogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4oKQogewogICAgIGlm
IChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyht
X2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOworICAgICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fYnVmZmVy
OCk7CisgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2J1ZmZlcjE2KTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRo
U2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQs
IFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVs
cGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgU1ZHUGF0aFNl
Z1R5cGUgcHJldmlvdXNDb21tYW5kKQogewogICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcgY29v
cmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KLSAgICBpZiAoKCpjdXJyZW50ID09ICcr
JyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgq
Y3VycmVudCkpCisgICAgaWYgKCgqYnVmZmVyID09ICcrJyB8fCAqYnVmZmVyID09ICctJyB8fCAq
YnVmZmVyID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcikpCiAgICAgICAgICYmIHByZXZp
b3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7CiAgICAgICAgIGlmIChwcmV2aW91c0Nv
bW1hbmQgPT0gUGF0aFNlZ01vdmVUb0FicykKICAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGlu
ZVRvQWJzOwpAQCAtNzMsMTUwICs2OSwxMzggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYwogU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENv
bW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQogewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkgewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgIGlm
IChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9idWZmZXI4LCBwcmV2aW91
c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0byBu
ZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fYnVmZmVyMTYsIHByZXZpb3VzQ29tbWFu
ZCkpCiAgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOwogICAgIH0KIAogICAgIHJldHVy
biAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNs
dHlwZShhdXRvKSBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZShGJiYgZnVuY3RvcikKIHsKLSAg
ICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewotICAgIGNhc2UgJ1onOgotICAgIGNhc2UgJ3onOgot
ICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKLSAgICBjYXNlICdNJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7Ci0gICAgY2FzZSAnbSc6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnTW92ZVRvUmVsOwotICAgIGNhc2UgJ0wnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb0FiczsKLSAgICBjYXNlICdsJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7
Ci0gICAgY2FzZSAnQyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOwot
ICAgIGNhc2UgJ2MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKLSAg
ICBjYXNlICdRJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOwot
ICAgIGNhc2UgJ3EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7
Ci0gICAgY2FzZSAnQSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOwotICAgIGNhc2Ug
J2EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKLSAgICBjYXNlICdIJzoKLSAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgIGNhc2UgJ2gnOgotICAg
ICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw7Ci0gICAgY2FzZSAnVic6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgY2FzZSAndic6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7Ci0gICAgY2FzZSAnUyc6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAgIGNhc2UgJ3Mn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICBjYXNl
ICdUJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOwot
ICAgIGNhc2UgJ3QnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9v
dGhSZWw7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdVbmtub3duOwotICAg
IH0KKyAgICBpZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIHJldHVybiBmdW5jdG9yKG1fYnVm
ZmVyOCk7CisgICAgcmV0dXJuIGZ1bmN0b3IobV9idWZmZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNW
R1BhdGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkK
IHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNW
R1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgYnVmZmVyKSAtPiBTVkdQYXRoU2VnVHlwZSB7CisgICAgICAgIGF1dG8g
Y2hhcmFjdGVyID0gKmJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAo
Y2hhcmFjdGVyKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoK
KyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNl
ICdRJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAg
ICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNSZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNB
YnM7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7
CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jp
em9udGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1
cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgor
ICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAg
IGNhc2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhS
ZWw7CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVu
dD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikgLT4gT3B0aW9uYWw8TW92
ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50
KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owog
ICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwogICAg
ICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0
UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2Uo
W10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0
YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAog
ICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAg
IH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9
KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewot
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB4
ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYg
YnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4geworICAgICAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVy
biBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
LSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVy
dGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAg
ICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2Uo
W10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKICAgICAgICAgaWYgKCF5KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIExpbmVUb1Zl
cnRpY2FsU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50LnkgPSAqeTsKICAgICAgICAg
cmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rl
cjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2
ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNv
bnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gewotICAgICAg
ICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVy
biBwYXJzZShbXShhdXRvJiBidWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+
IHsKKyAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAg
ICAgaWYgKCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAg
IGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghcG9p
bnQyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTIyNSwyMSAr
MjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ20KICAgICAg
ICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQy
ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1
dG8mIGJ1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4geworICAg
ICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAo
IXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBh
dXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICgh
dGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcs
MjEgKzIyNywxNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAg
ICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQot
ICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRv
JiBidWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghcG9p
bnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI2OSw0OSAr
MjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWMKICAgICAg
ICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsK
LSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBv
aW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAg
ICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2Up
Ci0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9j
aGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byByeCA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZl
cikgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51
bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXJ4KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXJ5KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBhbmdsZSA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gYW5nbGUgPSBwYXJzZU51bWJl
cihidWZmZXIpOwogICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBl
bmQpOworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGJ1ZmZlcik7CiAgICAg
ICAgIGlmICghbGFyZ2VBcmMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1
dG8gc3dlZXAgPSBwYXJzZUFyY0ZsYWcoYnVmZmVyKTsKICAgICAgICAgaWYgKCFzd2VlcCkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2lu
dCA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICsyOTEsNyBAQCBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNlZ21lbnQu
c3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9p
bnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRT
b3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9l
bmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJl
dmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gZGVjbHR5cGUoYXV0
bykgcGFyc2UoRnVuY3Rpb24mJik7CisKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBt
X2lzOEJpdFNvdXJjZTsKIAogICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hh
cmFjdGVyODsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2N1
cnJlbnQ7Ci0gICAgdW5pb24gewotICAgICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXI4Owot
ICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXIxNjsKLSAgICB9IG1fZW5kOworICAgICAg
ICBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBtX2J1ZmZlcjg7CisgICAgICAgIFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+IG1fYnVmZmVyMTY7CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShTdHJpbmdWaWV3IHZh
bHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Cisg
ICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAg
ICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJz
ZU51bWJlcihidWZmZXIpOworICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoYnVm
ZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCF5
UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChza2lwRXhhY3RseShi
dWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAgICAgICAgYXBw
ZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2Ug
U1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Cisg
ICAgfSk7Cit9CisKK1N0cmluZyBTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgcG9p
bnQgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChwb2ludC0+
eCgpLCAnICcsIHBvaW50LT55KCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9u
IDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNW
R1BvaW50TGlzdCA6IHB1YmxpYyBTVkdWYWx1ZVByb3BlcnR5TGlzdDxTVkdQb2ludD4geworY2xh
c3MgU1ZHUG9pbnRMaXN0IGZpbmFsIDogcHVibGljIFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR1Bv
aW50PiB7CiAgICAgdXNpbmcgQmFzZSA9IFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR1BvaW50PjsK
ICAgICB1c2luZyBCYXNlOjpCYXNlOwogCkBAIC01MCw1NSArNTAsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1BvaW50TGlzdChvdGhlciwgYWNjZXNzKSk7CiAg
ICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
U3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBjdXIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLQotICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAg
ICAgICAgICAgaWYgKCF4UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAgICAgICBpZiAoIXlQb3MpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotCi0gICAgICAgICAgICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywnKSB7Ci0g
ICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGN1cisr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwg
ZW5kKTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQ
b3MgfSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBw
b2ludCA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHBvaW50LT54KCksICcgJywgcG9pbnQtPnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBib29sIHBhcnNlKFN0cmlu
Z1ZpZXcpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw3ICszNyw3IEBA
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUKIHsKIH0KIAotU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcgdmFsdWUpCiB7CiAgICAgcGFyc2UodmFsdWUpOwog
fQpAQCAtNTksMTkgKzYwLDI5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdWaWV3IHZhbHVlKQogewotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHBh
cnNlSW50ZXJuYWwoYmVnaW4sIGJlZ2luICsgdmFsdWUubGVuZ3RoKCksIHRydWUpOworICAgIHJl
dHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgewor
ICAgICAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChidWZmZXIsIHRydWUpOworICAgIH0pOwogfQog
Ci1ib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgVUNoYXIqJiBj
dXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1
ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFy
YW0sIGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKGJ1ZmZlciwgdmFs
aWRhdGUpOwogfQogCi1ib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRl
cm5hbChjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxp
ZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBw
YXJzZUludGVybmFsKGJ1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBkZWZlckRlc2NbXSA9ICB7J2Qn
LCAnZScsICdmJywgJ2UnLCAncid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Y29uc3RleHByIENoYXJhY3RlclR5cGUgbm9uZURlc2NbXSA9ICB7J24nLCAnbycsICduJywgJ2Un
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJU
eXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0J307Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBzbGljZURlc2NbXSA9ICB7
J3MnLCAnbCcsICdpJywgJ2MnLCAnZSd9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRlcm5hbChTdHJp
bmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGJvb2wgdmFsaWRhdGUpCiB7
CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19YTUlEWU1JRDsKICAgICBTVkdNZWV0T3JTbGljZVR5cGUgbWVldE9yU2xpY2UgPSBT
VkdfTUVFVE9SU0xJQ0VfTUVFVDsKQEAgLTc5LDEwMCArOTAsMTAwIEBAIGJvb2wgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZUkKICAgICBtX2FsaWduID0gYWxpZ247CiAgICAgbV9t
ZWV0T3JTbGljZSA9IG1lZXRPclNsaWNlOwogCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoY3VyclBhcmFtLCBlbmQpKQorICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZl
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgqY3VyclBhcmFtID09ICdkJykg
ewotICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJkZWZlciIpKSB7Cisg
ICAgaWYgKCpidWZmZXIgPT0gJ2QnKSB7CisgICAgICAgIGlmICghc2tpcENoYXJhY3RlcnNFeGFj
dGx5KGJ1ZmZlciwgZGVmZXJEZXNjPENoYXJhY3RlclR5cGU+KSkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJTa2lwcGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKmRlZmVyKiB2YWx1ZS4iKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBqdXN0IGlnbm9yZSB0aGUgImRlZmVyIiBoZXJlLgotICAgICAgICBpZiAoY3VyclBhcmFtID09
IGVuZCkKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQp
KQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICgqY3VyclBhcmFtID09ICduJykgewot
ICAgICAgICBpZiAoIXNraXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJub25lIikpIHsKKyAgICBp
ZiAoKmJ1ZmZlciA9PSAnbicpIHsKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHko
YnVmZmVyLCBub25lRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiU2tpcHBlZCB0byBwYXJzZSBleGNlcHQgZm9yICpub25lKiB2YWx1ZS4iKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX05PTkU7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXJyUGFy
YW0sIGVuZCk7Ci0gICAgfSBlbHNlIGlmICgqY3VyclBhcmFtID09ICd4JykgewotICAgICAgICBp
ZiAoKGVuZCAtIGN1cnJQYXJhbSkgPCA4KQorICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YnVmZmVyKTsKKyAgICB9IGVsc2UgaWYgKCpidWZmZXIgPT0gJ3gnKSB7CisgICAgICAgIGlmIChi
dWZmZXIubGVuZ3RoUmVtYWluaW5nKCkgPCA4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoY3VyclBhcmFtWzFdICE9ICdNJyB8fCBjdXJyUGFyYW1bNF0gIT0gJ1knIHx8
IGN1cnJQYXJhbVs1XSAhPSAnTScpCisgICAgICAgIGlmIChidWZmZXJbMV0gIT0gJ00nIHx8IGJ1
ZmZlcls0XSAhPSAnWScgfHwgYnVmZmVyWzVdICE9ICdNJykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGN1cnJQYXJhbVsyXSA9PSAnaScpIHsKLSAgICAgICAgICAgIGlm
IChjdXJyUGFyYW1bM10gPT0gJ24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs2
XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJQYXJhbVs3XSA9PSAnbicp
CisgICAgICAgIGlmIChidWZmZXJbMl0gPT0gJ2knKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVy
WzNdID09ICduJykgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbNl0gPT0gJ2knKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbN10gPT0gJ24nKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTjsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFtWzddID09ICdkJykKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoYnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVs2XSA9PSAnYScgJiYgY3VyclBhcmFt
WzddID09ICd4JykKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlcls2XSA9PSAnYScg
JiYgYnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJF
U0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQ
YXJhbVszXSA9PSAnZCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09ICdp
JykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclBhcmFtWzddID09ICduJykKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyWzNdID09ICdkJykgeworICAgICAgICAgICAgICAgIGlm
IChidWZmZXJbNl0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbN10g
PT0gJ24nKQogICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BF
Q1RSQVRJT19YTUlEWU1JTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyclBhcmFt
WzddID09ICdkJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVmZmVyWzddID09ICdk
JykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JRFlNSUQ7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJh
bVs2XSA9PSAnYScgJiYgY3VyclBhcmFtWzddID09ICd4JykKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGJ1ZmZlcls2XSA9PSAnYScgJiYgYnVmZmVyWzddID09ICd4JykKICAgICAgICAgICAg
ICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1BWDsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBl
bHNlIGlmIChjdXJyUGFyYW1bMl0gPT0gJ2EnICYmIGN1cnJQYXJhbVszXSA9PSAneCcpIHsKLSAg
ICAgICAgICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2knKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyWzJdID09ICdh
JyAmJiBidWZmZXJbM10gPT0gJ3gnKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyWzZdID09ICdp
JykgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbN10gPT0gJ24nKQogICAgICAgICAgICAg
ICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoYnVmZmVyWzddID09ICdkJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDsKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y3VyclBhcmFtWzZdID09ICdhJyAmJiBjdXJyUGFyYW1bN10gPT0gJ3gnKQorICAgICAgICAgICAg
fSBlbHNlIGlmIChidWZmZXJbNl0gPT0gJ2EnICYmIGJ1ZmZlcls3XSA9PSAneCcpCiAgICAgICAg
ICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWDsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyUGFyYW0gKz0gODsKLSAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKKyAgICAgICAgYnVm
ZmVyICs9IDg7CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOwogICAgIH0g
ZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY3VyclBhcmFtIDwgZW5kKSB7
Ci0gICAgICAgIGlmICgqY3VyclBhcmFtID09ICdtJykgewotICAgICAgICAgICAgaWYgKCFza2lw
U3RyaW5nKGN1cnJQYXJhbSwgZW5kLCAibWVldCIpKSB7CisgICAgaWYgKGJ1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgaWYgKCpidWZmZXIgPT0gJ20nKSB7CisgICAg
ICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIG1lZXREZXNjPENoYXJh
Y3RlclR5cGU+KSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJz
ZSBleGNlcHQgZm9yICptZWV0KiBvciAqc2xpY2UqIHZhbHVlLiIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXJyUGFyYW0sIGVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJQYXJhbSA9
PSAncycpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgInNs
aWNlIikpIHsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAg
ICAgICB9IGVsc2UgaWYgKCpidWZmZXIgPT0gJ3MnKSB7CisgICAgICAgICAgICBpZiAoIXNraXBD
aGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHNsaWNlRGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVl
dCogb3IgKnNsaWNlKiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFt
LCBlbmQpOworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CiAgICAg
ICAgICAgICBpZiAoYWxpZ24gIT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAg
ICAgICAgICAgICBtZWV0T3JTbGljZSA9IFNWR19NRUVUT1JTTElDRV9TTElDRTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChlbmQgIT0gY3VyclBhcmFtICYmIHZhbGlkYXRlKQorICAgIGlm
ICghYnVmZmVyLmF0RW5kKCkgJiYgdmFsaWRhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIG1fYWxpZ24gPSBhbGlnbjsKQEAgLTMyOCw1MiArMzM5LDQ0IEBAIEFmZmluZVRyYW5zZm9y
bSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmEKIAogU3RyaW5nIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGFsaWduVHlwZTsK
KyAgICBhdXRvIGFsaWduVHlwZSA9IFsmXSgpIHsKKyAgICAgICAgc3dpdGNoIChtX2FsaWduKSB7
CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKKyAgICAgICAgICAg
IHJldHVybiAibm9uZSJfczsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUlOWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNaW4iX3M7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU46CisgICAgICAgICAgICByZXR1cm4gInhN
aWRZTWluIl9zOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlO
OgorICAgICAgICAgICAgcmV0dXJuICJ4TWF4WU1pbiJfczsKKyAgICAgICAgY2FzZSBTVkdfUFJF
U0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRDoKKyAgICAgICAgICAgIHJldHVybiAieE1pbllNaWQi
X3M7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQ6CisgICAg
ICAgICAgICByZXR1cm4gInhNaWRZTWlkIl9zOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNQVhZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWF4WU1pZCJfczsKKyAg
ICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWDoKKyAgICAgICAgICAg
IHJldHVybiAieE1pbllNYXgiX3M7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JRFlNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNaWRZTWF4Il9zOworICAgICAgICBj
YXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUFYOgorICAgICAgICAgICAgcmV0dXJu
ICJ4TWF4WU1heCJfczsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktO
T1dOOgorICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIl9zOworICAgICAgICB9OwogCi0gICAg
c3dpdGNoIChtX2FsaWduKSB7Ci0gICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05F
OgotICAgICAgICBhbGlnblR5cGUgPSAibm9uZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4
TWluWU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1JRFlNSU46Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pbiI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU46Ci0gICAgICAg
IGFsaWduVHlwZSA9ICJ4TWF4WU1pbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWluWU1p
ZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1J
RFlNSUQ6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1pZCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQ6Ci0gICAgICAgIGFsaWdu
VHlwZSA9ICJ4TWF4WU1pZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JTllNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWluWU1heCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVg6
Ci0gICAgICAgIGFsaWduVHlwZSA9ICJ4TWlkWU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVg6Ci0gICAgICAgIGFsaWduVHlwZSA9
ICJ4TWF4WU1heCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fVU5LTk9XTjoKLSAgICAgICAgYWxpZ25UeXBlID0gInVua25vd24iOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAidW5r
bm93biJfczsKICAgICB9OwogCiAgICAgc3dpdGNoIChtX21lZXRPclNsaWNlKSB7CiAgICAgZGVm
YXVsdDoKICAgICBjYXNlIFNWR19NRUVUT1JTTElDRV9VTktOT1dOOgotICAgICAgICByZXR1cm4g
YWxpZ25UeXBlOworICAgICAgICByZXR1cm4gYWxpZ25UeXBlKCk7CiAgICAgY2FzZSBTVkdfTUVF
VE9SU0xJQ0VfTUVFVDoKLSAgICAgICAgcmV0dXJuIGFsaWduVHlwZSArICIgbWVldCI7CisgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKGFsaWduVHlwZSgpLCAiIG1lZXQiKTsKICAgICBjYXNlIFNW
R19NRUVUT1JTTElDRV9TTElDRToKLSAgICAgICAgcmV0dXJuIGFsaWduVHlwZSArICIgc2xpY2Ui
OworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5cGUoKSwgIiBzbGljZSIpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCk7
Ci0gICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdWaWV3KTsKIAogICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9ydCBhbGln
bigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTY0LDggKzY0LDkgQEAgcHVibGljOgog
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dpY2FsWCwgZmxvYXQgbG9naWNh
bFksIGZsb2F0IGxvZ2ljYWxXaWR0aCwgZmxvYXQgbG9naWNhbEhlaWdodCwgZmxvYXQgcGh5c2lj
YWxXaWR0aCwgZmxvYXQgcGh5c2ljYWxIZWlnaHQpIGNvbnN0OwogCi0gICAgdm9pZCBwYXJzZShj
b25zdCBTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlKGNvbnN0IFVDaGFyKiYgY3VyclBhcmFtLCBj
b25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1Zp
ZXcpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZh
bGlkYXRlKTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgYm9v
bCB2YWxpZGF0ZSk7CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OwogCkBAIC03
Myw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9h
bGlnbjsKICAgICBTVkdNZWV0T3JTbGljZVR5cGUgbV9tZWV0T3JTbGljZTsKIAotICAgIGJvb2wg
cGFyc2VJbnRlcm5hbChjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwg
Ym9vbCB2YWxpZGF0ZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9v
bCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29s
IHZhbGlkYXRlKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJp
bmdMaXN0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5n
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFy
c2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHU3RyaW5nTGlz
dDo6cGFyc2UoU3RyaW5nVmlldyBkYXRhLCBVQ2hhciBkZWxpbWl0ZXIpCit7CisgICAgY2xlYXJJ
dGVtcygpOworCisgICAgYXV0byBpc1NWR1NwYWNlT3JEZWxpbWl0ZXIgPSBbZGVsaW1pdGVyXShh
dXRvIGMpIHsKKyAgICAgICAgcmV0dXJuIGlzU1ZHU3BhY2UoYykgfHwgYyA9PSBkZWxpbWl0ZXI7
CisgICAgfTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoZGF0YSwgWyZd
KGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gYnVmZmVyLnBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBhIG5pY2UgaW1w
cm92ZW1lbnQgdG8gYWRkIGEgdmFyaWFudCBvZiBza2lwVW50aWwgd2hpY2ggd29ya2VkCisgICAg
ICAgICAgICAvLyB3aXRoIGxhbWJkYSBwcmVkaWNhdGVzLgorICAgICAgICAgICAgd2hpbGUgKGJ1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgIWlzU1ZHU3BhY2VPckRlbGltaXRlcigq
YnVmZmVyKSkKKyAgICAgICAgICAgICAgICArK2J1ZmZlcjsKKworICAgICAgICAgICAgaWYgKGJ1
ZmZlci5wb3NpdGlvbigpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmcoc3RhcnQsIGJ1ZmZlci5wb3NpdGlvbigpIC0g
c3RhcnQpKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGJ1
ZmZlciwgZGVsaW1pdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBjbGVhckl0ZW1zKCkgb24gZmFpbHVyZSBsaWtlIFNWR1RyYW5zZm9ybUxpc3QgZG9lcz8K
KworICAgICAgICByZXR1cm4gYnVmZmVyLmF0RW5kKCk7CisgICAgfSk7Cit9CisKK1N0cmluZyBT
VkdTdHJpbmdMaXN0Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1faXRlbXMpIHsKKyAg
ICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZyk7CisgICAgfQorCisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3Ry
aW5nTGlzdC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3Ry
aW5nTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzOSArNTEsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtX2l0ZW1zLmFwcGVuZChlbXB0eVN0cmluZygpKTsKICAgICB9CiAKLSAgICBib29s
IHBhcnNlKGNvbnN0IFN0cmluZyYgZGF0YSwgVUNoYXIgZGVsaW1pdGVyKQotICAgIHsKLSAgICAg
ICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
U3RyaW5nVmlldyhkYXRhKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIq
IGVuZCA9IHB0ciArIGRhdGEubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsK
LSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHdoaWxl
IChwdHIgPCBlbmQgJiYgKnB0ciAhPSBkZWxpbWl0ZXIgJiYgIWlzU1ZHU3BhY2UoKnB0cikpCi0g
ICAgICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgICBpZiAocHRyID09IHN0YXJ0KQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nKHN0
YXJ0LCBwdHIgLSBzdGFydCkpOwotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JE
ZWxpbWl0ZXIocHRyLCBlbmQsIGRlbGltaXRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcHRyID09IGVuZDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAo
YnVpbGRlci5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwot
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgYm9vbCBwYXJzZShTdHJp
bmdWaWV3LCBVQ2hhciBkZWxpbWl0ZXIpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdU
cmFuc2Zvcm1MaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0V4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBTVkdUcmFuc2Zvcm1M
aXN0Ojpjb25zb2xpZGF0ZSgpCit7CisgICAgYXV0byByZXN1bHQgPSBjYW5BbHRlckxpc3QoKTsK
KyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKKyAgICBBU1NFUlQocmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKKworICAgIC8vIFNwZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9m
IG51bGwgaXMgcmV0dXJuZWQuCisgICAgaWYgKG1faXRlbXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQorICAgICAgICBy
ZXR1cm4gbWFrZVJlZlB0cihhdCgwKS5nZXQoKSk7CisKKyAgICBhdXRvIG5ld0l0ZW0gPSBTVkdU
cmFuc2Zvcm06OmNyZWF0ZShjb25jYXRlbmF0ZSgpKTsKKyAgICBjbGVhckl0ZW1zKCk7CisKKyAg
ICBhdXRvIGl0ZW0gPSBhcHBlbmQoV1RGTW92ZShuZXdJdGVtKSk7CisgICAgY29tbWl0Q2hhbmdl
KCk7CisgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQoKSk7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZSgpIGNvbnN0Cit7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHRyYW5zZm9ybSA6IG1faXRlbXMpCisg
ICAgICAgIHJlc3VsdCAqPSB0cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgU1ZH
VHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIGJ1ZmZlcikKK3sKKyAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgd2hp
bGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgZGVsaW1QYXJz
ZWQgPSBmYWxzZTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAg
ICAgIAorICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxl
OjpwYXJzZVRyYW5zZm9ybVR5cGUoYnVmZmVyKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zv
cm1UeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gcGFyc2Vk
VHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCpw
YXJzZWRUcmFuc2Zvcm1UeXBlLCBidWZmZXIpOworICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9y
bVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVuZChTVkdU
cmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKworICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAgICBpZiAoc2tpcEV4YWN0bHkoYnVm
ZmVyLCAnLCcpKQorICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gIWRlbGltUGFy
c2VkOworfQorCit2b2lkIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1ZpZXcgdmFsdWUp
Cit7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYm9vbCBwYXJzaW5nU3VjY2VlZGVkID0gcmVh
ZENoYXJhY3RlcnNGb3JQYXJzaW5nKHZhbHVlLCBbJl0oYXV0byBidWZmZXIpIHsKKyAgICAgICAg
cmV0dXJuIHBhcnNlR2VuZXJpYyhidWZmZXIpOworICAgIH0pOworICAgIAorICAgIGlmICghcGFy
c2luZ1N1Y2NlZWRlZCkKKyAgICAgICAgY2xlYXJJdGVtcygpOworfQorCitib29sIFNWR1RyYW5z
Zm9ybUxpc3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBidWZmZXIpCit7Cisg
ICAgcmV0dXJuIHBhcnNlR2VuZXJpYyhidWZmZXIpOworfQorCitib29sIFNWR1RyYW5zZm9ybUxp
c3Q6OnBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0
dXJuIHBhcnNlR2VuZXJpYyhidWZmZXIpOworfQorCitTdHJpbmcgU1ZHVHJhbnNmb3JtTGlzdDo6
dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGZvciAoY29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVp
bGRlci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7Cisg
ICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4
NiArNTYsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3ZnVHJhbnNmb3JtOwogICAgIH0K
IAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZSgpCi0g
ICAgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGNhbkFsdGVyTGlzdCgpOwotICAgICAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkp
OworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZSgpOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0OwogCi0gICAgICAgIC8vIFNw
ZWM6IElmIHRoZSBsaXN0IHdhcyBlbXB0eSwgdGhlbiBhIHZhbHVlIG9mIG51bGwgaXMgcmV0dXJu
ZWQuCi0gICAgICAgIGlmIChtX2l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgIGlmIChtX2l0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICAgICAg
cmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gbmV3SXRlbSA9
IFNWR1RyYW5zZm9ybTo6Y3JlYXRlKGNvbmNhdGVuYXRlKCkpOwotICAgICAgICBjbGVhckl0ZW1z
KCk7Ci0KLSAgICAgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1vdmUobmV3SXRlbSkpOwotICAg
ICAgICBjb21taXRDaGFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoaXRlbS5nZXQo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgaWYg
KCFwYXJzZShzdGFydCwgc3RhcnQgKyB2YWx1ZS5sZW5ndGgoKSkpCi0gICAgICAgICAgICBjbGVh
ckl0ZW1zKCk7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdGVuYXRlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7Ci0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgdHJhbnNmb3JtIDogbV9pdGVtcykKLSAgICAgICAgICAgIHJlc3VsdCAqPSB0
cmFuc2Zvcm0tPm1hdHJpeCgpLT52YWx1ZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0
cmFuc2Zyb20gOiBtX2l0ZW1zKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotCi0gICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCh0cmFuc2Zyb20tPnZhbHVlKCkudmFsdWVBc1N0cmluZygpKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICB2b2lkIHBh
cnNlKFN0cmluZ1ZpZXcpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZShjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kKQotICAgIHsKLSAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwot
ICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgICAgIGRlbGltUGFyc2VkID0g
ZmFsc2U7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlQW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXR5cGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHBhcnNlZFRyYW5z
Zm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqdHlwZSwg
c3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1RyYW5z
Zm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOwotCi0gICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgPCBl
bmQgJiYgKnN0YXJ0ID09ICcsJykgewotICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICArK3N0YXJ0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICFkZWxpbVBhcnNlZDsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gYm9vbCBwYXJzZUdlbmVyaWMoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJU
eXBlPiYpOworICAgIGJvb2wgcGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKKyAg
ICBib29sIHBhcnNlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUu
Y3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDg1ICsyNyw4NiBAQAogI2luY2x1ZGUgIlNW
R0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0
aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCwgZmxvYXQqIHZhbHVlcywgaW50IHJlcXVpcmVkLCBpbnQgb3B0aW9uYWwp
CitTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBh
cmFtTGlzdChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGZsb2F0
KiB2YWx1ZXMsIGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQogewogICAgIGludCBvcHRpb25h
bFBhcmFtcyA9IDAsIHJlcXVpcmVkUGFyYW1zID0gMDsKICAgICAKLSAgICBpZiAoIXNraXBPcHRp
b25hbFNWR1NwYWNlcyhwdHIsIGVuZCkgfHwgKnB0ciAhPSAnKCcpCisgICAgaWYgKCFza2lwT3B0
aW9uYWxTVkdTcGFjZXMoYnVmZmVyKSB8fCAqYnVmZmVyICE9ICcoJykKICAgICAgICAgcmV0dXJu
IC0xOwogICAgIAotICAgIHB0cisrOworICAgICsrYnVmZmVyOwogICAgCi0gICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKKyAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVy
KTsKIAogICAgIHdoaWxlIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKSB7Ci0gICAgICAgIGlm
IChwdHIgPj0gZW5kKQorICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBl
bmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGF1dG8gcGFyc2Vk
TnVtYmVyID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNr
aXApOwogICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKICAgICAgICAgICAgIHJldHVybiAtMTsK
ICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAg
IHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVk
KQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsK
ICAgICB9Ci0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAgIGlm
ICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiAtMTsKICAg
ICAKLSAgICBib29sIGRlbGltUGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOworICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihidWZmZXIpOwogCi0gICAgaWYgKHB0ciA+PSBlbmQpCisgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgaWYgKCpwdHIgPT0g
JyknKSB7IC8vIHNraXAgb3B0aW9uYWxzCi0gICAgICAgIHB0cisrOworICAgIGlmICgqYnVmZmVy
ID09ICcpJykgeworICAgICAgICAvLyBza2lwIG9wdGlvbmFscworICAgICAgICArK2J1ZmZlcjsK
ICAgICAgICAgaWYgKGRlbGltUGFyc2VkKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAg
ICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJl
ciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihidWZmZXIsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZE51
bWJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB2YWx1ZXNbcmVx
dWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICAg
ICAgb3B0aW9uYWxQYXJhbXMrKzsKICAgICAgICAgICAgIGlmIChvcHRpb25hbFBhcmFtcyA8IG9w
dGlvbmFsKQotICAgICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVy
KHB0ciwgZW5kKTsKKyAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
aXRlcihidWZmZXIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIXNraXBPcHRp
b25hbFNWR1NwYWNlcyhwdHIsIGVuZCkpCisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIAotICAgICAgICBk
ZWxpbVBhcnNlZCA9IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsK
KyAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihi
dWZmZXIpOwogICAgICAgICAKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgKnB0ciAhPSAnKScg
fHwgZGVsaW1QYXJzZWQpCisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSB8fCAqYnVmZmVyICE9
ICcpJyB8fCBkZWxpbVBhcnNlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcHRy
Kys7CisgICAgICAgICsrYnVmZmVyOwogICAgIH0KIAogICAgIHJldHVybiByZXF1aXJlZFBhcmFt
cyArIG9wdGlvbmFsUGFyYW1zOwogfQogCiAvLyBUaGVzZSBzaG91bGQgYmUga2VwdCBpbiBzeW5j
IHdpdGggZW51bSBTVkdUcmFuc2Zvcm1UeXBlCi1zdGF0aWMgY29uc3QgaW50IHJlcXVpcmVkVmFs
dWVzRm9yVHlwZVtdID0gIHswLCA2LCAxLCAxLCAxLCAxLCAxfTsKLXN0YXRpYyBjb25zdCBpbnQg
b3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgezAsIDAsIDEsIDEsIDIsIDAsIDB9OworY29uc3Rl
eHByIGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7IDAsIDYsIDEsIDEsIDEsIDEsIDEg
fTsKK2NvbnN0ZXhwciBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgeyAwLCAwLCAxLCAx
LCAyLCAwLCAwIH07CiAKLS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8g
bGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJh
bnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJh
bnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKIHsKICAgICBpZiAodHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9VTktOT1dOKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50
IHZhbHVlQ291bnQgPSAwOwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9
OwotICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5k
LCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JU
eXBlW3R5cGVdKSkgPCAwKQorICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KGJ1ZmZlciwgdmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9wdGlv
bmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIFNWR1RyYW5zZm9ybVZhbHVlIHRyYW5zZm9ybTsKQEAgLTE0NSw0MiArMTQ2LDYz
IEBAIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm0KICAgICByZXR1cm4g
dHJhbnNmb3JtOwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc2tld1hEZXNjW10gPSAgeydzJywg
J2snLCAnZScsICd3JywgJ1gnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WURlc2NbXSA9ICB7
J3MnLCAnaycsICdlJywgJ3cnLCAnWSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNjYWxlRGVzY1td
ID0gIHsncycsICdjJywgJ2EnLCAnbCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdHJhbnNs
YXRlRGVzY1tdID0gIHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2wnLCAnYScsICd0JywgJ2Un
fTsKLXN0YXRpYyBjb25zdCBVQ2hhciByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcsICdh
JywgJ3QnLCAnZSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIG1hdHJpeERlc2NbXSA9ICB7J20nLCAn
YScsICd0JywgJ3InLCAnaScsICd4J307CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSB0eXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQor
eworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBidWZmZXIpOwor
fQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VU
cmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBT
dHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRy
YW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBidWZmZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WERlc2NbXSA9ICB7
J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tld1lEZXNjW10gPSAgeydzJywgJ2snLCAnZScs
ICd3JywgJ1knfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBD
aGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywgJ2EnLCAnbCcsICdlJ307Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB0
cmFuc2xhdGVEZXNjW10gPSAgeyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnbCcsICdhJywgJ3Qn
LCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJh
Y3RlclR5cGUgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAnaScsICd4J307CiAKLU9wdGlv
bmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxl
OjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNo
YXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBl
R2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0g
ICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAn
cycpIHsKLSAgICAgICAgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERl
c2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1hEZXNjKSkpCisgICAgaWYgKCpidWZmZXIgPT0gJ3Mn
KSB7CisgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBza2V3WERlc2M8
Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAg
ICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgc2tld1lEZXNjPENoYXJhY3Rl
clR5cGU+KSkKICAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9TS0VXWTsKLSAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBl
bmQsIHNjYWxlRGVzYywgV1RGX0FSUkFZX0xFTkdUSChzY2FsZURlc2MpKSkKKyAgICAgICAgaWYg
KHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBlPikp
CiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NB
TEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
fSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywg
V1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHRy
YW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmco
Y3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURl
c2MpKSkKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgcm90YXRlRGVzYzxD
aGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9ST1RBVEU7Ci0gICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBl
bmQsIG1hdHJpeERlc2MsIFdURl9BUlJBWV9MRU5HVEgobWF0cml4RGVzYykpKQorICAgIGlmIChz
a2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBtYXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkK
ICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsK
IAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBT
dHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1ZpZXcg
c3RyaW5nKQoreworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBb
XShhdXRvIGJ1ZmZlcikgeworICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKGJ1ZmZl
cik7CisgICAgfSk7Cit9CisKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zv
cm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBl
R2VuZXJpYyhidWZmZXIpOworfQorCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJh
bnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAg
IHJldHVybiBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3Ry
aW5nLmxlbmd0aCgpKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VO
S05PV04pOworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVR5cGVHZW5lcmljKGJ1ZmZlcik7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24g
MjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIApAQCAtMzIsOSArMzEsMTIgQEAgY2xh
c3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1
YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwotICAgIHN0YXRp
YyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5z
Zm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9y
bVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zv
cm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKKworICAg
IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFy
c2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxVQ2hhcj4mKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFj
ZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0KICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgog
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQ
YXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsOTkgKzYxLDkw
IEBAIHZvaWQgU1ZHVmlld1NwZWM6OnJlc2V0KCkKICAgICBTVkdab29tQW5kUGFuOjpyZXNldCgp
OwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc3ZnVmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cn
LCAnVicsICdpJywgJ2UnLCAndyd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHZpZXdCb3hTcGVjW10g
PSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdvJywgJ3gnfTsKLXN0YXRpYyBjb25zdCBVQ2hh
ciBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0geydwJywgJ3InLCAnZScsICdzJywgJ2UnLCAn
cicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAnZScsICdjJywgJ3QnLCAnUicsICdhJywgJ3Qn
LCAnaScsICdvJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdHJhbnNmb3JtU3BlY1tdID0geyd0Jywg
J3InLCAnYScsICduJywgJ3MnLCAnZicsICdvJywgJ3InLCAnbSd9Owotc3RhdGljIGNvbnN0IFVD
aGFyIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAnbycsICdvJywgJ20nLCAnQScsICduJywgJ2Qn
LCAnUCcsICdhJywgJ24nfTsKLXN0YXRpYyBjb25zdCBVQ2hhciB2aWV3VGFyZ2V0U3BlY1tdID0g
IHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2EnLCAncicsICdnJywgJ2UnLCAndCd9OwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgc3Zn
Vmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cnLCAnVicsICdpJywgJ2UnLCAndyd9OwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgdmlld0Jv
eFNwZWNbXSA9IHsndicsICdpJywgJ2UnLCAndycsICdCJywgJ28nLCAneCd9OwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgcHJlc2VydmVB
c3BlY3RSYXRpb1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAndicsICdl
JywgJ0EnLCAncycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9
OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5
cGUgdHJhbnNmb3JtU3BlY1tdID0geyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnZicsICdvJywg
J3InLCAnbSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENo
YXJhY3RlclR5cGUgem9vbUFuZFBhblNwZWNbXSA9IHsneicsICdvJywgJ28nLCAnbScsICdBJywg
J24nLCAnZCcsICdQJywgJ2EnLCAnbid9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgdmlld1RhcmdldFNwZWNbXSA9ICB7J3YnLCAnaScs
ICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3QnfTsKIAotYm9vbCBTVkdWaWV3
U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcmIHZpZXdTcGVjKQorYm9vbCBTVkdWaWV3
U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZpZXdTcGVjKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyclZpZXdTcGVjID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXJyVmlld1NwZWMgKyB2aWV3
U3BlYy5sZW5ndGgoKTsKLQotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICFtX2NvbnRl
eHRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNraXBTdHJpbmco
Y3VyclZpZXdTcGVjLCBlbmQsIHN2Z1ZpZXdTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHN2Z1ZpZXdT
cGVjKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjdXJyVmlld1NwZWMgPj0g
ZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y3VyclZpZXdTcGVjKys7Ci0KLSAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwgZW5kICYmICpjdXJy
Vmlld1NwZWMgIT0gJyknKSB7Ci0gICAgICAgIGlmICgqY3VyclZpZXdTcGVjID09ICd2Jykgewot
ICAgICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHZpZXdCb3hTcGVj
LCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdCb3hTcGVjKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwot
ICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3
Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2aWV3
Qm94KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
c2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgdmlld1Rhcmdl
dFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld1RhcmdldFNwZWMpKSkgewotICAgICAgICAgICAg
ICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29uc3QgVUNo
YXIqIHZpZXdUYXJnZXRTdGFydCA9ICsrY3VyclZpZXdTcGVjOwotICAgICAgICAgICAgICAgIHdo
aWxlIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAg
ICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmll
d1NwZWMgPj0gZW5kKQorICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5n
LCBbJl0oYXV0byBidWZmZXIpIC0+IGJvb2wgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBl
ID0gdHlwZW5hbWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICBp
ZiAoYnVmZmVyLmF0RW5kKCkgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBz
dmdWaWV3U3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5n
KCkgJiYgKmJ1ZmZlciAhPSAnKScpIHsKKyAgICAgICAgICAgIGlmICgqYnVmZmVyID09ICd2Jykg
eworICAgICAgICAgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCB2aWV3
Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lw
RXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VWaWV3Qm94KGJ1ZmZlciwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXZp
ZXdCb3gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJyknKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBDaGFyYWN0
ZXJzRXhhY3RseShidWZmZXIsIHZpZXdUYXJnZXRTcGVjPENoYXJhY3RlclR5cGU+KSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJygnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB2
aWV3VGFyZ2V0U3RhcnQgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
c2tpcFVudGlsKGJ1ZmZlciwgJyknKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5h
dEVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1RhcmdldFN0YXJ0LCBi
dWZmZXIucG9zaXRpb24oKSAtIHZpZXdUYXJnZXRTdGFydCk7CisgICAgICAgICAgICAgICAgICAg
ICsrYnVmZmVyOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpidWZmZXIgPT0gJ3onKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCB6b29tQW5k
UGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJygnKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8gem9vbUFu
ZFBhbiA9IFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihidWZmZXIpOworICAgICAgICAg
ICAgICAgIGlmICghem9vbUFuZFBhbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIHNldFpvb21BbmRQYW4oKnpvb21BbmRQYW4pOworICAgICAgICAg
ICAgICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnKScpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpidWZmZXIgPT0gJ3AnKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwg
JygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAg
ICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZShidWZmZXIsIGZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFBy
ZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgICAgICAgICAg
aWYgKCFza2lwRXhhY3RseShidWZmZXIsICcpJykpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmJ1ZmZlciA9PSAndCcpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHRyYW5zZm9ybVNw
ZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX3RyYW5zZm9ybS0+cGFy
c2UoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJykn
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIG1f
dmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIGN1cnJWaWV3U3BlYyAt
IHZpZXdUYXJnZXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAneicpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0
cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgem9vbUFuZFBhblNwZWMsIFdURl9BUlJBWV9MRU5HVEgo
em9vbUFuZFBhblNwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsK
LSAgICAgICAgICAgIGlmICghU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGN1cnJWaWV3
U3BlYywgZW5kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAg
ICAgfSBlbHNlIGlmICgqY3VyclZpZXdTcGVjID09ICdwJykgewotICAgICAgICAgICAgaWYgKCFz
a2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYywgV1RG
X0FSUkFZX0xFTkdUSChwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYykpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpj
dXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQXNw
ZWN0UmF0aW8ucGFyc2UoY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNl
cnZlQXNwZWN0UmF0aW8pOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwg
KmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3Bl
YyA9PSAndCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVu
ZCwgdHJhbnNmb3JtU3BlYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2Zvcm1TcGVjKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+
PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICBtX3RyYW5zZm9y
bS0+cGFyc2UoY3VyclZpZXdTcGVjLCBlbmQpOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChjdXJyVmlld1NwZWMgPCBlbmQg
JiYgKmN1cnJWaWV3U3BlYyA9PSAnOycpCi0gICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAh
PSAnKScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNraXBFeGFjdGx5KGJ1
ZmZlciwgJzsnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSB8fCAq
YnVmZmVyICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZpZXdTcGVjLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWaWV3U3BlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29udGV4dEVsZW1lbnQp
KTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3RyaW5nJik7CisgICAg
Ym9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKICAgICB2b2lkIHJlc2V0KCk7
CiAgICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRFbGVtZW50ID0gbnVs
bHB0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uY3BwCShyZXZpc2lv
biAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDI1ICsyMiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNWR1pvb21BbmRQYW4uaCIKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHWm9vbUFuZFBh
bjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgQ2hhcmFjdGVyVHlw
ZSBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdlJyB9OwordGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIENoYXJhY3RlclR5cGUgbWFn
bmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1pvb21BbmRQYW5U
eXBlPiBwYXJzZVpvb21BbmRQYW5HZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIGJ1ZmZlcikKIHsKLSAgICBzdGF0aWMgY29uc3QgVUNoYXIgZGlzYWJsZVtdID0geyAn
ZCcsICdpJywgJ3MnLCAnYScsICdiJywgJ2wnLCAnZScgfTsKLSAgICBpZiAoc2tpcFN0cmluZyhz
dGFydCwgZW5kLCBkaXNhYmxlLCBXVEZfQVJSQVlfTEVOR1RIKGRpc2FibGUpKSkgewotICAgICAg
ICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuRGlzYWJsZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IFVDaGFyIG1hZ25pZnlbXSA9IHsgJ20nLCAn
YScsICdnJywgJ24nLCAnaScsICdmJywgJ3knIH07Ci0gICAgaWYgKHNraXBTdHJpbmcoc3RhcnQs
IGVuZCwgbWFnbmlmeSwgV1RGX0FSUkFZX0xFTkdUSChtYWduaWZ5KSkpIHsKLSAgICAgICAgbV96
b29tQW5kUGFuID0gU1ZHWm9vbUFuZFBhbk1hZ25pZnk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgZGlzYWJsZTxDaGFy
YWN0ZXJUeXBlPikpCisgICAgICAgIHJldHVybiBTVkdab29tQW5kUGFuRGlzYWJsZTsKKworICAg
IGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBtYWduaWZ5PENoYXJhY3RlclR5cGU+
KSkKKyAgICAgICAgcmV0dXJuIFNWR1pvb21BbmRQYW5NYWduaWZ5OworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KIAotICAgIHJldHVybiBmYWxzZTsKK09wdGlvbmFsPFNWR1pvb21BbmRQ
YW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oU3RyaW5nUGFyc2luZ0J1ZmZl
cjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2Vab29tQW5kUGFuR2VuZXJpYyhi
dWZmZXIpOworfQorCitPcHRpb25hbDxTVkdab29tQW5kUGFuVHlwZT4gU1ZHWm9vbUFuZFBhbjo6
cGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCit7Cisg
ICAgcmV0dXJuIHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMoYnVmZmVyKTsKIH0KIAogdm9pZCBTVkda
b29tQW5kUGFuOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
Vkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21B
bmRQYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgU1ZHWm9vbUFuZFBhbigpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgcGFyc2Vab29t
QW5kUGFuKGNvbnN0IFVDaGFyKiYsIGNvbnN0IFVDaGFyKik7CisgICAgc3RhdGljIE9wdGlvbmFs
PFNWR1pvb21BbmRQYW5UeXBlPiBwYXJzZVpvb21BbmRQYW4oU3RyaW5nUGFyc2luZ0J1ZmZlcjxM
Q2hhcj4mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9v
bUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiBwcml2YXRlOgogICAgIFNW
R1pvb21BbmRQYW5UeXBlIG1fem9vbUFuZFBhbiB7IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1pvb21B
bmRQYW5UeXBlPjo6aW5pdGlhbFZhbHVlKCkgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402938</attachid>
            <date>2020-06-26 18:50:18 -0700</date>
            <delta_ts>2020-06-27 08:29:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213635-20200626185017.patch</filename>
            <type>text/plain</type>
            <size>132353</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBAQAorMjAyMC0wNi0yNiAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBTVkcgcmVsYXRlZCBw
YXJzZXJzIG92ZXIgdG8gdXNpbmcgU3RyaW5nUGFyc2luZ0J1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgLSBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVy
IGFjcm9zcyBTVkcgY29kZS4KKyAgICAgICAgLSBSZW1vdmUgVVRGLTE2IHVwY29udmVyc2lvbnMg
aW4gU1ZHQW5pbWF0aW9uRWxlbWVudCwgU1ZHRml0VG9WaWV3Qm94LCBTVkdMZW5ndGhMaXN0LCAK
KyAgICAgICAgICBTVkdMZW5ndGhWYWx1ZSwgU1ZHTnVtYmVyTGlzdCwgU1ZHUGFyc2VyVXRpbGl0
aWVzLCBTVkdQb2ludExpc3QsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSwgCisgICAgICAg
ICAgU1ZHU3RyaW5nTGlzdCwgU1ZHVHJhbnNmb3JtTGlzdCwgU1ZHVHJhbnNmb3JtYWJsZSBhbmQg
U1ZHVmlld1NwZWMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3J0IFBhcnNpbmdVdGls
aXRpZXMuaCwgd2hpY2ggaXMgbm93IGluY2x1ZGVkIGJ5IFNWR1BhcnNlclV0aWxpdGllcy5oCisg
ICAgICAgIAorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICBBZGQgaW1wbGVtZW50YXRp
b24gZmlsZXMgZm9yIFNWR0xlbmd0aExpc3QsIFNWR051bWJlckxpc3QsIFNWR1BvaW50TGlzdCwg
U1ZHU3RyaW5nTGlzdAorICAgICAgICBhbmQgU1ZHVHJhbnNmb3JtTGlzdCB0byBob2xkIGxhcmdl
IGZ1bmN0aW9ucyBhcmUgdW5saWtlbHkgdG8gYmVuZWZpdCBmcm9tIGlubGluaW5nLgorICAgICAg
ICAKKyAgICAgICAgKiBodG1sL3BhcnNlci9QYXJzaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpza2lwQ2hhcmFjdGVyc0V4YWN0bHkpOgorICAgICAgICBBZGQgbmV3IHNraXBDaGFy
YWN0ZXJzRXhhY3RseSwgd2hpY2ggdGFrZXMgYSBjLWFycmF5IChOT1QgbnVsbC10ZXJtaW5hdGVk
KSBvZiBjaGFyYWN0ZXJzCisgICAgICAgIHRvIGNvbXBhcmUgYWdhaW5zdC4KKworICAgICAgICAq
IHN2Zy9TVkdBbmdsZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQW5nbGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuZ2xlVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgor
ICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyLgorCisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIEFkYXB0IHRvIG5ldyBz
aGFyZWQgcGFyc2VUcmFuc2Zvcm1UeXBlLCB3aGljaCBub3cgcmV0dXJucyBhbiBPcHRpb25hbCBh
bmQgZGVmYXVsdCB0bworICAgICAgICBTVkdfVFJBTlNGT1JNX1VOS05PV04gb24gcGFyc2UgZmFp
bHVyZSBhcyB0aGUgb2xkIHBhcnNlVHJhbnNmb3JtVHlwZSBkaWQuCisgICAgICAgIAorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
S2V5U3BsaW5lcyk6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRD
aGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAg
ICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkKKyAgICAgICAgCisgICAgICAg
ICogc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1Zp
ZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveEdlbmVyaWMpOgorICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3
Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKQorCisgICAgICAgICogc3ZnL1NWR0xlbmd0aExpc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnBhcnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdMZW5ndGhMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdC
dWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5
IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIE1v
dmUgcGFyc2UgYW5kIHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcv
U1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMZW5ndGhUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIHN2
Zy9TVkdMZW5ndGhWYWx1ZS5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyIGFu
ZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5lY2Vzc2FyeSBjYWxsIHRv
CisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpCisKKyAgICAgICAg
KiBzdmcvU1ZHTnVtYmVyTGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVt
YmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6dmFsdWVB
c1N0cmluZyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR051bWJlckxpc3QuaDoKKyAgICAgICAg
QWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5nIHRv
IHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3Ojp1cGNvbnZl
cnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFsdWVBc1N0cmluZyBvdXQgb2YgbGlu
ZS4KKworICAgICAgICAqIHN2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9u
YWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2RlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VLZXJuaW5nVW5pY29kZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VG
bG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAg
ICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNTVkdTcGFj
ZU9yQ29tbWEpOgorICAgICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNraXBTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICBBZG9wdCBTdHJpbmdQ
YXJzaW5nQnVmZmVyIGFuZCByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcgdG8gcmVwbGFjZSB1bm5l
Y2Vzc2FyeSBjYWxsIHRvCisgICAgICAgIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVy
cygpLiBNb3ZlIHBhcnNlIGFuZCB2YWx1ZUFzU3RyaW5nIG91dCBvZiBsaW5lLgorCisgICAgICAg
ICogc3ZnL1NWR1BhdGhTb3VyY2UuaDoKKyAgICAgICAgQWRkIG1pc3NpbmcgaW5jbHVkZSwgd2hp
Y2ggaXMgbm93IG5lZWRlZCBkbyB0byByZW1vdmluZyB1bm5jZXNzYXJ5IGluY2x1ZGVzIGluIG90
aGVyIGZpbGVzLgorCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpoYXNNb3JlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9r
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlci4gUmVwbGFjZSBleGlzdGluZyBzZXQg
b2YgdW5pb25zIHdpdGggYSBzaW5nbGUKKyAgICAgICAgdW5pb24gb2YgU3RyaW5nUGFyc2luZ0J1
ZmZlcnMuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdQb2lu
dExpc3QuaDoKKyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJh
Y3RlcnNGb3JQYXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBT
dHJpbmdWaWV3Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4gTW92ZSBwYXJzZSBhbmQgdmFsdWVB
c1N0cmluZyBvdXQgb2YgbGluZS4KKworICAgICAgICAqIHN2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAgICAgIEFkb3B0
IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBs
YWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCkuIAorCisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1N0cmluZ0xpc3Q6OnBhcnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0cmluZ0xpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdTdHJpbmdMaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5kIHJl
YWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8KKyAg
ICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIE1vdmUgcGFyc2UgYW5k
IHZhbHVlQXNTdHJpbmcgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3Jt
TGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29u
c29saWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5h
dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdDo6cGFyc2VHZW5l
cmljKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNp
bmdCdWZmZXIgYW5kIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNz
YXJ5IGNhbGwgdG8KKyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCku
IE1vdmUgcGFyc2UsIHZhbHVlQXNTdHJpbmcsIGNvbnNvbGlkYXRlIGFuZCAKKyAgICAgICAgY29u
Y2F0ZW5hdGUgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlVHJhbnNmb3JtVHlwZUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgIEFkb3B0IFN0cmluZ1BhcnNpbmdCdWZmZXIgYW5k
IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyB0byByZXBsYWNlIHVubmVjZXNzYXJ5IGNhbGwgdG8K
KyAgICAgICAgU3RyaW5nVmlldzo6dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkuIFVuaWZ5IHBhcnNl
VHJhbnNmb3JtVHlwZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWxsCisgICAgICAgIHVzZSBhIHNpbmds
ZSBpbXBsZW1lbnRhdGlvbiBhbmQgcmV0dXJuIGFuIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVR5cGU+
LgorCisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKToKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuaDoK
KyAgICAgICAgQWRvcHQgU3RyaW5nUGFyc2luZ0J1ZmZlciBhbmQgcmVhZENoYXJhY3RlcnNGb3JQ
YXJzaW5nIHRvIHJlcGxhY2UgdW5uZWNlc3NhcnkgY2FsbCB0bworICAgICAgICBTdHJpbmdWaWV3
Ojp1cGNvbnZlcnRlZENoYXJhY3RlcnMoKS4KKworICAgICAgICAqIHN2Zy9TVkdab29tQW5kUGFu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlWm9vbUFuZFBhbkdlbmVyaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKToKKyAgICAgICAgKiBz
dmcvU1ZHWm9vbUFuZFBhbi5oOgorICAgICAgICBBZG9wdCBTdHJpbmdQYXJzaW5nQnVmZmVyLgor
CiAyMDIwLTA2LTI2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBD
b252ZXJ0IENvbnRlbnRTZWN1cml0eVBvbGljeSByZWxhdGVkIHBhcnNlcnMgb3ZlciB0byB1c2lu
ZyBTdHJpbmdQYXJzaW5nQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2
MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTY2NSw2ICs2NjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmgKIAorICAgIGh0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAogCiAgICAg
aHRtbC90cmFjay9BdWRpb1RyYWNrLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjM1
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjU0
MCw2ICsyNTQwLDcgQEAgc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKIHN2Zy9TVkdJbWFnZUVsZW1l
bnQuY3BwCiBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAK
K3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAogc3ZnL1NWR0xlbmd0aFZhbHVlLmNwcAogc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcAogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKQEAgLTI1NDks
NiArMjU1MCw3IEBAIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAogc3ZnL1NWR01hc2tFbGVtZW50
LmNwcAogc3ZnL1NWR01ldGFkYXRhRWxlbWVudC5jcHAKIHN2Zy9TVkdNaXNzaW5nR2x5cGhFbGVt
ZW50LmNwcAorc3ZnL1NWR051bWJlckxpc3QuY3BwCiBzdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNw
cAogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAogc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcApAQCAtMjU2
Myw2ICsyNTY1LDcgQEAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCiBzdmcvU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKIHN2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAogc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcAorc3ZnL1NWR1BvaW50TGlzdC5jcHAKIHN2Zy9TVkdQb2x5RWxl
bWVudC5jcHAKIHN2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAKIHN2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuY3BwCkBAIC0yNTczLDYgKzI1NzYsNyBAQCBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAKIHN2Zy9T
VkdTY3JpcHRFbGVtZW50LmNwcAogc3ZnL1NWR1NldEVsZW1lbnQuY3BwCiBzdmcvU1ZHU3RvcEVs
ZW1lbnQuY3BwCitzdmcvU1ZHU3RyaW5nTGlzdC5jcHAKIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3Bw
CiBzdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKIHN2Zy9TVkdTeW1ib2xFbGVtZW50LmNwcApAQCAt
MjU4Niw2ICsyNTkwLDcgQEAgc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCiBzdmcv
U1ZHVGl0bGVFbGVtZW50LmNwcAogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCiBzdmcv
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCitzdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAogc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKIHN2Zy9TVkdVbmtu
b3duRWxlbWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU5
MCw3ICsxNTkwLDcgQEAKIAkJNTMyMDQyMDIxRjlBOUYxMDAwQjgxQjJBIC8qIFVzZXJBZ2VudFNj
cmlwdHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQUI2RDMwMTdDOTI1OTUwMEM2MEIzNCAvKiBVc2VyQWdlbnRTY3JpcHRzRGF0YS5jcHAg
Ki87IH07CiAJCTUzNTFENEIxMURGOTE2QjQwMDgwMTBDRCAvKiBGaWxlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUxRDRBRjFERjkxNkFD
MDA4MDEwQ0QgLyogRmlsZUhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzNkQ1QTIwMTkzRTE4RTkwMENFNENBQiAvKiBIVE1MU3Jjc2V0
UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzZENUExRjE5M0UxOEU5MDBDRTRDQUIgLyogSFRNTFNyY3NldFBhcnNlci5oICovOyB9OwotCQk1
MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2RDVBMjIxOTNFOEUwQzAwQ0U0
Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLzsgfTsKKwkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0
Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNkQ1QTIyMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0
aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTM4RUM4MDIxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRTb3VyY2UxLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0ZBMUY5NkFBNzAwMDRE
MjJBOCAvKiBVbmlmaWVkU291cmNlMS5jcHAgKi87IH07CiAJCTUzOEVDODAzMUY5NkFGODEwMDRE
MjJBOCAvKiBVbmlmaWVkU291cmNlMS1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEVDN0YzMUY5NkFBNUIwMDREMjJBOCAvKiBVbmlmaWVkU291
cmNlMS1tbS5tbSAqLzsgfTsKIAkJNTM4RUM4MDQxRjk2QUY4MTAwNEQyMkE4IC8qIFVuaWZpZWRT
b3VyY2UyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzOEVDN0VFMUY5NkFBNTYwMDREMjJBOCAvKiBVbmlmaWVkU291cmNlMi5jcHAgKi87IH07CkBA
IC0xMDE5Niw2ICsxMDE5NiwxMSBAQAogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNN
dXRhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDQ5NENBMUE4NkVCMUQwMDBB
ODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckF0dGFjaG1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3RUMgLyogUmVuZGVyQXR0YWNobWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJBdHRhY2htZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDcwQzNEMjRBMjhBM0EwMEU2MTA0MCAvKiBTVkdMZW5n
dGhMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0xlbmd0aExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MDI0QTI4QUM5MDBFNjEwNDAgLyogU1ZHTnVt
YmVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdOdW1iZXJMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDIyNEEyOEI3MDAwRTYxMDQwIC8qIFNWR1Bv
aW50TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQb2ludExpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Q3MEM0MzI0QTI4QkVDMDBFNjEwNDAgLyogU1ZHU3Ry
aW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHJpbmdMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1Ry
YW5zZm9ybUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU3Mzk2MUY5QkQ1OTUwMDM5MDMxMiAv
KiBTZXR0aW5ncy55YW1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLnlhbWw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDREU4RUJDMUYxOTNCQzUwMDE2OEZFNyAvKiBD
U1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1N0eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0UxOTE0NzFGMkE5OEFGMDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0SW5pdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGZXRjaFJlcXVlc3RJbml0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNTE0NSw2ICsyNTE1MCw3IEBACiAJCQkJQjIyMjc4OUUwRDAw
QkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5pZGwgKi8sCiAJCQkJNzEzNDQ5NkIxNDY5NDFCMzAw
NzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3BwICovLAogCQkJCTcxMzQ0OTZDMTQ2OTQxQjMw
MDcyMDMxMiAvKiBTVkdMZW5ndGhDb250ZXh0LmggKi8sCisJCQkJN0NENzBDM0QyNEEyOEEzQTAw
RTYxMDQwIC8qIFNWR0xlbmd0aExpc3QuY3BwICovLAogCQkJCUIyMjI3OEEwMEQwMEJGMjAwMDcx
Qjc4MiAvKiBTVkdMZW5ndGhMaXN0LmggKi8sCiAJCQkJQjIyMjc4QTEwRDAwQkYyMDAwNzFCNzgy
IC8qIFNWR0xlbmd0aExpc3QuaWRsICovLAogCQkJCTdDRTU4RDUyMUREN0IwOTMwMDEyODU1MiAv
KiBTVkdMZW5ndGhWYWx1ZS5jcHAgKi8sCkBAIC0yNTE3Nyw2ICsyNTE4Myw3IEBACiAJCQkJNDRE
OERBOTgxMzk1NDVCRTAwMzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8sCiAJCQkJN0NF
NThENEYxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051bWJlci5oICovLAogCQkJCUIyMjI3OEI5MEQw
MEJGMjAwMDcxQjc4MiAvKiBTVkdOdW1iZXIuaWRsICovLAorCQkJCTdDRDcwQzQwMjRBMjhBQzkw
MEU2MTA0MCAvKiBTVkdOdW1iZXJMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhCQjBEMDBCRjIwMDA3
MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oICovLAogCQkJCUIyMjI3OEJDMEQwMEJGMjAwMDcxQjc4
MiAvKiBTVkdOdW1iZXJMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzhDMDBEMDBCRjIwMDA3MUI3ODIg
LyogU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcCAqLywKQEAgLTI1MjQwLDYgKzI1MjQ3LDcgQEAKIAkJ
CQlCMjIyNzhGMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaWRsICovLAog
CQkJCTdDRTU4RDQ5MURENjRBNUIwMDEyODU1MiAvKiBTVkdQb2ludC5oICovLAogCQkJCUIyMjI3
OEY0MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQb2ludC5pZGwgKi8sCisJCQkJN0NENzBDNDIyNEEy
OEI3MDAwRTYxMDQwIC8qIFNWR1BvaW50TGlzdC5jcHAgKi8sCiAJCQkJQjIyMjc4RjYwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5oICovLAogCQkJCUIyMjI3OEY3MEQwMEJGMjEwMDcx
Qjc4MiAvKiBTVkdQb2ludExpc3QuaWRsICovLAogCQkJCUIyMjI3OEY4MEQwMEJGMjEwMDcxQjc4
MiAvKiBTVkdQb2x5RWxlbWVudC5jcHAgKi8sCkBAIC0yNTI3Myw2ICsyNTI4MSw3IEBACiAJCQkJ
QjIyMjc5MTIwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCAqLywKIAkJCQlC
MjIyNzkxMzBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaCAqLywKIAkJCQlCMjIy
NzkxNDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RvcEVsZW1lbnQuaWRsICovLAorCQkJCTdDRDcw
QzQzMjRBMjhCRUMwMEU2MTA0MCAvKiBTVkdTdHJpbmdMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzkx
NjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5oICovLAogCQkJCUIyMjI3OTE3MEQw
MEJGMjEwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmlkbCAqLywKIAkJCQlCMjIyNzkyMTBEMDBC
RjIxMDA3MUI3ODIgLyogU1ZHU3R5bGVFbGVtZW50LmNwcCAqLywKQEAgLTI1MzE0LDYgKzI1MzIz
LDcgQEAKIAkJCQlCMjIyNzk0NDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtYWJsZS5o
ICovLAogCQkJCUIyMjI3OTQ2MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZS5jcHAgKi8sCiAJCQkJQjIyMjc5NDcwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybURp
c3RhbmNlLmggKi8sCisJCQkJN0NENzBDNDYyNEEyOENENzAwRTYxMDQwIC8qIFNWR1RyYW5zZm9y
bUxpc3QuY3BwICovLAogCQkJCUIyMjI3OTQ5MEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUcmFuc2Zv
cm1MaXN0LmggKi8sCiAJCQkJQjIyMjc5NEEwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RyYW5zZm9y
bUxpc3QuaWRsICovLAogCQkJCTdDRTU4RDU2MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zv
cm1WYWx1ZS5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvUGFyc2luZ1V0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1BhcnNp
bmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvUGFyc2luZ1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNCArMTQyLDI0
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHVuc2lnbmUKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hh
cmFjdGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNvbnN0IENoYXJh
Y3RlclR5cGUoJnN0cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChlbmQgLSBwdHIgPCBj
aGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAoc3Ry
LCBwdHIsIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqIGNoYXJhY3RlckNvdW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHB0ciArPSBjaGFyYWN0ZXJDb3VudDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgY2hhcmFj
dGVyQ291bnQ+IGNvbnN0ZXhwciBib29sIHNraXBDaGFyYWN0ZXJzRXhhY3RseShTdHJpbmdQYXJz
aW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIsIGNvbnN0IENoYXJhY3RlclR5cGUoJnN0
cilbY2hhcmFjdGVyQ291bnRdKQoreworICAgIGlmIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkg
PCBjaGFyYWN0ZXJDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAo
c3RyLCBidWZmZXIucG9zaXRpb24oKSwgc2l6ZW9mKENoYXJhY3RlclR5cGUpICogY2hhcmFjdGVy
Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYnVmZmVyICs9IGNoYXJhY3RlckNv
dW50OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxOSArODEsMTkgQEAgU3RyaW5nIFNWR0FuZ2xlVmFs
dWU6OnZhbHVlQXNTdHJpbmcoKSBjbwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpU
eXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlu
bGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKFN0cmluZ1BhcnNpbmdCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQogewotICAgIHN3aXRjaCAoZW5kIC0gcHRyKSB7Cisg
ICAgc3dpdGNoIChidWZmZXIubGVuZ3RoUmVtYWluaW5nKCkpIHsKICAgICBjYXNlIDA6CiAgICAg
ICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOwogICAg
IGNhc2UgMzoKLSAgICAgICAgaWYgKHB0clswXSA9PSAnZCcgJiYgcHRyWzFdID09ICdlJyAmJiBw
dHJbMl0gPT0gJ2cnKQorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICdkJyAmJiBidWZmZXJbMV0g
PT0gJ2UnICYmIGJ1ZmZlclsyXSA9PSAnZycpCiAgICAgICAgICAgICByZXR1cm4gU1ZHQW5nbGVW
YWx1ZTo6U1ZHX0FOR0xFVFlQRV9ERUc7Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ3InICYmIHB0
clsxXSA9PSAnYScgJiYgcHRyWzJdID09ICdkJykKKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAn
cicgJiYgYnVmZmVyWzFdID09ICdhJyAmJiBidWZmZXJbMl0gPT0gJ2QnKQogICAgICAgICAgICAg
cmV0dXJuIFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZUEVfUkFEOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChwdHJbMF0gPT0gJ2cnICYmIHB0clsxXSA9PSAncicg
JiYgcHRyWzJdID09ICdhJyAmJiBwdHJbM10gPT0gJ2QnKQorICAgICAgICBpZiAoYnVmZmVyWzBd
ID09ICdnJyAmJiBidWZmZXJbMV0gPT0gJ3InICYmIGJ1ZmZlclsyXSA9PSAnYScgJiYgYnVmZmVy
WzNdID09ICdkJykKICAgICAgICAgICAgIHJldHVybiBTVkdBbmdsZVZhbHVlOjpTVkdfQU5HTEVU
WVBFX0dSQUQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEwNiwyNyArMTA3LDE5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6OnNldFZhbHUKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBhdXRvIGhlbHBlciA9IFsmXShhdXRvKiBwdHIsIGF1dG8qIGVuZCkg
LT4gRXhjZXB0aW9uT3I8dm9pZD4gewotICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZpZWRVbml0
cyA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1
ZmZlcikgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgICAgICBhdXRvIHZhbHVlSW5TcGVjaWZp
ZWRVbml0cyA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKICAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCiAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAotICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFy
c2VBbmdsZVR5cGUoYnVmZmVyKTsKICAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFs
dWU6OlNWR19BTkdMRVRZUEVfVU5LTk9XTikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBTeW50YXhFcnJvciB9OwogCiAgICAgICAgIG1fdW5pdFR5cGUgPSB1bml0VHlwZTsKICAgICAg
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAqdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAg
ICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKLSAg
ICAgICAgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgcmV0dXJuIGhl
bHBlcihwdHIsIHB0ciArIHZhbHVlLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvKiBwdHIg
PSB2YWx1ZS5jaGFyYWN0ZXJzMTYoKTsKLSAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFs
dWUubGVuZ3RoKCkpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZh
bHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9h
dCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
aGFzVmFsaQogdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKSB7Ci0gICAgICAgIG1fdHlwZSA9IFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSk7CisgICAgICAgIG1fdHlw
ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZSh2YWx1ZSkudmFsdWVPcihT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKICAgICAgICAgaWYgKG1f
dHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVgpCiAgICAgICAg
ICAgICBtX3R5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNTQgKzc4LDUwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNl
S2V5U3BsaW5lcyhjb25zdCBTdHJpbmdWaWV3JiBwYXJzZSkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhTdHJpbmdWaWV3IHN0cmluZykKIHsKLSAg
ICBpZiAocGFyc2UuaXNFbXB0eSgpKQorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBwYXJzZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJz
ZS5sZW5ndGgoKTsKLQotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7Ci0KLSAg
ICBWZWN0b3I8VW5pdEJlemllcj4gcmVzdWx0OwotCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZh
bHNlOwotICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLSAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBp
ZiAoIXBvc0EpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBy
ZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbJl0oYXV0byBidWZmZXIpIC0+IE9wdGlv
bmFsPFZlY3RvcjxVbml0QmV6aWVyPj4geworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
YnVmZmVyKTsKIAotICAgICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0g
ICAgICAgIGlmICghcG9zQikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CiAKLSAgICAgICAgYXV0byBwb3NDID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOwotICAgICAgICBpZiAoIXBvc0MpCi0gICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAg
ICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAg
ICBkZWxpbVBhcnNlZCA9IGZhbHNlOworICAgICAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1i
ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgICAgICBpZiAoIXBvc0Qp
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBwb3NC
ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcG9zQikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgICAgICAgICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihidWZm
ZXIpOworICAgICAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgaWYgKGN1ciA8IGVuZCAmJiAqY3VyID09ICc7JykgewotICAg
ICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgY3VyKys7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcG9zRCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVy
KTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpw
b3NDLCAqcG9zRCB9KTsKLSAgICB9CisgICAgICAgICAgICBpZiAoc2tpcEV4YWN0bHkoYnVmZmVy
LCAnOycpKQorICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKIAotICAgIGlmICgh
KGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9z
RCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGJ1ZmZlci5hdEVuZCgpICYmICFkZWxp
bVBhcnNlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogYm9vbCBTVkdB
bmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShy
ZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtODQsMjkgKzg1LDM5IEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZUF0dHJp
YnV0ZShjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nVmlldyYgdmFsdWUpCitPcHRp
b25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ1ZpZXcg
dmFsdWUpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJh
Y3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFy
c2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZVZpZXdC
b3hHZW5lcmljKGJ1ZmZlcik7CisgICAgfSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1
ZmZlciwgYm9vbCB2YWxpZGF0ZSkKK3sKKyAgICByZXR1cm4gcGFyc2VWaWV3Qm94R2VuZXJpYyhi
dWZmZXIsIHZhbGlkYXRlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlVmlld0JveChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyLCBib29s
IHZhbGlkYXRlKQoreworICAgIHJldHVybiBwYXJzZVZpZXdCb3hHZW5lcmljKGJ1ZmZlciwgdmFs
aWRhdGUpOwogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZH
Rml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIGJ1ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICBTdHJpbmdWaWV3IHN0
cihjLCBlbmQgLSBjKTsKKyAgICBTdHJpbmdWaWV3IHN0cmluZ1RvUGFyc2UgPSBidWZmZXIuc3Ry
aW5nVmlld09mQ2hhcmFjdGVyc1JlbWFpbmluZygpOwogCi0gICAgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGMsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CiAKLSAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihjLCBlbmQpOwotICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGMs
IGVuZCk7Ci0gICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7Ci0gICAgYXV0byBo
ZWlnaHQgPSBwYXJzZU51bWJlcihjLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tp
cCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICBhdXRvIHkgPSBwYXJz
ZU51bWJlcihidWZmZXIpOworICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihidWZmZXIpOwor
ICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eTo6RG9udFNraXApOwogCiAgICAgaWYgKHZhbGlkYXRlKSB7CiAgICAgICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IG1fdmlld0JveC0+Y29udGV4dEVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKIAogICAg
ICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKLSAgICAgICAgICAgIGRv
Y3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlBy
b2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICBkb2N1
bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KIApAQCAtMTIzLDkgKzEzNCw5IEBA
IE9wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXIKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGxhc3QsIGZvdXJ0aCBudW1i
ZXIuCi0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwotICAgICAgICBpZiAo
YyA8IGVuZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
cG9ydFdhcm5pbmcobWFrZVN0cmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiLCBzdHIs
ICJcIiIpKTsKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgICAg
IGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0cmluZ1RvUGFyc2UsICJcIiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEwICs2NSwx
MyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgYm9vbCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nVmlldyk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mLCBib29sIHZhbGlkYXRl
ID0gdHJ1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mLCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CiAKIHByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8RmxvYXRSZWN0PiBw
YXJzZVZpZXdCb3hHZW5lcmljKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBi
b29sIHZhbGlkYXRlID0gdHJ1ZSk7CisKICAgICBSZWY8U1ZHQW5pbWF0ZWRSZWN0PiBtX3ZpZXdC
b3g7CiAgICAgUmVmPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvOwogICAgIGJvb2wgbV9pc1ZpZXdCb3hWYWxpZCB7IGZhbHNlIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBTVkdMZW5ndGhMaXN0OjpwYXJzZShTdHJpbmdWaWV3IHZhbHVlKQoreworICAgIGNs
ZWFySXRlbXMoKTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUs
IFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICB1c2luZyBDaGFyYWN0ZXJUeXBlID0gdHlwZW5h
bWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsKKworICAgICAgICB3aGlsZSAoYnVm
ZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBzdGFydCA9
IGJ1ZmZlci5wb3NpdGlvbigpOworCisgICAgICAgICAgICBza2lwVW50aWw8Q2hhcmFjdGVyVHlw
ZSwgaXNTVkdTcGFjZU9yQ29tbWE+KGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIu
cG9zaXRpb24oKSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgYXV0byB2YWx1ZSA9IFNWR0xlbmd0aFZhbHVlOjpjb25zdHJ1Y3QobV9sZW5ndGhNb2RlLCBT
dHJpbmdWaWV3KHN0YXJ0LCBidWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhcHBl
bmQoU1ZHTGVuZ3RoOjpjcmVhdGUoV1RGTW92ZSgqdmFsdWUpKSk7CisgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2UgU1ZH
VHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiBidWZmZXIuYXRFbmQoKTsKKyAg
ICB9KTsKK30KKworU3RyaW5nIFNWR0xlbmd0aExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGVu
Z3RoIDogbV9pdGVtcykgeworICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobGVuZ3Ro
LT52YWx1ZSgpLnZhbHVlQXNTdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCShy
ZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTAgQEAKIAogI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR1ZhbHVlUHJvcGVydHlMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0xlbmd0
aExpc3QgOiBwdWJsaWMgU1ZHVmFsdWVQcm9wZXJ0eUxpc3Q8U1ZHTGVuZ3RoPiB7CitjbGFzcyBT
VkdMZW5ndGhMaXN0IGZpbmFsIDogcHVibGljIFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR0xlbmd0
aD4gewogICAgIHVzaW5nIEJhc2UgPSBTVkdWYWx1ZVByb3BlcnR5TGlzdDxTVkdMZW5ndGg+Owog
ICAgIHVzaW5nIEJhc2U6OkJhc2U7CiAKQEAgLTUzLDQ1ICs1Miw5IEBAIHB1YmxpYzoKIAogICAg
IFNWR0xlbmd0aE1vZGUgbGVuZ3RoTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoTW9kZTsg
fQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
Y2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewot
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJyAmJiAhaXNTVkdTcGFjZSgqcHRyKSkKLSAgICAgICAg
ICAgICAgICBwdHIrKzsKLSAgICAgICAgICAgIGlmIChwdHIgPT0gc3RhcnQpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyhzdGFydCwgcHRy
IC0gc3RhcnQpOwotICAgICAgICAgICAgU1ZHTGVuZ3RoVmFsdWUgdmFsdWUobV9sZW5ndGhNb2Rl
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlU3RyaW5nKS5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYXBw
ZW5kKFNWR0xlbmd0aDo6Y3JlYXRlKHZhbHVlKSk7Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcHRyID09IGVuZDsKLSAgICB9CisgICAgYm9vbCBwYXJzZShTdHJpbmdWaWV3KTsKIAotICAg
IFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxlbmd0aCA6
IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGxlbmd0aC0+dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9CisgICAgU3RyaW5nIHZhbHVlQXNTdHJp
bmcoKSBjb25zdCBvdmVycmlkZTsKICAgICAKIHByaXZhdGU6CiAgICAgU1ZHTGVuZ3RoTGlzdChT
VkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhW
YWx1ZS5jcHAJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJT
VkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMTkgKzYyLDE5IEBAIHN0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogbGVuZ3RoVHlwZVRvU3QKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoY29uc3QgVUNoYXIqIHB0
ciwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVHlwZSBwYXJzZUxlbmd0aFR5cGUoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwdHIgPT0gZW5kKQorICAg
IGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aFR5cGU6Ok51bWJl
cjsKIAotICAgIGNvbnN0IFVDaGFyIGZpcnN0Q2hhciA9ICpwdHI7CisgICAgYXV0byBmaXJzdENo
YXIgPSAqYnVmZmVyKys7CiAKLSAgICBpZiAoKytwdHIgPT0gZW5kKQorICAgIGlmIChidWZmZXIu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PSAnJScgPyBTVkdMZW5ndGhUeXBl
OjpQZXJjZW50YWdlIDogU1ZHTGVuZ3RoVHlwZTo6VW5rbm93bjsKIAotICAgIGNvbnN0IFVDaGFy
IHNlY29uZENoYXIgPSAqcHRyOworICAgIGF1dG8gc2Vjb25kQ2hhciA9ICpidWZmZXIrKzsKIAot
ICAgIGlmICgrK3B0ciAhPSBlbmQpCisgICAgaWYgKCFidWZmZXIuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIFNWR0xlbmd0aFR5cGU6OlVua25vd247CiAKICAgICBpZiAoZmlyc3RDaGFyID09ICdl
JyAmJiBzZWNvbmRDaGFyID09ICdtJykKQEAgLTE4MCw3ICsxODEsMTUgQEAgU1ZHTGVuZ3RoVmFs
dWU6OlNWR0xlbmd0aFZhbHVlKGNvbnN0IFNWRwogICAgIHNldFZhbHVlKGNvbnRleHQsIHZhbHVl
KTsKIH0KIAotU1ZHTGVuZ3RoVmFsdWUgU1ZHTGVuZ3RoVmFsdWU6OmNvbnN0cnVjdChTVkdMZW5n
dGhNb2RlIGxlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHUGFyc2lu
Z0Vycm9yJiBwYXJzZUVycm9yLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgbmVnYXRpdmVW
YWx1ZXNNb2RlKQorT3B0aW9uYWw8U1ZHTGVuZ3RoVmFsdWU+IFNWR0xlbmd0aFZhbHVlOjpjb25z
dHJ1Y3QoU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlLCBTdHJpbmdWaWV3IHZhbHVlQXNTdHJpbmcp
Cit7CisgICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoIHsgbGVuZ3RoTW9kZSB9OworICAgIGlmIChs
ZW5ndGguc2V0VmFsdWVBc1N0cmluZyh2YWx1ZUFzU3RyaW5nKS5oYXNFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitTVkdM
ZW5ndGhWYWx1ZSBTVkdMZW5ndGhWYWx1ZTo6Y29uc3RydWN0KFNWR0xlbmd0aE1vZGUgbGVuZ3Ro
TW9kZSwgU3RyaW5nVmlldyB2YWx1ZUFzU3RyaW5nLCBTVkdQYXJzaW5nRXJyb3ImIHBhcnNlRXJy
b3IsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSBuZWdhdGl2ZVZhbHVlc01vZGUpCiB7CiAg
ICAgU1ZHTGVuZ3RoVmFsdWUgbGVuZ3RoKGxlbmd0aE1vZGUpOwogCkBAIC0yMzksNyArMjQ4LDcg
QEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBTVkdMZW5ndGhWYWx1ZTo6dAogICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSwg
bGVuZ3RoVHlwZVRvUHJpbWl0aXZlVHlwZShsZW5ndGgubGVuZ3RoVHlwZSgpKSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWVBc1N0cmluZywgU1ZHTGVuZ3RoTW9kZSBsZW5ndGhNb2RlKQorRXhjZXB0aW9u
T3I8dm9pZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nVmlldyB2YWx1
ZUFzU3RyaW5nLCBTVkdMZW5ndGhNb2RlIGxlbmd0aE1vZGUpCiB7CiAgICAgbV92YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMgPSAwOwogICAgIG1fbGVuZ3RoTW9kZSA9IGxlbmd0aE1vZGU7CkBAIC0yODYs
MjYgKzI5NSwyNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAg
ICAgcmV0dXJuIHNldFZhbHVlKGNvbnRleHQsIHZhbHVlKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9p
ZD4gU1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CitFeGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsdWVBc1N0cmluZyhTdHJp
bmdWaWV3IHN0cmluZykKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhz
dHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmlu
Zy5sZW5ndGgoKTsKLQotICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Ci0gICAgaWYgKCFjb252ZXJ0
ZWROdW1iZXIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwotCi0g
ICAgYXV0byBsZW5ndGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0ciwgZW5kKTsKLSAgICBpZiAo
bGVuZ3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3duKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJz
aW5nKHN0cmluZywgWyZdKGF1dG8gYnVmZmVyKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAg
ICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lw
cGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKKyAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworCisgICAgICAgIGF1
dG8gbGVuZ3RoVHlwZSA9IHBhcnNlTGVuZ3RoVHlwZShidWZmZXIpOworICAgICAgICBpZiAobGVu
Z3RoVHlwZSA9PSBTVkdMZW5ndGhUeXBlOjpVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBl
OwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKLSAgICBy
ZXR1cm4geyB9OworICAgICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOworICAgICAgICBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpj
b252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBT
VkdMZW5ndGhUeXBlIGxlbmd0aFR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1OCwxNCBAQCBlbnVtIGNsYXNzIFNWR0xl
bmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA6CiBjbGFzcyBTVkdMZW5ndGhWYWx1ZSB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVu
Z3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJp
bmcgPSBTdHJpbmcoKSk7CisgICAgU1ZHTGVuZ3RoVmFsdWUoU1ZHTGVuZ3RoTW9kZSA9IFNWR0xl
bmd0aE1vZGU6Ok90aGVyLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcgPSB7IH0pOwogICAg
IFNWR0xlbmd0aFZhbHVlKGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cywgU1ZHTGVuZ3RoVHlw
ZSwgU1ZHTGVuZ3RoTW9kZSA9IFNWR0xlbmd0aE1vZGU6Ok90aGVyKTsKICAgICBTVkdMZW5ndGhW
YWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgZmxvYXQsIFNWR0xlbmd0aFR5cGUgPSBTVkdM
ZW5ndGhUeXBlOjpOdW1iZXIsIFNWR0xlbmd0aE1vZGUgPSBTVkdMZW5ndGhNb2RlOjpPdGhlcik7
CiAKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNv
bnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJvciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9k
ZSA9IFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZTo6QWxsb3cpOworICAgIHN0YXRpYyBPcHRp
b25hbDxTVkdMZW5ndGhWYWx1ZT4gY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIFN0cmluZ1ZpZXcp
OworICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb25zdHJ1Y3QoU1ZHTGVuZ3RoTW9kZSwgU3Ry
aW5nVmlldywgU1ZHUGFyc2luZ0Vycm9yJiwgU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlID0g
U1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlOjpBbGxvdyk7CiAgICAgc3RhdGljIFNWR0xlbmd0
aFZhbHVlIGJsZW5kKGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhW
YWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICAKKwogICAgIHN0YXRpYyBTVkdMZW5ndGhW
YWx1ZSBmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAg
ICBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0
IFNWR0xlbmd0aFZhbHVlJik7CiAKQEAgLTg1LDggKzg2LDggQEAgcHVibGljOgogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCk7CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0VmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIGZs
b2F0LCBTVkdMZW5ndGhUeXBlLCBTVkdMZW5ndGhNb2RlKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmLCBTVkdMZW5ndGhNb2RlKTsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ1ZpZXcpOworICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldFZhbHVlQXNTdHJpbmcoU3RyaW5nVmlldywgU1ZHTGVuZ3RoTW9kZSk7
CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyhjb25zdCBT
VkdMZW5ndGhDb250ZXh0JiwgU1ZHTGVuZ3RoVHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdOdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R051bWJlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgorCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR051
bWJlckxpc3Q6OnBhcnNlKFN0cmluZ1ZpZXcgdmFsdWUpCit7CisgICAgY2xlYXJJdGVtcygpOwor
CisgICAgcmV0dXJuIHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwgWyZdKGF1dG8gYnVm
ZmVyKSB7CisgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNu
J3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2Ug
dG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCisgICAgICAgIHdoaWxlIChidWZmZXIuaGFz
Q2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNl
TnVtYmVyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoIW51bWJlcikKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGFwcGVuZChTVkdOdW1iZXI6OmNyZWF0ZSgqbnVtYmVyKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygp
IG9uIGZhaWx1cmUgbGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJu
IGJ1ZmZlci5hdEVuZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHTnVtYmVyTGlzdDo6dmFs
dWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAg
Zm9yIChjb25zdCBhdXRvJiBudW1iZXIgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVy
Lmxlbmd0aCgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBi
dWlsZGVyLmFwcGVuZChudW1iZXItPnZhbHVlKCkpOworICAgIH0KKworICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051
bWJlckxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlz
dC5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU1ZHTnVtYmVyTGlzdCA6IHB1YmxpYyBTVkdWYWx1ZVByb3BlcnR5TGlzdDxT
VkdOdW1iZXI+IHsKK2NsYXNzIFNWR051bWJlckxpc3QgZmluYWwgOiBwdWJsaWMgU1ZHVmFsdWVQ
cm9wZXJ0eUxpc3Q8U1ZHTnVtYmVyPiB7CiAgICAgdXNpbmcgQmFzZSA9IFNWR1ZhbHVlUHJvcGVy
dHlMaXN0PFNWR051bWJlcj47CiAgICAgdXNpbmcgQmFzZTo6QmFzZTsKIApAQCAtNTAsMzkgKzUw
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdOdW1iZXJMaXN0
KG90aGVyLCBhY2Nlc3MpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgewotICAgICAgICBjbGVhckl0ZW1zKCk7Ci0KLSAgICAgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsK
LSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAg
ICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNuJ3QgYWxsb3cgbGVh
ZGluZyB3aGl0ZXNwYWNlLgotICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2UgdG8gdmlvbGF0ZSB0
aGF0IGludGVudGlvbmFsbHkuCi0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgICAgICAgICAgaWYg
KCFudW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQoU1ZH
TnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0
ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgbnVtYmVyIDogbV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobnVtYmVyLT52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgIGJvb2wgcGFyc2Uo
U3RyaW5nVmlldyk7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZm
ZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0VHlwZT4gc3Rh
dGljIGlubAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55
IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgogLy8gRklY
TUU6IENhbiB0aGlzIGJlIHNoYXJlZC9yZXBsYWNlZCB3aXRoIG51bWJlciBwYXJzaW5nIGluIFdU
Rj8KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5cGUg
PSBmbG9hdD4gc3RhdGljIE9wdGlvbmFsPEZsb2F0VHlwZT4gZ2VuZXJpY1BhcnNlTnVtYmVyKGNv
bnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3kgc2tpcCA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBz
dGF0aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIoU3RyaW5nUGFyc2lu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lw
ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCiB7CiAgICAgRmxvYXRUeXBlIG51bWJlciA9
IDA7CiAgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOwpAQCAtNTAsMjYgKzUxLDI3IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBGbG9hdFR5cGUgZXhwb25l
bnQgPSAwOwogICAgIGludCBzaWduID0gMTsKICAgICBpbnQgZXhwc2lnbiA9IDE7Ci0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBwdHI7CisgICAgYXV0byBzdGFydCA9IGJ1ZmZlci5w
b3NpdGlvbigpOwogCiAgICAgLy8gcmVhZCB0aGUgc2lnbgotICAgIGlmIChwdHIgPCBlbmQgJiYg
KnB0ciA9PSAnKycpCi0gICAgICAgIHB0cisrOwotICAgIGVsc2UgaWYgKHB0ciA8IGVuZCAmJiAq
cHRyID09ICctJykgewotICAgICAgICBwdHIrKzsKKyAgICBpZiAoYnVmZmVyLmhhc0NoYXJhY3Rl
cnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyID09ICcrJykKKyAgICAgICAgKytidWZmZXI7CisgICAg
ZWxzZSBpZiAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSAmJiAqYnVmZmVyID09ICct
JykgeworICAgICAgICArK2J1ZmZlcjsKICAgICAgICAgc2lnbiA9IC0xOwogICAgIH0gCiAgICAg
Ci0gICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0cikgJiYgKnB0ciAhPSAn
LicpKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSB8fCAoIWlzQVNDSUlEaWdpdCgqYnVmZmVyKSAm
JiAqYnVmZmVyICE9ICcuJykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAv
LyByZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQKLSAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7Ci0gICAgd2hpbGUgKHB0ciA8IGVu
ZCAmJiBpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICsrcHRyOyAvLyBBZHZhbmNlIHRvIGZp
cnN0IG5vbi1kaWdpdC4KKyAgICBhdXRvIHB0clN0YXJ0SW50UGFydCA9IGJ1ZmZlci5wb3NpdGlv
bigpOworICAgIAorICAgIC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LgorICAgIHNraXBX
aGlsZTxDaGFyYWN0ZXJUeXBlLCBpc0FTQ0lJRGlnaXQ+KGJ1ZmZlcik7CiAKLSAgICBpZiAocHRy
ICE9IHB0clN0YXJ0SW50UGFydCkgewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJT
Y2FuSW50UGFydCA9IHB0ciAtIDE7CisgICAgaWYgKGJ1ZmZlci5wb3NpdGlvbigpICE9IHB0clN0
YXJ0SW50UGFydCkgeworICAgICAgICBhdXRvIHB0clNjYW5JbnRQYXJ0ID0gYnVmZmVyLnBvc2l0
aW9uKCkgLSAxOwogICAgICAgICBGbG9hdFR5cGUgbXVsdGlwbGllciA9IDE7CiAgICAgICAgIHdo
aWxlIChwdHJTY2FuSW50UGFydCA+PSBwdHJTdGFydEludFBhcnQpIHsKICAgICAgICAgICAgIGlu
dGVnZXIgKz0gbXVsdGlwbGllciAqIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oKihwdHJTY2FuSW50
UGFydC0tKSAtICcwJyk7CkBAIC04MCwzOCArODIsMzggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJy4nKSB7IC8vIHJlYWQgdGhlIGRl
Y2ltYWxzCi0gICAgICAgIHB0cisrOworICAgIC8vIHJlYWQgdGhlIGRlY2ltYWxzCisgICAgaWYg
KGJ1ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkgJiYgKmJ1ZmZlciA9PSAnLicpIHsKKyAg
ICAgICAgKytidWZmZXI7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVh
c3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgotICAgICAgICBpZiAocHRyID49IGVuZCB8fCAh
aXNBU0NJSURpZ2l0KCpwdHIpKQorICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgIWlzQVND
SUlEaWdpdCgqYnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgqcHRyKSkKLSAg
ICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oMC4xKSk7CisgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVy
c1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgqYnVmZmVyKSkKKyAgICAgICAgICAgIGRlY2lt
YWwgKz0gKCooYnVmZmVyKyspIC0gJzAnKSAqIChmcmFjICo9IHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oMC4xKSk7CiAgICAgfQogCiAgICAgLy8gcmVhZCB0aGUgZXhwb25lbnQgcGFydAotICAgIGlm
IChwdHIgIT0gc3RhcnQgJiYgcHRyICsgMSA8IGVuZCAmJiAoKnB0ciA9PSAnZScgfHwgKnB0ciA9
PSAnRScpIAotICAgICAgICAmJiAocHRyWzFdICE9ICd4JyAmJiBwdHJbMV0gIT0gJ20nKSkgeyAK
LSAgICAgICAgcHRyKys7CisgICAgaWYgKGJ1ZmZlci5wb3NpdGlvbigpICE9IHN0YXJ0ICYmIGJ1
ZmZlci5wb3NpdGlvbigpICsgMSA8IGJ1ZmZlci5lbmQoKSAmJiAoKmJ1ZmZlciA9PSAnZScgfHwg
KmJ1ZmZlciA9PSAnRScpCisgICAgICAgICYmIChidWZmZXJbMV0gIT0gJ3gnICYmIGJ1ZmZlclsx
XSAhPSAnbScpKSB7CisgICAgICAgICsrYnVmZmVyOwogCiAgICAgICAgIC8vIHJlYWQgdGhlIHNp
Z24gb2YgdGhlIGV4cG9uZW50Ci0gICAgICAgIGlmICgqcHRyID09ICcrJykKLSAgICAgICAgICAg
IHB0cisrOwotICAgICAgICBlbHNlIGlmICgqcHRyID09ICctJykgewotICAgICAgICAgICAgcHRy
Kys7CisgICAgICAgIGlmICgqYnVmZmVyID09ICcrJykKKyAgICAgICAgICAgICsrYnVmZmVyOwor
ICAgICAgICBlbHNlIGlmICgqYnVmZmVyID09ICctJykgeworICAgICAgICAgICAgKytidWZmZXI7
CiAgICAgICAgICAgICBleHBzaWduID0gLTE7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIFRoZXJlIG11c3QgYmUgYW4gZXhwb25lbnQKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwg
IWlzQVNDSUlEaWdpdCgqcHRyKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpIHx8ICFpc0FT
Q0lJRGlnaXQoKmJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKSB7CisgICAgICAg
IHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmIGlzQVNDSUlEaWdpdCgq
YnVmZmVyKSkgewogICAgICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBl
PigxMCk7Ci0gICAgICAgICAgICBleHBvbmVudCArPSAqcHRyIC0gJzAnOwotICAgICAgICAgICAg
cHRyKys7CisgICAgICAgICAgICBleHBvbmVudCArPSAqYnVmZmVyKysgLSAnMCc7CiAgICAgICAg
IH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAo
IWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKQEAgLTEyOCw0NCArMTMwLDQ0IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKICAgICBpZiAoIWlzVmFsaWRSYW5nZShu
dW1iZXIpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHN0YXJ0ID09
IHB0cikKKyAgICBpZiAoc3RhcnQgPT0gYnVmZmVyLnBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoc2tpcCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6
U2tpcCkKLSAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIpOwogCiAg
ICAgcmV0dXJuIG51bWJlcjsKIH0KIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0
IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lw
KQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+
JiBidWZmZXIsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51
bWJlcihidWZmZXIsIHNraXApOwogfQogCi1PcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXApCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hh
cj4mIGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2Vu
ZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
TnVtYmVyKGJ1ZmZlciwgc2tpcCk7CiB9CiAKIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0g
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIGF1dG8gcmVz
dWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKLSAgICBpZiAocHRyICE9
IGVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbc2tpcF0oYXV0byBi
dWZmZXIpIC0+IE9wdGlvbmFsPGZsb2F0PiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJp
Y1BhcnNlTnVtYmVyKGJ1ZmZlciwgc2tpcCk7CisgICAgICAgIGlmICghYnVmZmVyLmF0RW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0pOwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBz
d2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2
ZSBhbnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGlmIChwdHIg
Pj0gZW5kKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUgZmxhZ0NoYXIgPSAqcHRyKys7CisgICAg
Y29uc3QgQ2hhcmFjdGVyVHlwZSBmbGFnQ2hhciA9ICpidWZmZXI7CisgICAgKytidWZmZXI7CiAK
ICAgICBib29sIGZsYWc7CiAgICAgaWYgKGZsYWdDaGFyID09ICcwJykKQEAgLTE3NSwxOSArMTc3
LDE5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBPcHRpb24KICAgICBlbHNl
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIoYnVmZmVyKTsKICAgICAKICAgICByZXR1cm4gZmxhZzsKIH0KIAotT3B0aW9uYWw8Ym9v
bD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKQorT3B0
aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+JiBidWZm
ZXIpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOworICAgIHJl
dHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKGJ1ZmZlcik7CiB9CiAKLU9wdGlvbmFsPGJvb2w+IHBh
cnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFs
PGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQog
ewotICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kKTsKKyAgICByZXR1cm4g
Z2VuZXJpY1BhcnNlQXJjRmxhZyhidWZmZXIpOwogfQogCiBPcHRpb25hbDxzdGQ6OnBhaXI8Zmxv
YXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcpCkBAIC0xOTUsMjUgKzE5NywyMyBAQCBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7Ci0gICAgaWYgKCF4KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPGZs
b2F0LCBmbG9hdD4+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAg
ICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
IChjdXIgPT0gZW5kKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKKyAg
ICAgICAgaWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeCk7CiAKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4
U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChjdXIgIT0gZW5kKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqeCwg
KnkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp5KTsKKyAgICB9KTsKIH0K
IAogT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmcpCkBAIC0yMjEsMTE3ICsyMjEsMTEzIEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9p
bnQoY29uc3QgU3QKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgo
KTsKLQotICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVhZENoYXJhY3RlcnNGb3JQYXJzaW5n
KHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHsKKyAgICAg
ICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1ciwg
ZW5kKTsKLSAgICBpZiAoIXBvaW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBhdXRvIHBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CisgICAgICAgIGlmICgh
cG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gRGlzYWxs
b3cgYW55dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kLgotICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXIsIGVuZCk7Ci0gICAgCi0gICAgcmV0dXJuIHBvaW50OworICAgICAgICAvLyBE
aXNhbGxvdyBhbnl0aGluZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQuCisgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvaW50
OworICAgIH0pOwogfQogCiBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJp
bmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJp
bmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxl
bmd0aCgpOwotICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7Ci0gICAg
Ci0gICAgYXV0byB4ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOwotICAgIGlmICgheCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVu
ZCk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8g
d2lkdGggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwg
ZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOwotICAgIGlmICghaGVpZ2h0KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gT3B0aW9uYWw8RmxvYXRSZWN0PiB7
CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgICAgICAKKyAgICAg
ICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIo
YnVmZmVyKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKGJ1ZmZlcik7CisgICAgICAgIGlm
ICghd2lkdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRv
IGhlaWdodCA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0IH07
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9Owor
ICAgIH0pOwogfQogCiBPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBk
ZXRlY3Rpb24gaXMgbWlzc2luZy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
c3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwotCi0gICAg
SGFzaFNldDxTdHJpbmc+IHZhbHVlczsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAg
ICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBi
ZWZvcmUgYW5kIGFmdGVyIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAgICAgICAgY29u
c3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYg
KnB0ciAhPSAnLCcpCi0gICAgICAgICAgICArK3B0cjsKKyAgICByZXR1cm4gcmVhZENoYXJhY3Rl
cnNGb3JQYXJzaW5nKHN0cmluZywgW10oYXV0byBidWZmZXIpIC0+IEhhc2hTZXQ8U3RyaW5nPiB7
CisgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpOwogCi0gICAgICAgIGlmIChw
dHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBIYXNoU2V0PFN0
cmluZz4gdmFsdWVzOwogCi0gICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8g
aWdub3JlIGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0
ciAtIDE7Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFj
ZSgqaW5wdXRFbmQpKQotICAgICAgICAgICAgLS1pbnB1dEVuZDsKKyAgICAgICAgd2hpbGUgKGJ1
ZmZlci5oYXNDaGFyYWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIExlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRl
ciBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBhdXRvIGlucHV0U3Rh
cnQgPSBidWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICB2YWx1ZXMuYWRkKFN0cmluZyhpbnB1
dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAgIHNraXBPcHRpb25h
bFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwotICAgIH0KKyAgICAgICAgICAg
IHNraXBVbnRpbChidWZmZXIsICcsJyk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIucG9zaXRp
b24oKSA9PSBpbnB1dFN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQor
ICAgICAgICAgICAgYXV0byBpbnB1dEVuZCA9IGJ1ZmZlci5wb3NpdGlvbigpIC0gMTsKKyAgICAg
ICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRF
bmQpKQorICAgICAgICAgICAgICAgIC0taW5wdXRFbmQ7CisKKyAgICAgICAgICAgIHZhbHVlcy5h
ZGQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKKyAgICAg
ICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGJ1ZmZlciwgJywnKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWVzOworICAgIH0pOwogCi0gICAgcmV0dXJuIHZh
bHVlczsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5nZT4gcGFyc2VVbmljb2RlUmFu
Z2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNl
VW5pY29kZVJhbmdlKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gYnVmZmVyKQog
ewotICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3Rl
cnNbMV0gIT0gJysnKQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGhSZW1haW5p
bmcoKTsKKyAgICBpZiAobGVuZ3RoIDwgMiB8fCBidWZmZXJbMF0gIT0gJ1UnIHx8IGJ1ZmZlclsx
XSAhPSAnKycpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCisKKyAgICBidWZm
ZXIgKz0gMjsKKwogICAgIC8vIFBhcnNlIHRoZSBzdGFydGluZyBoZXggbnVtYmVyIChvciBpdHMg
cHJlZml4KS4KICAgICB1bnNpZ25lZCBzdGFydFJhbmdlID0gMDsKICAgICB1bnNpZ25lZCBzdGFy
dExlbmd0aCA9IDA7CiAKLSAgICBjb25zdCBVQ2hhciogcHRyID0gY2hhcmFjdGVycyArIDI7Ci0g
ICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHB0
ciA8IGVuZCkgewotICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqcHRyKSkKKyAgICB3aGls
ZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICBpZiAoIWlzQVND
SUlIZXhEaWdpdCgqYnVmZmVyKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3N0YXJ0
TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgc3RhcnRSYW5nZSA9IChzdGFydFJhbmdlIDw8IDQpIHwg
dG9BU0NJSUhleFZhbHVlKCpwdHIpOwotICAgICAgICArK3B0cjsKKyAgICAgICAgc3RhcnRSYW5n
ZSA9IChzdGFydFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpidWZmZXIpOworICAgICAg
ICArK2J1ZmZlcjsKICAgICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgcmFuZ2VzIHNl
cGFyYXRlZCBieSAiLSIgc2lnbi4KLSAgICBpZiAoMiArIHN0YXJ0TGVuZ3RoIDwgbGVuZ3RoICYm
ICpwdHIgPT0gJy0nKSB7CisgICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAmJiAqYnVm
ZmVyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcg
aGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVkIGVuZFJhbmdlID0g
MDsKICAgICAgICAgdW5zaWduZWQgZW5kTGVuZ3RoID0gMDsKLSAgICAgICAgKytwdHI7Ci0gICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0
KCpwdHIpKQorICAgICAgICArK2J1ZmZlcjsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFy
YWN0ZXJzUmVtYWluaW5nKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpi
dWZmZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgKytlbmRMZW5ndGg7
CiAgICAgICAgICAgICBpZiAoZW5kTGVuZ3RoID4gNikKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0
b0FTQ0lJSGV4VmFsdWUoKnB0cik7Ci0gICAgICAgICAgICArK3B0cjsKKyAgICAgICAgICAgIGVu
ZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKCpidWZmZXIpOworICAg
ICAgICAgICAgKytidWZmZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghZW5k
TGVuZ3RoKQpAQCAtMzQ1LDE1ICszNDEsMTUgQEAgc3RhdGljIE9wdGlvbmFsPFVuaWNvZGVSYW5n
ZT4gcGFyc2VVbmljbwogICAgIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiBhIG51bWJlciB3
aXRoIHNvbWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVlc3Rpb24gbWFya3MuCiAgICAgdW5zaWduZWQg
ZW5kUmFuZ2UgPSBzdGFydFJhbmdlOwotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAg
aWYgKCpwdHIgIT0gJz8nKQorICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpKSB7CisgICAgICAgIGlmICgqYnVmZmVyICE9ICc/JykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICArK3N0YXJ0TGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRMZW5ndGggPiA2KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgc3RhcnRSYW5nZSA8PD0gNDsK
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCAweEY7Ci0gICAgICAgICsrcHRy
OworICAgICAgICArK2J1ZmZlcjsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzdGFydExlbmd0aCkK
QEAgLTM2OSw1MyArMzY1LDU1IEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmljb2RlUmFuZ2VzLCBI
YXNoU2UKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2lu
Zy4KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3Rl
cnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKLQotICAg
IFVuaWNvZGVSYW5nZXMgcmFuZ2VMaXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0
OwotCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRT
dGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKLSAg
ICAgICAgICAgICsrcHRyOworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcoc3Ry
aW5nLCBbXShhdXRvIGJ1ZmZlcikgLT4gc3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8
U3RyaW5nPj4geworICAgICAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7CiAKLSAgICAgICAgaWYgKHB0ciA9PSBpbnB1dFN0YXJ0
KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBh
dXRvIGlucHV0U3RhcnQgPSBidWZmZXIucG9zaXRpb24oKTsKIAotICAgICAgICAvLyBUcnkgdG8g
cGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBpZiAoYXV0byByYW5nZSA9IHBhcnNl
VW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQotICAgICAgICAgICAg
cmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkp
OwotICAgICAgICArK3B0cjsKLSAgICB9CisgICAgICAgICAgICBza2lwVW50aWwoYnVmZmVyLCAn
LCcpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgPT0gaW5wdXRTdGFydCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVu
aWNvZGUgcmFuZ2UgZmlyc3QKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmlj
b2RlUmFuZ2UoU3RyaW5nUGFyc2luZ0J1ZmZlciB7IGlucHV0U3RhcnQsIGJ1ZmZlci5wb3NpdGlv
bigpIH0pKQorICAgICAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2Up
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJp
bmcoaW5wdXRTdGFydCwgYnVmZmVyLnBvc2l0aW9uKCkgLSBpbnB1dFN0YXJ0KSk7CisKKyAgICAg
ICAgICAgIGlmIChidWZmZXIuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgKytidWZmZXI7CisgICAgICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihyYW5nZUxpc3QsIHN0cmluZ0xpc3QpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
V1RGTW92ZShyYW5nZUxpc3QpLCBXVEZNb3ZlKHN0cmluZ0xpc3QpKTsKKyAgICB9KTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFBv
aW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQo
U3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIo
YnVmZmVyKTsKICAgICBpZiAoIXgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGJ1ZmZlcik7CiAgICAgaWYgKCF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwgKnkgfTsKIH0KIAotT3B0aW9uYWw8Rmxv
YXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENo
YXIqIGVuZCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQo
YnVmZmVyKTsKIH0KIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0
IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+
IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0
dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw5ICsyMSw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUGFyc2luZ1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB0eXBlZGVmIHN0ZDo6cGFpcjxVQ2hh
cjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3RvcjxVbmljb2RlUmFuZ2U+
IFVuaWNvZGVSYW5nZXM7CkBAIC0zOCwyMCArMzgsMjAgQEAgZW51bSBjbGFzcyBTdWZmaXhTa2lw
cGluZ1BvbGljeSB7CiAgICAgU2tpcAogfTsKIAotT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVy
KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQ
b2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7Ci1PcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhT
a2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZs
b2F0PiBwYXJzZU51bWJlcihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYsIFN1ZmZpeFNraXBw
aW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+
IHBhcnNlTnVtYmVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiwgU3VmZml4U2tpcHBpbmdQ
b2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CiBPcHRpb25hbDxmbG9hdD4gcGFy
c2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4
U2tpcHBpbmdQb2xpY3k6OlNraXApOwogCiBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3Jik7CiAKLU9wdGlv
bmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFy
KiBlbmQpOwotT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVu
dCwgY29uc3QgVUNoYXIqIGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoU3RyaW5n
UGFyc2luZ0J1ZmZlcjxMQ2hhcj4mKTsKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYpOwogCiBPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZVBv
aW50KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNv
bnN0IFN0cmluZ1ZpZXcmKTsKIAotT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50
KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7Ci1PcHRpb25hbDxGbG9h
dFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChTdHJpbmdQYXJz
aW5nQnVmZmVyPExDaGFyPiYpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50
KFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+Jik7CiAKIE9wdGlvbmFsPHN0ZDo6cGFpcjxVbmlj
b2RlUmFuZ2VzLCBIYXNoU2V0PFN0cmluZz4+PiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNv
bnN0IFN0cmluZ1ZpZXcmKTsKIE9wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5h
bWUoY29uc3QgU3RyaW5nVmlldyYpOwpAQCAtNjQsMTMgKzY0LDIzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAn
XHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIGlzU1ZHU3BhY2VPckNvbW1hKENoYXJhY3RlclR5
cGUgYykKK3sKKyAgICByZXR1cm4gaXNTVkdTcGFjZShjKSB8fCBjID09ICcsJzsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUq
IGVuZCkKIHsKLSAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCi0gICAg
ICAgIHB0cisrOworICAgIHNraXBXaGlsZTxDaGFyYWN0ZXJUeXBlLCBpc1NWR1NwYWNlPihwdHIs
IGVuZCk7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3RlcnMpCit7CisgICAgc2tpcFdoaWxl
PENoYXJhY3RlclR5cGUsIGlzU1ZHU3BhY2U+KGNoYXJhY3RlcnMpOworICAgIHJldHVybiBjaGFy
YWN0ZXJzLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1Nw
YWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVyKQpAQCAtODQsMjggKzk0LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXgKICAgICByZXR1cm4gcHRyIDwgZW5k
OwogfQogCi1jb25zdGV4cHIgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKK3RlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGNvbnN0ZXhwciBib29sIHNraXBPcHRpb25hbFNWR1NwYWNl
c09yRGVsaW1pdGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGNoYXJhY3Rl
cnMsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgp
CisgICAgaWYgKGNoYXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICFpc1NWR1Nw
YWNlKCpjaGFyYWN0ZXJzKSAmJiAqY2hhcmFjdGVycyAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobWVtY21wKG5hbWUsIHB0ciwgc2l6ZW9mKFVDaGFyKSAqIGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwdHIgKz0gbGVuZ3RoOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLWlubGlu
ZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNv
bnN0IGNoYXIgKCZzdHIpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gY2hh
cmFjdGVyQ291bnQgLSAxOwotICAgIGlmIChlbmQgLSBwdHIgPCBsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmIChwdHJbaV0gIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChza2lwT3B0aW9uYWxTVkdTcGFjZXMoY2hhcmFjdGVycykpIHsKKyAgICAgICAgaWYgKGNo
YXJhY3RlcnMuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpICYmICpjaGFyYWN0ZXJzID09IGRlbGlt
aXRlcikgeworICAgICAgICAgICAgY2hhcmFjdGVycysrOworICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGNoYXJhY3RlcnMpOworICAgICAgICB9CiAgICAgfQotICAgIHB0ciArPSBs
ZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMuaGFzQ2hhcmFj
dGVyc1JlbWFpbmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSwxMSBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJT
VkdQYXRoU2VnLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsK
IAogY2xhc3MgU1ZHUGF0aFNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHUGF0
aFNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiwzMyArMzEsMzAgQEAg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZQogewogICAgIEFTU0VSVCgh
c3RyaW5nLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpIHsKLSAgICAgICAg
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBt
X2VuZC5tX2NoYXJhY3RlcjggPSBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4ICsgc3RyaW5nLmxlbmd0
aCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudC5tX2NoYXJhY3RlcjE2ID0gc3Ry
aW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICBtX2VuZC5tX2NoYXJhY3RlcjE2ID0gbV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgfQorICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKKyAgICAgICAgbV9idWZmZXI4ID0geyBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpIH07CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlcjE2ID0geyBzdHJp
bmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSB9OwogfQogCiBib29sIFNWR1BhdGhT
dHJpbmdTb3VyY2U6Omhhc01vcmVEYXRhKCkgY29uc3QKIHsKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBtX2N1cnJlbnQubV9jaGFyYWN0ZXI4IDwgbV9lbmQubV9jaGFy
YWN0ZXI4OwotICAgIHJldHVybiBtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiA8IG1fZW5kLm1fY2hh
cmFjdGVyMTY7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjguaGFzQ2hhcmFjdGVyc1JlbWFpbmlu
ZygpOworICAgIHJldHVybiBtX2J1ZmZlcjE2Lmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKTsKIH0K
IAogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4oKQogewogICAgIGlm
IChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyht
X2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOworICAgICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fYnVmZmVy
OCk7CisgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2J1ZmZlcjE2KTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRo
U2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQs
IFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IG5leHRDb21tYW5kSGVs
cGVyKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgU1ZHUGF0aFNl
Z1R5cGUgcHJldmlvdXNDb21tYW5kKQogewogICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcgY29v
cmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KLSAgICBpZiAoKCpjdXJyZW50ID09ICcr
JyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgq
Y3VycmVudCkpCisgICAgaWYgKCgqYnVmZmVyID09ICcrJyB8fCAqYnVmZmVyID09ICctJyB8fCAq
YnVmZmVyID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmJ1ZmZlcikpCiAgICAgICAgICYmIHByZXZp
b3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7CiAgICAgICAgIGlmIChwcmV2aW91c0Nv
bW1hbmQgPT0gUGF0aFNlZ01vdmVUb0FicykKICAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGlu
ZVRvQWJzOwpAQCAtNzMsMTUwICs2OSwxMzggQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYwogU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENv
bW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQogewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkgewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgIGlm
IChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9idWZmZXI4LCBwcmV2aW91
c0NvbW1hbmQpKQogICAgICAgICAgICAgcmV0dXJuICpuZXh0Q29tbWFuZDsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQpKQorICAgICAgICBpZiAoYXV0byBu
ZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fYnVmZmVyMTYsIHByZXZpb3VzQ29tbWFu
ZCkpCiAgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOwogICAgIH0KIAogICAgIHJldHVy
biAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGPiBkZWNs
dHlwZShhdXRvKSBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZShGJiYgZnVuY3RvcikKIHsKLSAg
ICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewotICAgIGNhc2UgJ1onOgotICAgIGNhc2UgJ3onOgot
ICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKLSAgICBjYXNlICdNJzoKLSAgICAgICAg
cmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7Ci0gICAgY2FzZSAnbSc6Ci0gICAgICAgIHJldHVybiBQ
YXRoU2VnTW92ZVRvUmVsOwotICAgIGNhc2UgJ0wnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0xp
bmVUb0FiczsKLSAgICBjYXNlICdsJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7
Ci0gICAgY2FzZSAnQyc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOwot
ICAgIGNhc2UgJ2MnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKLSAg
ICBjYXNlICdRJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzOwot
ICAgIGNhc2UgJ3EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7
Ci0gICAgY2FzZSAnQSc6Ci0gICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOwotICAgIGNhc2Ug
J2EnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKLSAgICBjYXNlICdIJzoKLSAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgIGNhc2UgJ2gnOgotICAg
ICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWw7Ci0gICAgY2FzZSAnVic6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgY2FzZSAndic6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7Ci0gICAgY2FzZSAnUyc6Ci0g
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAgIGNhc2UgJ3Mn
OgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICBjYXNl
ICdUJzoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOwot
ICAgIGNhc2UgJ3QnOgotICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9v
dGhSZWw7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFBhdGhTZWdVbmtub3duOwotICAg
IH0KKyAgICBpZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIHJldHVybiBmdW5jdG9yKG1fYnVm
ZmVyOCk7CisgICAgcmV0dXJuIGZ1bmN0b3IobV9idWZmZXIxNik7CiB9CiAKIE9wdGlvbmFsPFNW
R1BhdGhTZWdUeXBlPiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkK
IHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBwYXJzZVNW
R1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKKyAgICByZXR1cm4g
cGFyc2UoW10oYXV0byYgYnVmZmVyKSAtPiBTVkdQYXRoU2VnVHlwZSB7CisgICAgICAgIGF1dG8g
Y2hhcmFjdGVyID0gKmJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyKys7CisgICAgICAgIHN3aXRjaCAo
Y2hhcmFjdGVyKSB7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBjYXNlICd6JzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ2xvc2VQYXRoOworICAgICAgICBjYXNlICdNJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOworICAgICAgICBjYXNlICdtJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOworICAgICAgICBjYXNlICdMJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBjYXNlICdsJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICBjYXNlICdDJzoKKyAgICAg
ICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOworICAgICAgICBjYXNlICdjJzoK
KyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOworICAgICAgICBjYXNl
ICdRJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKKyAg
ICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNSZWw7CisgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNB
YnM7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNSZWw7
CisgICAgICAgIGNhc2UgJ0gnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jp
em9udGFsQWJzOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKKyAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICByZXR1
cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CisgICAgICAgIGNhc2UgJ1MnOgor
ICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CisgICAgICAg
IGNhc2UgJ3MnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhS
ZWw7CisgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoQWJzOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKKyAgICAgICAgfQorICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVu
dD4gewotICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZlcikgLT4gT3B0aW9uYWw8TW92
ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50
KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owog
ICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOwogICAg
ICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0
UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2Uo
W10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0
YXJnZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAog
ICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAg
IH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9
KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewot
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHsKLSAgICAgICAgYXV0byB4
ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2UoW10oYXV0byYg
YnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4geworICAgICAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgc2VnbWVudDsKICAgICAgICAgc2VnbWVudC54ID0gKng7CiAgICAgICAgIHJldHVy
biBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
LSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVy
dGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCgpCiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKLSAgICAg
ICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICByZXR1cm4gcGFyc2Uo
W10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYnVmZmVyKTsKICAgICAgICAgaWYgKCF5KQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIExpbmVUb1Zl
cnRpY2FsU2VnbWVudCBzZWdtZW50OwogICAgICAgICBzZWdtZW50LnkgPSAqeTsKICAgICAgICAg
cmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rl
cjgpOwotICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYpOworICAgIH0pOwogfQogCiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2
ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoKQogewotICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNv
bnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gewotICAgICAg
ICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVy
biBwYXJzZShbXShhdXRvJiBidWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+
IHsKKyAgICAgICAgYXV0byBwb2ludDEgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAg
ICAgaWYgKCFwb2ludDEpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAg
IGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghcG9p
bnQyKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTIyNSwyMSAr
MjA5LDE3IEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ20KICAgICAg
ICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAgIGF1dG8gcG9pbnQy
ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1
dG8mIGJ1ZmZlcikgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4geworICAg
ICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAo
IXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBh
dXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICgh
dGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNDcs
MjEgKzIyNywxNyBAQCBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vCiAg
ICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKICAgICAgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9ICp0YXJnZXRQb2ludDsKICAgICAgICAgcmV0dXJuIHNlZ21lbnQ7Ci0gICAgfTsKLQot
ICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwotICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOworICAgIH0pOwogfQog
CiBPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gewotICAgICAgICBhdXRvIHBvaW50MSA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgIHJldHVybiBwYXJzZShbXShhdXRv
JiBidWZmZXIpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghcG9p
bnQxKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8g
dGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoYnVmZmVyKTsKICAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAgLTI2OSw0OSAr
MjQ1LDQxIEBAIE9wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWMKICAgICAg
ICAgc2VnbWVudC5wb2ludDEgPSAqcG9pbnQxOwogICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OwogICAgICAgICByZXR1cm4gc2VnbWVudDsKLSAgICB9OwotCi0gICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Ci0gICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CisgICAgfSk7CiB9CiAKIE9w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsK
LSAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Ci0gICAgICAg
IGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICBy
ZXR1cm4gcGFyc2UoW10oYXV0byYgYnVmZmVyKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBv
aW50KGJ1ZmZlcik7CiAgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
IHNlZ21lbnQ7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CiAg
ICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRTb3VyY2Up
Ci0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9j
aGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgp
CiB7Ci0gICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0
byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHsKLSAgICAgICAgYXV0byByeCA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgcmV0dXJuIHBhcnNlKFtdKGF1dG8mIGJ1ZmZl
cikgLT4gT3B0aW9uYWw8QXJjVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51
bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXJ4KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihidWZmZXIpOwogICAgICAgICBpZiAoIXJ5KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBhbmdsZSA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1dG8gYW5nbGUgPSBwYXJzZU51bWJl
cihidWZmZXIpOwogICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgYXV0byBsYXJnZUFyYyA9IHBhcnNlQXJjRmxhZyhjdXJyZW50LCBl
bmQpOworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGJ1ZmZlcik7CiAgICAg
ICAgIGlmICghbGFyZ2VBcmMpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGF1
dG8gc3dlZXAgPSBwYXJzZUFyY0ZsYWcoYnVmZmVyKTsKICAgICAgICAgaWYgKCFzd2VlcCkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgYXV0byB0YXJnZXRQb2lu
dCA9IHBhcnNlRmxvYXRQb2ludChidWZmZXIpOwogICAgICAgICBpZiAoIXRhcmdldFBvaW50KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzIzLDExICsyOTEsNyBAQCBP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWCiAgICAgICAgIHNlZ21lbnQu
c3dlZXAgPSAqc3dlZXA7CiAgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9p
bnQ7CiAgICAgICAgIHJldHVybiBzZWdtZW50OwotICAgIH07Ci0KLSAgICBpZiAobV9pczhCaXRT
b3VyY2UpCi0gICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9l
bmQubV9jaGFyYWN0ZXI4KTsKLSAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJl
dmlzaW9uIDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsMTcgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKICAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gZGVjbHR5cGUoYXV0
bykgcGFyc2UoRnVuY3Rpb24mJik7CisKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBt
X2lzOEJpdFNvdXJjZTsKIAogICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fY2hh
cmFjdGVyODsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyMTY7Ci0gICAgfSBtX2N1
cnJlbnQ7Ci0gICAgdW5pb24gewotICAgICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXI4Owot
ICAgICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXIxNjsKLSAgICB9IG1fZW5kOworICAgICAg
ICBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiBtX2J1ZmZlcjg7CisgICAgICAgIFN0cmluZ1Bh
cnNpbmdCdWZmZXI8VUNoYXI+IG1fYnVmZmVyMTY7CisgICAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1ZmZlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU1ZHUG9pbnRMaXN0OjpwYXJzZShTdHJpbmdWaWV3IHZh
bHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0Zv
clBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7Cisg
ICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAg
ICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBhdXRvIHhQb3MgPSBwYXJz
ZU51bWJlcihidWZmZXIpOworICAgICAgICAgICAgaWYgKCF4UG9zKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoYnVm
ZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCF5
UG9zKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmIChza2lwRXhhY3RseShi
dWZmZXIsICcsJykpCisgICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOworCisgICAg
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKKworICAgICAgICAgICAgYXBw
ZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNsZWFySXRlbXMoKSBvbiBmYWlsdXJlIGxpa2Ug
U1ZHVHJhbnNmb3JtTGlzdCBkb2VzPworCisgICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Cisg
ICAgfSk7Cit9CisKK1N0cmluZyBTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZvciAoY29uc3QgYXV0byYgcG9p
bnQgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVuZChwb2ludC0+
eCgpLCAnICcsIHBvaW50LT55KCkpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9u
IDI2MzU4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNW
R1BvaW50TGlzdCA6IHB1YmxpYyBTVkdWYWx1ZVByb3BlcnR5TGlzdDxTVkdQb2ludD4geworY2xh
c3MgU1ZHUG9pbnRMaXN0IGZpbmFsIDogcHVibGljIFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR1Bv
aW50PiB7CiAgICAgdXNpbmcgQmFzZSA9IFNWR1ZhbHVlUHJvcGVydHlMaXN0PFNWR1BvaW50PjsK
ICAgICB1c2luZyBCYXNlOjpCYXNlOwogCkBAIC01MCw1NSArNTAsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1BvaW50TGlzdChvdGhlciwgYWNjZXNzKSk7CiAg
ICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0g
U3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBjdXIgKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXMoY3VyLCBlbmQpOwotCi0gICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewotICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLQotICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOwotICAg
ICAgICAgICAgaWYgKCF4UG9zKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5n
UG9saWN5OjpEb250U2tpcCk7Ci0gICAgICAgICAgICBpZiAoIXlQb3MpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwotCi0gICAgICAgICAgICBpZiAoY3VyIDwgZW5kICYmICpjdXIgPT0gJywnKSB7Ci0g
ICAgICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGN1cisr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwg
ZW5kKTsKLQotICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQ
b3MgfSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBw
b2ludCA6IG1faXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHBvaW50LT54KCksICcgJywgcG9pbnQtPnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICBib29sIHBhcnNlKFN0cmlu
Z1ZpZXcpOworICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw3ICszNyw3IEBA
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmUKIHsKIH0KIAotU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcgdmFsdWUpCiB7CiAgICAgcGFyc2UodmFsdWUpOwog
fQpAQCAtNTksMTkgKzYwLDI5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8KICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdWaWV3IHZhbHVlKQogewotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGJlZ2luID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHBh
cnNlSW50ZXJuYWwoYmVnaW4sIGJlZ2luICsgdmFsdWUubGVuZ3RoKCksIHRydWUpOworICAgIHJl
dHVybiByZWFkQ2hhcmFjdGVyc0ZvclBhcnNpbmcodmFsdWUsIFsmXShhdXRvIGJ1ZmZlcikgewor
ICAgICAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChidWZmZXIsIHRydWUpOworICAgIH0pOwogfQog
Ci1ib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoY29uc3QgVUNoYXIqJiBj
dXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCitib29sIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2UoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1
ZmZlciwgYm9vbCB2YWxpZGF0ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VJbnRlcm5hbChjdXJyUGFy
YW0sIGVuZCwgdmFsaWRhdGUpOworICAgIHJldHVybiBwYXJzZUludGVybmFsKGJ1ZmZlciwgdmFs
aWRhdGUpOwogfQogCi1ib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJbnRl
cm5hbChjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxp
ZGF0ZSkKK2Jvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpwYXJzZShTdHJpbmdQYXJz
aW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyLCBib29sIHZhbGlkYXRlKQoreworICAgIHJldHVybiBw
YXJzZUludGVybmFsKGJ1ZmZlciwgdmFsaWRhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgZGVmZXJEZXNjW10g
PSAgeydkJywgJ2UnLCAnZicsICdlJywgJ3InfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHN0YXRpYyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBub25lRGVzY1tdID0gIHsnbics
ICdvJywgJ24nLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1lZXREZXNjW10gPSAgeydtJywgJ2UnLCAnZScsICd0
J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENo
YXJhY3RlclR5cGUgc2xpY2VEZXNjW10gPSAgeydzJywgJ2wnLCAnaScsICdjJywgJ2UnfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OnBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgYnVmZmVyLCBib29sIHZhbGlkYXRlKQogewogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9U
eXBlIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQ7CiAgICAgU1ZHTWVl
dE9yU2xpY2VUeXBlIG1lZXRPclNsaWNlID0gU1ZHX01FRVRPUlNMSUNFX01FRVQ7CkBAIC03OSwx
MDAgKzkwLDEwMCBAQCBib29sIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6cGFyc2VJCiAg
ICAgbV9hbGlnbiA9IGFsaWduOwogICAgIG1fbWVldE9yU2xpY2UgPSBtZWV0T3JTbGljZTsKIAot
ICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKSkKKyAgICBpZiAo
IXNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoKmN1cnJQYXJhbSA9PSAnZCcpIHsKLSAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1
cnJQYXJhbSwgZW5kLCAiZGVmZXIiKSkgeworICAgIGlmICgqYnVmZmVyID09ICdkJykgeworICAg
ICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIGRlZmVyRGVzYzxDaGFyYWN0
ZXJUeXBlPikpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiU2tpcHBlZCB0byBwYXJzZSBleGNl
cHQgZm9yICpkZWZlciogdmFsdWUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogV2UganVzdCBpZ25vcmUgdGhlICJkZWZlciIgaGVy
ZS4KLSAgICAgICAgaWYgKGN1cnJQYXJhbSA9PSBlbmQpCisgICAgICAgIGlmIChidWZmZXIuYXRF
bmQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmICghc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxT
VkdTcGFjZXMoYnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBpZiAoKmN1cnJQYXJhbSA9PSAnbicpIHsKLSAgICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJQ
YXJhbSwgZW5kLCAibm9uZSIpKSB7CisgICAgaWYgKCpidWZmZXIgPT0gJ24nKSB7CisgICAgICAg
IGlmICghc2tpcENoYXJhY3RlcnNFeGFjdGx5KGJ1ZmZlciwgbm9uZURlc2M8Q2hhcmFjdGVyVHlw
ZT4pKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZv
ciAqbm9uZSogdmFsdWUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FOwotICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwotICAgIH0gZWxzZSBpZiAoKmN1
cnJQYXJhbSA9PSAneCcpIHsKLSAgICAgICAgaWYgKChlbmQgLSBjdXJyUGFyYW0pIDwgOCkKKyAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisgICAgfSBlbHNlIGlmICgqYnVm
ZmVyID09ICd4JykgeworICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aFJlbWFpbmluZygpIDwgOCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJQYXJhbVsxXSAhPSAn
TScgfHwgY3VyclBhcmFtWzRdICE9ICdZJyB8fCBjdXJyUGFyYW1bNV0gIT0gJ00nKQorICAgICAg
ICBpZiAoYnVmZmVyWzFdICE9ICdNJyB8fCBidWZmZXJbNF0gIT0gJ1knIHx8IGJ1ZmZlcls1XSAh
PSAnTScpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyUGFyYW1b
Ml0gPT0gJ2knKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFtWzNdID09ICduJykgewotICAg
ICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2knKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAgICBpZiAoYnVmZmVyWzJdID09ICdp
JykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlclszXSA9PSAnbicpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYnVmZmVyWzZdID09ICdpJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
WzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JTllNSU47Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJQ
YXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1ZmZlcls3XSA9
PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IFNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSU5ZTUlEOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJy
UGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9PSAneCcpCisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChidWZmZXJbNl0gPT0gJ2EnICYmIGJ1ZmZlcls3XSA9PSAneCcpCiAgICAgICAg
ICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVg7CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bM10gPT0gJ2QnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN1cnJQYXJhbVs2XSA9PSAnaScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJQYXJhbVs3XSA9PSAnbicpCisgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclszXSA9
PSAnZCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyWzZdID09ICdpJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoYnVmZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU47Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGN1cnJQYXJhbVs3XSA9PSAnZCcpCisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGJ1ZmZlcls3XSA9PSAnZCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBh
bGlnbiA9IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChjdXJyUGFyYW1bNl0gPT0gJ2EnICYmIGN1cnJQYXJhbVs3XSA9
PSAneCcpCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXJbNl0gPT0gJ2EnICYmIGJ1
ZmZlcls3XSA9PSAneCcpCiAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JRFlNQVg7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VyclBhcmFtWzJdID09ICdhJyAm
JiBjdXJyUGFyYW1bM10gPT0gJ3gnKSB7Ci0gICAgICAgICAgICBpZiAoY3VyclBhcmFtWzZdID09
ICdpJykgewotICAgICAgICAgICAgICAgIGlmIChjdXJyUGFyYW1bN10gPT0gJ24nKQorICAgICAg
ICB9IGVsc2UgaWYgKGJ1ZmZlclsyXSA9PSAnYScgJiYgYnVmZmVyWzNdID09ICd4JykgeworICAg
ICAgICAgICAgaWYgKGJ1ZmZlcls2XSA9PSAnaScpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVm
ZmVyWzddID09ICduJykKICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUFYWU1JTjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyUGFyYW1b
N10gPT0gJ2QnKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1ZmZlcls3XSA9PSAnZCcpCiAg
ICAgICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlN
SUQ7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJQYXJhbVs2XSA9PSAnYScgJiYgY3VyclBh
cmFtWzddID09ICd4JykKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyWzZdID09ICdhJyAm
JiBidWZmZXJbN10gPT0gJ3gnKQogICAgICAgICAgICAgICAgIGFsaWduID0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1BWFlNQVg7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY3VyclBhcmFtICs9IDg7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhj
dXJyUGFyYW0sIGVuZCk7CisgICAgICAgIGJ1ZmZlciArPSA4OworICAgICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMoYnVmZmVyKTsKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGN1cnJQYXJhbSA8IGVuZCkgewotICAgICAgICBpZiAoKmN1cnJQYXJhbSA9PSAn
bScpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJyUGFyYW0sIGVuZCwgIm1lZXQi
KSkgeworICAgIGlmIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygpKSB7CisgICAgICAg
IGlmICgqYnVmZmVyID09ICdtJykgeworICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4
YWN0bHkoYnVmZmVyLCBtZWV0RGVzYzxDaGFyYWN0ZXJUeXBlPikpIHsKICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlNraXBwZWQgdG8gcGFyc2UgZXhjZXB0IGZvciAqbWVldCogb3IgKnNsaWNl
KiB2YWx1ZS4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyclBhcmFtLCBlbmQpOwotICAg
ICAgICB9IGVsc2UgaWYgKCpjdXJyUGFyYW0gPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpZiAoIXNr
aXBTdHJpbmcoY3VyclBhcmFtLCBlbmQsICJzbGljZSIpKSB7CisgICAgICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmICgqYnVmZmVyID09ICdz
JykgeworICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBzbGlj
ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTa2lw
cGVkIHRvIHBhcnNlIGV4Y2VwdCBmb3IgKm1lZXQqIG9yICpzbGljZSogdmFsdWUuIik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1cnJQYXJhbSwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhidWZmZXIpOwogICAgICAgICAgICAgaWYgKGFsaWduICE9IFNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX05PTkUpCiAgICAgICAgICAgICAgICAgbWVldE9yU2xpY2UgPSBTVkdf
TUVFVE9SU0xJQ0VfU0xJQ0U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZW5kICE9IGN1
cnJQYXJhbSAmJiB2YWxpZGF0ZSkKKyAgICBpZiAoIWJ1ZmZlci5hdEVuZCgpICYmIHZhbGlkYXRl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2FsaWduID0gYWxpZ247CkBAIC0zMjgs
NTIgKzMzOSw0NCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhCiAK
IFN0cmluZyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnZhbHVlQXNTdHJpbmcoKSBjb25z
dAogewotICAgIFN0cmluZyBhbGlnblR5cGU7CisgICAgYXV0byBhbGlnblR5cGUgPSBbJl0oKSB7
CisgICAgICAgIHN3aXRjaCAobV9hbGlnbikgeworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX05PTkU6CisgICAgICAgICAgICByZXR1cm4gIm5vbmUiX3M7CisgICAgICAgIGNh
c2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU46CisgICAgICAgICAgICByZXR1cm4g
InhNaW5ZTWluIl9zOworICAgICAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUlOOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pbiJfczsKKyAgICAgICAgY2FzZSBTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTjoKKyAgICAgICAgICAgIHJldHVybiAieE1heFlN
aW4iX3M7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQ6Cisg
ICAgICAgICAgICByZXR1cm4gInhNaW5ZTWlkIl9zOworICAgICAgICBjYXNlIFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNSURZTUlEOgorICAgICAgICAgICAgcmV0dXJuICJ4TWlkWU1pZCJfczsK
KyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRDoKKyAgICAgICAg
ICAgIHJldHVybiAieE1heFlNaWQiX3M7CisgICAgICAgIGNhc2UgU1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JTllNQVg6CisgICAgICAgICAgICByZXR1cm4gInhNaW5ZTWF4Il9zOworICAgICAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgorICAgICAgICAgICAgcmV0
dXJuICJ4TWlkWU1heCJfczsKKyAgICAgICAgY2FzZSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19Y
TUFYWU1BWDoKKyAgICAgICAgICAgIHJldHVybiAieE1heFlNYXgiX3M7CisgICAgICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTjoKKyAgICAgICAgICAgIHJldHVybiAidW5r
bm93biJfczsKKyAgICAgICAgfTsKIAotICAgIHN3aXRjaCAobV9hbGlnbikgewotICAgIGNhc2Ug
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORToKLSAgICAgICAgYWxpZ25UeXBlID0gIm5vbmUi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5Z
TUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaW4iOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOOgotICAgICAgICBhbGlnblR5
cGUgPSAieE1pZFlNaW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNQVhZTUlOOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaW4iOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlEOgot
ICAgICAgICBhbGlnblR5cGUgPSAieE1pbllNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAi
eE1pZFlNaWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNQVhZTUlEOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNaWQiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUFYOgotICAgICAg
ICBhbGlnblR5cGUgPSAieE1pbllNYXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1pZFlN
YXgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
QVhZTUFYOgotICAgICAgICBhbGlnblR5cGUgPSAieE1heFlNYXgiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1VOS05PV046Ci0gICAgICAgIGFsaWdu
VHlwZSA9ICJ1bmtub3duIjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gInVua25vd24iX3M7CiAgICAgfTsKIAogICAgIHN3aXRj
aCAobV9tZWV0T3JTbGljZSkgewogICAgIGRlZmF1bHQ6CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJ
Q0VfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIGFsaWduVHlwZTsKKyAgICAgICAgcmV0dXJuIGFs
aWduVHlwZSgpOwogICAgIGNhc2UgU1ZHX01FRVRPUlNMSUNFX01FRVQ6Ci0gICAgICAgIHJldHVy
biBhbGlnblR5cGUgKyAiIG1lZXQiOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhhbGlnblR5
cGUoKSwgIiBtZWV0Iik7CiAgICAgY2FzZSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0U6Ci0gICAgICAg
IHJldHVybiBhbGlnblR5cGUgKyAiIHNsaWNlIjsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
YWxpZ25UeXBlKCksICIgc2xpY2UiKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgJKHJldmlzaW9uIDI2MzU4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpOwotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3Ry
aW5nVmlldyk7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRBbGlnbih1bnNpZ25lZCBzaG9y
dCk7CiAgICAgdW5zaWduZWQgc2hvcnQgYWxpZ24oKSBjb25zdCB7IHJldHVybiBtX2FsaWduOyB9
CkBAIC02NCw4ICs2NCw5IEBAIHB1YmxpYzoKIAogICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
ZmxvYXQgbG9naWNhbFgsIGZsb2F0IGxvZ2ljYWxZLCBmbG9hdCBsb2dpY2FsV2lkdGgsIGZsb2F0
IGxvZ2ljYWxIZWlnaHQsIGZsb2F0IHBoeXNpY2FsV2lkdGgsIGZsb2F0IHBoeXNpY2FsSGVpZ2h0
KSBjb25zdDsKIAotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBwYXJz
ZShjb25zdCBVQ2hhciomIGN1cnJQYXJhbSwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0
ZSk7CisgICAgYm9vbCBwYXJzZShTdHJpbmdWaWV3KTsKKyAgICBib29sIHBhcnNlKFN0cmluZ1Bh
cnNpbmdCdWZmZXI8TENoYXI+JiwgYm9vbCB2YWxpZGF0ZSk7CisgICAgYm9vbCBwYXJzZShTdHJp
bmdQYXJzaW5nQnVmZmVyPFVDaGFyPiYsIGJvb2wgdmFsaWRhdGUpOwogCiAgICAgU3RyaW5nIHZh
bHVlQXNTdHJpbmcoKSBjb25zdDsKIApAQCAtNzMsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgU1ZHTWVldE9yU2xpY2VUeXBl
IG1fbWVldE9yU2xpY2U7CiAKLSAgICBib29sIHBhcnNlSW50ZXJuYWwoY29uc3QgVUNoYXIqJiBj
dXJyUGFyYW0sIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VJbnRlcm5hbChTdHJpbmdQYXJzaW5n
QnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9vbCB2YWxpZGF0ZSk7CiB9OwogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U1ZHU3RyaW5nTGlzdC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNWR1N0cmluZ0xpc3Q6OnBhcnNlKFN0cmluZ1ZpZXcgZGF0YSwgVUNo
YXIgZGVsaW1pdGVyKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAgIGF1dG8gaXNTVkdTcGFj
ZU9yRGVsaW1pdGVyID0gW2RlbGltaXRlcl0oYXV0byBjKSB7CisgICAgICAgIHJldHVybiBpc1NW
R1NwYWNlKGMpIHx8IGMgPT0gZGVsaW1pdGVyOworICAgIH07CisKKyAgICByZXR1cm4gcmVhZENo
YXJhY3RlcnNGb3JQYXJzaW5nKGRhdGEsIFsmXShhdXRvIGJ1ZmZlcikgeworICAgICAgICB3aGls
ZSAoYnVmZmVyLmhhc0NoYXJhY3RlcnNSZW1haW5pbmcoKSkgeworICAgICAgICAgICAgYXV0byBz
dGFydCA9IGJ1ZmZlci5wb3NpdGlvbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgYSBuaWNlIGltcHJvdmVtZW50IHRvIGFkZCBhIHZhcmlhbnQgb2Yg
c2tpcFVudGlsIHdoaWNoIHdvcmtlZAorICAgICAgICAgICAgLy8gd2l0aCBsYW1iZGEgcHJlZGlj
YXRlcy4KKyAgICAgICAgICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFpbmluZygp
ICYmICFpc1NWR1NwYWNlT3JEZWxpbWl0ZXIoKmJ1ZmZlcikpCisgICAgICAgICAgICAgICAgKyti
dWZmZXI7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIucG9zaXRpb24oKSA9PSBzdGFydCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5n
KHN0YXJ0LCBidWZmZXIucG9zaXRpb24oKSAtIHN0YXJ0KSk7CisgICAgICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihidWZmZXIsIGRlbGltaXRlcik7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgY2xlYXJJdGVtcygpIG9uIGZhaWx1cmUg
bGlrZSBTVkdUcmFuc2Zvcm1MaXN0IGRvZXM/CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci5hdEVu
ZCgpOworICAgIH0pOworfQorCitTdHJpbmcgU1ZHU3RyaW5nTGlzdDo6dmFsdWVBc1N0cmluZygp
IGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChjb25zdCBh
dXRvJiBzdHJpbmcgOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgICAgICBidWlsZGVyLmFwcGVu
ZChzdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkocmV2aXNpb24gMjYzNTgyKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0cmluZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsMzkgKzUxLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoZW1wdHlT
dHJpbmcoKSk7CiAgICAgfQogCi0gICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVD
aGFyIGRlbGltaXRlcikKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAgICAgICBh
dXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoZGF0YSkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBkYXRhLmxlbmd0aCgpOwot
ICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogc3Rh
cnQgPSBwdHI7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gZGVsaW1p
dGVyICYmICFpc1NWR1NwYWNlKCpwdHIpKQotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAg
ICAgICAgaWYgKHB0ciA9PSBzdGFydCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZyhzdGFydCwgcHRyIC0gc3RhcnQpKTsKLSAgICAgICAg
ICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBkZWxpbWl0ZXIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7Ci0gICAgfQotCi0gICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDog
bV9pdGVtcykgewotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
c3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci0gICAgfQorICAgIGJvb2wgcGFyc2UoU3RyaW5nVmlldywgVUNoYXIgZGVsaW1pdGVyKTsKKyAg
ICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgorCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeGNlcHRpb25PcjxSZWZQdHI8
U1ZHVHJhbnNmb3JtPj4gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uc29saWRhdGUoKQoreworICAgIGF1
dG8gcmVzdWx0ID0gY2FuQWx0ZXJMaXN0KCk7CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgQVNTRVJU
KHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisKKyAgICAvLyBTcGVjOiBJZiB0aGUgbGlz
dCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1ZSBvZiBudWxsIGlzIHJldHVybmVkLgorICAgIGlmICht
X2l0ZW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobV9p
dGVtcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoYXQoMCkuZ2V0KCkp
OworCisgICAgYXV0byBuZXdJdGVtID0gU1ZHVHJhbnNmb3JtOjpjcmVhdGUoY29uY2F0ZW5hdGUo
KSk7CisgICAgY2xlYXJJdGVtcygpOworCisgICAgYXV0byBpdGVtID0gYXBwZW5kKFdURk1vdmUo
bmV3SXRlbSkpOworICAgIGNvbW1pdENoYW5nZSgpOworICAgIHJldHVybiBtYWtlUmVmUHRyKGl0
ZW0uZ2V0KCkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0
ZW5hdGUoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSByZXN1bHQ7CisgICAgZm9yIChh
dXRvJiB0cmFuc2Zvcm0gOiBtX2l0ZW1zKQorICAgICAgICByZXN1bHQgKj0gdHJhbnNmb3JtLT5t
YXRyaXgoKS0+dmFsdWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIFNWR1RyYW5zZm9ybUxpc3Q6OnBhcnNlR2VuZXJpYyhT
dHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCit7CisgICAgYm9vbCBk
ZWxpbVBhcnNlZCA9IGZhbHNlOworICAgIHdoaWxlIChidWZmZXIuaGFzQ2hhcmFjdGVyc1JlbWFp
bmluZygpKSB7CisgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7CisgICAgICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhidWZmZXIpOworICAgICAgICAKKyAgICAgICAgYXV0byBwYXJzZWRUcmFu
c2Zvcm1UeXBlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGJ1ZmZlcik7
CisgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSgqcGFyc2VkVHJhbnNmb3JtVHlwZSwgYnVmZmVyKTsK
KyAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBhcHBlbmQoU1ZHVHJhbnNmb3JtOjpjcmVhdGUoKnBhcnNlZFRyYW5z
Zm9ybVZhbHVlKSk7CisKKyAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CisK
KyAgICAgICAgaWYgKHNraXBFeGFjdGx5KGJ1ZmZlciwgJywnKSkKKyAgICAgICAgICAgIGRlbGlt
UGFyc2VkID0gdHJ1ZTsKKworICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoYnVmZmVyKTsK
KyAgICB9CisgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKK30KKwordm9pZCBTVkdUcmFuc2Zvcm1M
aXN0OjpwYXJzZShTdHJpbmdWaWV3IHZhbHVlKQoreworICAgIGNsZWFySXRlbXMoKTsKKworICAg
IGJvb2wgcGFyc2luZ1N1Y2NlZWRlZCA9IHJlYWRDaGFyYWN0ZXJzRm9yUGFyc2luZyh2YWx1ZSwg
WyZdKGF1dG8gYnVmZmVyKSB7CisgICAgICAgIHJldHVybiBwYXJzZUdlbmVyaWMoYnVmZmVyKTsK
KyAgICB9KTsKKyAgICAKKyAgICBpZiAoIXBhcnNpbmdTdWNjZWVkZWQpCisgICAgICAgIGNsZWFy
SXRlbXMoKTsKK30KKworYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShTdHJpbmdQYXJzaW5n
QnVmZmVyPExDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVyaWMoYnVmZmVy
KTsKK30KKworYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpwYXJzZShTdHJpbmdQYXJzaW5nQnVmZmVy
PFVDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZUdlbmVyaWMoYnVmZmVyKTsKK30K
KworU3RyaW5nIFNWR1RyYW5zZm9ybUxpc3Q6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZnJvbSA6
IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRyYW5zZnJvbS0+
dmFsdWUoKS52YWx1ZUFzU3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1M
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsODYgKzU2LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN2Z1RyYW5zZm9ybTsKICAgICB9CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZH
VHJhbnNmb3JtPj4gY29uc29saWRhdGUoKQotICAgIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBj
YW5BbHRlckxpc3QoKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQo
cmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBFeGNlcHRpb25PcjxSZWZQdHI8U1ZH
VHJhbnNmb3JtPj4gY29uc29saWRhdGUoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29uY2F0ZW5h
dGUoKSBjb25zdDsKIAotICAgICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRo
ZW4gYSB2YWx1ZSBvZiBudWxsIGlzIHJldHVybmVkLgotICAgICAgICBpZiAobV9pdGVtcy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpZiAobV9pdGVt
cy5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKGF0KDApLmdldCgp
KTsKLQotICAgICAgICBhdXRvIG5ld0l0ZW0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZShjb25jYXRl
bmF0ZSgpKTsKLSAgICAgICAgY2xlYXJJdGVtcygpOwotCi0gICAgICAgIGF1dG8gaXRlbSA9IGFw
cGVuZChXVEZNb3ZlKG5ld0l0ZW0pKTsKLSAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAg
IHJldHVybiBtYWtlUmVmUHRyKGl0ZW0uZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgcGFyc2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNsZWFySXRlbXMoKTsKLQotICAg
ICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwotICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSB1cGNvbnZl
cnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGlmICghcGFyc2Uoc3RhcnQsIHN0YXJ0ICsgdmFsdWUu
bGVuZ3RoKCkpKQotICAgICAgICAgICAgY2xlYXJJdGVtcygpOwotICAgIH0KLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gcmVzdWx0OwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zZm9ybSA6IG1faXRl
bXMpCi0gICAgICAgICAgICByZXN1bHQgKj0gdHJhbnNmb3JtLT5tYXRyaXgoKS0+dmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdmFsdWVBc1N0cmlu
ZygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNmcm9tIDogbV9pdGVtcykgewotICAgICAg
ICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKLQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodHJhbnNmcm9tLT52YWx1ZSgp
LnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKLSAgICB9CisgICAgdm9pZCBwYXJzZShTdHJpbmdWaWV3KTsKKyAgICBTdHJpbmcg
dmFsdWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFy
c2UoY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCkKLSAgICB7Ci0gICAgICAg
IGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7
Ci0gICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRv
IHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwot
ICAgICAgICAgICAgaWYgKCF0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgaWYg
KCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3Jt
VmFsdWUpKTsKLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQp
OwotICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKLSAgICAg
ICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgKytzdGFydDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0
LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAhZGVsaW1QYXJzZWQ7Ci0gICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VHZW5lcmljKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICBib29sIHBhcnNlKFN0cmlu
Z1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgYm9vbCBwYXJzZShTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMjYzNTgyKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw4NSArMjcsODYgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJh
bUxpc3QoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMs
IGludCByZXF1aXJlZCwgaW50IG9wdGlvbmFsKQorU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5z
Zm9ybWFibGUoKSA9IGRlZmF1bHQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoU3RyaW5nUGFyc2luZ0J1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCBmbG9hdCogdmFsdWVzLCBpbnQgcmVxdWlyZWQsIGludCBv
cHRpb25hbCkKIHsKICAgICBpbnQgb3B0aW9uYWxQYXJhbXMgPSAwLCByZXF1aXJlZFBhcmFtcyA9
IDA7CiAgICAgCi0gICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpIHx8ICpw
dHIgIT0gJygnKQorICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcikgfHwgKmJ1
ZmZlciAhPSAnKCcpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKLSAgICBwdHIrKzsKKyAgICAr
K2J1ZmZlcjsKICAgIAotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CisgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGJ1ZmZlcik7CiAKICAgICB3aGlsZSAocmVxdWlyZWRQYXJh
bXMgPCByZXF1aXJlZCkgewotICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgaWYgKGJ1
ZmZlci5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBhdXRvIHBhcnNl
ZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9u
dFNraXApOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKGJ1ZmZlciwg
U3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKICAgICAgICAgaWYgKCFwYXJzZWROdW1i
ZXIpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFt
c10gPSAqcGFyc2VkTnVtYmVyOwogICAgICAgICByZXF1aXJlZFBhcmFtcysrOwogICAgICAgICBp
ZiAocmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkKLSAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICAgICAgICAgIHNraXBPcHRpb25hbFNW
R1NwYWNlc09yRGVsaW1pdGVyKGJ1ZmZlcik7CiAgICAgfQotICAgIGlmICghc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzKHB0ciwgZW5kKSkKKyAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZm
ZXIpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAgYm9vbCBkZWxpbVBhcnNlZCA9IHNr
aXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKKyAgICBib29sIGRlbGlt
UGFyc2VkID0gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsKIAotICAg
IGlmIChwdHIgPj0gZW5kKQorICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IC0xOwogICAgIAotICAgIGlmICgqcHRyID09ICcpJykgeyAvLyBza2lwIG9wdGlvbmFscwotICAg
ICAgICBwdHIrKzsKKyAgICBpZiAoKmJ1ZmZlciA9PSAnKScpIHsKKyAgICAgICAgLy8gc2tpcCBv
cHRpb25hbHMKKyAgICAgICAgKytidWZmZXI7CiAgICAgICAgIGlmIChkZWxpbVBhcnNlZCkKICAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewogICAgICAgICB3aGlsZSAob3B0aW9u
YWxQYXJhbXMgPCBvcHRpb25hbCkgewotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAg
ICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwot
ICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkTnVt
YmVyID0gcGFyc2VOdW1iZXIoYnVmZmVyLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OwogICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOwogICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXNd
ID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1zKys7CiAgICAgICAg
ICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKLSAgICAgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpKQorICAg
ICAgICBpZiAoIXNraXBPcHRpb25hbFNWR1NwYWNlcyhidWZmZXIpKQogICAgICAgICAgICAgcmV0
dXJuIC0xOwogICAgICAgICAKLSAgICAgICAgZGVsaW1QYXJzZWQgPSBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CisgICAgICAgIGRlbGltUGFyc2VkID0gc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoYnVmZmVyKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChwdHIgPj0gZW5kIHx8ICpwdHIgIT0gJyknIHx8IGRlbGltUGFyc2VkKQorICAgICAgICBpZiAo
YnVmZmVyLmF0RW5kKCkgfHwgKmJ1ZmZlciAhPSAnKScgfHwgZGVsaW1QYXJzZWQpCiAgICAgICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHB0cisrOworICAgICAgICArK2J1ZmZlcjsKICAgICB9
CiAKICAgICByZXR1cm4gcmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtczsKIH0KIAogLy8g
VGhlc2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGVudW0gU1ZHVHJhbnNmb3JtVHlwZQot
c3RhdGljIGNvbnN0IGludCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbXSA9ICB7MCwgNiwgMSwgMSwg
MSwgMSwgMX07Ci1zdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdID0gIHsw
LCAwLCAxLCAxLCAyLCAwLCAwfTsKK3N0YXRpYyBjb25zdGV4cHIgaW50IHJlcXVpcmVkVmFsdWVz
Rm9yVHlwZVtdID0gIHsgMCwgNiwgMSwgMSwgMSwgMSwgMSB9Oworc3RhdGljIGNvbnN0ZXhwciBp
bnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10gPSAgeyAwLCAwLCAxLCAxLCAyLCAwLCAwIH07CiAK
LS8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkg
d2l0aCBJbnRlbCBJQ0MuCi1TVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0g
ZGVmYXVsdDsKLQotT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUg
dHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBh
cnNlVHJhbnNmb3JtVmFsdWVHZW5lcmljKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlIHR5cGUsIFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsK
ICAgICBpZiAodHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dO
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAw
OwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwotICAgIGlmICgodmFs
dWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVp
cmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAw
KQorICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KGJ1ZmZlciwg
dmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlwZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlw
ZVt0eXBlXSkpIDwgMCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFNWR1Ry
YW5zZm9ybVZhbHVlIHRyYW5zZm9ybTsKQEAgLTE0NSw0MiArMTQ2LDYzIEBAIE9wdGlvbmFsPFNW
R1RyYW5zZm9ybVZhbHVlPiBTVkdUcmFuc2Zvcm0KICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQog
Ci1zdGF0aWMgY29uc3QgVUNoYXIgc2tld1hEZXNjW10gPSAgeydzJywgJ2snLCAnZScsICd3Jywg
J1gnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBza2V3WURlc2NbXSA9ICB7J3MnLCAnaycsICdlJywg
J3cnLCAnWSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywg
J2EnLCAnbCcsICdlJ307Ci1zdGF0aWMgY29uc3QgVUNoYXIgdHJhbnNsYXRlRGVzY1tdID0gIHsn
dCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2wnLCAnYScsICd0JywgJ2UnfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcsICdhJywgJ3QnLCAnZSd9Owot
c3RhdGljIGNvbnN0IFVDaGFyIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAn
aScsICd4J307CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0
eXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBw
YXJzZVRyYW5zZm9ybVZhbHVlR2VuZXJpYyh0eXBlLCBidWZmZXIpOworfQorCitPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBTdHJpbmdQYXJzaW5nQnVm
ZmVyPFVDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVZhbHVlR2Vu
ZXJpYyh0eXBlLCBidWZmZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgc2tld1hEZXNjW10gPSAgeydzJywgJ2sn
LCAnZScsICd3JywgJ1gnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRp
YyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBza2V3WURlc2NbXSA9ICB7J3MnLCAnaycsICdlJywg
J3cnLCAnWSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0
ZXhwciBDaGFyYWN0ZXJUeXBlIHNjYWxlRGVzY1tdID0gIHsncycsICdjJywgJ2EnLCAnbCcsICdl
J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENo
YXJhY3RlclR5cGUgdHJhbnNsYXRlRGVzY1tdID0gIHsndCcsICdyJywgJ2EnLCAnbicsICdzJywg
J2wnLCAnYScsICd0JywgJ2UnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0
YXRpYyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSByb3RhdGVEZXNjW10gPSAgeydyJywgJ28nLCAn
dCcsICdhJywgJ3QnLCAnZSd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0
JywgJ3InLCAnaScsICd4J307CiAKLU9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFy
KiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhTdHJpbmdQYXJzaW5nQnVmZmVyPENo
YXJhY3RlclR5cGU+JiBidWZmZXIpCiB7Ci0gICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQor
ICAgIGlmIChidWZmZXIuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsKLSAgICAgICAgaWYgKHNraXBTdHJpbmco
Y3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1hEZXNj
KSkpCisgICAgaWYgKCpidWZmZXIgPT0gJ3MnKSB7CisgICAgICAgIGlmIChza2lwQ2hhcmFjdGVy
c0V4YWN0bHkoYnVmZmVyLCBza2V3WERlc2M8Q2hhcmFjdGVyVHlwZT4pKQogICAgICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwotICAgICAgICBl
bHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJS
QVlfTEVOR1RIKHNrZXdZRGVzYykpKQorICAgICAgICBpZiAoc2tpcENoYXJhY3RlcnNFeGFjdGx5
KGJ1ZmZlciwgc2tld1lEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWTsKLSAgICAgICAgZWxzZSBpZiAo
c2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNjYWxlRGVzYywgV1RGX0FSUkFZX0xFTkdU
SChzY2FsZURlc2MpKSkKKyAgICAgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIs
IHNjYWxlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNj
KSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKHNraXBD
aGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHRyYW5zbGF0ZURlc2M8Q2hhcmFjdGVyVHlwZT4pKQog
ICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRF
OwotICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNj
LCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKKyAgICBpZiAoc2tpcENoYXJhY3RlcnNF
eGFjdGx5KGJ1ZmZlciwgcm90YXRlRGVzYzxDaGFyYWN0ZXJUeXBlPikpCiAgICAgICAgIHJldHVy
biBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU7Ci0gICAgZWxzZSBpZiAo
c2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIG1hdHJpeERlc2MsIFdURl9BUlJBWV9MRU5H
VEgobWF0cml4RGVzYykpKQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVmZmVyLCBt
YXRyaXhEZXNjPENoYXJhY3RlclR5cGU+KSkKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKLVNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6
OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFy
c2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIHJldHVybiByZWFkQ2hh
cmFjdGVyc0ZvclBhcnNpbmcoc3RyaW5nLCBbXShhdXRvIGJ1ZmZlcikgeworICAgICAgICByZXR1
cm4gcGFyc2VUcmFuc2Zvcm1UeXBlKGJ1ZmZlcik7CisgICAgfSk7Cit9CisKK09wdGlvbmFsPFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAg
ICByZXR1cm4gcGFyc2VUcmFuc2Zvcm1UeXBlR2VuZXJpYyhidWZmZXIpOworfQorCitPcHRpb25h
bDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6
cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCiB7
Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHJldHVybiBwYXJzZUFuZFNraXBUeXBlKGNoYXJh
Y3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpKS52YWx1ZU9yKFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOworICAgIHJldHVybiBwYXJzZVRyYW5z
Zm9ybVR5cGVHZW5lcmljKGJ1ZmZlcik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMjYzNTgyKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogCiAj
aW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtVmFsdWUuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIApAQCAtMzIsOSArMzEsMTIgQEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBT
VkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAg
IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNv
bnN0IFVDaGFyKiBlbmQpOwotICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9w
dGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBU
eXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CisgICAg
c3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBTdHJpbmdQYXJzaW5nQnVmZmVyPExD
aGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFu
c2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgU3RyaW5nUGFy
c2luZ0J1ZmZlcjxVQ2hhcj4mKTsKKworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1W
YWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1ZpZXcpOwor
ICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4g
cGFyc2VUcmFuc2Zvcm1UeXBlKFN0cmluZ1BhcnNpbmdCdWZmZXI8TENoYXI+Jik7CisgICAgc3Rh
dGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZVRy
YW5zZm9ybVR5cGUoU3RyaW5nUGFyc2luZ0J1ZmZlcjxVQ2hhcj4mKTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNj
b3BlKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0K
ICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29u
c3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjM1
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjAsOTkgKzYxLDkwIEBAIHZvaWQgU1ZHVmlld1NwZWM6OnJlc2V0KCkK
ICAgICBTVkdab29tQW5kUGFuOjpyZXNldCgpOwogfQogCi1zdGF0aWMgY29uc3QgVUNoYXIgc3Zn
Vmlld1NwZWNbXSA9IHsncycsICd2JywgJ2cnLCAnVicsICdpJywgJ2UnLCAndyd9Owotc3RhdGlj
IGNvbnN0IFVDaGFyIHZpZXdCb3hTcGVjW10gPSB7J3YnLCAnaScsICdlJywgJ3cnLCAnQicsICdv
JywgJ3gnfTsKLXN0YXRpYyBjb25zdCBVQ2hhciBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlY1tdID0g
eydwJywgJ3InLCAnZScsICdzJywgJ2UnLCAncicsICd2JywgJ2UnLCAnQScsICdzJywgJ3AnLCAn
ZScsICdjJywgJ3QnLCAnUicsICdhJywgJ3QnLCAnaScsICdvJ307Ci1zdGF0aWMgY29uc3QgVUNo
YXIgdHJhbnNmb3JtU3BlY1tdID0geyd0JywgJ3InLCAnYScsICduJywgJ3MnLCAnZicsICdvJywg
J3InLCAnbSd9Owotc3RhdGljIGNvbnN0IFVDaGFyIHpvb21BbmRQYW5TcGVjW10gPSB7J3onLCAn
bycsICdvJywgJ20nLCAnQScsICduJywgJ2QnLCAnUCcsICdhJywgJ24nfTsKLXN0YXRpYyBjb25z
dCBVQ2hhciB2aWV3VGFyZ2V0U3BlY1tdID0gIHsndicsICdpJywgJ2UnLCAndycsICdUJywgJ2En
LCAncicsICdnJywgJ2UnLCAndCd9OwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBlIHN2Z1ZpZXdTcGVjW10gPSB7J3MnLCAndics
ICdnJywgJ1YnLCAnaScsICdlJywgJ3cnfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyBjb25zdGV4cHIgQ2hhcmFjdGVyVHlwZSB2aWV3Qm94U3BlY1tdID0geyd2Jywg
J2knLCAnZScsICd3JywgJ0InLCAnbycsICd4J307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgcHJlc2VydmVBc3BlY3RSYXRp
b1NwZWNbXSA9IHsncCcsICdyJywgJ2UnLCAncycsICdlJywgJ3InLCAndicsICdlJywgJ0EnLCAn
cycsICdwJywgJ2UnLCAnYycsICd0JywgJ1InLCAnYScsICd0JywgJ2knLCAnbyd9OwordGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0ZXhwciBDaGFyYWN0ZXJUeXBl
IHRyYW5zZm9ybVNwZWNbXSA9IHsndCcsICdyJywgJ2EnLCAnbicsICdzJywgJ2YnLCAnbycsICdy
JywgJ20nfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdGV4
cHIgQ2hhcmFjdGVyVHlwZSB6b29tQW5kUGFuU3BlY1tdID0geyd6JywgJ28nLCAnbycsICdtJywg
J0EnLCAnbicsICdkJywgJ1AnLCAnYScsICduJ307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgY29uc3RleHByIENoYXJhY3RlclR5cGUgdmlld1RhcmdldFNwZWNbXSA9
ICB7J3YnLCAnaScsICdlJywgJ3cnLCAnVCcsICdhJywgJ3InLCAnZycsICdlJywgJ3QnfTsKIAot
Ym9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmcmIHZpZXdTcGVjKQor
Ym9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcp
CiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZpZXdTcGVj
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogY3VyclZpZXdTcGVj
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXJyVmll
d1NwZWMgKyB2aWV3U3BlYy5sZW5ndGgoKTsKLQotICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5k
IHx8ICFtX2NvbnRleHRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IXNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQsIHN2Z1ZpZXdTcGVjLCBXVEZfQVJSQVlfTEVO
R1RIKHN2Z1ZpZXdTcGVjKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjdXJy
Vmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY3VyclZpZXdTcGVjKys7Ci0KLSAgICB3aGlsZSAoY3VyclZpZXdTcGVjIDwg
ZW5kICYmICpjdXJyVmlld1NwZWMgIT0gJyknKSB7Ci0gICAgICAgIGlmICgqY3VyclZpZXdTcGVj
ID09ICd2JykgewotICAgICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3VyclZpZXdTcGVjLCBlbmQs
IHZpZXdCb3hTcGVjLCBXVEZfQVJSQVlfTEVOR1RIKHZpZXdCb3hTcGVjKSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGN1cnJW
aWV3U3BlYysrOwotICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2aWV3Qm94KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgc2V0Vmlld0JveChXVEZNb3ZlKCp2aWV3Qm94KSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjdXJyVmlld1Nw
ZWMrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVu
ZCwgdmlld1RhcmdldFNwZWMsIFdURl9BUlJBWV9MRU5HVEgodmlld1RhcmdldFNwZWMpKSkgewot
ICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMg
IT0gJygnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIHZpZXdUYXJnZXRTdGFydCA9ICsrY3VyclZpZXdTcGVjOwotICAgICAg
ICAgICAgICAgIHdoaWxlIChjdXJyVmlld1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyAhPSAn
KScpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAg
IGlmIChjdXJyVmlld1NwZWMgPj0gZW5kKQorICAgIHJldHVybiByZWFkQ2hhcmFjdGVyc0ZvclBh
cnNpbmcoc3RyaW5nLCBbJl0oYXV0byBidWZmZXIpIC0+IGJvb2wgeworICAgICAgICB1c2luZyBD
aGFyYWN0ZXJUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUoYnVmZmVyKTo6Q2hhcmFjdGVyVHlwZTsK
KworICAgICAgICBpZiAoYnVmZmVyLmF0RW5kKCkgfHwgIW1fY29udGV4dEVsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0
bHkoYnVmZmVyLCBzdmdWaWV3U3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNDaGFyYWN0
ZXJzUmVtYWluaW5nKCkgJiYgKmJ1ZmZlciAhPSAnKScpIHsKKyAgICAgICAgICAgIGlmICgqYnVm
ZmVyID09ICd2JykgeworICAgICAgICAgICAgICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4YWN0bHko
YnVmZmVyLCB2aWV3Qm94U3BlYzxDaGFyYWN0ZXJUeXBlPikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGJ1ZmZlciwgZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXZpZXdCb3gpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIHNldFZpZXdCb3goV1RGTW92ZSgqdmlld0JveCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJyknKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIsIHZpZXdUYXJnZXRTcGVjPENoYXJhY3RlclR5
cGU+KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwgJygn
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byB2aWV3VGFyZ2V0U3RhcnQgPSBidWZmZXIucG9zaXRpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2tpcFVudGlsKGJ1ZmZlciwgJyknKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlci5hdEVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBtX3ZpZXdUYXJnZXRTdHJpbmcgPSBTdHJpbmcodmlld1Rh
cmdldFN0YXJ0LCBidWZmZXIucG9zaXRpb24oKSAtIHZpZXdUYXJnZXRTdGFydCk7CisgICAgICAg
ICAgICAgICAgICAgICsrYnVmZmVyOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpidWZmZXIg
PT0gJ3onKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHkoYnVm
ZmVyLCB6b29tQW5kUGFuU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5KGJ1ZmZlciwg
JygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGF1dG8gem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW46OnBhcnNlWm9vbUFuZFBhbihidWZmZXIp
OworICAgICAgICAgICAgICAgIGlmICghem9vbUFuZFBhbikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHNldFpvb21BbmRQYW4oKnpvb21BbmRQYW4p
OworICAgICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkoYnVmZmVyLCAnKScpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpidWZm
ZXIgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2hhcmFjdGVyc0V4YWN0bHko
YnVmZmVyLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYzxDaGFyYWN0ZXJUeXBlPikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFj
dGx5KGJ1ZmZlciwgJygnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJh
dGlvOworICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZShidWZm
ZXIsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIHNldFByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAg
ICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcpJykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmJ1ZmZlciA9PSAn
dCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZmZXIs
IHRyYW5zZm9ybVNwZWM8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFza2lwRXhhY3RseShidWZmZXIsICcoJykp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX3Ry
YW5zZm9ybS0+cGFyc2UoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5
KGJ1ZmZlciwgJyknKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIG1fdmlld1RhcmdldFN0cmluZyA9IFN0cmluZyh2aWV3VGFyZ2V0U3RhcnQsIGN1
cnJWaWV3U3BlYyAtIHZpZXdUYXJnZXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgY3VyclZpZXdT
cGVjKys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZSBpZiAoKmN1cnJWaWV3U3BlYyA9PSAneicpIHsKLSAgICAgICAgICAg
IGlmICghc2tpcFN0cmluZyhjdXJyVmlld1NwZWMsIGVuZCwgem9vbUFuZFBhblNwZWMsIFdURl9B
UlJBWV9MRU5HVEgoem9vbUFuZFBhblNwZWMpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVj
ICE9ICcoJykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJy
Vmlld1NwZWMrKzsKLSAgICAgICAgICAgIGlmICghU1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5k
UGFuKGN1cnJWaWV3U3BlYywgZW5kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcp
JykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyVmlld1Nw
ZWMrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqY3VyclZpZXdTcGVjID09ICdwJykgewotICAgICAg
ICAgICAgaWYgKCFza2lwU3RyaW5nKGN1cnJWaWV3U3BlYywgZW5kLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvU3BlYywgV1RGX0FSUkFZX0xFTkdUSChwcmVzZXJ2ZUFzcGVjdFJhdGlvU3BlYykpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMg
Pj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgICAgICBpZiAo
IXByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UoY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVj
dFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOwotICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgIH0gZWxzZSBpZiAo
KmN1cnJWaWV3U3BlYyA9PSAndCcpIHsKLSAgICAgICAgICAgIGlmICghc2tpcFN0cmluZyhjdXJy
Vmlld1NwZWMsIGVuZCwgdHJhbnNmb3JtU3BlYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2Zvcm1T
cGVjKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1
cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAg
ICBtX3RyYW5zZm9ybS0+cGFyc2UoY3VyclZpZXdTcGVjLCBlbmQpOwotICAgICAgICAgICAgaWYg
KGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChjdXJyVmll
d1NwZWMgPCBlbmQgJiYgKmN1cnJWaWV3U3BlYyA9PSAnOycpCi0gICAgICAgICAgICBjdXJyVmll
d1NwZWMrKzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1
cnJWaWV3U3BlYyAhPSAnKScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNr
aXBFeGFjdGx5KGJ1ZmZlciwgJzsnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChidWZmZXIu
YXRFbmQoKSB8fCAqYnVmZmVyICE9ICcpJykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHJldmlzaW9uIDI2MzU4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVmlld1NwZWMoY29u
dGV4dEVsZW1lbnQpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNlVmlld1NwZWMoY29uc3QgU3Ry
aW5nJik7CisgICAgYm9vbCBwYXJzZVZpZXdTcGVjKGNvbnN0IFN0cmluZ1ZpZXcmKTsKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgdm9pZCByZXNldENvbnRleHRFbGVtZW50KCkgeyBtX2NvbnRleHRF
bGVtZW50ID0gbnVsbHB0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFu
ZFBhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4u
Y3BwCShyZXZpc2lvbiAyNjM1ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDI1ICsyMiwzMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNWR1pvb21BbmRQYW4uaCIKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
U1ZHWm9vbUFuZFBhbjo6cGFyc2Vab29tQW5kUGFuKGNvbnN0IFVDaGFyKiYgc3RhcnQsIGNvbnN0
IFVDaGFyKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgY29u
c3RleHByIENoYXJhY3RlclR5cGUgZGlzYWJsZVtdID0geyAnZCcsICdpJywgJ3MnLCAnYScsICdi
JywgJ2wnLCAnZScgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBj
b25zdGV4cHIgQ2hhcmFjdGVyVHlwZSBtYWduaWZ5W10gPSB7ICdtJywgJ2EnLCAnZycsICduJywg
J2knLCAnZicsICd5JyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0
aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9vbUFuZFBhbkdlbmVyaWMoU3Ry
aW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewotICAgIHN0YXRpYyBj
b25zdCBVQ2hhciBkaXNhYmxlW10gPSB7ICdkJywgJ2knLCAncycsICdhJywgJ2InLCAnbCcsICdl
JyB9OwotICAgIGlmIChza2lwU3RyaW5nKHN0YXJ0LCBlbmQsIGRpc2FibGUsIFdURl9BUlJBWV9M
RU5HVEgoZGlzYWJsZSkpKSB7Ci0gICAgICAgIG1fem9vbUFuZFBhbiA9IFNWR1pvb21BbmRQYW5E
aXNhYmxlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgbWFnbmlmeVtdID0geyAnbScsICdhJywgJ2cnLCAnbicsICdpJywgJ2YnLCAneScgfTsK
LSAgICBpZiAoc2tpcFN0cmluZyhzdGFydCwgZW5kLCBtYWduaWZ5LCBXVEZfQVJSQVlfTEVOR1RI
KG1hZ25pZnkpKSkgewotICAgICAgICBtX3pvb21BbmRQYW4gPSBTVkdab29tQW5kUGFuTWFnbmlm
eTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChza2lwQ2hhcmFjdGVyc0V4
YWN0bHkoYnVmZmVyLCBkaXNhYmxlPENoYXJhY3RlclR5cGU+KSkKKyAgICAgICAgcmV0dXJuIFNW
R1pvb21BbmRQYW5EaXNhYmxlOworCisgICAgaWYgKHNraXBDaGFyYWN0ZXJzRXhhY3RseShidWZm
ZXIsIG1hZ25pZnk8Q2hhcmFjdGVyVHlwZT4pKQorICAgICAgICByZXR1cm4gU1ZHWm9vbUFuZFBh
bk1hZ25pZnk7CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQogCi0gICAgcmV0dXJuIGZh
bHNlOworT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IFNWR1pvb21BbmRQYW46OnBhcnNlWm9v
bUFuZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVy
biBwYXJzZVpvb21BbmRQYW5HZW5lcmljKGJ1ZmZlcik7Cit9CisKK09wdGlvbmFsPFNWR1pvb21B
bmRQYW5UeXBlPiBTVkdab29tQW5kUGFuOjpwYXJzZVpvb21BbmRQYW4oU3RyaW5nUGFyc2luZ0J1
ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGFyc2Vab29tQW5kUGFuR2VuZXJp
YyhidWZmZXIpOwogfQogCiB2b2lkIFNWR1pvb21BbmRQYW46OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCShyZXZpc2lvbiAyNjM1ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUFuZFBhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTVkdab29tQW5kUGFuKCkgPSBkZWZh
dWx0OwogCi0gICAgYm9vbCBwYXJzZVpvb21BbmRQYW4oY29uc3QgVUNoYXIqJiwgY29uc3QgVUNo
YXIqKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHWm9vbUFuZFBhblR5cGU+IHBhcnNlWm9vbUFu
ZFBhbihTdHJpbmdQYXJzaW5nQnVmZmVyPExDaGFyPiYpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
Vkdab29tQW5kUGFuVHlwZT4gcGFyc2Vab29tQW5kUGFuKFN0cmluZ1BhcnNpbmdCdWZmZXI8VUNo
YXI+Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUFuZFBhblR5cGUgbV96b29tQW5kUGFuIHsg
U1ZHUHJvcGVydHlUcmFpdHM8U1ZHWm9vbUFuZFBhblR5cGU+Ojppbml0aWFsVmFsdWUoKSB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>