<?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>233987</bug_id>
          
          <creation_ts>2021-12-07 23:21:46 -0800</creation_ts>
          <short_desc>Don&apos;t do simplification for percentage comparison resolution against negative reference values</short_desc>
          <delta_ts>2021-12-10 18:47:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joonghun Park">jh718.park</reporter>
          <assigned_to name="Joonghun Park">jh718.park</assigned_to>
          <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821427</commentid>
    <comment_count>0</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-07 23:21:46 -0800</bug_when>
    <thetext>A percentage may be resolved against a negative value, which is allowed only in &apos;background-position&apos; property.

Currently in CSSCalcExpressionNodeParser::parseCalc, it creates CSSCalcExpressionNode tree result and does simplification for it.
But during it, min(50%, 10%) is simplified to min(10%) and max(50%, 10%) is simplified to max(50%),
which is the opposite result what should be done against negative basis.

We should not do simplification for percentage comparison resolution against negative reference values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821431</commentid>
    <comment_count>1</comment_count>
      <attachid>446316</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-07 23:41:31 -0800</bug_when>
    <thetext>Created attachment 446316
Check layout test result</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821495</commentid>
    <comment_count>2</comment_count>
      <attachid>446343</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-08 03:01:15 -0800</bug_when>
    <thetext>Created attachment 446343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821571</commentid>
    <comment_count>3</comment_count>
      <attachid>446343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-08 08:55:41 -0800</bug_when>
    <thetext>Comment on attachment 446343
Patch

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

Change looks good, but there are enough coding style mistakes that I think we should review an improved version.

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:66
&gt; +    auto setAllowsNegativePercentageReferenceIfNeeded = [](RefPtr&lt;CSSCalcExpressionNode&gt;&amp; expression) {

This is using the wrong type. This should not take a RefPtr&amp;, because that’s for an in/out argument. This is a &quot;never null&quot; expression node, so the argument type should just be CSSCalcExpressionNode&amp;.

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:67
&gt; +        if (expression-&gt;type() == CSSCalcExpressionNode::Type::CssCalcOperation) {

Since we are using downcast below anyway, I recommend using is&lt;&gt; rather than writing this expression out, making the code easier to read:

    if (is&lt;CSSCalcOperationNode&gt;(*expression)) {

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:70
&gt; +            auto&amp; operationNode = downcast&lt;CSSCalcOperationNode&gt;(*expression);
&gt; +            if (operationNode.isMinOrMaxNode())
&gt; +                operationNode.setAllowsNegativePercentageReference();

A nice way to write this is:

    if (auto&amp; node = downcast&lt;CSSCalcOperationNode&gt;(*expression); node.isMinOrMaxNode())
        node.setAllowsNegativePercentageReference();

The if statement with the semicolon keeps the local variable scope tight rather than letting it spill into the code below. The one-word local variable name is then good when the scope is so narrow; easy to see which node it is, and not having to write that out in the variable name keeps the code small and likely more readable.

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:77
&gt; +                if (child-&gt;type() == CSSCalcExpressionNode::Type::CssCalcOperation) {
&gt; +                    auto&amp; operationNode = downcast&lt;CSSCalcOperationNode&gt;(child.get());
&gt; +                    if (operationNode.isMinOrMaxNode())
&gt; +                        operationNode.setAllowsNegativePercentageReference();
&gt; +                }

Same comments here, except also this code is repeated, so we should be using a lambda to not write it out twice. When you combine that with WebKit coding style things like early return, you get this:

    auto setAllowsNegativePercentageReferenceIfNeeded = [] (CSSCalcExpressionNode&amp; expression) {
        auto set = [] (CSSCalcOperationNode&amp; operation) {
            if (operation.isMinOrMaxNode())
                operation.setAllowsNegativePercentageReference();
        };
        if (is&lt;CSSCalcOperationNode&gt;(expression)) {
            auto&amp; operation = downcast&lt;CSSCalcOperationNode&gt;(expression);
            set(operation);
            for (auto&amp; child : operation.children()) {
                if (is&lt;CSSCalcOperationNode&gt;(child))
                    set(downcast&lt;CSSCalcOperationNode&gt;(child));
            }
        }
    };

But this code assumes there are no grandchildren. If that’s wrong, then it should be written with recursion instead:

    auto setAllowsNegativePercentageReferenceIfNeeded = [] (CSSCalcExpressionNode&amp; expression) {
        if (is&lt;CSSCalcOperationNode&gt;(expression)) {
            auto&amp; operation = downcast&lt;CSSCalcOperationNode&gt;(expression);
            if (operation.isMinOrMaxNode())
                operation.setAllowsNegativePercentageReference();
            for (auto&amp; child : operation.children())
                setAllowsNegativePercentageReferenceIfNeeded(child);
        }
    };

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:47
&gt; +    RefPtr&lt;CSSCalcExpressionNode&gt; parseCalc(CSSParserTokenRange, CSSValueID function, bool);

The argument type bool does not make it clear what the argument is, so it needs a name, allowNegativePercentageReference, here.

&gt; Source/WebCore/css/calc/CSSCalcOperationNode.cpp:838
&gt; +                if (unitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; numberOfChildren &gt; 1)
&gt; +                    return true;
&gt; +
&gt; +                return false;

No need to write this boolean expression so long. Just this:

    return unitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; numberOfChildren &gt; 1;

Other tiny style thoughts: It can be tricky to use a lambda in a way that the code *easier* to read; the current version makes it a little too hard. And I find it a bit arbitrary to do the different checks in two if statements rather than three or just one. If you do still like the lambda to document things, then this might read better:

    auto involvesPercentageComparisons = [&amp;] {
        return combinedUnitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; m_children.size() &gt; 1;
    };
    if (isMinOrMaxNode() &amp;&amp; allowsNegativePercentageReference() &amp;&amp; involvesPercentageComparisons())
        return;

This should be just as efficient and I think makes it pretty readable. I believe the five lines are easier to read than the longer code block. Using capturing rather than arguments for combinedUnitType and m_children does seem to help rather than hurt..

&gt; Source/WebCore/css/calc/CSSCalcOperationNode.h:149
&gt; +    unsigned m_allowsNegativePercentageReference : 1;

This can just be a bool. There is no value to using a bitfield here, doesn&apos;t save memory and makes bigger code. Also if we are using. bool we can initialize here and don’t need to change the constructors.

&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:5562
&gt; +        auto position = consumePositionCoordinates(range, context.mode, unitless, PositionSyntax::BackgroundPosition, /* allowsNegativePercentageReference */ true);

This is why we use enumerations in WebKit for this kind of idiom. We don’t use comments to make such argument clear, instead we used named enumeration values that you can understand without a comment.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:133
&gt; +std::optional&lt;PositionCoordinates&gt; consumePositionCoordinates(CSSParserTokenRange&amp;, CSSParserMode, UnitlessQuirk, PositionSyntax, bool = false);

Needs a comment here, not at all obvious that this bool is allowsNegativePercentageReference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822019</commentid>
    <comment_count>4</comment_count>
      <attachid>446504</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-09 00:31:36 -0800</bug_when>
    <thetext>Created attachment 446504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822021</commentid>
    <comment_count>5</comment_count>
      <attachid>446343</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-09 00:35:53 -0800</bug_when>
    <thetext>Comment on attachment 446343
Patch

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

Thank you for your review, Darin. I applied all the comments you left in the previous patchset. Could you please review this patchset?

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:66
&gt;&gt; +    auto setAllowsNegativePercentageReferenceIfNeeded = [](RefPtr&lt;CSSCalcExpressionNode&gt;&amp; expression) {
&gt; 
&gt; This is using the wrong type. This should not take a RefPtr&amp;, because that’s for an in/out argument. This is a &quot;never null&quot; expression node, so the argument type should just be CSSCalcExpressionNode&amp;.

Done.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:67
&gt;&gt; +        if (expression-&gt;type() == CSSCalcExpressionNode::Type::CssCalcOperation) {
&gt; 
&gt; Since we are using downcast below anyway, I recommend using is&lt;&gt; rather than writing this expression out, making the code easier to read:
&gt; 
&gt;     if (is&lt;CSSCalcOperationNode&gt;(*expression)) {

Done.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:70
&gt;&gt; +                operationNode.setAllowsNegativePercentageReference();
&gt; 
&gt; A nice way to write this is:
&gt; 
&gt;     if (auto&amp; node = downcast&lt;CSSCalcOperationNode&gt;(*expression); node.isMinOrMaxNode())
&gt;         node.setAllowsNegativePercentageReference();
&gt; 
&gt; The if statement with the semicolon keeps the local variable scope tight rather than letting it spill into the code below. The one-word local variable name is then good when the scope is so narrow; easy to see which node it is, and not having to write that out in the variable name keeps the code small and likely more readable.

Thank you for your advice for aspects in here. I will keep it in mind.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:77
&gt;&gt; +                }
&gt; 
&gt; Same comments here, except also this code is repeated, so we should be using a lambda to not write it out twice. When you combine that with WebKit coding style things like early return, you get this:
&gt; 
&gt;     auto setAllowsNegativePercentageReferenceIfNeeded = [] (CSSCalcExpressionNode&amp; expression) {
&gt;         auto set = [] (CSSCalcOperationNode&amp; operation) {
&gt;             if (operation.isMinOrMaxNode())
&gt;                 operation.setAllowsNegativePercentageReference();
&gt;         };
&gt;         if (is&lt;CSSCalcOperationNode&gt;(expression)) {
&gt;             auto&amp; operation = downcast&lt;CSSCalcOperationNode&gt;(expression);
&gt;             set(operation);
&gt;             for (auto&amp; child : operation.children()) {
&gt;                 if (is&lt;CSSCalcOperationNode&gt;(child))
&gt;                     set(downcast&lt;CSSCalcOperationNode&gt;(child));
&gt;             }
&gt;         }
&gt;     };
&gt; 
&gt; But this code assumes there are no grandchildren. If that’s wrong, then it should be written with recursion instead:
&gt; 
&gt;     auto setAllowsNegativePercentageReferenceIfNeeded = [] (CSSCalcExpressionNode&amp; expression) {
&gt;         if (is&lt;CSSCalcOperationNode&gt;(expression)) {
&gt;             auto&amp; operation = downcast&lt;CSSCalcOperationNode&gt;(expression);
&gt;             if (operation.isMinOrMaxNode())
&gt;                 operation.setAllowsNegativePercentageReference();
&gt;             for (auto&amp; child : operation.children())
&gt;                 setAllowsNegativePercentageReferenceIfNeeded(child);
&gt;         }
&gt;     };

I originally intended recursion here, so it was my mistake. I have changed this to recursion here.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:47
&gt;&gt; +    RefPtr&lt;CSSCalcExpressionNode&gt; parseCalc(CSSParserTokenRange, CSSValueID function, bool);
&gt; 
&gt; The argument type bool does not make it clear what the argument is, so it needs a name, allowNegativePercentageReference, here.

Done.

&gt;&gt; Source/WebCore/css/calc/CSSCalcOperationNode.cpp:838
&gt;&gt; +                return false;
&gt; 
&gt; No need to write this boolean expression so long. Just this:
&gt; 
&gt;     return unitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; numberOfChildren &gt; 1;
&gt; 
&gt; Other tiny style thoughts: It can be tricky to use a lambda in a way that the code *easier* to read; the current version makes it a little too hard. And I find it a bit arbitrary to do the different checks in two if statements rather than three or just one. If you do still like the lambda to document things, then this might read better:
&gt; 
&gt;     auto involvesPercentageComparisons = [&amp;] {
&gt;         return combinedUnitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; m_children.size() &gt; 1;
&gt;     };
&gt;     if (isMinOrMaxNode() &amp;&amp; allowsNegativePercentageReference() &amp;&amp; involvesPercentageComparisons())
&gt;         return;
&gt; 
&gt; This should be just as efficient and I think makes it pretty readable. I believe the five lines are easier to read than the longer code block. Using capturing rather than arguments for combinedUnitType and m_children does seem to help rather than hurt..

Thank you for your suggestion. I applied your 5 lines in the next patchset.

&gt;&gt; Source/WebCore/css/calc/CSSCalcOperationNode.h:149
&gt;&gt; +    unsigned m_allowsNegativePercentageReference : 1;
&gt; 
&gt; This can just be a bool. There is no value to using a bitfield here, doesn&apos;t save memory and makes bigger code. Also if we are using. bool we can initialize here and don’t need to change the constructors.

Done.

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:5562
&gt;&gt; +        auto position = consumePositionCoordinates(range, context.mode, unitless, PositionSyntax::BackgroundPosition, /* allowsNegativePercentageReference */ true);
&gt; 
&gt; This is why we use enumerations in WebKit for this kind of idiom. We don’t use comments to make such argument clear, instead we used named enumeration values that you can understand without a comment.

Yepp,I thought that you might point this out, but I wanted to get review for this patch to check that if this change is ok to go on. 
I will add enum class as below to a new file NegativePercentageReference.h.

enum class NegativePercentageReference : uint8_t {
    Allow,
    Forbid
};

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:133
&gt;&gt; +std::optional&lt;PositionCoordinates&gt; consumePositionCoordinates(CSSParserTokenRange&amp;, CSSParserMode, UnitlessQuirk, PositionSyntax, bool = false);
&gt; 
&gt; Needs a comment here, not at all obvious that this bool is allowsNegativePercentageReference.

With a new enum class NegativePercentageReference, Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822251</commentid>
    <comment_count>6</comment_count>
      <attachid>446343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-09 12:07:33 -0800</bug_when>
    <thetext>Comment on attachment 446343
Patch

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

&gt;&gt;&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:5562
&gt;&gt;&gt; +        auto position = consumePositionCoordinates(range, context.mode, unitless, PositionSyntax::BackgroundPosition, /* allowsNegativePercentageReference */ true);
&gt;&gt; 
&gt;&gt; This is why we use enumerations in WebKit for this kind of idiom. We don’t use comments to make such argument clear, instead we used named enumeration values that you can understand without a comment.
&gt; 
&gt; Yepp,I thought that you might point this out, but I wanted to get review for this patch to check that if this change is ok to go on. 
&gt; I will add enum class as below to a new file NegativePercentageReference.h.
&gt; 
&gt; enum class NegativePercentageReference : uint8_t {
&gt;     Allow,
&gt;     Forbid
&gt; };

I would suggest something more like one of these:

    enum class NegativePercentagePolicy : bool { Allow, Forbid };
    enum class NegativePercentageReferencePolicy : bool { Allow, Forbid };

The multi-line formatting doesn’t add much. The class shouldn’t be named NegativePercentageReference, because it’s not a reference, it’s a policy about references. And the name is getting so super-long, try to make it as short as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822256</commentid>
    <comment_count>7</comment_count>
      <attachid>446504</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-09 12:13:47 -0800</bug_when>
    <thetext>Comment on attachment 446504
Patch

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

I’d be OK landing this, but I think we can do better.

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:67
&gt; +    std::function&lt;void(CSSCalcExpressionNode&amp;)&gt; setAllowsNegativePercentageReferenceIfNeeded = [&amp;setAllowsNegativePercentageReferenceIfNeeded](CSSCalcExpressionNode&amp; expression) {

Type here should be &quot;auto&quot;, not &quot;std::function&lt;...&gt;&quot;.

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:39
&gt; +enum class NegativePercentageReference : uint8_t;

bool (see also my naming suggestion above).

&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:49
&gt; +    RefPtr&lt;CSSCalcExpressionNode&gt; parseCalc(CSSParserTokenRange, CSSValueID function, NegativePercentageReference allowsNegativePercentageReference);

With the right enum class name (see my naming suggestion above), we would not need an argument name here. That is a goal. Not great to say things twice.

&gt; Source/WebCore/css/calc/CSSCalcOperationNode.cpp:836
&gt;          auto combinedUnitType = m_children[0]-&gt;primitiveType();
&gt; +        auto involvesPercentageComparisons = [&amp;]() {
&gt; +            return combinedUnitType == CSSUnitType::CSS_PERCENTAGE &amp;&amp; m_children.size() &gt; 1;
&gt; +        };
&gt; +
&gt; +        if (isMinOrMaxNode() &amp;&amp; allowsNegativePercentageReference() &amp;&amp; involvesPercentageComparisons())
&gt; +            return;

Not really sure about the paragraphing here. The lack of blank line before definition the involvesPercentageComparisons, and the blank line after.

Also, pretty sure we typically write [&amp;] { ... }, without the () for the empty argument list.

&gt; Source/WebCore/css/calc/CSSCalcOperationNode.h:76
&gt; +    bool allowsNegativePercentageReference() { return m_allowsNegativePercentageReference; }

Should be a const member function.

&gt; Source/WebCore/css/calc/CSSCalcValue.h:54
&gt; +    static RefPtr&lt;CSSCalcValue&gt; create(CSSValueID function, const CSSParserTokenRange&amp;, CalculationCategory destinationCategory, ValueRange, const CSSCalcSymbolTable&amp;, NegativePercentageReference = NegativePercentageReference::Forbid);

Could use overloading here rather than an argument with a default value; one create function with and one without. That would remove the need to include the enum class definition in a header.

&gt; Source/WebCore/css/calc/NegativePercentageReference.h:33
&gt; +enum class NegativePercentageReference : uint8_t {
&gt; +    Allow,
&gt; +    Forbid
&gt; +};

Should try to avoid having to create an entire header file just for this single enum class.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:96
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeLengthOrPercent(CSSParserTokenRange&amp;, CSSParserMode, ValueRange, UnitlessQuirk = UnitlessQuirk::Forbid, NegativePercentageReference = NegativePercentageReference::Forbid);

Here this could be a boolean; no one is calling this with a constant, so the enumeration is not needed. We don’t have to use the enumerations all the way down unless you think it’s preferable.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:134
&gt; +std::optional&lt;PositionCoordinates&gt; consumePositionCoordinates(CSSParserTokenRange&amp;, CSSParserMode, UnitlessQuirk, PositionSyntax, NegativePercentageReference = NegativePercentageReference::Forbid);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822592</commentid>
    <comment_count>8</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-10 02:11:42 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 446343 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446343&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:5562
&gt; &gt;&gt;&gt; +        auto position = consumePositionCoordinates(range, context.mode, unitless, PositionSyntax::BackgroundPosition, /* allowsNegativePercentageReference */ true);
&gt; &gt;&gt; 
&gt; &gt;&gt; This is why we use enumerations in WebKit for this kind of idiom. We don’t use comments to make such argument clear, instead we used named enumeration values that you can understand without a comment.
&gt; &gt; 
&gt; &gt; Yepp,I thought that you might point this out, but I wanted to get review for this patch to check that if this change is ok to go on. 
&gt; &gt; I will add enum class as below to a new file NegativePercentageReference.h.
&gt; &gt; 
&gt; &gt; enum class NegativePercentageReference : uint8_t {
&gt; &gt;     Allow,
&gt; &gt;     Forbid
&gt; &gt; };
&gt; 
&gt; I would suggest something more like one of these:
&gt; 
&gt;     enum class NegativePercentagePolicy : bool { Allow, Forbid };
&gt;     enum class NegativePercentageReferencePolicy : bool { Allow, Forbid };
&gt; 
&gt; The multi-line formatting doesn’t add much. The class shouldn’t be named
&gt; NegativePercentageReference, because it’s not a reference, it’s a policy
&gt; about references. And the name is getting so super-long, try to make it as
&gt; short as possible.

Then I will use NegativePercentagePolicy, the shorter one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822700</commentid>
    <comment_count>9</comment_count>
      <attachid>446504</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-10 07:48:16 -0800</bug_when>
    <thetext>Comment on attachment 446504
Patch

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

I applied all the comments here in the next patchset. Thank you for your review, Darin.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.cpp:67
&gt;&gt; +    std::function&lt;void(CSSCalcExpressionNode&amp;)&gt; setAllowsNegativePercentageReferenceIfNeeded = [&amp;setAllowsNegativePercentageReferenceIfNeeded](CSSCalcExpressionNode&amp; expression) {
&gt; 
&gt; Type here should be &quot;auto&quot;, not &quot;std::function&lt;...&gt;&quot;.

It seems that we can&apos;t use lambda declared with auto recursively. So for now I will leave std::function here. But if I find a way, I will visit here and change it then.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:39
&gt;&gt; +enum class NegativePercentageReference : uint8_t;
&gt; 
&gt; bool (see also my naming suggestion above).

I removed this because we use bool here.

&gt;&gt; Source/WebCore/css/calc/CSSCalcExpressionNodeParser.h:49
&gt;&gt; +    RefPtr&lt;CSSCalcExpressionNode&gt; parseCalc(CSSParserTokenRange, CSSValueID function, NegativePercentageReference allowsNegativePercentageReference);
&gt; 
&gt; With the right enum class name (see my naming suggestion above), we would not need an argument name here. That is a goal. Not great to say things twice.

This was changed to bool too.

&gt;&gt; Source/WebCore/css/calc/CSSCalcOperationNode.cpp:836
&gt;&gt; +            return;
&gt; 
&gt; Not really sure about the paragraphing here. The lack of blank line before definition the involvesPercentageComparisons, and the blank line after.
&gt; 
&gt; Also, pretty sure we typically write [&amp;] { ... }, without the () for the empty argument list.

I removed the blank line after the definition of involvesPercentageComparisons.

&gt;&gt; Source/WebCore/css/calc/CSSCalcOperationNode.h:76
&gt;&gt; +    bool allowsNegativePercentageReference() { return m_allowsNegativePercentageReference; }
&gt; 
&gt; Should be a const member function.

Done.

&gt;&gt; Source/WebCore/css/calc/CSSCalcValue.h:54
&gt;&gt; +    static RefPtr&lt;CSSCalcValue&gt; create(CSSValueID function, const CSSParserTokenRange&amp;, CalculationCategory destinationCategory, ValueRange, const CSSCalcSymbolTable&amp;, NegativePercentageReference = NegativePercentageReference::Forbid);
&gt; 
&gt; Could use overloading here rather than an argument with a default value; one create function with and one without. That would remove the need to include the enum class definition in a header.

I changed this to bool because no one calls it directly with enum constant.

&gt;&gt; Source/WebCore/css/calc/NegativePercentageReference.h:33
&gt;&gt; +};
&gt; 
&gt; Should try to avoid having to create an entire header file just for this single enum class.

I removed this and add below to CSSPropertyParserHelpers.h

enum class NegativePercentagePolicy : bool { Forbid, Allow };

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:96
&gt;&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeLengthOrPercent(CSSParserTokenRange&amp;, CSSParserMode, ValueRange, UnitlessQuirk = UnitlessQuirk::Forbid, NegativePercentageReference = NegativePercentageReference::Forbid);
&gt; 
&gt; Here this could be a boolean; no one is calling this with a constant, so the enumeration is not needed. We don’t have to use the enumerations all the way down unless you think it’s preferable.

Ok, I will change this to bool.

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:134
&gt;&gt; +std::optional&lt;PositionCoordinates&gt; consumePositionCoordinates(CSSParserTokenRange&amp;, CSSParserMode, UnitlessQuirk, PositionSyntax, NegativePercentageReference = NegativePercentageReference::Forbid);
&gt; 
&gt; Ditto.

This one is called with enum constant from CSSPropertyParser.cpp above, so I will leave this as enum type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822702</commentid>
    <comment_count>10</comment_count>
      <attachid>446729</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2021-12-10 07:56:21 -0800</bug_when>
    <thetext>Created attachment 446729
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823144</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-10 18:46:43 -0800</bug_when>
    <thetext>Committed r286897 (245125@main): &lt;https://commits.webkit.org/245125@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446729.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823145</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-10 18:47:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86349764&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446316</attachid>
            <date>2021-12-07 23:41:31 -0800</date>
            <delta_ts>2021-12-08 03:01:11 -0800</delta_ts>
            <desc>Check layout test result</desc>
            <filename>bug-233987-20211208164130.patch</filename>
            <type>text/plain</type>
            <size>18988</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmOWEyYWYyZGExYjFh
NjY0YWE3YTRlODE3NDhjZTA1ZThiOTkwNy4uNDFhZGI2ZWQ0NTZhYmQ2NGVkOTc5ZjU0ZDhjMjQ4
OTVmMWEyNzc5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTEyLTA3ICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBEb24ndCBkbyBz
aW1wbGlmaWNhdGlvbiBmb3IgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5z
dCBuZWdhdGl2ZSByZWZlcmVuY2UgdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzOTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwZXJjZW50YWdlIG1heSBiZSByZXNvbHZlZCBhZ2FpbnN0
IGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGFsbG93ZWQgb25seSBpbiAnYmFja2dyb3VuZC1w
b3NpdGlvbicgcHJvcGVydHkuCisKKyAgICAgICAgQ3VycmVudGx5IGluIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjLAorICAgICAgICBpdCBjcmVhdGVzIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB0cmVlIHJlc3VsdCBhbmQgZG9lcyBzaW1wbGlmaWNhdGlvbiBmb3IgaXQuCisg
ICAgICAgIEJ1dCBkdXJpbmcgaXQsIGUuZy4gbWluKDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRv
IG1pbigxMCUpIGFuZCBtYXgoNTAlLCAxMCUpIGlzIHNpbXBsaWZpZWQgdG8gbWF4KDUwJSksCisg
ICAgICAgIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSByZXN1bHQgd2hhdCBzaG91bGQgYmUgZG9uZSBh
Z2FpbnN0IG5lZ2F0aXZlIGJhc2lzLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhlIHBl
cmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmFnYXRpdmUgYmFzaXMgaXMg
ZG9uZSBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFy
c2VyOjpwYXJzZUNhbGMpOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4p
OgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmg6CisgICAgICAgICog
Y3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUuaDoKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVCYWNrZ3JvdW5kUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Q2FsY1BhcnNlcjo6Q2FsY1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpb25Db21wb25l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
UG9zaXRpb25Db29yZGluYXRlcyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaDoKKwogMjAyMS0xMi0wNyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIENvY29hIFdlYkdMIHNob3VsZCBzdXBwb3J0IFVJIHNpZGUg
Y29tcG9zaXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXIuY3BwCmluZGV4IDM1YzZjOGMzZGIzMzIzOTQ2ZDg0OTk0MmIz
MGM2NDFjNGQ2NzNlNjYuLjA4MTI1OTA2ZWVlYmY1ZTMzNzc5YmMzYzRkNDRhOWJlMzgyYTg2ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLmNwcApAQCAtNjEsOCArNjEsMjQgQEAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
bWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOwogLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+
IFsgWyAnKycgfCAnLScgXSA8Y2FsYy1wcm9kdWN0PiBdKgogLy8gPGNhbGMtcHJvZHVjdD4gPSA8
Y2FsYy12YWx1ZT4gWyBbICcqJyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgogLy8gPGNhbGMtdmFs
dWU+ID0gPG51bWJlcj4gfCA8ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3Vt
PiApCi1SZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXI6OnBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBm
dW5jdGlvbikKK1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zLCBDU1NWYWx1
ZUlEIGZ1bmN0aW9uLCBib29sIGFsbG93TmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKQogewor
ICAgIGF1dG8gc2V0QWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlSWZOZWVkZWQgPSBb
XShSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgZXhwcmVzc2lvbikgeworICAgICAgICBp
ZiAoZXhwcmVzc2lvbi0+dHlwZSgpID09IENTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3Nz
Q2FsY09wZXJhdGlvbikgeworICAgICAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25j
YXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPigqZXhwcmVzc2lvbik7CisgICAgICAgICAgICBpZiAo
b3BlcmF0aW9uTm9kZS5pc01pbk9yTWF4Tm9kZSgpKQorICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk5vZGUuc2V0QWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKCk7CisKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPnR5cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5
cGU6OkNzc0NhbGNPcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgb3BlcmF0
aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb25Ob2RlLmlzTWluT3JNYXhOb2RlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob2RlLnNldEFsbG93c05lZ2F0aXZlUGVy
Y2VudGFnZVJlZmVyZW5jZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKIAogICAg
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJlc3VsdDsKQEAgLTc1LDYgKzkxLDkgQEAg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZUNhbGMoQ1NTUGFyc2VyVG8KIAogICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjICIgPDwgcHJldHR5
UHJpbnROb2RlKCpyZXN1bHQpKTsKIAorICAgIGlmIChhbGxvd05lZ2F0aXZlUGVyY2VudGFnZVJl
ZmVyZW5jZSkKKyAgICAgICAgc2V0QWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlSWZO
ZWVkZWQocmVzdWx0KTsKKwogICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1w
bGlmeShyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oQ2Fs
Yywgc3RyZWFtIDw8ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAtIGFm
dGVyIHNpbXBsaWZpY2F0aW9uICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
LmgKaW5kZXggMzkzNzc5MTU1MGE2YjdjNWY1Y2FhOTEzMmRmNzk0NmFjMjIzNTRmZS4uNGZhYzMz
ZGNkZWU3NDYxM2RjYzI2MzBlNWU0ZmQ5MDFhZWI2ZjlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5j
dGlvbik7CisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1Bh
cnNlclRva2VuUmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24sIGJvb2wpOwogICAgIAogcHJpdmF0
ZToKICAgICBjaGFyIG9wZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAppbmRleCA2
NmM5MzQwMzgxZDA2ZTFjY2E2ZDU2N2IyMWVjZTRlMmE1ZDliMjU1Li5iMzU3MjBkMzdmZjgwMDM5
YWI3MmY4ZWY3YzhlYTk4MWYwYjAwMjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC04MjgsNiArODI4LDIwIEBAIHZvaWQgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbWJpbmVDaGlsZHJlbigpCiAKICAgICBpZiAoKGlzTWluT3JN
YXhOb2RlKCkgfHwgaXNIeXBvdE5vZGUoKSkgJiYgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkpIHsK
ICAgICAgICAgYXV0byBjb21iaW5lZFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZl
VHlwZSgpOworCisgICAgICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpKSB7CisgICAgICAgICAgICBh
dXRvIGludm9sdmVzUGVyY2VudGFnZUNvbXBhcmlzb25zID0gW10oQ1NTVW5pdFR5cGUgdW5pdFR5
cGUsIGludCBudW1iZXJPZkNoaWxkcmVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICh1bml0VHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgJiYgbnVtYmVyT2ZD
aGlsZHJlbiA+IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYg
KGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpICYmIGludm9sdmVzUGVyY2VudGFn
ZUNvbXBhcmlzb25zKGNvbWJpbmVkVW5pdFR5cGUsIG1fY2hpbGRyZW4uc2l6ZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBhdXRvIGNhdGVnb3J5ID0g
Y2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGNvbWJpbmVkVW5pdFR5cGUpOwogICAg
ICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCiAgICAgICAg
ICAgICBjb21iaW5lZFVuaXRUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNh
dGVnb3J5KGNhdGVnb3J5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNPcGVyYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5oCmluZGV4IDE5NWQyODIyMDkzOTIzZTc1MDM0YzVlNzhjODgyYTRmZWU2YTYw
MDEuLjAxNTVhM2E5MzAyN2UxNmI0YjYzMDU1NjY1MTRkZGM0ZTA3MjQzOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaApAQCAtNzMsNiArNzMs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25z
dDsKIAorICAgIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKCkgeyByZXR1
cm4gbV9hbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2U7IH0KKyAgICB2b2lkIHNldEFs
bG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpIHsgbV9hbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2VSZWZlcmVuY2UgPSB0cnVlOyB9CisKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7
IHJldHVybiBtX2NoaWxkcmVuLnNpemUoKSA9PSAxICYmIChtX29wZXJhdG9yID09IENhbGNPcGVy
YXRvcjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXggfHwgbV9vcGVyYXRv
ciA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TXVs
dGlwbHkpOyB9CiAKICAgICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KQEAgLTgyLDYgKzg1LDcg
QEAgcHJpdmF0ZToKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
bGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgICAg
ICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKICAgICAgICAgLCBtX29wZXJhdG9y
KG9wKQorICAgICAgICAsIG1fYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKGZhbHNl
KQogICAgIHsKICAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwog
ICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGxlZnRTaWRlKSk7CkBA
IC05Miw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
KGNhdGVnb3J5KQogICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCiAgICAgICAgICwgbV9jaGlsZHJl
bihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICAgICAgLCBtX2FsbG93c05lZ2F0aXZlUGVyY2VudGFn
ZVJlZmVyZW5jZShmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC0xNDEsNiArMTQ2LDcgQEAgcHJp
dmF0ZToKIAogICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOwogICAgIFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKKyAgICB1bnNpZ25lZCBtX2FsbG93c05l
Z2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA6IDE7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcAppbmRleCBlZTFkNDU5ZjRhNmUxMTAyOTBjNzUwZDNlYjkw
YzIxZGY5Yzc3NmM4Li5iNjRiNDcxNzEzNjBhM2U2MGI5NzdkZjJkYWI3ZjE5MTgxOTAyMjQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKQEAgLTM5MCwxMCArMzkw
LDEwIEBAIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAg
IHRzIDw8ICIpXG4iOwogfQogCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNy
ZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK1JlZlB0cjxDU1ND
YWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0
IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5h
dGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSkKIHsK
ICAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgcGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdv
cnksIHN5bWJvbFRhYmxlKTsKLSAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxj
KHRva2VucywgZnVuY3Rpb24pOworICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNh
bGModG9rZW5zLCBmdW5jdGlvbiwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKTsK
ICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8g
cmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShleHByZXNzaW9uLnJlbGVhc2VOb25O
dWxsKCksIHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFsbCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuaAppbmRleCBjMzJiOThlOTk2OWNhZjM1ODBlZTgwN2NmNDQzODQ5NmRjMzA5
NzQwLi42OGU5YTU5ZjhiMWY5NDFiZjc3ODA4YWU2MTI5MjYzZDczZWY3ZmNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuaApAQCAtNTAsNyArNTAsNyBAQCBlbnVtIGNsYXNz
IFZhbHVlUmFuZ2UgOiB1aW50OF90OwogCiBjbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJs
aWMgQ1NTVmFsdWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBj
cmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNy
ZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5j
ZSA9IGZhbHNlKTsKICAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1Zh
bHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UpOwogICAgIHN0YXRpYyBSZWZQ
dHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IFJl
bmRlclN0eWxlJik7CiAgICAgfkNTU0NhbGNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAppbmRleCA5ODEwMDI1MDA1NjdhMmYzNjc4
NTVkZWJhNWNjZmIxNzNjOGMwZWVhLi41NmI0MjE3YjdkZTAwYjY1YWIzZjdmODM5YWY4ZGI4M2Y2
ZDc4MTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VyLmNwcApAQCAtNTU1OSw5ICs1NTU5LDEwIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNv
bnN1bWVMZWdhY3lCcmVha1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wKIHN0
YXRpYyBib29sIGNvbnN1bWVCYWNrZ3JvdW5kUG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdFgsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3Vs
dFkpCiB7CiAgICAgZG8gewotICAgICAgICBhdXRvIHBvc2l0aW9uID0gY29uc3VtZVBvc2l0aW9u
Q29vcmRpbmF0ZXMocmFuZ2UsIGNvbnRleHQubW9kZSwgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4
OjpCYWNrZ3JvdW5kUG9zaXRpb24pOworICAgICAgICBhdXRvIHBvc2l0aW9uID0gY29uc3VtZVBv
c2l0aW9uQ29vcmRpbmF0ZXMocmFuZ2UsIGNvbnRleHQubW9kZSwgdW5pdGxlc3MsIFBvc2l0aW9u
U3ludGF4OjpCYWNrZ3JvdW5kUG9zaXRpb24sIC8qIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJl
ZmVyZW5jZSAqLyB0cnVlKTsKICAgICAgICAgaWYgKCFwb3NpdGlvbikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgICAgICBhZGRCYWNrZ3JvdW5kVmFsdWUocmVzdWx0WCwgV1RGTW92
ZShwb3NpdGlvbi0+eCkpOwogICAgICAgICBhZGRCYWNrZ3JvdW5kVmFsdWUocmVzdWx0WSwgV1RG
TW92ZShwb3NpdGlvbi0+eSkpOwogICAgIH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1do
aXRlc3BhY2UocmFuZ2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA0NDBmM2ZjMWJiMGIxYjEwMmNkOGE2
MzM1NWIwMTA1NDQ2OTVjOTRhLi42YmE1MDJiYmNlNWYzNTQ2ZDgyYWI3MmQ4ZGE2MWI1ZWNjYmUx
MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGJvb2wgY2FuQ29u
c3VtZUNhbGNWYWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDU1NQYXJzZXJNb2Rl
IHBhcnMKIC8vIEZJWE1FOiBjb25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2ljIGZy
b20gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpCisgICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCksIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlID0gZmFsc2UpCiAgICAg
ICAgIDogbV9zb3VyY2VSYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQogICAg
ICAgICAsIG1fcG9vbChwb29sKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRv
IGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFs
dWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUg
PSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5n
ZSksIGRlc3RpbmF0aW9uQ2F0ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29u
c3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdlLCBz
eW1ib2xUYWJsZSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKTsKICAgICB9CiAK
ICAgICBjb25zdCBDU1NDYWxjVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxjVmFs
dWUuZ2V0KCk7IH0KQEAgLTEwMDgsMTQgKzEwMDgsMTQgQEAgc3RkOjpvcHRpb25hbDxMZW5ndGhP
clBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1
aXJrIHVuaXRsZXNzKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgYm9vbCBh
bGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpCiB7CiAgICAgYXV0byYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CiAKICAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVu
Y3Rpb25Ub2tlbjogewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5
aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVz
dGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/Ci0gICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxj
UGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJh
bmdlLCB7IH0sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIGFsbG93c05lZ2F0aXZlUGVyY2Vu
dGFnZVJlZmVyZW5jZSk7CiAgICAgICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gcGFyc2VyLnZh
bHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNh
dGVnb3J5KCksIHBhcnNlck1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1l
VmFsdWUoKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNjYxLDExICsyNjYxLDExIEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NQYXJzCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoY29sb3IpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0YXRpYyBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA9IGZhbHNl
KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pCiAgICAgICAg
IHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVC
b3R0b20sIENTU1ZhbHVlUmlnaHQsIENTU1ZhbHVlQ2VudGVyPihyYW5nZSk7Ci0gICAgcmV0dXJu
IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2U6OkFs
bCwgdW5pdGxlc3MpOworICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBw
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2VSZWZlcmVuY2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc0hvcml6b250YWxQb3NpdGlvbktl
eXdvcmRPbmx5KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKQEAgLTI4MTQsMjEgKzI4
MTQsMjEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gcG9zaXRp
b25Gcm9tRm91clZhbHVlcyhjb25zdCBzdGQ6OmFycmEKIAogLy8gRklYTUU6IFRoaXMgbWF5IGNv
bnN1bWUgZnJvbSB0aGUgcmFuZ2UgdXBvbiBmYWlsdXJlLiBUaGUgYmFja2dyb3VuZAogLy8gc2hv
cnRoYW5kIHdvcmtzIGFyb3VuZCBpdCwgYnV0IHdlIHNob3VsZCBqdXN0IGZpeCBpdCBoZXJlLgot
c3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGlu
YXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheCBwb3NpdGlvblN5bnRheCkK
K3N0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRp
bmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25TeW50YXgs
IGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKQogewotICAgIGF1dG8gdmFs
dWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cyk7CisgICAgYXV0byB2YWx1ZTEgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpOwog
ICAgIGlmICghdmFsdWUxKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0
byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzKTsKKyAgICBhdXRvIHZhbHVlMiA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5j
ZSk7CiAgICAgaWYgKCF2YWx1ZTIpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkZyb21PbmVWYWx1
ZSgqdmFsdWUxKTsKIAotICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50
KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTMgPSBjb25zdW1l
UG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdh
dGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpOwogICAgIGlmICghdmFsdWUzKQogICAgICAgICByZXR1
cm4gcG9zaXRpb25Gcm9tVHdvVmFsdWVzKCp2YWx1ZTEsICp2YWx1ZTIpOwogCi0gICAgYXV0byB2
YWx1ZTQgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzKTsKKyAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSk7
CiAgICAgCiAgICAgc3RkOjphcnJheTxDU1NQcmltaXRpdmVWYWx1ZSosIDU+IHZhbHVlcyB7CiAg
ICAgICAgIHZhbHVlMS5nZXQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCmluZGV4IDdiYzQzNWJhOTY3YjZhYmQ3NzY4NmFm
YjcyNWQ0ZTM1Yjk3ZWZlMzIuLjIzMzBjYTljZDFjZDMyYzdlMTNiNjg3NjA5MTlhODA5NWI0YmIz
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaApAQCAtOTIsNyArOTIsNyBAQCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZQog
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJh
bmdlJiwgVmFsdWVSYW5nZSk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJj
ZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSwgQ1NTVmFsdWVQ
b29sJik7CiBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJj
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBib29sIGFsbG93c05lZ2F0aXZlUGVy
Y2VudGFnZVJlZmVyZW5jZSA9IGZhbHNlKTsKIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1
bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVz
c1plcm9RdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFu
Z2xlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0g
VW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3Jr
ZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wm
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
ayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0cnVj
dCBQb3NpdGlvbkNvb3JkaW5hdGVzIHsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFBvc2l0aW9uU3ludGF4KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVNpbmdsZUF4aXNQb3NpdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwg
Qm94T3JpZW50KTsKLXN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBv
c2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmssIFBvc2l0aW9uU3ludGF4KTsKK3N0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29y
ZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFBvc2l0aW9uU3ludGF4LCBib29sID0gZmFs
c2UpOwogc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lT25lT3JUd29W
YWx1ZWRQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrKTsKIAogZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlIDogdWlu
dDhfdCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446343</attachid>
            <date>2021-12-08 03:01:15 -0800</date>
            <delta_ts>2021-12-09 00:31:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233987-20211208200114.patch</filename>
            <type>text/plain</type>
            <size>26763</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJmOWEyYWYyZGExYjFh
NjY0YWE3YTRlODE3NDhjZTA1ZThiOTkwNy4uYWE3MmM2Njg1MGZkYjA5NjlmN2ZmYjdiMzE2NGJk
YTEzYjllMmQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTEyLTA4ICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBEb24ndCBkbyBz
aW1wbGlmaWNhdGlvbiBmb3IgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5z
dCBuZWdhdGl2ZSByZWZlcmVuY2UgdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzOTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwZXJjZW50YWdlIG1heSBiZSByZXNvbHZlZCBhZ2FpbnN0
IGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGFsbG93ZWQgb25seSBpbiAnYmFja2dyb3VuZC1w
b3NpdGlvbicgcHJvcGVydHkuCisKKyAgICAgICAgQ3VycmVudGx5IGluIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjLAorICAgICAgICBpdCBjcmVhdGVzIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB0cmVlIHJlc3VsdCBhbmQgZG9lcyBzaW1wbGlmaWNhdGlvbiBmb3IgaXQuCisg
ICAgICAgIEJ1dCBkdXJpbmcgaXQsIGUuZy4gbWluKDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRv
IG1pbigxMCUpIGFuZCBtYXgoNTAlLCAxMCUpIGlzIHNpbXBsaWZpZWQgdG8gbWF4KDUwJSksCisg
ICAgICAgIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSByZXN1bHQgd2hhdCBzaG91bGQgYmUgZG9uZSBh
Z2FpbnN0IG5lZ2F0aXZlIGJhc2lzLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhlIHBl
cmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmFnYXRpdmUgYmFzaXMgaXMg
ZG9uZSBjb3JyZWN0bHkuCisKKyAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBpcyBzdGVw
IDQncyBub3RlIGRlc2NyaWJlZCBiZWxvdyBpbgorICAgICAgICBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLXZhbHVlcy00LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUuCisKKyAgICAg
ICAgJ0lmIGEgcGVyY2VudGFnZSBpcyBsZWZ0IGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgdXN1YWxs
eSBibG9jayBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbm9kZSwKKyAgICAgICAgc2luY2UgaXQgbmVl
ZHMgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90aGVyIHZhbHVlIHVzaW5nIGluZm9ybWF0aW9u
IG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgICAgICAoT3RoZXJ3aXNlLCBpdCB3b3VsZCBo
YXZlIGJlZW4gY29udmVydGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIGluIGFuIGVhcmxpZXIgc3Rl
cC4pCisgICAgICAgIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzICJtaW4iLCBzaW5j
ZSBwZXJjZW50YWdlcyBtaWdodCByZXNvbHZlIGFnYWluc3QgYSBuZWdhdGl2ZSBiYXNpcywKKyAg
ICAgICAgYW5kIHRodXMgZW5kIHVwIHdpdGggYW4gb3Bwb3NpdGUgY29tcGFyYXRpdmUgcmVsYXRp
b25zaGlwIHRoYW4gdGhlIHJhdyBwZXJjZW50YWdlIHZhbHVlIHdvdWxkIHNlZW0gdG8gaW5kaWNh
dGUuJworCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VD
YWxjKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaDoK
KyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAg
KiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZSk6
CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmg6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFja2dy
b3VuZFBvc2l0aW9uKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNh
bGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29v
cmRpbmF0ZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Lmg6CisKIDIwMjEtMTItMDcgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBDb2NvYSBXZWJHTCBzaG91bGQgc3VwcG9ydCBVSSBzaWRlIGNvbXBvc2l0aW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyLmNwcAppbmRleCAzNWM2YzhjM2RiMzMyMzk0NmQ4NDk5NDJiMzBjNjQxYzRkNjcz
ZTY2Li4wODEyNTkwNmVlZWJmNWUzMzc3OWJjM2M0ZDQ0YTliZTM4MmE4Njg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ci5jcHAKQEAgLTYxLDggKzYxLDI0IEBAIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heEV4cHJlc3Np
b25EZXB0aCA9IDEwMDsKIC8vIDxjYWxjLXN1bT4gPSA8Y2FsYy1wcm9kdWN0PiBbIFsgJysnIHwg
Jy0nIF0gPGNhbGMtcHJvZHVjdD4gXSoKIC8vIDxjYWxjLXByb2R1Y3Q+ID0gPGNhbGMtdmFsdWU+
IFsgWyAnKicgfCAnLycgXSA8Y2FsYy12YWx1ZT4gXSoKIC8vIDxjYWxjLXZhbHVlPiA9IDxudW1i
ZXI+IHwgPGRpbWVuc2lvbj4gfCA8cGVyY2VudGFnZT4gfCAoIDxjYWxjLXN1bT4gKQotUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24pCitS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6
OnBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlv
biwgYm9vbCBhbGxvd05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSkKIHsKKyAgICBhdXRvIHNl
dEFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkID0gW10oUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKGV4cHJlc3Np
b24tPnR5cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNPcGVyYXRp
b24pIHsKKyAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oKmV4cHJlc3Npb24pOworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbk5v
ZGUuaXNNaW5Pck1heE5vZGUoKSkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob2RlLnNldEFs
bG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpOworCisgICAgICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkIDogb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNoaWxkLT50eXBlKCkgPT0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxj
T3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc01pbk9yTWF4Tm9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uTm9kZS5zZXRBbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZl
cmVuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCiAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKICAgICBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiByZXN1bHQ7CkBAIC03NSw2ICs5MSw5IEBAIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxj
KENTU1BhcnNlclRvCiAKICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVByaW50Tm9kZSgq
cmVzdWx0KSk7CiAKKyAgICBpZiAoYWxsb3dOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpCisg
ICAgICAgIHNldEFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkKHJlc3Vs
dCk7CisKICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVzdWx0
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1wbGlm
aWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCmluZGV4IDM5
Mzc3OTE1NTBhNmI3YzVmNWNhYTkxMzJkZjc5NDZhYzIyMzU0ZmUuLjRmYWMzM2RjZGVlNzQ2MTNk
Y2MyNjMwZTVlNGZkOTAxYWViNmY5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOworICAg
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJh
bmdlLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBib29sKTsKICAgICAKIHByaXZhdGU6CiAgICAgY2hh
ciBvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRva2VuJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKaW5kZXggNjZjOTM0MDM4MWQw
NmUxY2NhNmQ1NjdiMjFlY2U0ZTJhNWQ5YjI1NS4uYjM1NzIwZDM3ZmY4MDAzOWFiNzJmOGVmN2M4
ZWE5ODFmMGIwMDI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNP
cGVyYXRpb25Ob2RlLmNwcApAQCAtODI4LDYgKzgyOCwyMCBAQCB2b2lkIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQogCiAgICAgaWYgKChpc01pbk9yTWF4Tm9kZSgpIHx8
IGlzSHlwb3ROb2RlKCkpICYmIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpKSB7CiAgICAgICAgIGF1
dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKwor
ICAgICAgICBpZiAoaXNNaW5Pck1heE5vZGUoKSkgeworICAgICAgICAgICAgYXV0byBpbnZvbHZl
c1BlcmNlbnRhZ2VDb21wYXJpc29ucyA9IFtdKENTU1VuaXRUeXBlIHVuaXRUeXBlLCBpbnQgbnVt
YmVyT2ZDaGlsZHJlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodW5pdFR5
cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFICYmIG51bWJlck9mQ2hpbGRyZW4gPiAx
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIChhbGxvd3NOZWdh
dGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UoKSAmJiBpbnZvbHZlc1BlcmNlbnRhZ2VDb21wYXJpc29u
cyhjb21iaW5lZFVuaXRUeXBlLCBtX2NoaWxkcmVuLnNpemUoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9u
Q2F0ZWdvcnlGb3JDb21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKICAgICAgICAgaWYgKGNh
dGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQogICAgICAgICAgICAgY29tYmlu
ZWRVbml0VHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRl
Z29yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0
aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
aAppbmRleCAxOTVkMjgyMjA5MzkyM2U3NTAzNGM1ZTc4Yzg4MmE0ZmVlNmE2MDAxLi4wMTU1YTNh
OTMwMjdlMTZiNGI2MzA1NTY2NTE0ZGRjNGUwNzI0Mzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKQEAgLTczLDYgKzczLDkgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkgY29uc3Q7CiAKKyAgICBi
b29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpIHsgcmV0dXJuIG1fYWxsb3dz
TmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlOyB9CisgICAgdm9pZCBzZXRBbGxvd3NOZWdhdGl2
ZVBlcmNlbnRhZ2VSZWZlcmVuY2UoKSB7IG1fYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJl
bmNlID0gdHJ1ZTsgfQorCiAgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZHJlbi5zaXplKCkgPT0gMSAmJiAobV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8
fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWF4IHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQgfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsgfQog
CiAgICAgY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CkBAIC04Miw2ICs4NSw3IEBAIHByaXZhdGU6
CiAgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwg
Q2FsY09wZXJhdG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKICAgICAgICAgOiBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcCkKKyAgICAg
ICAgLCBtX2FsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZShmYWxzZSkKICAgICB7CiAg
ICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKICAgICAgICAgbV9j
aGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsZWZ0U2lkZSkpOwpAQCAtOTIsNiArOTYs
NyBAQCBwcml2YXRlOgogICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkK
ICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQogICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShj
aGlsZHJlbikpCisgICAgICAgICwgbV9hbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2Uo
ZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtMTQxLDYgKzE0Niw3IEBAIHByaXZhdGU6CiAKICAg
ICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+IG1fY2hpbGRyZW47CisgICAgdW5zaWduZWQgbV9hbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2VSZWZlcmVuY2UgOiAxOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNWYWx1ZS5jcHAKaW5kZXggZWUxZDQ1OWY0YTZlMTEwMjkwYzc1MGQzZWI5MGMyMWRmOWM3NzZj
OC4uYjY0YjQ3MTcxMzYwYTNlNjBiOTc3ZGYyZGFiN2YxOTE4MTkwMjI0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCkBAIC0zOTAsMTAgKzM5MCwxMCBAQCB2b2lk
IENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB0cyA8PCAiKVxu
IjsKIH0KIAotUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBDYWxjdWxh
dGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBD
U1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJU
b2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29y
eSwgVmFsdWVSYW5nZSByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpCiB7CiAgICAgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcihkZXN0aW5hdGlvbkNhdGVnb3J5LCBzeW1ib2xU
YWJsZSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyh0b2tlbnMsIGZ1
bmN0aW9uKTsKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxjKHRva2Vucywg
ZnVuY3Rpb24sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSk7CiAgICAgaWYgKCFl
eHByZXNzaW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIHJlc3VsdCA9IGFk
b3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCByYW5n
ZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVl
LmgKaW5kZXggYzMyYjk4ZTk5NjljYWYzNTgwZWU4MDdjZjQ0Mzg0OTZkYzMwOTc0MC4uNjhlOWE1
OWY4YjFmOTQxYmY3NzgwOGFlNjEyOTI2M2Q3M2VmN2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ZhbHVlLmgKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBjbGFzcyBWYWx1ZVJhbmdl
IDogdWludDhfdDsKIAogY2xhc3MgQ1NTQ2FsY1ZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1Zh
bHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTVmFs
dWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgPSBmYWxzZSk7
CiAgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0
aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0
aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlKTsKICAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNW
YWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYp
OwogICAgIH5DU1NDYWxjVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5kZXggOTgxMDAyNTAwNTY3YTJmMzY3ODU1ZGViYTVjY2Zi
MTczYzhjMGVlYS4uNTZiNDIxN2I3ZGUwMGI2NWFiM2Y3ZjgzOWFmOGRiODNmNmQ3ODEwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAg
LTU1NTksOSArNTU1OSwxMCBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lTGVnYWN5
QnJlYWtQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sCiBzdGF0aWMgYm9vbCBj
b25zdW1lQmFja2dyb3VuZFBvc2l0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBSZWZQ
dHI8Q1NTVmFsdWU+JiByZXN1bHRYLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHRZKQogewogICAg
IGRvIHsKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVz
KHJhbmdlLCBjb250ZXh0Lm1vZGUsIHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheDo6QmFja2dyb3Vu
ZFBvc2l0aW9uKTsKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IGNvbnN1bWVQb3NpdGlvbkNvb3Jk
aW5hdGVzKHJhbmdlLCBjb250ZXh0Lm1vZGUsIHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheDo6QmFj
a2dyb3VuZFBvc2l0aW9uLCAvKiBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgKi8g
dHJ1ZSk7CiAgICAgICAgIGlmICghcG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICAgICAgYWRkQmFja2dyb3VuZFZhbHVlKHJlc3VsdFgsIFdURk1vdmUocG9zaXRpb24t
PngpKTsKICAgICAgICAgYWRkQmFja2dyb3VuZFZhbHVlKHJlc3VsdFksIFdURk1vdmUocG9zaXRp
b24tPnkpKTsKICAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJh
bmdlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAKaW5kZXggNDQwZjNmYzFiYjBiMWIxMDJjZDhhNjMzNTViMDEwNTQ0
Njk1Yzk0YS4uNmJhNTAyYmJjZTVmMzU0NmQ4MmFiNzJkOGRhNjFiNWVjY2JlMTBkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFs
dWUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBwYXJzCiAvLyBG
SVhNRTogY29uc2lkZXIgcHVsbGluZyBpbiB0aGUgcGFyc2luZyBsb2dpYyBmcm9tIENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4
cGxpY2l0IENhbGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFs
dWVSYW5nZTo6QWxsLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0geyB9
LCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQorICAgIGV4
cGxpY2l0IENhbGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFs
dWVSYW5nZTo6QWxsLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0geyB9
LCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBib29sIGFs
bG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA9IGZhbHNlKQogICAgICAgICA6IG1fc291
cmNlUmFuZ2UocmFuZ2UpCiAgICAgICAgICwgbV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bv
b2wocG9vbCkKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IENTU1Bh
cnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICAgICAgYXV0byBmdW5jdGlvbklk
ID0gdG9rZW4uZnVuY3Rpb25JZCgpOwogICAgICAgICBpZiAoQ1NTQ2FsY1ZhbHVlOjppc0NhbGNG
dW5jdGlvbihmdW5jdGlvbklkKSkKLSAgICAgICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1Zh
bHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5h
dGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICBtX2Nh
bGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGZ1bmN0aW9uSWQsIGNvbnN1bWVGdW5jdGlv
bihtX3JhbmdlKSwgZGVzdGluYXRpb25DYXRlZ29yeSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSk7CiAgICAgfQogCiAgICAgY29uc3Qg
Q1NTQ2FsY1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9
CkBAIC0xMDA4LDE0ICsxMDA4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3
PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmCiAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVz
cykKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIGJvb2wgYWxsb3dzTmVnYXRp
dmVQZXJjZW50YWdlUmVmZXJlbmNlKQogewogICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogCiAgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
IHsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHVzaW5nIHRyeWluZyB0byBnZW5l
cmF0ZSB0aGUgY2FsYyB3aXRoIGJvdGggTGVuZ3RoIGFuZCBQZXJjZW50IGRlc3RpbmF0aW9uIGNh
dGVnb3J5IHR5cGVzPwotICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgQ2FsY1BhcnNlciBwYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVu
Y2UpOwogICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBjYWxj
dWxhdGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBw
YXJzZXJNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjY2MSwxMSArMjY2MSwxMSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFycwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNv
bG9yKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0
aW9uQ29tcG9uZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywg
Ym9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgPSBmYWxzZSkKIHsKICAgICBp
ZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKQogICAgICAgICByZXR1cm4gY29u
c3VtZUlkZW50PENTU1ZhbHVlTGVmdCwgQ1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tLCBDU1NW
YWx1ZVJpZ2h0LCBDU1NWYWx1ZUNlbnRlcj4ocmFuZ2UpOwotICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNz
KTsKKyAgICByZXR1cm4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgcGFyc2VyTW9kZSwg
VmFsdWVSYW5nZTo6QWxsLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJl
bmNlKTsKIH0KIAogc3RhdGljIGJvb2wgaXNIb3Jpem9udGFsUG9zaXRpb25LZXl3b3JkT25seShj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCkBAIC0yODE0LDIxICsyODE0LDIxIEBAIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IHBvc2l0aW9uRnJvbUZvdXJW
YWx1ZXMoY29uc3Qgc3RkOjphcnJhCiAKIC8vIEZJWE1FOiBUaGlzIG1heSBjb25zdW1lIGZyb20g
dGhlIHJhbmdlIHVwb24gZmFpbHVyZS4gVGhlIGJhY2tncm91bmQKIC8vIHNob3J0aGFuZCB3b3Jr
cyBhcm91bmQgaXQsIGJ1dCB3ZSBzaG91bGQganVzdCBmaXggaXQgaGVyZS4KLXN0ZDo6b3B0aW9u
YWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25TeW50YXgpCitzdGQ6Om9wdGlv
bmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4LCBib29sIGFsbG93
c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSkKIHsKLSAgICBhdXRvIHZhbHVlMSA9IGNvbnN1
bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIGF1
dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKTsKICAgICBpZiAoIXZh
bHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmFsdWUyID0g
Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Cisg
ICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1v
ZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpOwogICAgIGlm
ICghdmFsdWUyKQogICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9tT25lVmFsdWUoKnZhbHVlMSk7
CiAKLSAgICBhdXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MpOworICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29t
cG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmVQZXJjZW50
YWdlUmVmZXJlbmNlKTsKICAgICBpZiAoIXZhbHVlMykKICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
RnJvbVR3b1ZhbHVlcygqdmFsdWUxLCAqdmFsdWUyKTsKIAotICAgIGF1dG8gdmFsdWU0ID0gY29u
c3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7CisgICAg
YXV0byB2YWx1ZTQgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpOwogICAgIAogICAg
IHN0ZDo6YXJyYXk8Q1NTUHJpbWl0aXZlVmFsdWUqLCA1PiB2YWx1ZXMgewogICAgICAgICB2YWx1
ZTEuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaAppbmRleCA3YmM0MzViYTk2N2I2YWJkNzc2ODZhZmI3MjVkNGUzNWI5
N2VmZTMyLi4yMzMwY2E5Y2QxY2QzMmM3ZTEzYjY4NzYwOTE5YTgwOTViNGJiMzgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmgKQEAgLTkyLDcgKzkyLDcgQEAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWUKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVl
UmFuZ2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNh
ZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYpOwogc3Rk
OjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9
IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZl
cmVuY2UgPSBmYWxzZSk7CiBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6
OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlk
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiwgVW5pdGxlc3NR
dWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVz
c1plcm9RdWlyazo6Rm9yYmlkKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdHJ1Y3QgUG9zaXRpb25D
b29yZGluYXRlcyB7CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBQb3Np
dGlvblN5bnRheCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVTaW5nbGVBeGlz
UG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIEJveE9yaWVudCk7
Ci1zdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3Jk
aW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
LCBQb3NpdGlvblN5bnRheCk7CitzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNv
bnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrLCBQb3NpdGlvblN5bnRheCwgYm9vbCA9IGZhbHNlKTsKIHN0ZDo6
b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZU9uZU9yVHdvVmFsdWVkUG9zaXRp
b25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayk7CiAKIGVudW0gY2xhc3MgQWxsb3dlZEltYWdlVHlwZSA6IHVpbnQ4X3QgewpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDYyMTBmNWEzMzE2NzM0NDRjZTEzNTIzYWJjMjAzMjAzYzJjYjU0OWYuLjFmN2ZkMWQ2MjEy
MTMyM2MyNzg5ZTQzODgzNzJkNDllNjIwZjIwODkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAy
MS0xMi0wOCAgSm9vbmdodW4gUGFyayAgPHBqaDA3MThAZ21haWwuY29tPgorCisgICAgICAgIERv
bid0IGRvIHNpbXBsaWZpY2F0aW9uIGZvciBwZXJjZW50YWdlIGNvbXBhcmlzb24gcmVzb2x1dGlv
biBhZ2FpbnN0IG5lZ2F0aXZlIHJlZmVyZW5jZSB2YWx1ZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5ODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIHBlcmNlbnRhZ2UgbWF5IGJlIHJlc29sdmVk
IGFnYWluc3QgYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMgYWxsb3dlZCBvbmx5IGluICdiYWNr
Z3JvdW5kLXBvc2l0aW9uJyBwcm9wZXJ0eS4KKworICAgICAgICBDdXJyZW50bHkgaW4gQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMsCisgICAgICAgIGl0IGNyZWF0ZXMgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlIHRyZWUgcmVzdWx0IGFuZCBkb2VzIHNpbXBsaWZpY2F0aW9uIGZv
ciBpdC4KKyAgICAgICAgQnV0IGR1cmluZyBpdCwgZS5nLiBtaW4oNTAlLCAxMCUpIGlzIHNpbXBs
aWZpZWQgdG8gbWluKDEwJSkgYW5kIG1heCg1MCUsIDEwJSkgaXMgc2ltcGxpZmllZCB0byBtYXgo
NTAlKSwKKyAgICAgICAgd2hpY2ggaXMgdGhlIG9wcG9zaXRlIHJlc3VsdCB3aGF0IHNob3VsZCBi
ZSBkb25lIGFnYWluc3QgbmVnYXRpdmUgYmFzaXMuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNo
LCB0aGUgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5zdCBuYWdhdGl2ZSBi
YXNpcyBpcyBkb25lIGNvcnJlY3RseS4KKworICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBzcGVj
IGlzIHN0ZXAgNCdzIG5vdGUgZGVzY3JpYmVkIGJlbG93IGluCisgICAgICAgIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEtY2FsY3VsYXRpb24tdHJlZS4K
KworICAgICAgICAnSWYgYSBwZXJjZW50YWdlIGlzIGxlZnQgYXQgdGhpcyBwb2ludCwgaXQgd2ls
bCB1c3VhbGx5IGJsb2NrIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBub2RlLAorICAgICAgICBzaW5j
ZSBpdCBuZWVkcyB0byBiZSByZXNvbHZlZCBhZ2FpbnN0IGFub3RoZXIgdmFsdWUgdXNpbmcgaW5m
b3JtYXRpb24gbm90IGN1cnJlbnRseSBhdmFpbGFibGUuCisgICAgICAgIChPdGhlcndpc2UsIGl0
IHdvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgaW4gYW4gZWFy
bGllciBzdGVwLikKKyAgICAgICAgVGhpcyBpbmNsdWRlcyBvcGVyYXRpb25zIHN1Y2ggYXMgIm1p
biIsIHNpbmNlIHBlcmNlbnRhZ2VzIG1pZ2h0IHJlc29sdmUgYWdhaW5zdCBhIG5lZ2F0aXZlIGJh
c2lzLAorICAgICAgICBhbmQgdGh1cyBlbmQgdXAgd2l0aCBhbiBvcHBvc2l0ZSBjb21wYXJhdGl2
ZSByZWxhdGlvbnNoaXAgdGhhbiB0aGUgcmF3IHBlcmNlbnRhZ2UgdmFsdWUgd291bGQgc2VlbSB0
byBpbmRpY2F0ZS4nCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTEyLTAz
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtj
c3MtZmxleGJveF0gQWNjb3VudCBmb3IgY2FwdGlvbnMgd2hlbiBmbGV4aW5nIHRhYmxlcyB3aXRo
IHNwZWNpZmllZCBzaXplcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggNDViMGRi
YWRlMTZhODZlNDRhZjcxMGJmOTUzZjg0MjZmYTBkYzE3NS4uNzJkZTY3ZGE0MTc2MjdhZTcyZTY3
ZWVjOTExMzI4ZDZmNDlhZDBiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMjEtMTItMDggIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1
bmcuY29tPgorCisgICAgICAgIERvbid0IGRvIHNpbXBsaWZpY2F0aW9uIGZvciBwZXJjZW50YWdl
IGNvbXBhcmlzb24gcmVzb2x1dGlvbiBhZ2FpbnN0IG5lZ2F0aXZlIHJlZmVyZW5jZSB2YWx1ZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM5ODcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIHBlcmNl
bnRhZ2UgbWF5IGJlIHJlc29sdmVkIGFnYWluc3QgYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMg
YWxsb3dlZCBvbmx5IGluICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyBwcm9wZXJ0eS4KKworICAgICAg
ICBDdXJyZW50bHkgaW4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMsCisg
ICAgICAgIGl0IGNyZWF0ZXMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHRyZWUgcmVzdWx0IGFuZCBk
b2VzIHNpbXBsaWZpY2F0aW9uIGZvciBpdC4KKyAgICAgICAgQnV0IGR1cmluZyBpdCwgZS5nLiBt
aW4oNTAlLCAxMCUpIGlzIHNpbXBsaWZpZWQgdG8gbWluKDEwJSkgYW5kIG1heCg1MCUsIDEwJSkg
aXMgc2ltcGxpZmllZCB0byBtYXgoNTAlKSwKKyAgICAgICAgd2hpY2ggaXMgdGhlIG9wcG9zaXRl
IHJlc3VsdCB3aGF0IHNob3VsZCBiZSBkb25lIGFnYWluc3QgbmVnYXRpdmUgYmFzaXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGUgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRp
b24gYWdhaW5zdCBuYWdhdGl2ZSBiYXNpcyBpcyBkb25lIGNvcnJlY3RseS4KKworICAgICAgICBU
aGUgY29ycmVzcG9uZGluZyBzcGVjIGlzIHN0ZXAgNCdzIG5vdGUgZGVzY3JpYmVkIGJlbG93IGlu
CisgICAgICAgIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5
LWEtY2FsY3VsYXRpb24tdHJlZS4KKworICAgICAgICAnSWYgYSBwZXJjZW50YWdlIGlzIGxlZnQg
YXQgdGhpcyBwb2ludCwgaXQgd2lsbCB1c3VhbGx5IGJsb2NrIHNpbXBsaWZpY2F0aW9uIG9mIHRo
ZSBub2RlLAorICAgICAgICBzaW5jZSBpdCBuZWVkcyB0byBiZSByZXNvbHZlZCBhZ2FpbnN0IGFu
b3RoZXIgdmFsdWUgdXNpbmcgaW5mb3JtYXRpb24gbm90IGN1cnJlbnRseSBhdmFpbGFibGUuCisg
ICAgICAgIChPdGhlcndpc2UsIGl0IHdvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSBkaWZm
ZXJlbnQgdmFsdWUgaW4gYW4gZWFybGllciBzdGVwLikKKyAgICAgICAgVGhpcyBpbmNsdWRlcyBv
cGVyYXRpb25zIHN1Y2ggYXMgIm1pbiIsIHNpbmNlIHBlcmNlbnRhZ2VzIG1pZ2h0IHJlc29sdmUg
YWdhaW5zdCBhIG5lZ2F0aXZlIGJhc2lzLAorICAgICAgICBhbmQgdGh1cyBlbmQgdXAgd2l0aCBh
biBvcHBvc2l0ZSBjb21wYXJhdGl2ZSByZWxhdGlvbnNoaXAgdGhhbiB0aGUgcmF3IHBlcmNlbnRh
Z2UgdmFsdWUgd291bGQgc2VlbSB0byBpbmRpY2F0ZS4nCisKKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy12YWx1ZXMvbWlubWF4LXBlcmNlbnRhZ2Utc2VyaWFsaXplLWV4cGVj
dGVkLnR4dDoKKwogMjAyMS0xMi0wNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgcGVyc3BlY3RpdmUoKSA8PSAxcHggc2hvdWxkIGJlIGNsYW1wZWQg
dG8gMXB4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBmZDQzNGRmODM1NDg1YTNkMWM2NjgxYjk4ZDAw
ODNhNmMxZmQ5N2JjLi5hMTdiNzEwY2E4OGUzYTUxMGY3OTczYTg1YWYwNDAxMGRjYmMxZWYyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM3MTYsNyArMzcxNiw2IEBAIHdlYmtpdC5vcmcvYi8yMDY3
NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91bmRzL2Jh
Y2tncm91CiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLWF0dGFjaG1lbnQtbG9jYWwvYXR0YWNo
bWVudC1sb2NhbC1jbGlwcGluZy1pbWFnZS02Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LWJhY2tncm91bmRzL2JhY2tncm91bmQtYXR0YWNobWVudC1sb2NhbC9hdHRhY2htZW50LWxvY2Fs
LXBvc2l0aW9uaW5nLTMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIw
Njc1MyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMv
YmFja2dyb3VuZC1hdHRhY2htZW50LWxvY2FsL2F0dGFjaG1lbnQtbG9jYWwtcG9zaXRpb25pbmct
NC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLXBv
c2l0aW9uLW5lZ2F0aXZlLXBlcmNlbnRhZ2UtY29tcGFyaXNvbi5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLXNpemUtY292ZXItMDAzLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91bmRzL2JhY2tncm91bmQtc2l6ZS9iYWNrZ3Jv
dW5kLXNpemUtY292ZXItc3ZnLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91
bmRzL2JhY2tncm91bmQtc2l6ZS92ZWN0b3IvYmFja2dyb3VuZC1zaXplLXZlY3Rvci0wMDMuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXZhbHVlcy9taW5tYXgtcGVyY2VudGFnZS1z
ZXJpYWxpemUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLXZhbHVlcy9taW5tYXgtcGVyY2VudGFnZS1zZXJpYWxpemUtZXhw
ZWN0ZWQudHh0CmluZGV4IDM0ZDlhM2M0ZmVhNjJjMWZmYzY2YWE3MmQ1NTVjMTExYjY0MzRhMjku
LmFmNzE3OWNjMTE4YmEzYTQzM2Q3NTU0NTE4MzdlN2E2NDdiMDE2NWIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy12YWx1ZXMv
bWlubWF4LXBlcmNlbnRhZ2Utc2VyaWFsaXplLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdmFsdWVzL21pbm1heC1w
ZXJjZW50YWdlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQKQEAgLTE3LDcgKzE3LDcgQEAgUEFTUyAn
bWF4KDElLCAyJSwgMyUpJyBhcyBhIHVzZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnM3B4
Jy4KIEZBSUwgJ21heCgzJSwgMiUsIDElKScgYXMgYSBzcGVjaWZpZWQgdmFsdWUgc2hvdWxkIHNl
cmlhbGl6ZSBhcyAnbWF4KDMlLCAyJSwgMSUpJy4gYXNzZXJ0X2VxdWFsczogJ21heCgzJSwgMiUs
IDElKScgc2hvdWxkIHJvdW5kLXRyaXAgZXhhY3RseSBpbiBzcGVjaWZpZWQgdmFsdWVzLiBleHBl
Y3RlZCAibWF4KDMlLCAyJSwgMSUpIiBidXQgZ290ICJtYXgoMyUpIgogRkFJTCAnbWF4KDMlLCAy
JSwgMSUpJyBhcyBhIGNvbXB1dGVkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ21heCgzJSwg
MiUsIDElKScuIGFzc2VydF9lcXVhbHM6ICdtYXgoMyUsIDIlLCAxJSknIHNob3VsZCByb3VuZC10
cmlwIGV4YWN0bHkgaW4gY29tcHV0ZWQgdmFsdWVzLiBleHBlY3RlZCAibWF4KDMlLCAyJSwgMSUp
IiBidXQgZ290ICJtYXgoMyUpIgogUEFTUyAnbWF4KDMlLCAyJSwgMSUpJyBhcyBhIHVzZWQgdmFs
dWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnM3B4Jy4KLUZBSUwgJ21pbigxJSwgMiUsIDMlKSAwcHgn
IGFzIGEgc3BlY2lmaWVkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ21pbigxJSwgMiUsIDMl
KSAwcHgnLiBhc3NlcnRfZXF1YWxzOiAnbWluKDElLCAyJSwgMyUpIDBweCcgc2hvdWxkIHJvdW5k
LXRyaXAgZXhhY3RseSBpbiBzcGVjaWZpZWQgdmFsdWVzLiBleHBlY3RlZCAibWluKDElLCAyJSwg
MyUpIDBweCIgYnV0IGdvdCAibWluKDElKSAwcHgiCitQQVNTICdtaW4oMSUsIDIlLCAzJSkgMHB4
JyBhcyBhIHNwZWNpZmllZCB2YWx1ZSBzaG91bGQgc2VyaWFsaXplIGFzICdtaW4oMSUsIDIlLCAz
JSkgMHB4Jy4KIEZBSUwgJ21pbigxJSwgMiUsIDMlKSAwcHgnIGFzIGEgY29tcHV0ZWQgdmFsdWUg
c2hvdWxkIHNlcmlhbGl6ZSBhcyAnbWluKDElLCAyJSwgMyUpIDBweCcuIGFzc2VydF9lcXVhbHM6
ICdtaW4oMSUsIDIlLCAzJSkgMHB4JyBzaG91bGQgcm91bmQtdHJpcCBleGFjdGx5IGluIGNvbXB1
dGVkIHZhbHVlcy4gZXhwZWN0ZWQgIm1pbigxJSwgMiUsIDMlKSAwcHgiIGJ1dCBnb3QgIm1pbigx
JSkgMHB4IgogUEFTUyAnY2FsYyhtaW4oMSUsIDIlKSArIG1heCgzJSwgNCUpICsgMTAlKScgYXMg
YSBzcGVjaWZpZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnY2FsYygxNSUpJy4KIFBBU1Mg
J2NhbGMobWluKDElLCAyJSkgKyBtYXgoMyUsIDQlKSArIDEwJSknIGFzIGEgY29tcHV0ZWQgdmFs
dWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnMTUlJy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446504</attachid>
            <date>2021-12-09 00:31:36 -0800</date>
            <delta_ts>2021-12-10 07:56:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233987-20211209173135.patch</filename>
            <type>text/plain</type>
            <size>33265</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDM3MjFiZjI0NDEyYjQ5
YmVhOTM0ZWM5ZTFiYmRmYmM2YWVlZDM5ZC4uOGQ5M2Y4YTY0NTExMTA3ZjgyMmJlZmE4ZTE0M2I4
NmFhZjMxMGMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIxLTEyLTA5ICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBEb24ndCBkbyBz
aW1wbGlmaWNhdGlvbiBmb3IgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5z
dCBuZWdhdGl2ZSByZWZlcmVuY2UgdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzOTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBwZXJjZW50YWdlIG1heSBiZSByZXNvbHZlZCBhZ2FpbnN0
IGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGFsbG93ZWQgb25seSBpbiAnYmFja2dyb3VuZC1w
b3NpdGlvbicgcHJvcGVydHkuCisKKyAgICAgICAgQ3VycmVudGx5IGluIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjLAorICAgICAgICBpdCBjcmVhdGVzIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB0cmVlIHJlc3VsdCBhbmQgZG9lcyBzaW1wbGlmaWNhdGlvbiBmb3IgaXQuCisg
ICAgICAgIEJ1dCBkdXJpbmcgaXQsIGUuZy4gbWluKDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRv
IG1pbigxMCUpIGFuZCBtYXgoNTAlLCAxMCUpIGlzIHNpbXBsaWZpZWQgdG8gbWF4KDUwJSksCisg
ICAgICAgIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSByZXN1bHQgd2hhdCBzaG91bGQgYmUgZG9uZSBh
Z2FpbnN0IG5lZ2F0aXZlIGJhc2lzLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhlIHBl
cmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmFnYXRpdmUgYmFzaXMgaXMg
ZG9uZSBjb3JyZWN0bHkuCisKKyAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBpcyBzdGVw
IDQncyBub3RlIGRlc2NyaWJlZCBiZWxvdyBpbgorICAgICAgICBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLXZhbHVlcy00LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUuCisKKyAgICAg
ICAgJ0lmIGEgcGVyY2VudGFnZSBpcyBsZWZ0IGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgdXN1YWxs
eSBibG9jayBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbm9kZSwKKyAgICAgICAgc2luY2UgaXQgbmVl
ZHMgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90aGVyIHZhbHVlIHVzaW5nIGluZm9ybWF0aW9u
IG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgICAgICAoT3RoZXJ3aXNlLCBpdCB3b3VsZCBo
YXZlIGJlZW4gY29udmVydGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIGluIGFuIGVhcmxpZXIgc3Rl
cC4pCisgICAgICAgIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzICJtaW4iLCBzaW5j
ZSBwZXJjZW50YWdlcyBtaWdodCByZXNvbHZlIGFnYWluc3QgYSBuZWdhdGl2ZSBiYXNpcywKKyAg
ICAgICAgYW5kIHRodXMgZW5kIHVwIHdpdGggYW4gb3Bwb3NpdGUgY29tcGFyYXRpdmUgcmVsYXRp
b25zaGlwIHRoYW4gdGhlIHJhdyBwZXJjZW50YWdlIHZhbHVlIHdvdWxkIHNlZW0gdG8gaW5kaWNh
dGUuJworCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGNzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyk6CisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmg6CisgICAgICAgICog
Y3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbWJpbmVDaGlsZHJlbik6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuaDoKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVhdGUpOgorICAgICAgICAq
IGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9jYWxjL05lZ2F0aXZlUGVy
Y2VudGFnZVJlZmVyZW5jZS5oOiBBZGRlZCBmb3IgZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRh
Z2VSZWZlcmVuY2UuCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFja2dyb3VuZFBvc2l0aW9uKToKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAqIGNz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmg6CisKIDIwMjEtMTItMDggIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIGV4cGVyaW1lbnRh
bCB0cmFja0NvbmZpZ3VyYXRpb24gYWNjZXNzb3Igb24gQXVkaW9UcmFjayAmIFZpZGVvVHJhY2su
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMWU5NmVlNjU3MmFhNDI1ODU5ZGQxZWU5MzAzMmU2ODlmYjBiODU1MS4uYjFmNjExMDZl
NTQxNDIxZTliNzU5NjViMTVjYjhlYjFiM2Q2MzM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA1Miw2ICsxMDUyLDcgQEAK
IAkJMzhGMjNBQjMxRThFODNEMDAwQ0U0NkY1IC8qIEpTV2ViR1BVQ29tcHV0ZUNvbW1hbmRFbmNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzOEYy
M0FCMDFFOEU4M0QwMDBDRTQ2RjUgLyogSlNXZWJHUFVDb21wdXRlQ29tbWFuZEVuY29kZXIuaCAq
LzsgfTsKIAkJMzhGMjNBQjUxRThFODNEMDAwQ0U0NkY1IC8qIEpTV2ViR1BVQ29tcHV0ZVBpcGVs
aW5lU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM4RjIzQUIyMUU4RTgzRDAwMENFNDZGNSAvKiBKU1dlYkdQVUNvbXB1dGVQaXBlbGluZVN0YXRl
LmggKi87IH07CiAJCTNBQzY0OEIyMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0OEIx
MTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzQjc1REMwNDI3NjFGMTc2MDBDOUI3NzEg
LyogTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQjc1REMwMzI3NjFGMTc1MDBDOUI3NzEgLyogTmVnYXRp
dmVQZXJjZW50YWdlUmVmZXJlbmNlLmggKi87IH07CiAJCTNCQjZCODExMjJBN0QzMTMwMDNBMkE2
OSAvKiBUYWJTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4
QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTNGMkIzM0VGMTY1QUYxNTYwMEUzOTg3QyAvKiBKU1dlYktpdENTU1ZpZXdw
b3J0UnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
M0YyQjMzRUExNjVBRjE1NTAwRTM5ODdDIC8qIEpTV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggKi87
IH07CkBAIC04NDUxLDYgKzg0NTIsNyBAQAogCQkzOEYyM0FCMTFFOEU4M0QwMDBDRTQ2RjUgLyog
SlNXZWJHUFVDb21wdXRlUGlwZWxpbmVTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1dlYkdQVUNvbXB1dGVQaXBlbGluZVN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzhGMjNBQjIxRThFODNEMDAwQ0U0NkY1IC8qIEpTV2ViR1BV
Q29tcHV0ZVBpcGVsaW5lU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNXZWJHUFVDb21wdXRlUGlwZWxpbmVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCb3VuZGFyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzQjc1REMwMzI3NjFGMTc1MDBDOUI3NzEgLyogTmVnYXRpdmVQ
ZXJjZW50YWdlUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5l
Z2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUYWJTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyTW9kZWxPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8q
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yOTY4Niw2ICsyOTY4OCw3IEBACiAJCQkJQkM3MDlEREUyNjYzMjNDRTAwQjlB
MjFDIC8qIENTU0NhbGNTeW1ib2xUYWJsZS5oICovLAogCQkJCTQ5QUUyRDhDMTM0RUU1MEMwMDcy
OTIwQSAvKiBDU1NDYWxjVmFsdWUuY3BwICovLAogCQkJCTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIw
QSAvKiBDU1NDYWxjVmFsdWUuaCAqLywKKwkJCQkzQjc1REMwMzI3NjFGMTc1MDBDOUI3NzEgLyog
TmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNhbGM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzYxNDMsNiArMzYxNDYsNyBAQAogCQkJ
CTkzQjBBNjUzMjZDREQxNDEwMEFBMjFFNCAvKiBOYXZpZ2F0b3JQZXJtaXNzaW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk2RTU5REYxREYwMTI4RDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRy
aXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRThCNzgyNDEzMTkxRjAwRTc5NEQ2IC8qIE5h
dmlnYXRvcldlYlhSLmggaW4gSGVhZGVycyAqLywKKwkJCQkzQjc1REMwNDI3NjFGMTc2MDBDOUI3
NzEgLyogTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
QTMwOUM5RjEyMzk1MEJFMDBDQjkyMDQgLyogTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1NkQzNzQzMEFEQkE1REUwMEE0NTU0RCAvKiBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE5RDkzNEIxQUExMUIxRTAwQjQ2
QzI0IC8qIE5ldHdvcmtFeHRlbnNpb25Db250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIuY3BwCmluZGV4IDM1YzZjOGMzZGIzMzIzOTQ2ZDg0OTk0MmIzMGM2NDFjNGQ2NzNlNjYu
LmMwN2I1MmFmZGMwMThhMzVkMmUyZjM0MDA2ZTY0NTdiNzFmZDU0ZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNw
cApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSw4ICs2Miwx
OSBAQCBzdGF0aWMgY29uc3RleHByIGludCBtYXhFeHByZXNzaW9uRGVwdGggPSAxMDA7CiAvLyA8
Y2FsYy1zdW0+ID0gPGNhbGMtcHJvZHVjdD4gWyBbICcrJyB8ICctJyBdIDxjYWxjLXByb2R1Y3Q+
IF0qCiAvLyA8Y2FsYy1wcm9kdWN0PiA9IDxjYWxjLXZhbHVlPiBbIFsgJyonIHwgJy8nIF0gPGNh
bGMtdmFsdWU+IF0qCiAvLyA8Y2FsYy12YWx1ZT4gPSA8bnVtYmVyPiB8IDxkaW1lbnNpb24+IHwg
PHBlcmNlbnRhZ2U+IHwgKCA8Y2FsYy1zdW0+ICkKLVJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2Vu
UmFuZ2UgdG9rZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKQorUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24sIE5lZ2F0aXZlUGVyY2VudGFn
ZVJlZmVyZW5jZSBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpCiB7CisgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKENTU0NhbGNFeHByZXNzaW9uTm9kZSYpPiBzZXRBbGxvd3NOZWdhdGl2
ZVBlcmNlbnRhZ2VSZWZlcmVuY2VJZk5lZWRlZCA9IFsmc2V0QWxsb3dzTmVnYXRpdmVQZXJjZW50
YWdlUmVmZXJlbmNlSWZOZWVkZWRdKENTU0NhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbikg
eworICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGV4cHJlc3Npb24pKSB7Cisg
ICAgICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KGV4cHJlc3Npb24pOworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNNaW5P
ck1heE5vZGUoKSkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob2RlLnNldEFsbG93c05lZ2F0
aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIHNldEFsbG93c05l
Z2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkKGNoaWxkKTsKKyAgICAgICAgfQorICAg
IH07CisKICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKIAogICAgIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IHJlc3VsdDsKQEAgLTc1LDYgKzg3LDkgQEAgUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMo
Q1NTUGFyc2VyVG8KIAogICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjICIgPDwgcHJldHR5UHJpbnROb2RlKCpy
ZXN1bHQpKTsKIAorICAgIGlmIChhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgPT0g
TmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlOjpBbGxvdykKKyAgICAgICAgc2V0QWxsb3dzTmVn
YXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlSWZOZWVkZWQoKnJlc3VsdCk7CisKICAgICByZXN1bHQg
PSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1wbGlmaWNhdGlvbiAiIDw8IHByZXR0
eVByaW50Tm9kZSgqcmVzdWx0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2Fs
Yy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCmluZGV4IDM5Mzc3OTE1NTBhNmI3YzVmNWNh
YTkxMzJkZjc5NDZhYzIyMzU0ZmUuLjliODFhOGM1MzNjZWU1NWQ1MmEyZTEwNzVmZjI4NDE0OGU5
MzI2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHBy
ZXNzaW9uTm9kZVBhcnNlci5oCkBAIC0zNiw2ICszNiw4IEBAIGNsYXNzIENTU0NhbGNTeW1ib2xU
YWJsZTsKIGNsYXNzIENTU1BhcnNlclRva2VuOwogY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsK
IAorZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgOiB1aW50OF90OworCiBj
bGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0
IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0
aW9uQ2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCkBAIC00
NCw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UsIENTU1ZhbHVlSUQg
ZnVuY3Rpb24pOworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHBhcnNlQ2FsYyhD
U1NQYXJzZXJUb2tlblJhbmdlLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBOZWdhdGl2ZVBlcmNlbnRh
Z2VSZWZlcmVuY2UgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKTsKICAgICAKIHBy
aXZhdGU6CiAgICAgY2hhciBvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRva2VuJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKaW5k
ZXggNjZjOTM0MDM4MWQwNmUxY2NhNmQ1NjdiMjFlY2U0ZTJhNWQ5YjI1NS4uNmFiNWNiNjc0ZDQx
NTNkODIyNTJmMjU4N2VlNDZmY2Y1YWFjOGM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcApAQCAtODI4LDYgKzgyOCwxMyBAQCB2b2lk
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQogCiAgICAgaWYgKChpc01p
bk9yTWF4Tm9kZSgpIHx8IGlzSHlwb3ROb2RlKCkpICYmIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigp
KSB7CiAgICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1p
dGl2ZVR5cGUoKTsKKyAgICAgICAgYXV0byBpbnZvbHZlc1BlcmNlbnRhZ2VDb21wYXJpc29ucyA9
IFsmXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBjb21iaW5lZFVuaXRUeXBlID09IENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSAmJiBtX2NoaWxkcmVuLnNpemUoKSA+IDE7CisgICAgICAgIH07
CisKKyAgICAgICAgaWYgKGlzTWluT3JNYXhOb2RlKCkgJiYgYWxsb3dzTmVnYXRpdmVQZXJjZW50
YWdlUmVmZXJlbmNlKCkgJiYgaW52b2x2ZXNQZXJjZW50YWdlQ29tcGFyaXNvbnMoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKwogICAgICAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRl
Z29yeUZvckNvbWJpbmF0aW9uKGNvbWJpbmVkVW5pdFR5cGUpOwogICAgICAgICBpZiAoY2F0ZWdv
cnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCiAgICAgICAgICAgICBjb21iaW5lZFVu
aXRUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25O
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCmlu
ZGV4IDE5NWQyODIyMDkzOTIzZTc1MDM0YzVlNzhjODgyYTRmZWU2YTYwMDEuLjBhMzRhMTRiODk2
NTZmYmY0ZmI2N2JiNDU3Y2IwZDhiNzg3ZTVkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaApAQCAtNzMsNiArNzMsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdDsKIAorICAgIGJvb2wg
YWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKCkgeyByZXR1cm4gbV9hbGxvd3NOZWdh
dGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2U7IH0KKyAgICB2b2lkIHNldEFsbG93c05lZ2F0aXZlUGVy
Y2VudGFnZVJlZmVyZW5jZSgpIHsgbV9hbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2Ug
PSB0cnVlOyB9CisKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
cmVuLnNpemUoKSA9PSAxICYmIChtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXggfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0
b3I6OkFkZCB8fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOyB9CiAKICAg
ICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KQEAgLTE0MSw2ICsxNDQsNyBAQCBwcml2YXRlOgog
CiAgICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiBtX2NoaWxkcmVuOworICAgIGJvb2wgbV9hbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2VSZWZlcmVuY2UgPSBmYWxzZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuY3BwCmluZGV4IGVlMWQ0NTlmNGE2ZTExMDI5MGM3NTBkM2ViOTBjMjFkZjlj
Nzc2YzguLjA4MjI5OWM1YmEwZjJjYmM0Yzk1MDIxNzFmMWI1NDI5NWVlZWY0MDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcApAQCAtMzkwLDEwICszOTAsMTAgQEAg
dm9pZCBDU1NDYWxjVmFsdWU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgdHMgPDwg
IilcbiI7CiB9CiAKLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKENT
U1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHJhbmdlLCBj
b25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorUmVmUHRyPENTU0NhbGNWYWx1
ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0
ZWdvcnksIFZhbHVlUmFuZ2UgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIE5lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRh
Z2VSZWZlcmVuY2UpCiB7CiAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcihk
ZXN0aW5hdGlvbkNhdGVnb3J5LCBzeW1ib2xUYWJsZSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0g
cGFyc2VyLnBhcnNlQ2FsYyh0b2tlbnMsIGZ1bmN0aW9uKTsKKyAgICBhdXRvIGV4cHJlc3Npb24g
PSBwYXJzZXIucGFyc2VDYWxjKHRva2VucywgZnVuY3Rpb24sIGFsbG93c05lZ2F0aXZlUGVyY2Vu
dGFnZVJlZmVyZW5jZSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVz
c2lvbi5yZWxlYXNlTm9uTnVsbCgpLCByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgKaW5kZXggYzMyYjk4ZTk5NjljYWYzNTgwZWU4
MDdjZjQ0Mzg0OTZkYzMwOTc0MC4uMDc3ODNiMDk0MzFjNjJhZTliN2ZiYTIwNTYxNjlkZjMyYjIx
MmJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiTmVnYXRpdmVQZXJj
ZW50YWdlUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgZW51bSBjbGFzcyBWYWx1ZVJhbmdlIDogdWlu
dDhfdDsKIAogY2xhc3MgQ1NTQ2FsY1ZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1ZhbHVlSUQg
ZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTVmFsdWVJRCBm
dW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiwgTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlID0gTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJl
bmNlOjpGb3JiaWQpOwogICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NT
VmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7CiAgICAgc3RhdGljIFJl
ZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3Qg
UmVuZGVyU3R5bGUmKTsKICAgICB+Q1NTQ2FsY1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9OZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlM2I1ZThhMGY4ZDliNTQ1ODEzMWFjNDFlMzVjMzFiMjIxMmI0YzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9OZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2Uu
aApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgOiB1
aW50OF90IHsKKyAgICBBbGxvdywKKyAgICBGb3JiaWQKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAKaW5kZXggOTgxMDAyNTAwNTY3YTJmMzY3ODU1ZGViYTVjY2ZiMTczYzhjMGVlYS4uYTQwOGFm
YmY0ZjhmNDExNjNkZWFmOWNmYjhlMjI2ZDM1OGY2OTdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNp
bmNsdWRlICJDb3VudGVyLmgiCiAjaW5jbHVkZSAiRm9udEZhY2UuaCIKICNpbmNsdWRlICJIYXNo
VG9vbHMuaCIKKyNpbmNsdWRlICJOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UuaCIKIC8vIEZJ
WE1FLU5FV1BBUlNFUjogQ1NTUHJpbWl0aXZlVmFsdWUgaXMgYSBsYXJnZSBjbGFzcyB0aGF0IGhv
bGRzIG1hbnkgdW5yZWxhdGVkIG9iamVjdHMsCiAvLyBzd2l0Y2hpbmcgYmVoYXZpb3Igb24gdGhl
IHR5cGUgb2YgdGhlIG9iamVjdCBpdCBpcyBob2xkaW5nLgogLy8gU2luY2UgQ1NTVmFsdWUgaXMg
YWxyZWFkeSBhIGNsYXNzIGhpZXJhcmNoeSwgdGhpcyBhZGRzIGFuIHVubmVjZXNzYXJ5IHNlY29u
ZCBsZXZlbCB0byB0aGUgaGllcmFyY2h5IHRoYXQgY29tcGxpY2F0ZXMgY29kZS4KQEAgLTU1NTks
NyArNTU2MCw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVMZWdhY3lCcmVha1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wKIHN0YXRpYyBib29sIGNvbnN1bWVC
YWNrZ3JvdW5kUG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFJlZlB0cjxDU1NW
YWx1ZT4mIHJlc3VsdFgsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdFkpCiB7CiAgICAgZG8gewot
ICAgICAgICBhdXRvIHBvc2l0aW9uID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMocmFuZ2Us
IGNvbnRleHQubW9kZSwgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4OjpCYWNrZ3JvdW5kUG9zaXRp
b24pOworICAgICAgICBhdXRvIHBvc2l0aW9uID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMo
cmFuZ2UsIGNvbnRleHQubW9kZSwgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4OjpCYWNrZ3JvdW5k
UG9zaXRpb24sIE5lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZTo6QWxsb3cpOwogICAgICAgICBp
ZiAoIXBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhZGRCYWNr
Z3JvdW5kVmFsdWUocmVzdWx0WCwgV1RGTW92ZShwb3NpdGlvbi0+eCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCmlu
ZGV4IDQ0MGYzZmMxYmIwYjFiMTAyY2Q4YTYzMzU1YjAxMDU0NDY5NWM5NGEuLmFmNWVhYmMyMzhl
ODM3MTJhYjAxMzgzNjcxY2JjNjE2NjA2MGViYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTExOCw3ICsx
MTgsNyBAQCBzdGF0aWMgYm9vbCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnksIENTU1BhcnNlck1vZGUgcGFycwogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxp
bmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIu
CiBjbGFzcyBDYWxjUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29s
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkKKyAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29s
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNl
IGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA9IE5lZ2F0aXZlUGVyY2VudGFnZVJl
ZmVyZW5jZTo6Rm9yYmlkKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAgICAgICAg
ICwgbV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bvb2wocG9vbCkKQEAgLTEyNiw3ICsxMjYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKICAgICAgICAgYXV0byBmdW5jdGlvbklkID0gdG9rZW4uZnVuY3Rpb25JZCgpOwog
ICAgICAgICBpZiAoQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklkKSkKLSAg
ICAgICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwg
Y29uc3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdl
LCBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICBtX2NhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6
Y3JlYXRlKGZ1bmN0aW9uSWQsIGNvbnN1bWVGdW5jdGlvbihtX3JhbmdlKSwgZGVzdGluYXRpb25D
YXRlZ29yeSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFn
ZVJlZmVyZW5jZSk7CiAgICAgfQogCiAgICAgY29uc3QgQ1NTQ2FsY1ZhbHVlKiB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9CkBAIC0xMDA4LDE0ICsxMDA4LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIE5lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSBhbGxvd3NOZWdhdGl2
ZVBlcmNlbnRhZ2VSZWZlcmVuY2UpCiB7CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7
CiAKICAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjog
ewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVy
YXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24gY2F0
ZWdvcnkgdHlwZXM/Ci0gICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIHBhcnNl
cihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlLCB7IH0sIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5j
ZSk7CiAgICAgICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1
bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIHBh
cnNlck1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWUoKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0yNjYxLDExICsyNjYxLDExIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY29s
b3IpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRp
b25Db21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBO
ZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJl
bmNlID0gTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlOjpGb3JiaWQpCiB7CiAgICAgaWYgKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJ
ZGVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbSwgQ1NTVmFsdWVS
aWdodCwgQ1NTVmFsdWVDZW50ZXI+KHJhbmdlKTsKLSAgICByZXR1cm4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChyYW5nZSwgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6QWxsLCB1bml0bGVzcyk7Cisg
ICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVl
UmFuZ2U6OkFsbCwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSk7
CiB9CiAKIHN0YXRpYyBib29sIGlzSG9yaXpvbnRhbFBvc2l0aW9uS2V5d29yZE9ubHkoY29uc3Qg
Q1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQpAQCAtMjgxNCwyMSArMjgxNCwyMSBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBwb3NpdGlvbkZyb21Gb3VyVmFsdWVz
KGNvbnN0IHN0ZDo6YXJyYQogCiAvLyBGSVhNRTogVGhpcyBtYXkgY29uc3VtZSBmcm9tIHRoZSBy
YW5nZSB1cG9uIGZhaWx1cmUuIFRoZSBiYWNrZ3JvdW5kCiAvLyBzaG9ydGhhbmQgd29ya3MgYXJv
dW5kIGl0LCBidXQgd2Ugc2hvdWxkIGp1c3QgZml4IGl0IGhlcmUuCi1zdGQ6Om9wdGlvbmFsPFBv
c2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4KQorc3RkOjpvcHRpb25hbDxQ
b3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheCBwb3NpdGlvblN5bnRheCwgTmVnYXRpdmVQZXJjZW50
YWdlUmVmZXJlbmNlIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSkKIHsKLSAgICBh
dXRvIHZhbHVlMSA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MpOworICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJl
bmNlKTsKICAgICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25l
bnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VS
ZWZlcmVuY2UpOwogICAgIGlmICghdmFsdWUyKQogICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9t
T25lVmFsdWUoKnZhbHVlMSk7CiAKLSAgICBhdXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNv
bXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIGF1dG8gdmFsdWUzID0g
Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxs
b3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKTsKICAgICBpZiAoIXZhbHVlMykKICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uRnJvbVR3b1ZhbHVlcygqdmFsdWUxLCAqdmFsdWUyKTsKIAotICAg
IGF1dG8gdmFsdWU0ID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTQgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQo
cmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZl
cmVuY2UpOwogICAgIAogICAgIHN0ZDo6YXJyYXk8Q1NTUHJpbWl0aXZlVmFsdWUqLCA1PiB2YWx1
ZXMgewogICAgICAgICB2YWx1ZTEuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAppbmRleCA3YmM0MzViYTk2N2I2YWJk
Nzc2ODZhZmI3MjVkNGUzNWI5N2VmZTMyLi5hMTRhNGIxYTYzN2QzNTA5NGVlMjVhNGU1NDMzMjJk
MGZkYzI4N2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDU1NTaGFk
b3dWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkxlbmd0aC5o
IiAvLyBGb3IgVmFsdWVSYW5nZQorI2luY2x1ZGUgIk5lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5j
ZS5oIgogI2luY2x1ZGUgIlN0eWxlQ29sb3IuaCIKICNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KQEAgLTkyLDcgKzkzLDcgQEAgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0g
VmFsdWUKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UsIENT
U1ZhbHVlUG9vbCYpOwogc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgTmVnYXRpdmVQZXJjZW50
YWdlUmVmZXJlbmNlID0gTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlOjpGb3JiaWQpOwogc3Rk
OjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBV
bml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNz
WmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7
CkBAIC0xMzAsNyArMTMxLDcgQEAgc3RydWN0IFBvc2l0aW9uQ29vcmRpbmF0ZXMgewogCiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRpb25TeW50YXgpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lU2luZ2xlQXhpc1Bvc2l0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBCb3hPcmllbnQpOwotc3RkOjpvcHRpb25hbDxQb3Np
dGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRpb25TeW50YXgpOwor
c3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGlu
YXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
UG9zaXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA9IE5lZ2F0aXZlUGVy
Y2VudGFnZVJlZmVyZW5jZTo6Rm9yYmlkKTsKIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGlu
YXRlcz4gY29uc3VtZU9uZU9yVHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJU
b2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayk7CiAKIGVudW0gY2xhc3Mg
QWxsb3dlZEltYWdlVHlwZSA6IHVpbnQ4X3QgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDliMzgxMGQ3ZjYzOWViZWYzY2Zl
NzFlZTg1YjU5YTM2NTZhZGMwZDMuLjBiZGQzNTE4ZDQ3MDI1NjhiMDZjNmM1ZjMxNDFiNmY4Yjdh
NTBhN2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMS0xMi0wOSAgSm9vbmdodW4gUGFyayAg
PGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgRG9uJ3QgZG8gc2ltcGxpZmljYXRp
b24gZm9yIHBlcmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmVnYXRpdmUg
cmVmZXJlbmNlIHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzk4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEEgcGVyY2VudGFnZSBtYXkgYmUgcmVzb2x2ZWQgYWdhaW5zdCBhIG5lZ2F0aXZl
IHZhbHVlLCB3aGljaCBpcyBhbGxvd2VkIG9ubHkgaW4gJ2JhY2tncm91bmQtcG9zaXRpb24nIHBy
b3BlcnR5LgorCisgICAgICAgIEN1cnJlbnRseSBpbiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OnBhcnNlQ2FsYywKKyAgICAgICAgaXQgY3JlYXRlcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUg
dHJlZSByZXN1bHQgYW5kIGRvZXMgc2ltcGxpZmljYXRpb24gZm9yIGl0LgorICAgICAgICBCdXQg
ZHVyaW5nIGl0LCBlLmcuIG1pbig1MCUsIDEwJSkgaXMgc2ltcGxpZmllZCB0byBtaW4oMTAlKSBh
bmQgbWF4KDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRvIG1heCg1MCUpLAorICAgICAgICB3aGlj
aCBpcyB0aGUgb3Bwb3NpdGUgcmVzdWx0IHdoYXQgc2hvdWxkIGJlIGRvbmUgYWdhaW5zdCBuZWdh
dGl2ZSBiYXNpcy4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZSBwZXJjZW50YWdlIGNv
bXBhcmlzb24gcmVzb2x1dGlvbiBhZ2FpbnN0IG5hZ2F0aXZlIGJhc2lzIGlzIGRvbmUgY29ycmVj
dGx5LgorCisgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHNwZWMgaXMgc3RlcCA0J3Mgbm90ZSBk
ZXNjcmliZWQgYmVsb3cgaW4KKyAgICAgICAgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12
YWx1ZXMtNC8jc2ltcGxpZnktYS1jYWxjdWxhdGlvbi10cmVlLgorCisgICAgICAgICdJZiBhIHBl
cmNlbnRhZ2UgaXMgbGVmdCBhdCB0aGlzIHBvaW50LCBpdCB3aWxsIHVzdWFsbHkgYmxvY2sgc2lt
cGxpZmljYXRpb24gb2YgdGhlIG5vZGUsCisgICAgICAgIHNpbmNlIGl0IG5lZWRzIHRvIGJlIHJl
c29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSB1c2luZyBpbmZvcm1hdGlvbiBub3QgY3VycmVu
dGx5IGF2YWlsYWJsZS4KKyAgICAgICAgKE90aGVyd2lzZSwgaXQgd291bGQgaGF2ZSBiZWVuIGNv
bnZlcnRlZCB0byBhIGRpZmZlcmVudCB2YWx1ZSBpbiBhbiBlYXJsaWVyIHN0ZXAuKQorICAgICAg
ICBUaGlzIGluY2x1ZGVzIG9wZXJhdGlvbnMgc3VjaCBhcyAibWluIiwgc2luY2UgcGVyY2VudGFn
ZXMgbWlnaHQgcmVzb2x2ZSBhZ2FpbnN0IGEgbmVnYXRpdmUgYmFzaXMsCisgICAgICAgIGFuZCB0
aHVzIGVuZCB1cCB3aXRoIGFuIG9wcG9zaXRlIGNvbXBhcmF0aXZlIHJlbGF0aW9uc2hpcCB0aGFu
IHRoZSByYXcgcGVyY2VudGFnZSB2YWx1ZSB3b3VsZCBzZWVtIHRvIGluZGljYXRlLicKKworICAg
ICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMTItMDggIEFyY2FkeSBHb2xkbWludHMt
T3Jsb3YgIDxhZ29sZG1pbnRzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVXBkYXRlIHRl
c3QgYmFzZWxpbmVzIGFmdGVyIHIyODQ1MjEuIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA3MTQyN2Q0ZWE0ZDFmY2UyOWU5YWFjZTBm
ZDk1Mjk2ZjgwZjQ1YWYwLi42ZTdiYzFhZDRkYjZiMjFkMzY5ZTU4NWY2YjQyZjkzZDI2NGZjZDgy
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMS0x
Mi0wOSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
RG9uJ3QgZG8gc2ltcGxpZmljYXRpb24gZm9yIHBlcmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0
aW9uIGFnYWluc3QgbmVnYXRpdmUgcmVmZXJlbmNlIHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzk4NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgcGVyY2VudGFnZSBtYXkgYmUgcmVzb2x2
ZWQgYWdhaW5zdCBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBhbGxvd2VkIG9ubHkgaW4gJ2Jh
Y2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgorCisgICAgICAgIEN1cnJlbnRseSBpbiBDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYywKKyAgICAgICAgaXQgY3JlYXRlcyBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUgdHJlZSByZXN1bHQgYW5kIGRvZXMgc2ltcGxpZmljYXRpb24g
Zm9yIGl0LgorICAgICAgICBCdXQgZHVyaW5nIGl0LCBlLmcuIG1pbig1MCUsIDEwJSkgaXMgc2lt
cGxpZmllZCB0byBtaW4oMTAlKSBhbmQgbWF4KDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRvIG1h
eCg1MCUpLAorICAgICAgICB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgcmVzdWx0IHdoYXQgc2hvdWxk
IGJlIGRvbmUgYWdhaW5zdCBuZWdhdGl2ZSBiYXNpcy4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHRoZSBwZXJjZW50YWdlIGNvbXBhcmlzb24gcmVzb2x1dGlvbiBhZ2FpbnN0IG5hZ2F0aXZl
IGJhc2lzIGlzIGRvbmUgY29ycmVjdGx5LgorCisgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHNw
ZWMgaXMgc3RlcCA0J3Mgbm90ZSBkZXNjcmliZWQgYmVsb3cgaW4KKyAgICAgICAgaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc2ltcGxpZnktYS1jYWxjdWxhdGlvbi10cmVl
LgorCisgICAgICAgICdJZiBhIHBlcmNlbnRhZ2UgaXMgbGVmdCBhdCB0aGlzIHBvaW50LCBpdCB3
aWxsIHVzdWFsbHkgYmxvY2sgc2ltcGxpZmljYXRpb24gb2YgdGhlIG5vZGUsCisgICAgICAgIHNp
bmNlIGl0IG5lZWRzIHRvIGJlIHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSB1c2luZyBp
bmZvcm1hdGlvbiBub3QgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAgICAgICAgKE90aGVyd2lzZSwg
aXQgd291bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBhIGRpZmZlcmVudCB2YWx1ZSBpbiBhbiBl
YXJsaWVyIHN0ZXAuKQorICAgICAgICBUaGlzIGluY2x1ZGVzIG9wZXJhdGlvbnMgc3VjaCBhcyAi
bWluIiwgc2luY2UgcGVyY2VudGFnZXMgbWlnaHQgcmVzb2x2ZSBhZ2FpbnN0IGEgbmVnYXRpdmUg
YmFzaXMsCisgICAgICAgIGFuZCB0aHVzIGVuZCB1cCB3aXRoIGFuIG9wcG9zaXRlIGNvbXBhcmF0
aXZlIHJlbGF0aW9uc2hpcCB0aGFuIHRoZSByYXcgcGVyY2VudGFnZSB2YWx1ZSB3b3VsZCBzZWVt
IHRvIGluZGljYXRlLicKKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXZh
bHVlcy9taW5tYXgtcGVyY2VudGFnZS1zZXJpYWxpemUtZXhwZWN0ZWQudHh0OgorCiAyMDIxLTEy
LTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIENh
c2NhZGUgTGF5ZXJzXSBDU1NJbXBvcnRSdWxlLmNzc1RleHQgZG9lc24ndCBpbmNsdWRlIGxheWVy
IHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOTFhNDk1NDIyZmFlOGQ3NDA1OWU0MzVj
YzU4N2U0NDRiMzUyMzU1Zi4uYTBkMTVkYzhlZjFjMjg3NDA0ZmJjMDdlMDRjNWU4ZjlkNDBmMzcz
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNzIyLDcgKzM3MjIsNiBAQCB3ZWJraXQub3JnL2Iv
MjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5k
cy9iYWNrZ3JvdQogd2Via2l0Lm9yZy9iLzIwNjc1MyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvYmFja2dyb3VuZC1hdHRhY2htZW50LWxvY2FsL2F0
dGFjaG1lbnQtbG9jYWwtY2xpcHBpbmctaW1hZ2UtNi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLWF0dGFjaG1lbnQtbG9jYWwvYXR0YWNobWVudC1s
b2NhbC1wb3NpdGlvbmluZy0zLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91
bmRzL2JhY2tncm91bmQtYXR0YWNobWVudC1sb2NhbC9hdHRhY2htZW50LWxvY2FsLXBvc2l0aW9u
aW5nLTQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIwNjc1MyBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvYmFja2dyb3Vu
ZC1wb3NpdGlvbi1uZWdhdGl2ZS1wZXJjZW50YWdlLWNvbXBhcmlzb24uaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIwNjc1MyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvYmFja2dyb3VuZC1zaXplLWNvdmVyLTAwMy5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLXNpemUvYmFj
a2dyb3VuZC1zaXplLWNvdmVyLXN2Zy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNr
Z3JvdW5kcy9iYWNrZ3JvdW5kLXNpemUvdmVjdG9yL2JhY2tncm91bmQtc2l6ZS12ZWN0b3ItMDAz
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy12YWx1ZXMvbWlubWF4LXBlcmNlbnRh
Z2Utc2VyaWFsaXplLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy12YWx1ZXMvbWlubWF4LXBlcmNlbnRhZ2Utc2VyaWFsaXpl
LWV4cGVjdGVkLnR4dAppbmRleCAzNGQ5YTNjNGZlYTYyYzFmZmM2NmFhNzJkNTU1YzExMWI2NDM0
YTI5Li5hZjcxNzljYzExOGJhM2E0MzNkNzU1NDUxODM3ZTdhNjQ3YjAxNjViIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdmFs
dWVzL21pbm1heC1wZXJjZW50YWdlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXZhbHVlcy9taW5t
YXgtcGVyY2VudGFnZS1zZXJpYWxpemUtZXhwZWN0ZWQudHh0CkBAIC0xNyw3ICsxNyw3IEBAIFBB
U1MgJ21heCgxJSwgMiUsIDMlKScgYXMgYSB1c2VkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMg
JzNweCcuCiBGQUlMICdtYXgoMyUsIDIlLCAxJSknIGFzIGEgc3BlY2lmaWVkIHZhbHVlIHNob3Vs
ZCBzZXJpYWxpemUgYXMgJ21heCgzJSwgMiUsIDElKScuIGFzc2VydF9lcXVhbHM6ICdtYXgoMyUs
IDIlLCAxJSknIHNob3VsZCByb3VuZC10cmlwIGV4YWN0bHkgaW4gc3BlY2lmaWVkIHZhbHVlcy4g
ZXhwZWN0ZWQgIm1heCgzJSwgMiUsIDElKSIgYnV0IGdvdCAibWF4KDMlKSIKIEZBSUwgJ21heCgz
JSwgMiUsIDElKScgYXMgYSBjb21wdXRlZCB2YWx1ZSBzaG91bGQgc2VyaWFsaXplIGFzICdtYXgo
MyUsIDIlLCAxJSknLiBhc3NlcnRfZXF1YWxzOiAnbWF4KDMlLCAyJSwgMSUpJyBzaG91bGQgcm91
bmQtdHJpcCBleGFjdGx5IGluIGNvbXB1dGVkIHZhbHVlcy4gZXhwZWN0ZWQgIm1heCgzJSwgMiUs
IDElKSIgYnV0IGdvdCAibWF4KDMlKSIKIFBBU1MgJ21heCgzJSwgMiUsIDElKScgYXMgYSB1c2Vk
IHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJzNweCcuCi1GQUlMICdtaW4oMSUsIDIlLCAzJSkg
MHB4JyBhcyBhIHNwZWNpZmllZCB2YWx1ZSBzaG91bGQgc2VyaWFsaXplIGFzICdtaW4oMSUsIDIl
LCAzJSkgMHB4Jy4gYXNzZXJ0X2VxdWFsczogJ21pbigxJSwgMiUsIDMlKSAwcHgnIHNob3VsZCBy
b3VuZC10cmlwIGV4YWN0bHkgaW4gc3BlY2lmaWVkIHZhbHVlcy4gZXhwZWN0ZWQgIm1pbigxJSwg
MiUsIDMlKSAwcHgiIGJ1dCBnb3QgIm1pbigxJSkgMHB4IgorUEFTUyAnbWluKDElLCAyJSwgMyUp
IDBweCcgYXMgYSBzcGVjaWZpZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnbWluKDElLCAy
JSwgMyUpIDBweCcuCiBGQUlMICdtaW4oMSUsIDIlLCAzJSkgMHB4JyBhcyBhIGNvbXB1dGVkIHZh
bHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ21pbigxJSwgMiUsIDMlKSAwcHgnLiBhc3NlcnRfZXF1
YWxzOiAnbWluKDElLCAyJSwgMyUpIDBweCcgc2hvdWxkIHJvdW5kLXRyaXAgZXhhY3RseSBpbiBj
b21wdXRlZCB2YWx1ZXMuIGV4cGVjdGVkICJtaW4oMSUsIDIlLCAzJSkgMHB4IiBidXQgZ290ICJt
aW4oMSUpIDBweCIKIFBBU1MgJ2NhbGMobWluKDElLCAyJSkgKyBtYXgoMyUsIDQlKSArIDEwJSkn
IGFzIGEgc3BlY2lmaWVkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ2NhbGMoMTUlKScuCiBQ
QVNTICdjYWxjKG1pbigxJSwgMiUpICsgbWF4KDMlLCA0JSkgKyAxMCUpJyBhcyBhIGNvbXB1dGVk
IHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJzE1JScuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446729</attachid>
            <date>2021-12-10 07:56:21 -0800</date>
            <delta_ts>2021-12-10 18:46:45 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-233987-20211211005620.patch</filename>
            <type>text/plain</type>
            <size>26016</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZiMzY5N2VlYjI0Y2E2
NDkyYzQ5OTVlNzRlMDM5ZmFlYWQ2YmJjOC4uZDhjMTkxNmY4YjFmNGU4NzEyYmY0ZTM4NWQxMDdl
ZjM5YTFjZDEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIxLTEyLTEwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBEb24ndCBkbyBz
aW1wbGlmaWNhdGlvbiBmb3IgcGVyY2VudGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5z
dCBuZWdhdGl2ZSByZWZlcmVuY2UgdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzOTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgQSBwZXJjZW50YWdlIG1heSBiZSByZXNvbHZlZCBhZ2FpbnN0IGEg
bmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlzIGFsbG93ZWQgb25seSBpbiAnYmFja2dyb3VuZC1wb3Np
dGlvbicgcHJvcGVydHkuCisKKyAgICAgICAgQ3VycmVudGx5IGluIENTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VDYWxjLAorICAgICAgICBpdCBjcmVhdGVzIENTU0NhbGNFeHByZXNz
aW9uTm9kZSB0cmVlIHJlc3VsdCBhbmQgZG9lcyBzaW1wbGlmaWNhdGlvbiBmb3IgaXQuCisgICAg
ICAgIEJ1dCBkdXJpbmcgaXQsIGUuZy4gbWluKDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRvIG1p
bigxMCUpIGFuZCBtYXgoNTAlLCAxMCUpIGlzIHNpbXBsaWZpZWQgdG8gbWF4KDUwJSksCisgICAg
ICAgIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSByZXN1bHQgd2hhdCBzaG91bGQgYmUgZG9uZSBhZ2Fp
bnN0IG5lZ2F0aXZlIGJhc2lzLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhlIHBlcmNl
bnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmFnYXRpdmUgYmFzaXMgaXMgZG9u
ZSBjb3JyZWN0bHkuCisKKyAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBpcyBzdGVwIDQn
cyBub3RlIGRlc2NyaWJlZCBiZWxvdyBpbgorICAgICAgICBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLXZhbHVlcy00LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUuCisKKyAgICAgICAg
J0lmIGEgcGVyY2VudGFnZSBpcyBsZWZ0IGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgdXN1YWxseSBi
bG9jayBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbm9kZSwKKyAgICAgICAgc2luY2UgaXQgbmVlZHMg
dG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90aGVyIHZhbHVlIHVzaW5nIGluZm9ybWF0aW9uIG5v
dCBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgICAgICAoT3RoZXJ3aXNlLCBpdCB3b3VsZCBoYXZl
IGJlZW4gY29udmVydGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIGluIGFuIGVhcmxpZXIgc3RlcC4p
CisgICAgICAgIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzICJtaW4iLCBzaW5jZSBw
ZXJjZW50YWdlcyBtaWdodCByZXNvbHZlIGFnYWluc3QgYSBuZWdhdGl2ZSBiYXNpcywKKyAgICAg
ICAgYW5kIHRodXMgZW5kIHVwIHdpdGggYW4gb3Bwb3NpdGUgY29tcGFyYXRpdmUgcmVsYXRpb25z
aGlwIHRoYW4gdGhlIHJhdyBwZXJjZW50YWdlIHZhbHVlIHdvdWxkIHNlZW0gdG8gaW5kaWNhdGUu
JworCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxj
KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaDoKKyAg
ICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAgKiBj
c3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0Nh
bGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZSk6Cisg
ICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmg6CisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFja2dyb3Vu
ZFBvc2l0aW9uKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQ
YXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29vcmRp
bmF0ZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmg6
CisKIDIwMjEtMTItMTAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDU1MgQ29udGFpbmVyIFF1ZXJpZXNdIEJhc2ljIEBjb250YWluZXIgYXQtcnVsZSBwYXJz
aW5nIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXIuY3BwCmluZGV4IDM1YzZjOGMzZGIzMzIzOTQ2ZDg0OTk0MmIz
MGM2NDFjNGQ2NzNlNjYuLjNkY2M2OTkxY2M2NDFhOTY0YjA1NmM2ZGZmODdhNWUzNTM0YjY2NWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLmNwcApAQCAtNjEsOCArNjEsMTkgQEAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
bWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOwogLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+
IFsgWyAnKycgfCAnLScgXSA8Y2FsYy1wcm9kdWN0PiBdKgogLy8gPGNhbGMtcHJvZHVjdD4gPSA8
Y2FsYy12YWx1ZT4gWyBbICcqJyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgogLy8gPGNhbGMtdmFs
dWU+ID0gPG51bWJlcj4gfCA8ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3Vt
PiApCi1SZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXI6OnBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBm
dW5jdGlvbikKK1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zLCBDU1NWYWx1
ZUlEIGZ1bmN0aW9uLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSkKIHsKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJik+IHNldEFsbG93c05lZ2F0aXZl
UGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkID0gWyZdKENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
ZXhwcmVzc2lvbikgeworICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGV4cHJl
c3Npb24pKSB7CisgICAgICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KGV4cHJlc3Npb24pOworICAgICAgICAgICAgaWYgKG9wZXJhdGlv
bk5vZGUuaXNNaW5Pck1heE5vZGUoKSkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob2RlLnNl
dEFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSgpOworCisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAg
IHNldEFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkKGNoaWxkKTsKKyAg
ICAgICAgfQorICAgIH07CisKICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKIAogICAg
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJlc3VsdDsKQEAgLTc1LDYgKzg2LDkgQEAg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZUNhbGMoQ1NTUGFyc2VyVG8KIAogICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjICIgPDwgcHJldHR5
UHJpbnROb2RlKCpyZXN1bHQpKTsKIAorICAgIGlmIChhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2Up
CisgICAgICAgIHNldEFsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZUlmTmVlZGVkKCpy
ZXN1bHQpOworCiAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KHJl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjIC0gYWZ0ZXIgc2lt
cGxpZmljYXRpb24gIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3VsdCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaAppbmRl
eCAzOTM3NzkxNTUwYTZiN2M1ZjVjYWE5MTMyZGY3OTQ2YWMyMjM1NGZlLi44YjgxZmI5MjM2NTQy
OTIzMmM5ODViOWU5MzJiMzc5ZGQyNjQyNmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaApAQCAtNDQsNyArNDQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IHBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKTsK
KyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5jdGlvbiwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRh
Z2UpOwogICAgIAogcHJpdmF0ZToKICAgICBjaGFyIG9wZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFy
c2VyVG9rZW4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNP
cGVyYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRp
b25Ob2RlLmNwcAppbmRleCA2NmM5MzQwMzgxZDA2ZTFjY2E2ZDU2N2IyMWVjZTRlMmE1ZDliMjU1
Li42YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC04MjgsNiAr
ODI4LDEzIEBAIHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbWJpbmVDaGlsZHJlbigpCiAK
ICAgICBpZiAoKGlzTWluT3JNYXhOb2RlKCkgfHwgaXNIeXBvdE5vZGUoKSkgJiYgY2FuQ29tYmlu
ZUFsbENoaWxkcmVuKCkpIHsKICAgICAgICAgYXV0byBjb21iaW5lZFVuaXRUeXBlID0gbV9jaGls
ZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBhdXRvIGludm9sdmVzUGVyY2VudGFn
ZUNvbXBhcmlzb25zID0gWyZdKCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkVW5pdFR5
cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFICYmIG1fY2hpbGRyZW4uc2l6ZSgpID4g
MTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoaXNNaW5Pck1heE5vZGUoKSAmJiBhbGxvd3NO
ZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UoKSAmJiBpbnZvbHZlc1BlcmNlbnRhZ2VDb21wYXJp
c29ucygpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBj
YWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oY29tYmluZWRVbml0VHlwZSk7CiAgICAg
ICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKICAgICAgICAg
ICAgIGNvbWJpbmVkVW5pdFR5cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0
ZWdvcnkoY2F0ZWdvcnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY09wZXJhdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVy
YXRpb25Ob2RlLmgKaW5kZXggMTk1ZDI4MjIwOTM5MjNlNzUwMzRjNWU3OGM4ODJhNGZlZTZhNjAw
MS4uMGEzNGExNGI4OTY1NmZiZjRmYjY3YmI0NTdjYjBkOGI3ODdlNWQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCkBAIC03Myw2ICs3Myw5
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0
OwogCisgICAgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2VSZWZlcmVuY2UoKSB7IHJldHVy
biBtX2FsbG93c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZTsgfQorICAgIHZvaWQgc2V0QWxs
b3dzTmVnYXRpdmVQZXJjZW50YWdlUmVmZXJlbmNlKCkgeyBtX2FsbG93c05lZ2F0aXZlUGVyY2Vu
dGFnZVJlZmVyZW5jZSA9IHRydWU7IH0KKwogICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpID09IDEgJiYgKG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJh
dG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1heCB8fCBtX29wZXJhdG9y
ID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0
aXBseSk7IH0KIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4m
IGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQpAQCAtMTQxLDYgKzE0NCw3
IEBAIHByaXZhdGU6CiAKICAgICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKICAgICBWZWN0b3I8
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRyZW47CisgICAgYm9vbCBtX2FsbG93
c05lZ2F0aXZlUGVyY2VudGFnZVJlZmVyZW5jZSA9IGZhbHNlOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKaW5kZXggZWUxZDQ1OWY0YTZlMTEwMjkwYzc1
MGQzZWI5MGMyMWRmOWM3NzZjOC4uMDVkOTJkZmI3Y2FiOWZkNTk2Njc0OTg2OGZiNjgyODBiMDk3
NWVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCkBAIC0zOTAs
MTAgKzM5MCwxMCBAQCB2b2lkIENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKICAgICB0cyA8PCAiKVxuIjsKIH0KIAotUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1Zh
bHVlOjpjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgdG9rZW5zLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVl
UmFuZ2UgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitSZWZQ
dHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9u
LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpCiB7CiAg
ICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcihkZXN0aW5hdGlvbkNhdGVnb3J5
LCBzeW1ib2xUYWJsZSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyh0
b2tlbnMsIGZ1bmN0aW9uKTsKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxj
KHRva2VucywgZnVuY3Rpb24sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSk7CiAgICAgaWYgKCFl
eHByZXNzaW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIHJlc3VsdCA9IGFk
b3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCByYW5n
ZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVl
LmgKaW5kZXggYzMyYjk4ZTk5NjljYWYzNTgwZWU4MDdjZjQ0Mzg0OTZkYzMwOTc0MC4uN2UwZTlj
NDZhNWMyODM2NDNjYzY0MjUzNzEyOTFjODUzYTc3MzljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ZhbHVlLmgKQEAgLTUwLDcgKzUwLDcgQEAgZW51bSBjbGFzcyBWYWx1ZVJhbmdl
IDogdWludDhfdDsKIAogY2xhc3MgQ1NTQ2FsY1ZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1Zh
bHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTVmFs
dWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSk7CiAgICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25z
dCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5LCBWYWx1ZVJhbmdlKTsKICAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3Jl
YXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIH5D
U1NDYWxjVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5jcHAKaW5kZXggZjRlMDQ2Y2QyYzExZjY4ODliZDU1ZjVjZWVhNzI0N2ZiYWExOWRi
MS4uOWY4MDFjYjBlOWE5ZGVkNjQyOGFhOTJjZTYwYmNkODc3ZmU3ZjZiOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTU1NzUsNyAr
NTU3NSw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVMZWdhY3lCcmVha1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wKIHN0YXRpYyBib29sIGNvbnN1bWVCYWNr
Z3JvdW5kUG9zaXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFJlZlB0cjxDU1NWYWx1
ZT4mIHJlc3VsdFgsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdFkpCiB7CiAgICAgZG8gewotICAg
ICAgICBhdXRvIHBvc2l0aW9uID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMocmFuZ2UsIGNv
bnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6QWxsb3csIHByb3BlcnR5ID09IENTU1Byb3BlcnR5
TWFza1Bvc2l0aW9uID8gUG9zaXRpb25TeW50YXg6OlBvc2l0aW9uIDogUG9zaXRpb25TeW50YXg6
OkJhY2tncm91bmRQb3NpdGlvbik7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBjb25zdW1lUG9z
aXRpb25Db29yZGluYXRlcyhyYW5nZSwgY29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpBbGxv
dywgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlNYXNrUG9zaXRpb24gPyBQb3NpdGlvblN5bnRheDo6
UG9zaXRpb24gOiBQb3NpdGlvblN5bnRheDo6QmFja2dyb3VuZFBvc2l0aW9uLCBOZWdhdGl2ZVBl
cmNlbnRhZ2VQb2xpY3k6OkFsbG93KTsKICAgICAgICAgaWYgKCFwb3NpdGlvbikKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYWRkQmFja2dyb3VuZFZhbHVlKHJlc3VsdFgsIFdU
Rk1vdmUocG9zaXRpb24tPngpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA0ZGQ0Y2NkNGYyOGM3ZWU4Y2Qx
YjNiZDU5NmY4OTIyMGJhYmRlYmY1Li4wNGFhNjg4MTMwNGNlNTBiZjlmODdkYzE3MDk5ZjZiNTFm
MmJlNDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGJvb2wgY2Fu
Q29uc3VtZUNhbGNWYWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDU1NQYXJzZXJN
b2RlIHBhcnMKIC8vIEZJWE1FOiBjb25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2lj
IGZyb20gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkpCisgICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCksIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlID0gZmFsc2UpCiAgICAgICAgIDog
bV9zb3VyY2VSYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQogICAgICAgICAs
IG1fcG9vbChwb29sKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0
aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFsdWU6Omlz
Q2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1ND
YWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRl
c3RpbmF0aW9uQ2F0ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1
bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsKICAgICB9CiAKICAgICBjb25zdCBDU1ND
YWxjVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxjVmFsdWUuZ2V0KCk7IH0KQEAg
LTEwMDgsMTQgKzEwMDgsMTQgQEAgc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNv
bnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQor
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgYm9vbCBhbGxvd3NOZWdhdGl2ZVBl
cmNlbnRhZ2UpCiB7CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKICAgICBzd2l0
Y2ggKHRva2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxj
IHdpdGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/
Ci0gICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpM
ZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlLCB7IH0sIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCksIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSk7CiAgICAgICAgIGlmIChhdXRv
IGNhbGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVD
YWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIHBhcnNlck1vZGUpKQogICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNjYx
LDExICsyNjYxLDExIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzCiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY29sb3IpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcykKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3Np
dGlvbkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVy
Y2VudGFnZSA9IGZhbHNlKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50
VG9rZW4pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1
ZVRvcCwgQ1NTVmFsdWVCb3R0b20sIENTU1ZhbHVlUmlnaHQsIENTU1ZhbHVlQ2VudGVyPihyYW5n
ZSk7Ci0gICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUs
IFZhbHVlUmFuZ2U6OkFsbCwgdW5pdGxlc3MpOworICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBhbGxv
d3NOZWdhdGl2ZVBlcmNlbnRhZ2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc0hvcml6b250YWxQb3Np
dGlvbktleXdvcmRPbmx5KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKQEAgLTI4MTQs
MjEgKzI4MTQsMjMgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4g
cG9zaXRpb25Gcm9tRm91clZhbHVlcyhjb25zdCBzdGQ6OmFycmEKIAogLy8gRklYTUU6IFRoaXMg
bWF5IGNvbnN1bWUgZnJvbSB0aGUgcmFuZ2UgdXBvbiBmYWlsdXJlLiBUaGUgYmFja2dyb3VuZAog
Ly8gc2hvcnRoYW5kIHdvcmtzIGFyb3VuZCBpdCwgYnV0IHdlIHNob3VsZCBqdXN0IGZpeCBpdCBo
ZXJlLgotc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25D
b29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheCBwb3NpdGlvblN5
bnRheCkKK3N0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9u
Q29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25T
eW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgYXV0byB2YWx1
ZTEgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
KTsKKyAgICBib29sIGFsbG93c05lZ2F0aXZlID0gcG9saWN5ID09IE5lZ2F0aXZlUGVyY2VudGFn
ZVBvbGljeTo6QWxsb3c7CisKKyAgICBhdXRvIHZhbHVlMSA9IGNvbnN1bWVQb3NpdGlvbkNvbXBv
bmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlKTsKICAgICBp
ZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmFs
dWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cyk7CisgICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZSk7CiAgICAgaWYgKCF2YWx1ZTIpCiAg
ICAgICAgIHJldHVybiBwb3NpdGlvbkZyb21PbmVWYWx1ZSgqdmFsdWUxKTsKICAgICAKLSAgICBh
dXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MpOworICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOwogICAgIGlmICghdmFs
dWUzKQogICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9tVHdvVmFsdWVzKCp2YWx1ZTEsICp2YWx1
ZTIpOwogICAgIAotICAgIGF1dG8gdmFsdWU0ID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7CisgICAgYXV0byB2YWx1ZTQgPSBjb25zdW1lUG9z
aXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2
ZSk7CiAgICAgCiAgICAgc3RkOjphcnJheTxDU1NQcmltaXRpdmVWYWx1ZSosIDU+IHZhbHVlcyB7
CiAgICAgICAgIHZhbHVlMS5nZXQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCmluZGV4IDdiYzQzNWJhOTY3YjZhYmQ3NzY4
NmFmYjcyNWQ0ZTM1Yjk3ZWZlMzIuLjYxN2Q5ZDk2YzAwNmYyOTRiNzg4N2IxNjUxNDRkZGIzM2Fi
MjMwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaApAQCAtNjEsNiArNjEsOCBAQCBib29sIGNvbnN1bWVTbGFzaEluY2x1
ZGluZ1doaXRlc3BhY2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogLy8gY29uc3VtZUZ1bmN0aW9u
IGV4cGVjdHMgdGhlIHJhbmdlIHN0YXJ0cyB3aXRoIGEgRnVuY3Rpb25Ub2tlbi4KIENTU1BhcnNl
clRva2VuUmFuZ2UgY29uc3VtZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIAorZW51
bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgOiBib29sIHsgRm9yYmlkLCBBbGxvdyB9
OworCiBlbnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiBlbnVtIGNs
YXNzIFVuaXRsZXNzWmVyb1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9OwogCkBAIC05Miw3ICs5NCw3
IEBAIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBWYWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
T3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlID0gZmFsc2UpOwogc3RkOjpvcHRp
b25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVz
c1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNl
ck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CkBAIC0x
MzAsNyArMTMyLDcgQEAgc3RydWN0IFBvc2l0aW9uQ29vcmRpbmF0ZXMgewogCiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRpb25TeW50YXgpOwogUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lU2luZ2xlQXhpc1Bvc2l0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBCb3hPcmllbnQpOwotc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNv
b3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRpb25TeW50YXgpOworc3RkOjpv
cHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgUG9zaXRp
b25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeTo6Rm9yYmlkKTsKIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3Vt
ZU9uZU9yVHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayk7CiAKIGVudW0gY2xhc3MgQWxsb3dlZEltYWdl
VHlwZSA6IHVpbnQ4X3QgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQzNzA5ZTU3Njk1OTU2YzUwNWVhMmU2ODg5NGYwNjUy
MTc0OTAzODYuLjI4NTJmY2JhOTRkZjYwNzk5Nzg4YWJjNzIyYjg0N2M4YjkwMzZlMTMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMCBAQAorMjAyMS0xMi0xMCAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtA
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgRG9uJ3QgZG8gc2ltcGxpZmljYXRpb24gZm9yIHBlcmNl
bnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0aW9uIGFnYWluc3QgbmVnYXRpdmUgcmVmZXJlbmNlIHZh
bHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Mzk4NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEEgcGVy
Y2VudGFnZSBtYXkgYmUgcmVzb2x2ZWQgYWdhaW5zdCBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBp
cyBhbGxvd2VkIG9ubHkgaW4gJ2JhY2tncm91bmQtcG9zaXRpb24nIHByb3BlcnR5LgorCisgICAg
ICAgIEN1cnJlbnRseSBpbiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYywK
KyAgICAgICAgaXQgY3JlYXRlcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgdHJlZSByZXN1bHQgYW5k
IGRvZXMgc2ltcGxpZmljYXRpb24gZm9yIGl0LgorICAgICAgICBCdXQgZHVyaW5nIGl0LCBlLmcu
IG1pbig1MCUsIDEwJSkgaXMgc2ltcGxpZmllZCB0byBtaW4oMTAlKSBhbmQgbWF4KDUwJSwgMTAl
KSBpcyBzaW1wbGlmaWVkIHRvIG1heCg1MCUpLAorICAgICAgICB3aGljaCBpcyB0aGUgb3Bwb3Np
dGUgcmVzdWx0IHdoYXQgc2hvdWxkIGJlIGRvbmUgYWdhaW5zdCBuZWdhdGl2ZSBiYXNpcy4KKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZSBwZXJjZW50YWdlIGNvbXBhcmlzb24gcmVzb2x1
dGlvbiBhZ2FpbnN0IG5hZ2F0aXZlIGJhc2lzIGlzIGRvbmUgY29ycmVjdGx5LgorCisgICAgICAg
IFRoZSBjb3JyZXNwb25kaW5nIHNwZWMgaXMgc3RlcCA0J3Mgbm90ZSBkZXNjcmliZWQgYmVsb3cg
aW4KKyAgICAgICAgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc2ltcGxp
ZnktYS1jYWxjdWxhdGlvbi10cmVlLgorCisgICAgICAgICdJZiBhIHBlcmNlbnRhZ2UgaXMgbGVm
dCBhdCB0aGlzIHBvaW50LCBpdCB3aWxsIHVzdWFsbHkgYmxvY2sgc2ltcGxpZmljYXRpb24gb2Yg
dGhlIG5vZGUsCisgICAgICAgIHNpbmNlIGl0IG5lZWRzIHRvIGJlIHJlc29sdmVkIGFnYWluc3Qg
YW5vdGhlciB2YWx1ZSB1c2luZyBpbmZvcm1hdGlvbiBub3QgY3VycmVudGx5IGF2YWlsYWJsZS4K
KyAgICAgICAgKE90aGVyd2lzZSwgaXQgd291bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBhIGRp
ZmZlcmVudCB2YWx1ZSBpbiBhbiBlYXJsaWVyIHN0ZXAuKQorICAgICAgICBUaGlzIGluY2x1ZGVz
IG9wZXJhdGlvbnMgc3VjaCBhcyAibWluIiwgc2luY2UgcGVyY2VudGFnZXMgbWlnaHQgcmVzb2x2
ZSBhZ2FpbnN0IGEgbmVnYXRpdmUgYmFzaXMsCisgICAgICAgIGFuZCB0aHVzIGVuZCB1cCB3aXRo
IGFuIG9wcG9zaXRlIGNvbXBhcmF0aXZlIHJlbGF0aW9uc2hpcCB0aGFuIHRoZSByYXcgcGVyY2Vu
dGFnZSB2YWx1ZSB3b3VsZCBzZWVtIHRvIGluZGljYXRlLicKKworICAgICAgICAqIFRlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMjEtMTItMTAgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIEhhbmRsZSBUZXJtaW5hdGlvbkV4Y2VwdGlvbiBpbiBXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6Y3JlYXRlKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDZm
NDFlNzc3Mzk5NzVkNzg4NDBmOWQ0MjNjNWVkNjhhZDNhZTcyZGMuLjA2MTE5YjlhM2YwNThhM2Nj
ZDA5MzIzYWJmOGNhNWRhMzgyMzU0ZWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMwIEBACisyMDIxLTEyLTEwICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0Bz
YW1zdW5nLmNvbT4KKworICAgICAgICBEb24ndCBkbyBzaW1wbGlmaWNhdGlvbiBmb3IgcGVyY2Vu
dGFnZSBjb21wYXJpc29uIHJlc29sdXRpb24gYWdhaW5zdCBuZWdhdGl2ZSByZWZlcmVuY2UgdmFs
dWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMz
OTg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQSBwZXJj
ZW50YWdlIG1heSBiZSByZXNvbHZlZCBhZ2FpbnN0IGEgbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGlz
IGFsbG93ZWQgb25seSBpbiAnYmFja2dyb3VuZC1wb3NpdGlvbicgcHJvcGVydHkuCisKKyAgICAg
ICAgQ3VycmVudGx5IGluIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjLAor
ICAgICAgICBpdCBjcmVhdGVzIENTU0NhbGNFeHByZXNzaW9uTm9kZSB0cmVlIHJlc3VsdCBhbmQg
ZG9lcyBzaW1wbGlmaWNhdGlvbiBmb3IgaXQuCisgICAgICAgIEJ1dCBkdXJpbmcgaXQsIGUuZy4g
bWluKDUwJSwgMTAlKSBpcyBzaW1wbGlmaWVkIHRvIG1pbigxMCUpIGFuZCBtYXgoNTAlLCAxMCUp
IGlzIHNpbXBsaWZpZWQgdG8gbWF4KDUwJSksCisgICAgICAgIHdoaWNoIGlzIHRoZSBvcHBvc2l0
ZSByZXN1bHQgd2hhdCBzaG91bGQgYmUgZG9uZSBhZ2FpbnN0IG5lZ2F0aXZlIGJhc2lzLgorCisg
ICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhlIHBlcmNlbnRhZ2UgY29tcGFyaXNvbiByZXNvbHV0
aW9uIGFnYWluc3QgbmFnYXRpdmUgYmFzaXMgaXMgZG9uZSBjb3JyZWN0bHkuCisKKyAgICAgICAg
VGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBpcyBzdGVwIDQncyBub3RlIGRlc2NyaWJlZCBiZWxvdyBp
bgorICAgICAgICBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzaW1wbGlm
eS1hLWNhbGN1bGF0aW9uLXRyZWUuCisKKyAgICAgICAgJ0lmIGEgcGVyY2VudGFnZSBpcyBsZWZ0
IGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgdXN1YWxseSBibG9jayBzaW1wbGlmaWNhdGlvbiBvZiB0
aGUgbm9kZSwKKyAgICAgICAgc2luY2UgaXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCBh
bm90aGVyIHZhbHVlIHVzaW5nIGluZm9ybWF0aW9uIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlLgor
ICAgICAgICAoT3RoZXJ3aXNlLCBpdCB3b3VsZCBoYXZlIGJlZW4gY29udmVydGVkIHRvIGEgZGlm
ZmVyZW50IHZhbHVlIGluIGFuIGVhcmxpZXIgc3RlcC4pCisgICAgICAgIFRoaXMgaW5jbHVkZXMg
b3BlcmF0aW9ucyBzdWNoIGFzICJtaW4iLCBzaW5jZSBwZXJjZW50YWdlcyBtaWdodCByZXNvbHZl
IGFnYWluc3QgYSBuZWdhdGl2ZSBiYXNpcywKKyAgICAgICAgYW5kIHRodXMgZW5kIHVwIHdpdGgg
YW4gb3Bwb3NpdGUgY29tcGFyYXRpdmUgcmVsYXRpb25zaGlwIHRoYW4gdGhlIHJhdyBwZXJjZW50
YWdlIHZhbHVlIHdvdWxkIHNlZW0gdG8gaW5kaWNhdGUuJworCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3MtdmFsdWVzL21pbm1heC1wZXJjZW50YWdlLXNlcmlhbGl6ZS1leHBl
Y3RlZC50eHQ6CisKIDIwMjEtMTItMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGEgU2hhcmVkV29ya2Vy
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA0M2I0ZGVlNGUxMTliOTNkNzY4YzE5ZDMwM2VmNTNlOGVm
OTZlYTJmLi4wMzgyZDVjYjIyMjgyZTQ3MTU0NzZlZTU2ODVlZDYxNzNkOGI4ZTE0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTM3NjQsNyArMzc2NCw2IEBAIHdlYmtpdC5vcmcvYi8yMDY3NTMgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91bmRzL2JhY2tncm91
CiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLWF0dGFjaG1lbnQtbG9jYWwvYXR0YWNobWVudC1s
b2NhbC1jbGlwcGluZy1pbWFnZS02Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5v
cmcvYi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tn
cm91bmRzL2JhY2tncm91bmQtYXR0YWNobWVudC1sb2NhbC9hdHRhY2htZW50LWxvY2FsLXBvc2l0
aW9uaW5nLTMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIwNjc1MyBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtYmFja2dyb3VuZHMvYmFja2dy
b3VuZC1hdHRhY2htZW50LWxvY2FsL2F0dGFjaG1lbnQtbG9jYWwtcG9zaXRpb25pbmctNC5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLXBvc2l0aW9u
LW5lZ2F0aXZlLXBlcmNlbnRhZ2UtY29tcGFyaXNvbi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMjA2NzUzIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1iYWNrZ3JvdW5kcy9iYWNrZ3JvdW5kLXNpemUtY292ZXItMDAzLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDY3NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLWJhY2tncm91bmRzL2JhY2tncm91bmQtc2l6ZS9iYWNrZ3JvdW5kLXNp
emUtY292ZXItc3ZnLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDY3
NTMgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWJhY2tncm91bmRzL2Jh
Y2tncm91bmQtc2l6ZS92ZWN0b3IvYmFja2dyb3VuZC1zaXplLXZlY3Rvci0wMDMuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXZhbHVlcy9taW5tYXgtcGVyY2VudGFnZS1zZXJpYWxp
emUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXZhbHVlcy9taW5tYXgtcGVyY2VudGFnZS1zZXJpYWxpemUtZXhwZWN0ZWQu
dHh0CmluZGV4IDM0ZDlhM2M0ZmVhNjJjMWZmYzY2YWE3MmQ1NTVjMTExYjY0MzRhMjkuLmFmNzE3
OWNjMTE4YmEzYTQzM2Q3NTU0NTE4MzdlN2E2NDdiMDE2NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy12YWx1ZXMvbWlubWF4
LXBlcmNlbnRhZ2Utc2VyaWFsaXplLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdmFsdWVzL21pbm1heC1wZXJjZW50
YWdlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQKQEAgLTE3LDcgKzE3LDcgQEAgUEFTUyAnbWF4KDEl
LCAyJSwgMyUpJyBhcyBhIHVzZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnM3B4Jy4KIEZB
SUwgJ21heCgzJSwgMiUsIDElKScgYXMgYSBzcGVjaWZpZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6
ZSBhcyAnbWF4KDMlLCAyJSwgMSUpJy4gYXNzZXJ0X2VxdWFsczogJ21heCgzJSwgMiUsIDElKScg
c2hvdWxkIHJvdW5kLXRyaXAgZXhhY3RseSBpbiBzcGVjaWZpZWQgdmFsdWVzLiBleHBlY3RlZCAi
bWF4KDMlLCAyJSwgMSUpIiBidXQgZ290ICJtYXgoMyUpIgogRkFJTCAnbWF4KDMlLCAyJSwgMSUp
JyBhcyBhIGNvbXB1dGVkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ21heCgzJSwgMiUsIDEl
KScuIGFzc2VydF9lcXVhbHM6ICdtYXgoMyUsIDIlLCAxJSknIHNob3VsZCByb3VuZC10cmlwIGV4
YWN0bHkgaW4gY29tcHV0ZWQgdmFsdWVzLiBleHBlY3RlZCAibWF4KDMlLCAyJSwgMSUpIiBidXQg
Z290ICJtYXgoMyUpIgogUEFTUyAnbWF4KDMlLCAyJSwgMSUpJyBhcyBhIHVzZWQgdmFsdWUgc2hv
dWxkIHNlcmlhbGl6ZSBhcyAnM3B4Jy4KLUZBSUwgJ21pbigxJSwgMiUsIDMlKSAwcHgnIGFzIGEg
c3BlY2lmaWVkIHZhbHVlIHNob3VsZCBzZXJpYWxpemUgYXMgJ21pbigxJSwgMiUsIDMlKSAwcHgn
LiBhc3NlcnRfZXF1YWxzOiAnbWluKDElLCAyJSwgMyUpIDBweCcgc2hvdWxkIHJvdW5kLXRyaXAg
ZXhhY3RseSBpbiBzcGVjaWZpZWQgdmFsdWVzLiBleHBlY3RlZCAibWluKDElLCAyJSwgMyUpIDBw
eCIgYnV0IGdvdCAibWluKDElKSAwcHgiCitQQVNTICdtaW4oMSUsIDIlLCAzJSkgMHB4JyBhcyBh
IHNwZWNpZmllZCB2YWx1ZSBzaG91bGQgc2VyaWFsaXplIGFzICdtaW4oMSUsIDIlLCAzJSkgMHB4
Jy4KIEZBSUwgJ21pbigxJSwgMiUsIDMlKSAwcHgnIGFzIGEgY29tcHV0ZWQgdmFsdWUgc2hvdWxk
IHNlcmlhbGl6ZSBhcyAnbWluKDElLCAyJSwgMyUpIDBweCcuIGFzc2VydF9lcXVhbHM6ICdtaW4o
MSUsIDIlLCAzJSkgMHB4JyBzaG91bGQgcm91bmQtdHJpcCBleGFjdGx5IGluIGNvbXB1dGVkIHZh
bHVlcy4gZXhwZWN0ZWQgIm1pbigxJSwgMiUsIDMlKSAwcHgiIGJ1dCBnb3QgIm1pbigxJSkgMHB4
IgogUEFTUyAnY2FsYyhtaW4oMSUsIDIlKSArIG1heCgzJSwgNCUpICsgMTAlKScgYXMgYSBzcGVj
aWZpZWQgdmFsdWUgc2hvdWxkIHNlcmlhbGl6ZSBhcyAnY2FsYygxNSUpJy4KIFBBU1MgJ2NhbGMo
bWluKDElLCAyJSkgKyBtYXgoMyUsIDQlKSArIDEwJSknIGFzIGEgY29tcHV0ZWQgdmFsdWUgc2hv
dWxkIHNlcmlhbGl6ZSBhcyAnMTUlJy4K
</data>

          </attachment>
      

    </bug>

</bugzilla>