<?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>28635</bug_id>
          
          <creation_ts>2009-08-21 15:57:02 -0700</creation_ts>
          <short_desc>[CSS3 Backgrounds and Borders] Add support for 2-keyword values for background-repeat</short_desc>
          <delta_ts>2009-08-31 15:06:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>27569</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142030</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-08-21 15:57:02 -0700</bug_when>
    <thetext>&lt;http://dev.w3.org/csswg/css3-background/#background-repeat&gt; introduces a new way to specify the horizontal repeat behavior separately from the vertical repeat behavior:
    background-repeat: repeat no-repeat;
is equivalent to
    background-repeat: repeat-x;

While repeat-x and repeat-y are still supported as shorthands, combinations involving the new &apos;space&apos; and &apos;round&apos; values are also possible using the 2-keyword notation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143484</commentid>
    <comment_count>1</comment_count>
      <attachid>38762</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-08-28 16:58:43 -0700</bug_when>
    <thetext>Created attachment 38762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143701</commentid>
    <comment_count>2</comment_count>
      <attachid>38762</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-31 12:30:41 -0700</bug_when>
    <thetext>Comment on attachment 38762
Patch

&gt; +            if (xRepeat == yRepeat)
&gt; +                return CSSPrimitiveValue::create(xRepeat);
&gt; +            else if (xRepeat == CSSValueRepeat &amp;&amp; yRepeat == CSSValueNoRepeat)
&gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatX);
&gt; +            else if (xRepeat == CSSValueNoRepeat &amp;&amp; yRepeat == CSSValueRepeat)
&gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatY);

No need for else after return, and normally we omit it.

&gt; +        case CSSPropertyWebkitMaskRepeat: {
&gt; +            EFillRepeat xRepeat = style-&gt;maskRepeatX();
&gt; +            EFillRepeat yRepeat = style-&gt;maskRepeatY();
&gt; +            
&gt; +            // For backwards compatibility, if both values are equal, just return one of them. And
&gt; +            // if the two values are equivalent to repeat-x or repeat-y, just return the shorthand.
&gt; +            if (xRepeat == yRepeat)
&gt; +                return CSSPrimitiveValue::create(xRepeat);
&gt; +            else if (xRepeat == CSSValueRepeat &amp;&amp; yRepeat == CSSValueNoRepeat)
&gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatX);
&gt; +            else if (xRepeat == CSSValueNoRepeat &amp;&amp; yRepeat == CSSValueRepeat)
&gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatY);
&gt; +
&gt; +            RefPtr&lt;CSSValueList&gt; list = CSSValueList::createSpaceSeparated();
&gt; +            list-&gt;append(CSSPrimitiveValue::create(xRepeat));
&gt; +            list-&gt;append(CSSPrimitiveValue::create(yRepeat));
&gt; +            return list.release();
&gt; +        }

This should use a function that takes xRepeat and yRepeat arguments so mask-repeat can share almost all its code with background-repeat.

&gt; +        case CSSPropertyBackgroundRepeat: {
&gt; +            const int properties[2] = { CSSPropertyBackgroundRepeatX,
&gt; +                                        CSSPropertyBackgroundRepeatY };
&gt; +            return getLayeredShorthandValue(properties, 2);
&gt; +        }

I think the property names would look better on a single line here.

&gt; +        case CSSPropertyWebkitMaskRepeat: {
&gt; +            const int properties[2] = { CSSPropertyWebkitMaskRepeatX,
&gt; +                                        CSSPropertyWebkitMaskRepeatY };
&gt; +            return getLayeredShorthandValue(properties, 2);
&gt; +        }

Here too.

&gt; +                    RefPtr&lt;CSSValue&gt; yValue;
&gt; +                    if (values[j + 1]-&gt;isValueList())
&gt; +                        yValue = static_cast&lt;CSSValueList*&gt;(values[j + 1].get())-&gt;itemWithoutBoundsCheck(i);
&gt; +                    else
&gt; +                        yValue = values[j + 1];

With values[j + 1] repeated three times I suspect it would read better if that was in a local variable.

&gt; +                    int xId = static_cast&lt;CSSPrimitiveValue*&gt;(value.get())-&gt;getIdent();
&gt; +                    int yId =  static_cast&lt;CSSPrimitiveValue*&gt;(yValue.get())-&gt;getIdent();

There’s an extra space here after the &quot;=&quot; sign.

All that code appending string is quite inefficient, but that&apos;s nothing new.

&gt;          case NoRepeatFill:
&gt;              m_value.ident = CSSValueNoRepeat;
&gt; +            break;
&gt;          case RoundFill:
&gt;              m_value.ident = CSSValueRound;
&gt; +            break;
&gt;          case SpaceFill:
&gt;              m_value.ident = CSSValueSpace;
&gt;              break;

Are there tests that cover these two missing break statements?

&gt; +    case CSSPropertyBackgroundRepeat:
&gt; +        HANDLE_BACKGROUND_INHERIT_AND_INITIAL(repeatX, RepeatX);
&gt; +        HANDLE_BACKGROUND_INHERIT_AND_INITIAL(repeatY, RepeatY);
&gt; +        return;
&gt; +    case CSSPropertyBackgroundRepeatX: {
&gt; +        HANDLE_BACKGROUND_VALUE(repeatX, RepeatX, value)
&gt; +        return;
&gt; +    }
&gt; +    case CSSPropertyBackgroundRepeatY: {
&gt; +        HANDLE_BACKGROUND_VALUE(repeatY, RepeatY, value)
&gt; +        return;
&gt; +    }
&gt; +    case CSSPropertyWebkitMaskRepeat:
&gt; +        HANDLE_MASK_INHERIT_AND_INITIAL(repeatX, RepeatX);
&gt; +        HANDLE_MASK_INHERIT_AND_INITIAL(repeatY, RepeatY);
&gt; +        return;
&gt; +    case CSSPropertyWebkitMaskRepeatX: {
&gt; +        HANDLE_MASK_VALUE(repeatX, RepeatX, value)
&gt; +        return;
&gt; +    }
&gt; +    case CSSPropertyWebkitMaskRepeatY: {
&gt; +        HANDLE_MASK_VALUE(repeatY, RepeatY, value)
&gt; +        return;
&gt; +    }

Do the HANDLE_BACKGROUND_VALUE and HANDLE_MASK_VALUE ones really need braces? I&apos;m surprised since the others don&apos;t have them.

&gt; -background-image: url(about:blank); background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 80% 50px;
&gt; +background-image: url(about:blank); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 80% 50px; background-repeat: initial initial;

The order here seems random. Should we define the order somehow? By changing the code to do things in a canonical order?

&gt; -Removing background removes background-image, background-repeat, background-attachment, background-origin, background-clip, background-color, background-position.
&gt; +Removing background removes background-image, background-attachment, background-origin, background-clip, background-color, background-position, background-repeat.

Ditto.

&gt; -Removing -webkit-mask removes -webkit-mask-image, -webkit-mask-repeat, -webkit-mask-attachment, -webkit-mask-position-x, -webkit-mask-position-y, -webkit-mask-origin, -webkit-mask-clip.
&gt; +Removing -webkit-mask removes -webkit-mask-image, -webkit-mask-repeat-x, -webkit-mask-repeat-y, -webkit-mask-attachment, -webkit-mask-position-x, -webkit-mask-position-y, -webkit-mask-origin, -webkit-mask-clip.

Ditto.

&gt; Index: LayoutTests/platform/mac/fast/inspector/style-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/platform/mac/fast/inspector/style-expected.txt	(revision 47879)
&gt; +++ LayoutTests/platform/mac/fast/inspector/style-expected.txt	(working copy)
&gt; @@ -9,46 +9,49 @@ layer at (0,0) size 800x600
&gt;        RenderBlock {DIV} at (24,42) size 736x28 [color=#FFFFFF] [bgcolor=#800080]
&gt;          RenderText {#text} at (0,0) size 50x28
&gt;            text run at (0,0) width 50: &quot;Test&quot;
&gt; -      RenderBlock (anonymous) at (0,94) size 784x252
&gt; +      RenderBlock (anonymous) at (0,94) size 784x270
&gt;          RenderText {#text} at (0,0) size 388x18
&gt;            text run at (0,0) width 388: &quot;background-image: initial (original property was background)&quot;
&gt;          RenderBR {BR} at (388,14) size 0x0
&gt; -        RenderText {#text} at (0,18) size 388x18
&gt; -          text run at (0,18) width 388: &quot;background-repeat: initial (original property was background)&quot;
&gt; -        RenderBR {BR} at (388,32) size 0x0
&gt; -        RenderText {#text} at (0,36) size 418x18
&gt; -          text run at (0,36) width 418: &quot;background-attachment: initial (original property was background)&quot;
&gt; -        RenderBR {BR} at (418,50) size 0x0
&gt; -        RenderText {#text} at (0,54) size 413x18
&gt; -          text run at (0,54) width 413: &quot;background-position-x: initial (original property was background)&quot;
&gt; -        RenderBR {BR} at (413,68) size 0x0
&gt; +        RenderText {#text} at (0,18) size 401x18
&gt; +          text run at (0,18) width 401: &quot;background-repeat-x: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (401,32) size 0x0
&gt; +        RenderText {#text} at (0,36) size 401x18
&gt; +          text run at (0,36) width 401: &quot;background-repeat-y: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (401,50) size 0x0
&gt; +        RenderText {#text} at (0,54) size 418x18
&gt; +          text run at (0,54) width 418: &quot;background-attachment: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (418,68) size 0x0
&gt;          RenderText {#text} at (0,72) size 413x18
&gt; -          text run at (0,72) width 413: &quot;background-position-y: initial (original property was background)&quot;
&gt; +          text run at (0,72) width 413: &quot;background-position-x: initial (original property was background)&quot;
&gt;          RenderBR {BR} at (413,86) size 0x0
&gt; -        RenderText {#text} at (0,90) size 387x18
&gt; -          text run at (0,90) width 387: &quot;background-origin: initial (original property was background)&quot;
&gt; -        RenderBR {BR} at (387,104) size 0x0
&gt; -        RenderText {#text} at (0,108) size 373x18
&gt; -          text run at (0,108) width 373: &quot;background-clip: initial (original property was background)&quot;
&gt; -        RenderBR {BR} at (373,122) size 0x0
&gt; -        RenderText {#text} at (0,126) size 387x18
&gt; -          text run at (0,126) width 387: &quot;background-color: purple (original property was background)&quot;
&gt; -        RenderBR {BR} at (387,140) size 0x0
&gt; -        RenderText {#text} at (0,144) size 300x18
&gt; -          text run at (0,144) width 300: &quot;margin-top: 1em (original property was margin)&quot;
&gt; -        RenderBR {BR} at (300,158) size 0x0
&gt; -        RenderText {#text} at (0,162) size 510x18
&gt; -          text run at (0,162) width 510: &quot;margin-right: 1em (original property was margin and property was implicitly set.)&quot;
&gt; -        RenderBR {BR} at (510,176) size 0x0
&gt; -        RenderText {#text} at (0,180) size 525x18
&gt; -          text run at (0,180) width 525: &quot;margin-bottom: 1em (original property was margin and property was implicitly set.)&quot;
&gt; -        RenderBR {BR} at (525,194) size 0x0
&gt; -        RenderText {#text} at (0,198) size 501x18
&gt; -          text run at (0,198) width 501: &quot;margin-left: 1em (original property was margin and property was implicitly set.)&quot;
&gt; -        RenderBR {BR} at (501,212) size 0x0
&gt; -        RenderText {#text} at (0,216) size 75x18
&gt; -          text run at (0,216) width 75: &quot;color: white&quot;
&gt; -        RenderBR {BR} at (75,230) size 0x0
&gt; -        RenderText {#text} at (0,234) size 362x18
&gt; -          text run at (0,234) width 362: &quot;font: normal normal normal 24px/normal &apos;Lucida Grande&apos;&quot;
&gt; -        RenderBR {BR} at (362,248) size 0x0
&gt; +        RenderText {#text} at (0,90) size 413x18
&gt; +          text run at (0,90) width 413: &quot;background-position-y: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (413,104) size 0x0
&gt; +        RenderText {#text} at (0,108) size 387x18
&gt; +          text run at (0,108) width 387: &quot;background-origin: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (387,122) size 0x0
&gt; +        RenderText {#text} at (0,126) size 373x18
&gt; +          text run at (0,126) width 373: &quot;background-clip: initial (original property was background)&quot;
&gt; +        RenderBR {BR} at (373,140) size 0x0
&gt; +        RenderText {#text} at (0,144) size 387x18
&gt; +          text run at (0,144) width 387: &quot;background-color: purple (original property was background)&quot;
&gt; +        RenderBR {BR} at (387,158) size 0x0
&gt; +        RenderText {#text} at (0,162) size 300x18
&gt; +          text run at (0,162) width 300: &quot;margin-top: 1em (original property was margin)&quot;
&gt; +        RenderBR {BR} at (300,176) size 0x0
&gt; +        RenderText {#text} at (0,180) size 510x18
&gt; +          text run at (0,180) width 510: &quot;margin-right: 1em (original property was margin and property was implicitly set.)&quot;
&gt; +        RenderBR {BR} at (510,194) size 0x0
&gt; +        RenderText {#text} at (0,198) size 525x18
&gt; +          text run at (0,198) width 525: &quot;margin-bottom: 1em (original property was margin and property was implicitly set.)&quot;
&gt; +        RenderBR {BR} at (525,212) size 0x0
&gt; +        RenderText {#text} at (0,216) size 501x18
&gt; +          text run at (0,216) width 501: &quot;margin-left: 1em (original property was margin and property was implicitly set.)&quot;
&gt; +        RenderBR {BR} at (501,230) size 0x0
&gt; +        RenderText {#text} at (0,234) size 75x18
&gt; +          text run at (0,234) width 75: &quot;color: white&quot;
&gt; +        RenderBR {BR} at (75,248) size 0x0
&gt; +        RenderText {#text} at (0,252) size 362x18
&gt; +          text run at (0,252) width 362: &quot;font: normal normal normal 24px/normal &apos;Lucida Grande&apos;&quot;
&gt; +        RenderBR {BR} at (362,266) size 0x0

Can this be a dumpAsText() test? The output seems to indicate it should be.

I&apos;d like to see even more tests of the parser. I&apos;m not sure all the edge cases are covered. Is ever branch of every if statement tested?

r=me as-is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143726</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-08-31 14:27:14 -0700</bug_when>
    <thetext>Thanks for the review Darin!

(In reply to comment #2)
&gt; (From update of attachment 38762 [details])
&gt; &gt; +            if (xRepeat == yRepeat)
&gt; &gt; +                return CSSPrimitiveValue::create(xRepeat);
&gt; &gt; +            else if (xRepeat == CSSValueRepeat &amp;&amp; yRepeat == CSSValueNoRepeat)
&gt; &gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatX);
&gt; &gt; +            else if (xRepeat == CSSValueNoRepeat &amp;&amp; yRepeat == CSSValueRepeat)
&gt; &gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatY);
&gt; 
&gt; No need for else after return, and normally we omit it.
&gt; 

Fixed this.

&gt; &gt; +        case CSSPropertyWebkitMaskRepeat: {
&gt; &gt; +            EFillRepeat xRepeat = style-&gt;maskRepeatX();
&gt; &gt; +            EFillRepeat yRepeat = style-&gt;maskRepeatY();
&gt; &gt; +            
&gt; &gt; +            // For backwards compatibility, if both values are equal, just return one of them. And
&gt; &gt; +            // if the two values are equivalent to repeat-x or repeat-y, just return the shorthand.
&gt; &gt; +            if (xRepeat == yRepeat)
&gt; &gt; +                return CSSPrimitiveValue::create(xRepeat);
&gt; &gt; +            else if (xRepeat == CSSValueRepeat &amp;&amp; yRepeat == CSSValueNoRepeat)
&gt; &gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatX);
&gt; &gt; +            else if (xRepeat == CSSValueNoRepeat &amp;&amp; yRepeat == CSSValueRepeat)
&gt; &gt; +                return CSSPrimitiveValue::createIdentifier(CSSValueRepeatY);
&gt; &gt; +
&gt; &gt; +            RefPtr&lt;CSSValueList&gt; list = CSSValueList::createSpaceSeparated();
&gt; &gt; +            list-&gt;append(CSSPrimitiveValue::create(xRepeat));
&gt; &gt; +            list-&gt;append(CSSPrimitiveValue::create(yRepeat));
&gt; &gt; +            return list.release();
&gt; &gt; +        }
&gt; 
&gt; This should use a function that takes xRepeat and yRepeat arguments so
&gt; mask-repeat can share almost all its code with background-repeat.
&gt; 

Fixed this too.


&gt; &gt; +        case CSSPropertyBackgroundRepeat: {
&gt; &gt; +            const int properties[2] = { CSSPropertyBackgroundRepeatX,
&gt; &gt; +                                        CSSPropertyBackgroundRepeatY };
&gt; &gt; +            return getLayeredShorthandValue(properties, 2);
&gt; &gt; +        }
&gt; 
&gt; I think the property names would look better on a single line here.

Fixed.

&gt; 
&gt; &gt; +        case CSSPropertyWebkitMaskRepeat: {
&gt; &gt; +            const int properties[2] = { CSSPropertyWebkitMaskRepeatX,
&gt; &gt; +                                        CSSPropertyWebkitMaskRepeatY };
&gt; &gt; +            return getLayeredShorthandValue(properties, 2);
&gt; &gt; +        }
&gt; 
&gt; Here too.
&gt; 

Fixed.

&gt; &gt; +                    RefPtr&lt;CSSValue&gt; yValue;
&gt; &gt; +                    if (values[j + 1]-&gt;isValueList())
&gt; &gt; +                        yValue = static_cast&lt;CSSValueList*&gt;(values[j + 1].get())-&gt;itemWithoutBoundsCheck(i);
&gt; &gt; +                    else
&gt; &gt; +                        yValue = values[j + 1];
&gt; 
&gt; With values[j + 1] repeated three times I suspect it would read better if that
&gt; was in a local variable.
&gt; 

Fixed.

&gt; &gt; +                    int xId = static_cast&lt;CSSPrimitiveValue*&gt;(value.get())-&gt;getIdent();
&gt; &gt; +                    int yId =  static_cast&lt;CSSPrimitiveValue*&gt;(yValue.get())-&gt;getIdent();
&gt; 
&gt; There’s an extra space here after the &quot;=&quot; sign.
&gt; 

Fixed.

&gt; All that code appending string is quite inefficient, but that&apos;s nothing new.
&gt; 
&gt; &gt;          case NoRepeatFill:
&gt; &gt;              m_value.ident = CSSValueNoRepeat;
&gt; &gt; +            break;
&gt; &gt;          case RoundFill:
&gt; &gt;              m_value.ident = CSSValueRound;
&gt; &gt; +            break;
&gt; &gt;          case SpaceFill:
&gt; &gt;              m_value.ident = CSSValueSpace;
&gt; &gt;              break;
&gt; 
&gt; Are there tests that cover these two missing break statements?
&gt; 

No. As far as I can tell, nothing bad would have happened in the current code since we wouldn&apos;t have fallen into any of the other cases. It seemed like a good idea to add the breaks though because we have them everywhere else.

&gt; &gt; +    case CSSPropertyBackgroundRepeat:
&gt; &gt; +        HANDLE_BACKGROUND_INHERIT_AND_INITIAL(repeatX, RepeatX);
&gt; &gt; +        HANDLE_BACKGROUND_INHERIT_AND_INITIAL(repeatY, RepeatY);
&gt; &gt; +        return;
&gt; &gt; +    case CSSPropertyBackgroundRepeatX: {
&gt; &gt; +        HANDLE_BACKGROUND_VALUE(repeatX, RepeatX, value)
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +    case CSSPropertyBackgroundRepeatY: {
&gt; &gt; +        HANDLE_BACKGROUND_VALUE(repeatY, RepeatY, value)
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +    case CSSPropertyWebkitMaskRepeat:
&gt; &gt; +        HANDLE_MASK_INHERIT_AND_INITIAL(repeatX, RepeatX);
&gt; &gt; +        HANDLE_MASK_INHERIT_AND_INITIAL(repeatY, RepeatY);
&gt; &gt; +        return;
&gt; &gt; +    case CSSPropertyWebkitMaskRepeatX: {
&gt; &gt; +        HANDLE_MASK_VALUE(repeatX, RepeatX, value)
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +    case CSSPropertyWebkitMaskRepeatY: {
&gt; &gt; +        HANDLE_MASK_VALUE(repeatY, RepeatY, value)
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; Do the HANDLE_BACKGROUND_VALUE and HANDLE_MASK_VALUE ones really need braces?
&gt; I&apos;m surprised since the others don&apos;t have them.
&gt; 

They don&apos;t! I got rid of them

&gt; &gt; -background-image: url(about:blank); background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 80% 50px;
&gt; &gt; +background-image: url(about:blank); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; background-position: 80% 50px; background-repeat: initial initial;
&gt; 
&gt; The order here seems random. Should we define the order somehow? By changing
&gt; the code to do things in a canonical order?
&gt; 

I believe that the current order is determined by CSSMutableStyleDeclaration::cssText(), which determines the order simply by iterating through m_properties and concatenating the cssText(). background-repeat has moved to copy the behavior of background-position though because cssText is not sufficient and more work is required. 

&gt; 
&gt; &gt; Index: LayoutTests/platform/mac/fast/inspector/style-expected.txt
&gt; &gt; ===================================================================
&gt; &gt; --- LayoutTests/platform/mac/fast/inspector/style-expected.txt	(revision 47879)
&gt; &gt; +++ LayoutTests/platform/mac/fast/inspector/style-expected.txt	(working copy)
&gt; &gt; @@ -9,46 +9,49 @@ layer at (0,0) size 800x600
&gt; &gt;        RenderBlock {DIV} at (24,42) size 736x28 [color=#FFFFFF] [bgcolor=#800080]
&gt; &gt;          RenderText {#text} at (0,0) size 50x28
&gt; &gt;            text run at (0,0) width 50: &quot;Test&quot;
&gt; &gt; -      RenderBlock (anonymous) at (0,94) size 784x252
etc...
&gt; 
&gt; Can this be a dumpAsText() test? The output seems to indicate it should be.
&gt; 

Looks like it! I made it dumpAsText()

&gt; I&apos;d like to see even more tests of the parser. I&apos;m not sure all the edge cases
&gt; are covered. Is ever branch of every if statement tested?
&gt; 

I agree that more thorough testing would be better. I will beef up the parser test a little.

&gt; r=me as-is

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143735</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-08-31 15:06:24 -0700</bug_when>
    <thetext>Fixed with revision 47906.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38762</attachid>
            <date>2009-08-28 16:58:43 -0700</date>
            <delta_ts>2009-08-31 12:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>forReview.txt</filename>
            <type>text/plain</type>
            <size>58826</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzg4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMDktMDgtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NjM1IFtDU1MzIAor
ICAgICAgICBCYWNrZ3JvdW5kcyBhbmQgQm9yZGVyc10gQWRkIHN1cHBvcnQgZm9yIDIta2V5d29y
ZCB2YWx1ZXMgZm9yIAorICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdAorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxsb3dzIGJhY2tncm91bmQtcmVwZWF0IHRvIHRha2UgdHdvIHZhbHVlcyBieSBtYWtp
bmcgCisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0IGp1c3QgbGlrZSBiYWNrZ3JvdW5kLXBvc2l0
aW9uIGludGVybmFsbHkuIFRoZXJlIAorICAgICAgICBpcyBhIGxpdHRsZSBleHRyYSBsZWd3b3Jr
IGZvciBiYWNrZ3JvdW5kLXJlcGVhdCBiZWNhdXNlIHRoZSBzcGVjIAorICAgICAgICBpbmRpY2F0
ZXMgdGhhdCBpdHMgY29tcHV0ZWQgdmFsdWUgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gaG93IGl0
IAorICAgICAgICB3YXMgc3BlY2lmaWVkLiBJIGtlZXAgdHJhY2sgb2YgdGhlIHNwZWNpZmllZCB0
aGluZyBieSBzZXR0aW5nIHRoZSAKKyAgICAgICAgaW1wbGljaXQgZmxhZyB3aGVuZXZlciBiYWNr
Z3JvdW5kLXJlcGVhdCBpcyBkZWZpbmVkIHdpdGggb25seSBvbmUgCisgICAgICAgIHZhbHVlIChz
aW5jZSBpbnRlcm5hbGx5LCB3ZSBub3cgc3RvcmUgdGhpcyBhcyAyIHZhbHVlcy4pCisgICAgICAg
IAorICAgICAgICBIZXJlIHdlIGNhbid0IGFjY2VzcyB0aGUgaW1wbGljaXQgZmxhZywgc28gZm9y
IGJhY2t3YXJkcy0KKyAgICAgICAgY29tcGF0aWJpbGl0eSdzIHNha2UsIHdlIGFsd2F5cyByZXR1
cm4gb25lIHZhbHVlIHdoZW4gdGhhdCBtYWtlcyAKKyAgICAgICAgc2Vuc2UuCisgICAgICAgICog
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorCisgICAg
ICAgIEhlcmUgd2UgY2hlY2sgZm9yIHRoZSBpbXBsaWNpdCBmbGFnIGFuZCByZXR1cm4gb25lIHZh
bHVlIHdoZW4gaXQgaXMgCisgICAgICAgIHNldC4KKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCk6CisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFggYW5kIAorICAgICAg
ICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZCisgICAgICAgICogY3NzL0NTU1BhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUZpbGxQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorCisg
ICAgICAgIEdldCByaWQgb2YgbWFwcGluZ3MgdG8gUmVwZWF0WEZpbGwgYW5kIFJlcGVhdFlGaWxs
IHNpbmNlIHdlIGRvbid0IAorICAgICAgICBuZWVkIHRob3NlIHBhcnRzIG9mIHRoZSBFRmlsbFJl
cGVhdCBlbnVtIGFueW1vcmUuCisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRUZp
bGxSZXBlYXQpOgorCisgICAgICAgIEFkZCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYIGFu
ZCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5
TG9uZ2hhbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdFNob3J0aGFuZE1hcCk6CisKKyAg
ICAgICBBZGQgYmFja2dyb3VuZC1yZXBlYXQteCBhbmQgLXkuCisgICAgICAgICogY3NzL0NTU1By
b3BlcnR5TmFtZXMuaW46CisKKyAgICAgICAgQnJlYWsgcmVwZWF0IGludG8geCBhbmQgeS4KKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEZpbGxSZXBlYXRZKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
OgorCisgICAgICAgIFRoZXJlIGlzIG5vIG1vcmUgUmVwZWF0WEZpbGwuIEluc3RlYWQsIGxvb2sg
Zm9yIAorICAgICAgICBmaWxsTGF5ZXItPnJlcGVhdFgoKSA9PSBSZXBlYXRGaWxsCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeSk6
CisgICAgICAgIAorICAgICAgICBCcmVhayBtX3JlcGVhdCBpbnRvIG1fcmVwZWF0WCBhbmQgbV9y
ZXBlYXRZCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWxsTGF5ZXI6OkZpbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxs
TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpmaWxsVW5zZXRQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6Y3VsbEVtcHR5TGF5ZXJzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5
ZXI6OnJlcGVhdFgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpyZXBlYXRZKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6aXNSZXBlYXRYU2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGxMYXllcjo6aXNSZXBlYXRZU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXll
cjo6c2V0UmVwZWF0WCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXI6OnNldFJlcGVhdFkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpjbGVhclJlcGVhdFgpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsbExheWVyOjpjbGVhclJlcGVhdFkpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
bExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVy
Ojppbml0aWFsRmlsbFJlcGVhdFkpOgorCisgICAgICAgIEFnYWluLCBicmVhayBiYWNrZ3JvdW5k
UmVwZWF0IGludG8gYmFja2dyb3VuZFJlcGVhdFggYW5kIAorICAgICAgICBiYWNrZ3JvdW5kUmVw
ZWF0WQorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJhY2tncm91bmRSZXBlYXRYKToKKyAgICAgICAgKFdl
YkNvcmU6OkluaGVyaXRlZEZsYWdzOjpiYWNrZ3JvdW5kUmVwZWF0WSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6bWFza1JlcGVhdFgpOgorICAgICAgICAoV2ViQ29yZTo6SW5o
ZXJpdGVkRmxhZ3M6Om1hc2tSZXBlYXRZKToKKworICAgICAgICBXZSBkb24ndCBuZWVkIFJlcGVh
dFhGaWxsIG9yIFJlcGVhdFlGaWxsLiBOb3cgdGhhdCB3ZSBzdG9yZSB0d28gCisgICAgICAgIHZh
bHVlcywgdGhleSBhcmUgcmVwcmVzZW50ZWQgYnkgUmVwZWF0LU5vUmVwZWF0IGFuZCBOb1JlcGVh
dC0KKyAgICAgICAgUmVwZWF0LCByZXNwZWN0aXZlbHkuCisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDA5
LTA4LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1hcmsgUm93ZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw4ICs2NjAs
MjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmJhY2tncm91
bmRTaXplTGVuZ3RoKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKICAgICAgICAgfSAgCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0OgotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUt
PmJhY2tncm91bmRSZXBlYXQoKSk7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UmVwZWF0OiB7CisgICAgICAgICAgICBFRmlsbFJlcGVhdCB4UmVwZWF0ID0gc3R5bGUtPmJhY2tn
cm91bmRSZXBlYXRYKCk7CisgICAgICAgICAgICBFRmlsbFJlcGVhdCB5UmVwZWF0ID0gc3R5bGUt
PmJhY2tncm91bmRSZXBlYXRZKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvciBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgYm90aCB2YWx1ZXMgYXJlIGVxdWFsLCBqdXN0IHJl
dHVybiBvbmUgb2YgdGhlbS4gQW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgdHdvIHZhbHVlcyBh
cmUgZXF1aXZhbGVudCB0byByZXBlYXQteCBvciByZXBlYXQteSwganVzdCByZXR1cm4gdGhlIHNo
b3J0aGFuZC4KKyAgICAgICAgICAgIGlmICh4UmVwZWF0ID09IHlSZXBlYXQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoeFJlcGVhdCk7CisgICAgICAg
ICAgICBlbHNlIGlmICh4UmVwZWF0ID09IENTU1ZhbHVlUmVwZWF0ICYmIHlSZXBlYXQgPT0gQ1NT
VmFsdWVOb1JlcGVhdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVSZXBlYXRYKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHhSZXBlYXQgPT0gQ1NTVmFsdWVOb1JlcGVhdCAmJiB5UmVwZWF0ID09IENTU1ZhbHVlUmVwZWF0
KQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRp
ZmllcihDU1NWYWx1ZVJlcGVhdFkpOworCisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoeFJlcGVhdCkpOworICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoeVJlcGVhdCkp
OworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgogICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmJhY2tncm91bmRDb21wb3Np
dGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKQEAg
LTkzMCw4ICs5NDYsMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURl
YwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5
bGUtPm1hc2tTaXplKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKICAgICAgICAgfSAgCi0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVw
ZWF0OgotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUt
Pm1hc2tSZXBlYXQoKSk7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
OiB7CisgICAgICAgICAgICBFRmlsbFJlcGVhdCB4UmVwZWF0ID0gc3R5bGUtPm1hc2tSZXBlYXRY
KCk7CisgICAgICAgICAgICBFRmlsbFJlcGVhdCB5UmVwZWF0ID0gc3R5bGUtPm1hc2tSZXBlYXRZ
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJp
bGl0eSwgaWYgYm90aCB2YWx1ZXMgYXJlIGVxdWFsLCBqdXN0IHJldHVybiBvbmUgb2YgdGhlbS4g
QW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgdHdvIHZhbHVlcyBhcmUgZXF1aXZhbGVudCB0byBy
ZXBlYXQteCBvciByZXBlYXQteSwganVzdCByZXR1cm4gdGhlIHNob3J0aGFuZC4KKyAgICAgICAg
ICAgIGlmICh4UmVwZWF0ID09IHlSZXBlYXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoeFJlcGVhdCk7CisgICAgICAgICAgICBlbHNlIGlmICh4UmVw
ZWF0ID09IENTU1ZhbHVlUmVwZWF0ICYmIHlSZXBlYXQgPT0gQ1NTVmFsdWVOb1JlcGVhdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
Q1NTVmFsdWVSZXBlYXRYKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHhSZXBlYXQgPT0gQ1NTVmFs
dWVOb1JlcGVhdCAmJiB5UmVwZWF0ID09IENTU1ZhbHVlUmVwZWF0KQorICAgICAgICAgICAgICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVJlcGVh
dFkpOworCisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoeFJlcGVhdCkpOworICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoeVJlcGVhdCkpOworICAgICAgICAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQXR0YWNobWVudDoKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0eWxlLT5tYXNrQXR0YWNobWVudCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NSdWxlLmgiCiAj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTExNCwxMSArMTE1LDE2IEBAIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsKICAgICAgICAgICAg
IHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgMik7CiAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6IHsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFkgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRo
YW5kVmFsdWUocHJvcGVydGllcywgMik7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmQ6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzddID0g
eyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0
LCAKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzhdID0geyBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRJbWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb24sIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvciB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzLCA3KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVk
U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgOCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlcjogewogICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM11b
NF0gPSB7eyBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLApAQCAtMjEwLDYgKzIxNiwxMSBAQCBT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZIH07
CiAgICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMs
IDIpOwogICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMsIDIpOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOiB7CiAgICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUmVwZWF0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLApAQCAtMjg2LDYgKzI5Nyw5IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGEKICAgICAvLyBjYW4gc2FmZWx5IGJl
IG9taXR0ZWQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1MYXllcnM7IGkrKykgewog
ICAgICAgICBTdHJpbmcgbGF5ZXJSZXM7CisgICAgICAgIGJvb2wgdXNlUmVwZWF0WFNob3J0aGFu
ZCA9IGZhbHNlOworICAgICAgICBib29sIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgbnVtYmVyOyBqKyspIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWU7CiAgICAgICAgICAgICBpZiAodmFsdWVzW2pdKSB7CkBAIC0zMDIsMTEgKzMx
Niw0OSBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExhCiAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlcG9ydCBiYWNrZ3JvdW5kLXJlcGVh
dCBhcyBpdCB3YXMgd3JpdHRlbiBpbiB0aGUgQ1NTLiBJZiB0aGUgcHJvcGVydHkgaXMgaW1wbGlj
aXQsCisgICAgICAgICAgICAvLyB0aGVuIGl0IHdhcyB3cml0dGVuIHdpdGggb25seSBvbmUgdmFs
dWUuIEhlcmUgd2UgZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0aGF0IHdhcyBzbyB3ZSBjYW4KKyAg
ICAgICAgICAgIC8vIHJlcG9ydCBiYWNrIGNvcnJlY3RseS4gCisgICAgICAgICAgICBpZiAocHJv
cGVydGllc1tqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYICYmIGlzUHJvcGVydHlJ
bXBsaWNpdChwcm9wZXJ0aWVzW2pdKSkgeworICAgICAgICAgICAgICAgIGlmIChqIDwgbnVtYmVy
IC0gMSAmJiBwcm9wZXJ0aWVzW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZ
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4geVZhbHVlOworICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsdWVzW2ogKyAxXS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHlWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
c1tqICsgMV0uZ2V0KCkpLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSB2YWx1ZXNbaiAr
IDFdOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludCB4
SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRl
bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHlJZCA9ICBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHlWYWx1ZS5nZXQoKSktPmdldElkZW50KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh4SWQgIT0geUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeElkID09
IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh4SWQgPT0gQ1NTVmFsdWVOb1JlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVSZXBlYXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgKytqOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5p
c0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVz
LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiICI7Ci0gICAgICAg
ICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodXNlUmVwZWF0WFNob3J0aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRY
U2hvcnRoYW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZh
bHVlTmFtZShDU1NWYWx1ZVJlcGVhdFgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNl
UmVwZWF0WVNob3J0aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRo
YW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFt
ZShDU1NWYWx1ZVJlcGVhdFkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlU2luZ2xl
V29yZFNob3J0aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRo
YW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NU
ZXh0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxheWVy
UmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC01ODMsNiArNjM1LDggQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjc3NUZQogICAgIAogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwb3NpdGlvblhQcm9wID0gMDsK
ICAgICBjb25zdCBDU1NQcm9wZXJ0eSogcG9zaXRpb25ZUHJvcCA9IDA7CisgICAgY29uc3QgQ1NT
UHJvcGVydHkqIHJlcGVhdFhQcm9wID0gMDsKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcmVwZWF0
WVByb3AgPSAwOwogICAgIAogICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKQEAgLTU5MSw2ICs2
NDUsMTAgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZQogICAgICAg
ICAgICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOwogICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkg
PT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZKQogICAgICAgICAgICAgcG9zaXRpb25Z
UHJvcCA9ICZwcm9wOworICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WCkKKyAgICAgICAgICAgIHJlcGVhdFhQcm9wID0gJnByb3A7CisgICAg
ICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZKQor
ICAgICAgICAgICAgcmVwZWF0WVByb3AgPSAmcHJvcDsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmVzdWx0ICs9IHByb3AuY3NzVGV4dCgpOwogICAgIH0KQEAgLTYxNCw2ICs2NzIsMjIgQEAg
U3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZQogICAgICAgICAgICAgcmVz
dWx0ICs9IHBvc2l0aW9uWVByb3AtPmNzc1RleHQoKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgYmFja2dyb3VuZC1yZXBlYXQuCisgICAgaWYgKHJl
cGVhdFhQcm9wICYmIHJlcGVhdFlQcm9wICYmIHJlcGVhdFhQcm9wLT5pc0ltcG9ydGFudCgpID09
IHJlcGVhdFlQcm9wLT5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgIFN0cmluZyByZXBlYXRWYWx1
ZTsKKyAgICAgICAgY29uc3QgaW50IHJlcGVhdFByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgfTsKKyAgICAg
ICAgaWYgKHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHJlcGVhdFlQcm9w
LT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSAKKyAgICAgICAgICAgIHJlcGVhdFZhbHVlID0gZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHJlcGVhdFByb3BlcnRpZXMsIDIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXBlYXRWYWx1ZSA9IHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0
KCkgKyAiICIgKyByZXBlYXRZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpOworICAgICAgICByZXN1
bHQgKz0gImJhY2tncm91bmQtcmVwZWF0OiAiICsgcmVwZWF0VmFsdWUgKyAocmVwZWF0WFByb3At
PmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAocmVwZWF0WFByb3ApIAorICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVh
dFhQcm9wLT5jc3NUZXh0KCk7CisgICAgICAgIGlmIChyZXBlYXRZUHJvcCkKKyAgICAgICAgICAg
IHJlc3VsdCArPSByZXBlYXRZUHJvcC0+Y3NzVGV4dCgpOworICAgIH0KKwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gNDc4NzkpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzUsNiArODc1LDggQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6
ZToKICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXRZOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudDoKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tDb21wb3NpdGU6CkBAIC04ODQsNyArODg2LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoaW50IHByb3BJZCwgYgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25YOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1JlcGVhdDogeworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdFk6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWwxOwogICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDI7CiAgICAgICAgIGludCBwcm9wSWQxLCBwcm9wSWQyOwpA
QCAtODk0LDYgKzg5OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQs
IGIKICAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCB2YWwyLnJlbGVhc2UoKSwg
aW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAg
IG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6ICAgICAvLyA8dXJpPiB8IG5v
bmUgfCBpbmhlcml0CkBAIC0xNzAzLDcgKzE3MDgsNyBAQCB2b2lkIENTU1BhcnNlcjo6YWRkRmls
bFZhbHVlKFJlZlB0cjxDU1NWCiAgICAgICAgIGx2YWwgPSBydmFsOwogfQogCi1jb25zdCBpbnQg
Y01heEZpbGxQcm9wZXJ0aWVzID0gNzsKK2NvbnN0IGludCBjTWF4RmlsbFByb3BlcnRpZXMgPSA5
OwogCiBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0
IGludCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wgaW1wb3J0YW50KQogewpA
QCAtMTcxNyw2ICsxNzIyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChp
bnQgcAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW2NNYXhGaWxsUHJvcGVydGllc107CiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBjbGlwVmFsdWU7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbllWYWx1ZTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdFlWYWx1ZTsKICAgICBpbnQg
aTsKIAogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CkBAIC0xNzM0LDYgKzE3
NDAsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKGludCBwCiAgICAgICAg
ICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3Jl
YXRlSW1wbGljaXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxs
VmFsdWUocG9zaXRpb25ZVmFsdWUsIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFJlcGVhdCB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Jl
cGVhdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUs
IENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJv
cGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4pICYmICFwYXJzZWRQcm9w
ZXJ0eVtpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmln
aW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCiAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBDU1NJbml0aWFsVmFs
dWU6OmNyZWF0ZUltcGxpY2l0KCkpOwpAQCAtMTc1Niw2ICsxNzY0LDggQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcAogICAgICAgICAgICAgICAgICAgICBhZGRGaWxs
VmFsdWUodmFsdWVzW2ldLCB2YWwxLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8IHByb3Bl
cnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRGaWxsVmFsdWUocG9zaXRpb25ZVmFsdWUsIHZhbDIucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVw
ZWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwg
dmFsMi5yZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9
PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tPcmlnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGFy
c2UgdGhlIHZhbHVlIGFzIGEgY2xpcCwgYW5kIHNlZSBpZiB3ZSBzdWNjZWVkLgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENsaXAsIHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIpKQpAQCAtMTc3OSw2ICsxNzg5LDgg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcAogICAgICAgICAgICAg
YWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgp
KTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b24pCiAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBDU1NJbml0
aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOworICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNb
aV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NT
UHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KQorICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShy
ZXBlYXRZVmFsdWUsIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAgICAgICAg
ICAgICBpZiAoKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8
IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luKSAmJiAhcGFyc2Vk
UHJvcGVydHlbaV0pIHsKICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5kLW9yaWdpbiB3
YXNuJ3QgcHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4KICAgICAgICAg
ICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUlt
cGxpY2l0KCkpOwpAQCAtMTc5Niw2ICsxODA4LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZp
bGxTaG9ydGhhbmQoaW50IHAKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWCwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAg
ICAgICAgIC8vIGl0J3MgT0sgdG8gY2FsbCBwb3NpdGlvbllWYWx1ZS5yZWxlYXNlKCkgc2luY2Ug
d2Ugb25seSBzZWUgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24gb25jZQogICAgICAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBwb3NpdGlvbllW
YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CisgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGll
c1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQpIHsKKyAgICAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIHZhbHVlc1tpXS5yZWxlYXNlKCks
IGltcG9ydGFudCk7CisgICAgICAgICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgcmVwZWF0WVZhbHVl
LnJlbGVhc2UoKSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
biBvbmNlCisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRZLCByZXBlYXRZVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOworICAgICAgICB9IGVsc2Ug
aWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KSB7CisgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCB2YWx1ZXNb
aV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgLy8gaXQncyBPSyB0byBjYWxs
IHJlcGVhdFlWYWx1ZS5yZWxlYXNlKCkgc2luY2Ugd2Ugb25seSBzZWUgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUG9zaXRpb24gb25jZQorICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0WSwgcmVwZWF0WVZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWx1
ZXNbaV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgCkBAIC0yMjM2LDYgKzIy
NTYsNTEgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKFJlZlB0cgogICAgICAg
ICB2YWx1ZTEuc3dhcCh2YWx1ZTIpOwogfQogCit2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVw
ZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQor
eworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisK
KyAgICBpbnQgaWQgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKKyAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVSZXBlYXRYKSB7CisgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwor
ICAgICAgICB2YWx1ZTEgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZVJlcGVhdCk7CisgICAgICAgIHZhbHVlMiA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKENTU1ZhbHVlTm9SZXBlYXQpOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRZ
KSB7CisgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICB2YWx1ZTEg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vUmVwZWF0KTsK
KyAgICAgICAgdmFsdWUyID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NT
VmFsdWVSZXBlYXQpOworICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICByZXR1
cm47ICAgIAorICAgIH0KKyAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NT
VmFsdWVOb1JlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kIHx8IGlkID09IENTU1ZhbHVlU3Bh
Y2UpCisgICAgICAgIHZhbHVlMSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KGlkKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdmFsdWUxID0gMDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKKworICAgIC8vIEZpcnN0
IGNoZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJlIGZpbmlzaGVkIHBhcnNpbmcgdGhp
cyB2YWx1ZSBvciB2YWx1ZSBwYWlyLgorICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCisgICAgICAg
IHZhbHVlID0gMDsKKworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgaWQgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpLT5pZDsKKyAgICAKKyAgICBpZiAodmFsdWUgJiYgKGlkID09IENTU1ZhbHVlUmVw
ZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBp
ZCA9PSBDU1NWYWx1ZVNwYWNlKSkgeworICAgICAgICB2YWx1ZTIgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CisgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Cisg
ICAgfSBlbHNlIHsgCisgICAgICAgIC8vIElmIG9ubHkgb25lIHZhbHVlIHdhcyBzcGVjaWZpZWQs
IHZhbHVlMiBpcyB0aGUgc2FtZSBhcyB2YWx1ZTEuCisgICAgICAgIG1faW1wbGljaXRTaG9ydGhh
bmQgPSB0cnVlOworICAgICAgICB2YWx1ZTIgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcihzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlMS5nZXQoKSktPmdl
dElkZW50KCkpOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUZpbGxTaXplKGJvb2wmIGFsbG93Q29tbWEpCiB7CiAgICAgYWxsb3dDb21tYSA9IHRydWU7
CkBAIC0yMjkwLDYgKzIzNTUsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5
KGludCBwcgogICAgIH0gZWxzZSBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uKSB7CiAgICAgICAgIHByb3BJZDEgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blg7CiAgICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk7Cisg
ICAgfSBlbHNlIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0KSB7Cisg
ICAgICAgIHByb3BJZDEgPSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYOworICAgICAgICBw
cm9wSWQyID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WTsKKyAgICB9IGVsc2UgaWYgKHBy
b3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpIHsKKyAgICAgICAgcHJvcElkMSA9
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFg7CisgICAgICAgIHByb3BJZDIgPSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOwogICAgIH0KIAogICAgIHdoaWxlICgodmFsID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSkpIHsKQEAgLTIzNzcsMTEgKzI0NDgsOCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgogICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsLT5pZCA+PSBDU1NWYWx1ZVJlcGVhdCAmJiB2YWwtPmlkIDw9IENTU1Zh
bHVlTm9SZXBlYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHZhbC0+aWQgPT0gQ1NTVmFs
dWVSb3VuZCB8fCB2YWwtPmlkID09IENTU1ZhbHVlU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZh
bC0+aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwYXJzZUZpbGxSZXBlYXQo
Y3VyclZhbHVlLCBjdXJyVmFsdWUyKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VGaWxs
UmVwZWF0IGFkdmFuY2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6
ZToKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6IHsKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCShyZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBwYXJzZUZpbGxJbWFnZShSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRmlsbFBvc2l0aW9uWFkoYm9vbCYgeEZvdW5kLCBib29sJiB5
Rm91bmQpOwogICAgICAgICB2b2lkIHBhcnNlRmlsbFBvc2l0aW9uKFJlZlB0cjxDU1NWYWx1ZT4m
LCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgICAgIHZvaWQgcGFyc2VGaWxsUmVwZWF0KFJlZlB0
cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlRmlsbFNpemUoYm9vbCAmYWxsb3dDb21tYSk7CiAgICAgICAgIAogICAgICAg
ICBib29sIHBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBw
cm9wSWQyLCBSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAkocmV2aXNpb24gNDc4NzkpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4NSwxNiArMzg1LDEyIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1MKICAgICAgICAgY2FzZSBSZXBlYXRGaWxsOgogICAgICAgICAgICAgbV92YWx1ZS5pZGVudCA9
IENTU1ZhbHVlUmVwZWF0OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVwZWF0
WEZpbGw6Ci0gICAgICAgICAgICBtX3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVSZXBlYXRYOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVwZWF0WUZpbGw6Ci0gICAgICAgICAgICBt
X3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVSZXBlYXRZOwotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTm9SZXBlYXRGaWxsOgogICAgICAgICAgICAgbV92YWx1ZS5pZGVudCA9IENTU1Zh
bHVlTm9SZXBlYXQ7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSb3VuZEZpbGw6
CiAgICAgICAgICAgICBtX3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVSb3VuZDsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFNwYWNlRmlsbDoKICAgICAgICAgICAgIG1fdmFsdWUuaWRl
bnQgPSBDU1NWYWx1ZVNwYWNlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MDYsMTAgKzQwMiw2
IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGUKICAgICBzd2l0Y2gg
KG1fdmFsdWUuaWRlbnQpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVJlcGVhdDoKICAgICAgICAg
ICAgIHJldHVybiBSZXBlYXRGaWxsOwotICAgICAgICBjYXNlIENTU1ZhbHVlUmVwZWF0WDoKLSAg
ICAgICAgICAgIHJldHVybiBSZXBlYXRYRmlsbDsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVJlcGVh
dFk6Ci0gICAgICAgICAgICByZXR1cm4gUmVwZWF0WUZpbGw7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb1JlcGVhdDoKICAgICAgICAgICAgIHJldHVybiBOb1JlcGVhdEZpbGw7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWVSb3VuZDoKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwCShy
ZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw5IEBAIHN0YXRpYyB2b2lkIGluaXRTaG9ydGhhbmRN
YXAoU2hvcnRoYW5kTWEKICAgICBzdGF0aWMgY29uc3QgaW50IGJhY2tncm91bmRQb3NpdGlvblBy
b3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvblkgfTsKICAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9y
dGhhbmRNYXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uLCBiYWNrZ3JvdW5kUG9zaXRp
b25Qcm9wZXJ0aWVzKTsKIAorICAgIHN0YXRpYyBjb25zdCBpbnQgYmFja2dyb3VuZFJlcGVhdFBy
b3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WSB9OworICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFu
ZE1hcCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0LCBiYWNrZ3JvdW5kUmVwZWF0UHJvcGVy
dGllcyk7CisKICAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlclNwYWNpbmdQcm9wZXJ0aWVzW10g
PSB7IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nIH07CiAgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5U
Ulkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmcsIGJvcmRlclNwYWNpbmdQ
cm9wZXJ0aWVzKTsKIApAQCAtMTM0LDcgKzEzNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRTaG9ydGhh
bmRNYXAoU2hvcnRoYW5kTWEKICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLAog
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsCiAgICAgICAgIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWSwKLSAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0LAorICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLAorICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZCiAgICAgfTsKICAgICBTRVRfU0hPUlRIQU5EX01BUF9F
TlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgYmFja2dyb3VuZFByb3Bl
cnRpZXMpOwogCkBAIC0xNjMsNiArMTY3LDkgQEAgc3RhdGljIHZvaWQgaW5pdFNob3J0aGFuZE1h
cChTaG9ydGhhbmRNYQogICAgIHN0YXRpYyBjb25zdCBpbnQgbWFza1Bvc2l0aW9uUHJvcGVydGll
c1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWSB9OwogICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIG1hc2tQb3NpdGlvblByb3BlcnRpZXMp
OwogCisgICAgc3RhdGljIGNvbnN0IGludCBtYXNrUmVwZWF0UHJvcGVydGllc1tdID0geyBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZIH07
CisgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXQsIG1hc2tSZXBlYXRQcm9wZXJ0aWVzKTsKKwogICAgIHN0YXRpYyBjb25z
dCBpbnQgbWFza1Byb3BlcnRpZXNbXSA9IHsKICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNr
QXR0YWNobWVudCwKICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwKQEAgLTE3MCw3
ICsxNzcsOCBAQCBzdGF0aWMgdm9pZCBpbml0U2hvcnRoYW5kTWFwKFNob3J0aGFuZE1hCiAgICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbiwKICAgICAgICAgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25YLAogICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblks
Ci0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwKKyAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUmVwZWF0WCwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WQogICAgIH07CiAgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2ssIG1hc2tQcm9wZXJ0aWVzKTsKIApJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTUHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eU5hbWVzLmluCShyZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFt
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDggQEAgYmFja2dyb3VuZC1wb3NpdGlv
bgogYmFja2dyb3VuZC1wb3NpdGlvbi14CiBiYWNrZ3JvdW5kLXBvc2l0aW9uLXkKIGJhY2tncm91
bmQtcmVwZWF0CitiYWNrZ3JvdW5kLXJlcGVhdC14CitiYWNrZ3JvdW5kLXJlcGVhdC15CiBiYWNr
Z3JvdW5kLXNpemUKIGJvcmRlcgogYm9yZGVyLWJvdHRvbQpAQCAtMjE0LDYgKzIxNiw4IEBAIHpv
b20KIC13ZWJraXQtbWFzay1wb3NpdGlvbi14CiAtd2Via2l0LW1hc2stcG9zaXRpb24teQogLXdl
YmtpdC1tYXNrLXJlcGVhdAorLXdlYmtpdC1tYXNrLXJlcGVhdC14Cistd2Via2l0LW1hc2stcmVw
ZWF0LXkKIC13ZWJraXQtbWFzay1zaXplCiAtd2Via2l0LW1hdGNoLW5lYXJlc3QtbWFpbC1ibG9j
a3F1b3RlLWNvbG9yCiAtd2Via2l0LW5ic3AtbW9kZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHJldmlzaW9uIDQ3ODc5KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzksOSArMjkzOSw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZE9yaWdpbjoKICAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfVkFMVUUob3JpZ2luLCBPcmln
aW4sIHZhbHVlKQogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRSZXBlYXQ6Ci0gICAgICAgIEhBTkRMRV9CQUNLR1JPVU5EX1ZBTFVFKHJlcGVhdCwgUmVwZWF0
LCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
U2l6ZToKICAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfVkFMVUUoc2l6ZSwgU2l6ZSwgdmFsdWUp
CiAgICAgICAgIHJldHVybjsKQEAgLTI5NTcsOSArMjk1NCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09y
aWdpbjoKICAgICAgICAgSEFORExFX01BU0tfVkFMVUUob3JpZ2luLCBPcmlnaW4sIHZhbHVlKQog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6Ci0g
ICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKHJlcGVhdCwgUmVwZWF0LCB2YWx1ZSkKLSAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKICAgICAgICAgSEFO
RExFX01BU0tfVkFMVUUoc2l6ZSwgU2l6ZSwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKQEAgLTMy
NDYsNiArMzI0MCwzMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50
CiAgICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKHlQb3NpdGlvbiwgWVBvc2l0aW9uLCB2YWx1ZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJl
cGVhdDoKKyAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfSU5IRVJJVF9BTkRfSU5JVElBTChyZXBl
YXRYLCBSZXBlYXRYKTsKKyAgICAgICAgSEFORExFX0JBQ0tHUk9VTkRfSU5IRVJJVF9BTkRfSU5J
VElBTChyZXBlYXRZLCBSZXBlYXRZKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUmVwZWF0WDogeworICAgICAgICBIQU5ETEVfQkFDS0dST1VORF9WQUxV
RShyZXBlYXRYLCBSZXBlYXRYLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6IHsKKyAgICAgICAgSEFORExFX0JBQ0tH
Uk9VTkRfVkFMVUUocmVwZWF0WSwgUmVwZWF0WSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6CisgICAgICAgIEhBTkRM
RV9NQVNLX0lOSEVSSVRfQU5EX0lOSVRJQUwocmVwZWF0WCwgUmVwZWF0WCk7CisgICAgICAgIEhB
TkRMRV9NQVNLX0lOSEVSSVRfQU5EX0lOSVRJQUwocmVwZWF0WSwgUmVwZWF0WSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFg6IHsKKyAgICAg
ICAgSEFORExFX01BU0tfVkFMVUUocmVwZWF0WCwgUmVwZWF0WCwgdmFsdWUpCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOiB7Cisg
ICAgICAgIEhBTkRMRV9NQVNLX1ZBTFVFKHJlcGVhdFksIFJlcGVhdFksIHZhbHVlKQorICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nOiB7CiAg
ICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhvcml6b250
YWxCb3JkZXJTcGFjaW5nKG1fcGFyZW50U3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCkp
OwpAQCAtNTMwNSwxMCArNTMyMywyNCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxJ
bWFnZShGaWxsCiAgICAgbGF5ZXItPnNldEltYWdlKHN0eWxlSW1hZ2UodmFsdWUpKTsKIH0KIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsUmVwZWF0KEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFgoRmls
bExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+Y3NzVmFs
dWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGxheWVyLT5zZXRS
ZXBlYXRYKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRYKGxheWVyLT50eXBlKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGxh
eWVyLT5zZXRSZXBlYXRYKCpwcmltaXRpdmVWYWx1ZSk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWFwRmlsbFJlcGVhdFkoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFM
KSB7Ci0gICAgICAgIGxheWVyLT5zZXRSZXBlYXQoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVh
dChsYXllci0+dHlwZSgpKSk7CisgICAgICAgIGxheWVyLT5zZXRSZXBlYXRZKEZpbGxMYXllcjo6
aW5pdGlhbEZpbGxSZXBlYXRZKGxheWVyLT50eXBlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTUzMTYsNyArNTM0OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
RmlsbFJlcGVhdChGaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgbGF5ZXItPnNldFJlcGVhdCgqcHJpbWl0aXZlVmFsdWUpOworICAgIGxheWVyLT5zZXRS
ZXBlYXRZKCpwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
RmlsbFNpemUoRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gNDc4NzkpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHZvaWQgbWFwRmlsbENvbXBvc2l0ZShGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAg
ICB2b2lkIG1hcEZpbGxPcmlnaW4oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICAgICAgdm9p
ZCBtYXBGaWxsSW1hZ2UoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBG
aWxsUmVwZWF0KEZpbGxMYXllciosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwRmlsbFJl
cGVhdFgoRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBGaWxsUmVwZWF0
WShGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZpbGxTaXplKEZpbGxM
YXllciosIENTU1ZhbHVlKik7CiAgICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5
ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVy
KiwgQ1NTVmFsdWUqKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDQ3ODc5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsMTAgKzU5MiwxMSBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAKICAgICB0aWxlU2l6ZSA9IGNh
bGN1bGF0ZUZpbGxUaWxlU2l6ZShmaWxsTGF5ZXIsIHBvc2l0aW9uaW5nQXJlYVNpemUpOwogCi0g
ICAgRUZpbGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdCA9IGZpbGxMYXllci0+cmVwZWF0KCk7Cisg
ICAgRUZpbGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdFggPSBmaWxsTGF5ZXItPnJlcGVhdFgoKTsK
KyAgICBFRmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSA9IGZpbGxMYXllci0+cmVwZWF0WSgp
OwogCiAgICAgaW50IHhQb3NpdGlvbiA9IGZpbGxMYXllci0+eFBvc2l0aW9uKCkuY2FsY01pblZh
bHVlKHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAtIHRpbGVTaXplLndpZHRoKCksIHRydWUp
OwotICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0ID09IFJlcGVhdEZpbGwgfHwgYmFja2dyb3VuZFJl
cGVhdCA9PSBSZXBlYXRYRmlsbCkKKyAgICBpZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gUmVwZWF0
RmlsbCkKICAgICAgICAgcGhhc2Uuc2V0WCh0aWxlU2l6ZS53aWR0aCgpID8gdGlsZVNpemUud2lk
dGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSAlIHRpbGVTaXplLndpZHRoKCkgOiAwKTsKICAgICBl
bHNlIHsKICAgICAgICAgZGVzdFJlY3QubW92ZShtYXgoeFBvc2l0aW9uICsgbGVmdCwgMCksIDAp
OwpAQCAtNjA0LDcgKzYwNSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0
ZUJhY2sKICAgICB9CiAKICAgICBpbnQgeVBvc2l0aW9uID0gZmlsbExheWVyLT55UG9zaXRpb24o
KS5jYWxjTWluVmFsdWUocG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSAtIHRpbGVTaXplLmhl
aWdodCgpLCB0cnVlKTsKLSAgICBpZiAoYmFja2dyb3VuZFJlcGVhdCA9PSBSZXBlYXRGaWxsIHx8
IGJhY2tncm91bmRSZXBlYXQgPT0gUmVwZWF0WUZpbGwpCisgICAgaWYgKGJhY2tncm91bmRSZXBl
YXRZID09IFJlcGVhdEZpbGwpCiAgICAgICAgIHBoYXNlLnNldFkodGlsZVNpemUuaGVpZ2h0KCkg
PyB0aWxlU2l6ZS5oZWlnaHQoKSAtICh5UG9zaXRpb24gKyB0b3ApICUgdGlsZVNpemUuaGVpZ2h0
KCkgOiAwKTsKICAgICBlbHNlIHsKICAgICAgICAgZGVzdFJlY3QubW92ZSgwLCBtYXgoeVBvc2l0
aW9uICsgdG9wLCAwKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAJ
KHJldmlzaW9uIDQ3ODc5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQCBGaWxsTGF5ZXI6OkZpbGxMYXllcihF
RmlsbExheWVyVHlwZSB0eXBlCiAgICAgLCBtX2F0dGFjaG1lbnQoRmlsbExheWVyOjppbml0aWFs
RmlsbEF0dGFjaG1lbnQodHlwZSkpCiAgICAgLCBtX2NsaXAoRmlsbExheWVyOjppbml0aWFsRmls
bENsaXAodHlwZSkpCiAgICAgLCBtX29yaWdpbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsT3JpZ2lu
KHR5cGUpKQotICAgICwgbV9yZXBlYXQoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdCh0eXBl
KSkKKyAgICAsIG1fcmVwZWF0WChGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WCh0eXBlKSkK
KyAgICAsIG1fcmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WSh0eXBlKSkKICAg
ICAsIG1fY29tcG9zaXRlKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUodHlwZSkpCiAg
ICAgLCBtX3NpemVUeXBlKFNpemVOb25lKQogICAgICwgbV9zaXplTGVuZ3RoKEZpbGxMYXllcjo6
aW5pdGlhbEZpbGxTaXplTGVuZ3RoKHR5cGUpKQpAQCAtMzksNyArNDAsOCBAQCBGaWxsTGF5ZXI6
OkZpbGxMYXllcihFRmlsbExheWVyVHlwZSB0eXBlCiAgICAgLCBtX2F0dGFjaG1lbnRTZXQoZmFs
c2UpCiAgICAgLCBtX2NsaXBTZXQoZmFsc2UpCiAgICAgLCBtX29yaWdpblNldChmYWxzZSkKLSAg
ICAsIG1fcmVwZWF0U2V0KGZhbHNlKQorICAgICwgbV9yZXBlYXRYU2V0KGZhbHNlKQorICAgICwg
bV9yZXBlYXRZU2V0KGZhbHNlKQogICAgICwgbV94UG9zU2V0KGZhbHNlKQogICAgICwgbV95UG9z
U2V0KGZhbHNlKQogICAgICwgbV9jb21wb3NpdGVTZXQodHlwZSA9PSBNYXNrRmlsbExheWVyKQpA
QCAtNTUsNyArNTcsOCBAQCBGaWxsTGF5ZXI6OkZpbGxMYXllcihjb25zdCBGaWxsTGF5ZXImIG8p
CiAgICAgLCBtX2F0dGFjaG1lbnQoby5tX2F0dGFjaG1lbnQpCiAgICAgLCBtX2NsaXAoby5tX2Ns
aXApCiAgICAgLCBtX29yaWdpbihvLm1fb3JpZ2luKQotICAgICwgbV9yZXBlYXQoby5tX3JlcGVh
dCkKKyAgICAsIG1fcmVwZWF0WChvLm1fcmVwZWF0WCkKKyAgICAsIG1fcmVwZWF0WShvLm1fcmVw
ZWF0WSkKICAgICAsIG1fY29tcG9zaXRlKG8ubV9jb21wb3NpdGUpCiAgICAgLCBtX3NpemVUeXBl
KG8ubV9zaXplVHlwZSkKICAgICAsIG1fc2l6ZUxlbmd0aChvLm1fc2l6ZUxlbmd0aCkKQEAgLTYz
LDcgKzY2LDggQEAgRmlsbExheWVyOjpGaWxsTGF5ZXIoY29uc3QgRmlsbExheWVyJiBvKQogICAg
ICwgbV9hdHRhY2htZW50U2V0KG8ubV9hdHRhY2htZW50U2V0KQogICAgICwgbV9jbGlwU2V0KG8u
bV9jbGlwU2V0KQogICAgICwgbV9vcmlnaW5TZXQoby5tX29yaWdpblNldCkKLSAgICAsIG1fcmVw
ZWF0U2V0KG8ubV9yZXBlYXRTZXQpCisgICAgLCBtX3JlcGVhdFhTZXQoby5tX3JlcGVhdFhTZXQp
CisgICAgLCBtX3JlcGVhdFlTZXQoby5tX3JlcGVhdFlTZXQpCiAgICAgLCBtX3hQb3NTZXQoby5t
X3hQb3NTZXQpCiAgICAgLCBtX3lQb3NTZXQoby5tX3lQb3NTZXQpCiAgICAgLCBtX2NvbXBvc2l0
ZVNldChvLm1fY29tcG9zaXRlU2V0KQpAQCAtOTEsNyArOTUsOCBAQCBGaWxsTGF5ZXImIEZpbGxM
YXllcjo6b3BlcmF0b3I9KGNvbnN0IEZpCiAgICAgbV9jbGlwID0gby5tX2NsaXA7CiAgICAgbV9j
b21wb3NpdGUgPSBvLm1fY29tcG9zaXRlOwogICAgIG1fb3JpZ2luID0gby5tX29yaWdpbjsKLSAg
ICBtX3JlcGVhdCA9IG8ubV9yZXBlYXQ7CisgICAgbV9yZXBlYXRYID0gby5tX3JlcGVhdFg7Cisg
ICAgbV9yZXBlYXRZID0gby5tX3JlcGVhdFk7CiAgICAgbV9zaXplVHlwZSA9IG8ubV9zaXplVHlw
ZTsKICAgICBtX3NpemVMZW5ndGggPSBvLm1fc2l6ZUxlbmd0aDsKIApAQCAtMTAwLDcgKzEwNSw4
IEBAIEZpbGxMYXllciYgRmlsbExheWVyOjpvcGVyYXRvcj0oY29uc3QgRmkKICAgICBtX2NsaXBT
ZXQgPSBvLm1fY2xpcFNldDsKICAgICBtX2NvbXBvc2l0ZVNldCA9IG8ubV9jb21wb3NpdGVTZXQ7
CiAgICAgbV9vcmlnaW5TZXQgPSBvLm1fb3JpZ2luU2V0OwotICAgIG1fcmVwZWF0U2V0ID0gby5t
X3JlcGVhdFNldDsKKyAgICBtX3JlcGVhdFhTZXQgPSBvLm1fcmVwZWF0WFNldDsKKyAgICBtX3Jl
cGVhdFlTZXQgPSBvLm1fcmVwZWF0WVNldDsKICAgICBtX3hQb3NTZXQgPSBvLm1feFBvc1NldDsK
ICAgICBtX3lQb3NTZXQgPSBvLm1feVBvc1NldDsKICAgICAKQEAgLTExNSw5ICsxMjEsOSBAQCBi
b29sIEZpbGxMYXllcjo6b3BlcmF0b3I9PShjb25zdCBGaWxsTGF5CiAgICAgLy8gdG8gcHJvcGFn
YXRlIHBhdHRlcm5zIGludG8gbGF5ZXJzLiAgQWxsIGxheWVyIGNvbXBhcmlzb25zIGhhcHBlbiBh
ZnRlciB2YWx1ZXMgaGF2ZSBhbGwgYmVlbiBmaWxsZWQgaW4gYW55d2F5LgogICAgIHJldHVybiBT
dHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KG1faW1hZ2UuZ2V0KCksIG8ubV9pbWFnZS5nZXQo
KSkgJiYgbV94UG9zaXRpb24gPT0gby5tX3hQb3NpdGlvbiAmJiBtX3lQb3NpdGlvbiA9PSBvLm1f
eVBvc2l0aW9uICYmCiAgICAgICAgICAgIG1fYXR0YWNobWVudCA9PSBvLm1fYXR0YWNobWVudCAm
JiBtX2NsaXAgPT0gby5tX2NsaXAgJiYgCi0gICAgICAgICAgIG1fY29tcG9zaXRlID09IG8ubV9j
b21wb3NpdGUgJiYgbV9vcmlnaW4gPT0gby5tX29yaWdpbiAmJiBtX3JlcGVhdCA9PSBvLm1fcmVw
ZWF0ICYmCi0gICAgICAgICAgIG1fc2l6ZVR5cGUgPT0gby5tX3NpemVUeXBlICYmIG1fc2l6ZUxl
bmd0aCA9PSBvLm1fc2l6ZUxlbmd0aCAmJiBtX3R5cGUgPT0gby5tX3R5cGUgJiYKLSAgICAgICAg
ICAgKChtX25leHQgJiYgby5tX25leHQpID8gKm1fbmV4dCA9PSAqby5tX25leHQgOiBtX25leHQg
PT0gby5tX25leHQpOworICAgICAgICAgICBtX2NvbXBvc2l0ZSA9PSBvLm1fY29tcG9zaXRlICYm
IG1fb3JpZ2luID09IG8ubV9vcmlnaW4gJiYgbV9yZXBlYXRYID09IG8ubV9yZXBlYXRYICYmCisg
ICAgICAgICAgIG1fcmVwZWF0WSA9PSBvLm1fcmVwZWF0WSAmJiBtX3NpemVUeXBlID09IG8ubV9z
aXplVHlwZSAmJiBtX3NpemVMZW5ndGggPT0gby5tX3NpemVMZW5ndGggJiYgCisgICAgICAgICAg
IG1fdHlwZSA9PSBvLm1fdHlwZSAmJiAoKG1fbmV4dCAmJiBvLm1fbmV4dCkgPyAqbV9uZXh0ID09
ICpvLm1fbmV4dCA6IG1fbmV4dCA9PSBvLm1fbmV4dCk7CiB9CiAKIHZvaWQgRmlsbExheWVyOjpm
aWxsVW5zZXRQcm9wZXJ0aWVzKCkKQEAgLTIwMCwxMSArMjA2LDIyIEBAIHZvaWQgRmlsbExheWVy
OjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoY3Vy
ciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNSZXBlYXRTZXQoKTsgY3VyciA9IGN1cnItPm5leHQo
KSkgeyB9CisgICAgZm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc1JlcGVhdFhTZXQo
KTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9CiAgICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlz
KSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3
aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIHBhdHRl
cm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJy
LT5tX3JlcGVhdCA9IHBhdHRlcm4tPm1fcmVwZWF0OworICAgICAgICAgICAgY3Vyci0+bV9yZXBl
YXRYID0gcGF0dGVybi0+bV9yZXBlYXRYOworICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4t
Pm5leHQoKTsKKyAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCisg
ICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzUmVwZWF0WVNldCgpOyBjdXJyID0gY3Vy
ci0+bmV4dCgpKSB7IH0KKyAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRl
cm4gc3BlY2lmaWVkLgorICAgICAgICBmb3IgKEZpbGxMYXllciogcGF0dGVybiA9IHRoaXM7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGN1cnItPm1fcmVwZWF0WSA9
IHBhdHRlcm4tPm1fcmVwZWF0WTsKICAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0
KCk7CiAgICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQogICAgICAg
ICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwpAQCAtMjMzLDcgKzI1MCw4IEBAIHZvaWQgRmlsbExh
eWVyOjpjdWxsRW1wdHlMYXllcnMoKQogICAgICAgICAgICAgIW5leHQtPmlzWFBvc2l0aW9uU2V0
KCkgJiYgIW5leHQtPmlzWVBvc2l0aW9uU2V0KCkgJiYKICAgICAgICAgICAgICFuZXh0LT5pc0F0
dGFjaG1lbnRTZXQoKSAmJiAhbmV4dC0+aXNDbGlwU2V0KCkgJiYKICAgICAgICAgICAgICFuZXh0
LT5pc0NvbXBvc2l0ZVNldCgpICYmICFuZXh0LT5pc09yaWdpblNldCgpICYmCi0gICAgICAgICAg
ICAhbmV4dC0+aXNSZXBlYXRTZXQoKSAmJiAhbmV4dC0+aXNTaXplU2V0KCkpIHsKKyAgICAgICAg
ICAgICFuZXh0LT5pc1JlcGVhdFhTZXQoKSAmJiAhbmV4dC0+aXNSZXBlYXRZU2V0KCkKKyAgICAg
ICAgICAgICYmICFuZXh0LT5pc1NpemVTZXQoKSkgewogICAgICAgICAgICAgZGVsZXRlIG5leHQ7
CiAgICAgICAgICAgICBwLT5tX25leHQgPSAwOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAkocmV2aXNpb24gNDc4NzkpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
OCBAQCBwdWJsaWM6CiAgICAgRUZpbGxBdHRhY2htZW50IGF0dGFjaG1lbnQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxFRmlsbEF0dGFjaG1lbnQ+KG1fYXR0YWNobWVudCk7IH0KICAgICBF
RmlsbEJveCBjbGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxCb3g+KG1fY2xp
cCk7IH0KICAgICBFRmlsbEJveCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxF
RmlsbEJveD4obV9vcmlnaW4pOyB9Ci0gICAgRUZpbGxSZXBlYXQgcmVwZWF0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxSZXBlYXQ+KG1fcmVwZWF0KTsgfQorICAgIEVGaWxsUmVw
ZWF0IHJlcGVhdFgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFRmlsbFJlcGVhdD4obV9y
ZXBlYXRYKTsgfQorICAgIEVGaWxsUmVwZWF0IHJlcGVhdFkoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxFRmlsbFJlcGVhdD4obV9yZXBlYXRZKTsgfQogICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0ZU9wZXJhdG9y
PihtX2NvbXBvc2l0ZSk7IH0KICAgICBMZW5ndGhTaXplIHNpemVMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX3NpemVMZW5ndGg7IH0KICAgICBGaWxsU2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
RmlsbFNpemUoc3RhdGljX2Nhc3Q8RUZpbGxTaXplVHlwZT4obV9zaXplVHlwZSksIG1fc2l6ZUxl
bmd0aCk7IH0KQEAgLTg0LDcgKzg1LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNBdHRhY2htZW50
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2V0OyB9CiAgICAgYm9vbCBpc0NsaXBT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBTZXQ7IH0KICAgICBib29sIGlzT3JpZ2luU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5TZXQ7IH0KLSAgICBib29sIGlzUmVwZWF0U2V0KCkgY29u
c3QgeyByZXR1cm4gbV9yZXBlYXRTZXQ7IH0KKyAgICBib29sIGlzUmVwZWF0WFNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwZWF0WFNldDsgfQorICAgIGJvb2wgaXNSZXBlYXRZU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBlYXRZU2V0OyB9CiAgICAgYm9vbCBpc0NvbXBvc2l0ZVNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29tcG9zaXRlU2V0OyB9CiAgICAgYm9vbCBpc1NpemVTZXQoKSBjb25zdCB7
IHJldHVybiBtX3NpemVUeXBlICE9IFNpemVOb25lOyB9CiAgICAgCkBAIC05NCw3ICs5Niw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEF0dGFjaG1lbnQoRUZpbGxBdHRhY2htZW50IGF0dGFjaG1l
bnQpIHsgbV9hdHRhY2htZW50ID0gYXR0YWNobWVudDsgbV9hdHRhY2htZW50U2V0ID0gdHJ1ZTsg
fQogICAgIHZvaWQgc2V0Q2xpcChFRmlsbEJveCBiKSB7IG1fY2xpcCA9IGI7IG1fY2xpcFNldCA9
IHRydWU7IH0KICAgICB2b2lkIHNldE9yaWdpbihFRmlsbEJveCBiKSB7IG1fb3JpZ2luID0gYjsg
bV9vcmlnaW5TZXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRSZXBlYXQoRUZpbGxSZXBlYXQgcikg
eyBtX3JlcGVhdCA9IHI7IG1fcmVwZWF0U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0UmVwZWF0
WChFRmlsbFJlcGVhdCByKSB7IG1fcmVwZWF0WCA9IHI7IG1fcmVwZWF0WFNldCA9IHRydWU7IH0K
KyAgICB2b2lkIHNldFJlcGVhdFkoRUZpbGxSZXBlYXQgcikgeyBtX3JlcGVhdFkgPSByOyBtX3Jl
cGVhdFlTZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRDb21wb3NpdGUoQ29tcG9zaXRlT3BlcmF0
b3IgYykgeyBtX2NvbXBvc2l0ZSA9IGM7IG1fY29tcG9zaXRlU2V0ID0gdHJ1ZTsgfQogICAgIHZv
aWQgc2V0U2l6ZVR5cGUoRUZpbGxTaXplVHlwZSBiKSB7IG1fc2l6ZVR5cGUgPSBiOyB9CiAgICAg
dm9pZCBzZXRTaXplTGVuZ3RoKExlbmd0aFNpemUgbCkgeyBtX3NpemVMZW5ndGggPSBsOyB9CkBA
IC0xMDYsNyArMTA5LDggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBdHRhY2htZW50KCkgeyBt
X2F0dGFjaG1lbnRTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJDbGlwKCkgeyBtX2NsaXBT
ZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJPcmlnaW4oKSB7IG1fb3JpZ2luU2V0ID0gZmFs
c2U7IH0KLSAgICB2b2lkIGNsZWFyUmVwZWF0KCkgeyBtX3JlcGVhdFNldCA9IGZhbHNlOyB9Cisg
ICAgdm9pZCBjbGVhclJlcGVhdFgoKSB7IG1fcmVwZWF0WFNldCA9IGZhbHNlOyB9CisgICAgdm9p
ZCBjbGVhclJlcGVhdFkoKSB7IG1fcmVwZWF0WVNldCA9IGZhbHNlOyB9CiAgICAgdm9pZCBjbGVh
ckNvbXBvc2l0ZSgpIHsgbV9jb21wb3NpdGVTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJT
aXplKCkgeyBtX3NpemVUeXBlID0gU2l6ZU5vbmU7IH0KIApAQCAtMTQ1LDcgKzE0OSw4IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgRUZpbGxBdHRhY2htZW50IGluaXRpYWxGaWxsQXR0YWNobWVudChF
RmlsbExheWVyVHlwZSkgeyByZXR1cm4gU2Nyb2xsQmFja2dyb3VuZEF0dGFjaG1lbnQ7IH0KICAg
ICBzdGF0aWMgRUZpbGxCb3ggaW5pdGlhbEZpbGxDbGlwKEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVy
biBCb3JkZXJGaWxsQm94OyB9CiAgICAgc3RhdGljIEVGaWxsQm94IGluaXRpYWxGaWxsT3JpZ2lu
KEVGaWxsTGF5ZXJUeXBlIHR5cGUpIHsgcmV0dXJuIHR5cGUgPT0gQmFja2dyb3VuZEZpbGxMYXll
ciA/IFBhZGRpbmdGaWxsQm94IDogQm9yZGVyRmlsbEJveDsgfQotICAgIHN0YXRpYyBFRmlsbFJl
cGVhdCBpbml0aWFsRmlsbFJlcGVhdChFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gUmVwZWF0Rmls
bDsgfQorICAgIHN0YXRpYyBFRmlsbFJlcGVhdCBpbml0aWFsRmlsbFJlcGVhdFgoRUZpbGxMYXll
clR5cGUpIHsgcmV0dXJuIFJlcGVhdEZpbGw7IH0KKyAgICBzdGF0aWMgRUZpbGxSZXBlYXQgaW5p
dGlhbEZpbGxSZXBlYXRZKEVGaWxsTGF5ZXJUeXBlKSB7IHJldHVybiBSZXBlYXRGaWxsOyB9CiAg
ICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdG9yIGluaXRpYWxGaWxsQ29tcG9zaXRlKEVGaWxsTGF5
ZXJUeXBlKSB7IHJldHVybiBDb21wb3NpdGVTb3VyY2VPdmVyOyB9CiAgICAgc3RhdGljIEVGaWxs
U2l6ZVR5cGUgaW5pdGlhbEZpbGxTaXplVHlwZShFRmlsbExheWVyVHlwZSkgeyByZXR1cm4gU2l6
ZUxlbmd0aDsgfQogICAgIHN0YXRpYyBMZW5ndGhTaXplIGluaXRpYWxGaWxsU2l6ZUxlbmd0aChF
RmlsbExheWVyVHlwZSkgeyByZXR1cm4gTGVuZ3RoU2l6ZSgpOyB9CkBAIC0xNjYsNyArMTcxLDgg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fYXR0YWNobWVudCA6IDI7IC8vIEVGaWxsQXR0YWNo
bWVudAogICAgIHVuc2lnbmVkIG1fY2xpcCA6IDI7IC8vIEVGaWxsQm94CiAgICAgdW5zaWduZWQg
bV9vcmlnaW4gOiAyOyAvLyBFRmlsbEJveAotICAgIHVuc2lnbmVkIG1fcmVwZWF0IDogMzsgLy8g
RUZpbGxSZXBlYXQKKyAgICB1bnNpZ25lZCBtX3JlcGVhdFggOiAzOyAvLyBFRmlsbFJlcGVhdAor
ICAgIHVuc2lnbmVkIG1fcmVwZWF0WSA6IDM7IC8vIEVGaWxsUmVwZWF0CiAgICAgdW5zaWduZWQg
bV9jb21wb3NpdGUgOiA0OyAvLyBDb21wb3NpdGVPcGVyYXRvcgogICAgIHVuc2lnbmVkIG1fc2l6
ZVR5cGUgOiAyOyAvLyBFRmlsbFNpemVUeXBlCiAgICAgCkBAIC0xNzYsNyArMTgyLDggQEAgcHVi
bGljOgogICAgIGJvb2wgbV9hdHRhY2htZW50U2V0IDogMTsKICAgICBib29sIG1fY2xpcFNldCA6
IDE7CiAgICAgYm9vbCBtX29yaWdpblNldCA6IDE7Ci0gICAgYm9vbCBtX3JlcGVhdFNldCA6IDE7
CisgICAgYm9vbCBtX3JlcGVhdFhTZXQgOiAxOworICAgIGJvb2wgbV9yZXBlYXRZU2V0IDogMTsK
ICAgICBib29sIG1feFBvc1NldCA6IDE7CiAgICAgYm9vbCBtX3lQb3NTZXQgOiAxOwogICAgIGJv
b2wgbV9jb21wb3NpdGVTZXQgOiAxOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCShyZXZpc2lvbiA0Nzg3OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMSw3ICs1MjEsOCBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gYmFja2dyb3Vu
ZC0+bV9jb2xvcjsgfQogICAgIFN0eWxlSW1hZ2UqIGJhY2tncm91bmRJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIGJhY2tncm91bmQtPm1fYmFja2dyb3VuZC5tX2ltYWdlLmdldCgpOyB9Ci0gICAgRUZp
bGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVG
aWxsUmVwZWF0PihiYWNrZ3JvdW5kLT5tX2JhY2tncm91bmQubV9yZXBlYXQpOyB9CisgICAgRUZp
bGxSZXBlYXQgYmFja2dyb3VuZFJlcGVhdFgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxF
RmlsbFJlcGVhdD4oYmFja2dyb3VuZC0+bV9iYWNrZ3JvdW5kLm1fcmVwZWF0WCk7IH0KKyAgICBF
RmlsbFJlcGVhdCBiYWNrZ3JvdW5kUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEVGaWxsUmVwZWF0PihiYWNrZ3JvdW5kLT5tX2JhY2tncm91bmQubV9yZXBlYXRZKTsgfQogICAg
IENvbXBvc2l0ZU9wZXJhdG9yIGJhY2tncm91bmRDb21wb3NpdGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxDb21wb3NpdGVPcGVyYXRvcj4oYmFja2dyb3VuZC0+bV9iYWNrZ3JvdW5kLm1f
Y29tcG9zaXRlKTsgfQogICAgIEVGaWxsQXR0YWNobWVudCBiYWNrZ3JvdW5kQXR0YWNobWVudCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVGaWxsQXR0YWNobWVudD4oYmFja2dyb3VuZC0+
bV9iYWNrZ3JvdW5kLm1fYXR0YWNobWVudCk7IH0KICAgICBFRmlsbEJveCBiYWNrZ3JvdW5kQ2xp
cCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVGaWxsQm94PihiYWNrZ3JvdW5kLT5tX2Jh
Y2tncm91bmQubV9jbGlwKTsgfQpAQCAtNTM0LDcgKzUzNSw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJldHVybiAmKGJhY2tncm91
bmQtPm1fYmFja2dyb3VuZCk7IH0KIAogICAgIFN0eWxlSW1hZ2UqIG1hc2tJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX21hc2subV9pbWFnZS5nZXQoKTsgfQot
ICAgIEVGaWxsUmVwZWF0IG1hc2tSZXBlYXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxF
RmlsbFJlcGVhdD4ocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFzay5tX3JlcGVhdCk7IH0KKyAg
ICBFRmlsbFJlcGVhdCBtYXNrUmVwZWF0WCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVG
aWxsUmVwZWF0PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrLm1fcmVwZWF0WCk7IH0KKyAg
ICBFRmlsbFJlcGVhdCBtYXNrUmVwZWF0WSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVG
aWxsUmVwZWF0PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrLm1fcmVwZWF0WSk7IH0KICAg
ICBDb21wb3NpdGVPcGVyYXRvciBtYXNrQ29tcG9zaXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29tcG9zaXRlT3BlcmF0b3I+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX21hc2subV9j
b21wb3NpdGUpOyB9CiAgICAgRUZpbGxBdHRhY2htZW50IG1hc2tBdHRhY2htZW50KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RUZpbGxBdHRhY2htZW50PihyYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV9tYXNrLm1fYXR0YWNobWVudCk7IH0KICAgICBFRmlsbEJveCBtYXNrQ2xpcCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVGaWxsQm94PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9t
YXNrLm1fY2xpcCk7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
Q29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGVDb25zdGFudHMuaAkocmV2aXNpb24gNDc4NzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMx
LDcgQEAgZW51bSBFRmlsbEJveCB7CiB9OwogCiBlbnVtIEVGaWxsUmVwZWF0IHsKLSAgICBSZXBl
YXRGaWxsLCBSZXBlYXRYRmlsbCwgUmVwZWF0WUZpbGwsIE5vUmVwZWF0RmlsbCwgUm91bmRGaWxs
LCBTcGFjZUZpbGwKKyAgICBSZXBlYXRGaWxsLCBOb1JlcGVhdEZpbGwsIFJvdW5kRmlsbCwgU3Bh
Y2VGaWxsCiB9OwogCiBlbnVtIEVGaWxsTGF5ZXJUeXBlIHsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3
ODgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMDktMDgtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg2MzUgW0NTUzMgCisgICAgICAg
IEJhY2tncm91bmRzIGFuZCBCb3JkZXJzXSBBZGQgc3VwcG9ydCBmb3IgMi1rZXl3b3JkIHZhbHVl
cyBmb3IgCisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0CisKKyAgICAgICAgVGhpcyB0ZXN0IGlz
IHVwZGF0ZWQgdG8gdGVzdCBmb3IgdHdvIHZhbHVlcy4KKyAgICAgICAgKiBmYXN0L2JhY2tncm91
bmRzL3JlcGVhdC9wYXJzaW5nLWJhY2tncm91bmQtcmVwZWF0LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBmYXN0L2JhY2tncm91bmRzL3JlcGVhdC9yZXNvdXJjZXMvcGFyc2luZy1iYWNrZ3JvdW5k
LXJlcGVhdC5qczoKKworICAgICAgICBUaGVzZSB0ZXN0cyBhcmUgdXBkYXRlZCB0byByZWZsZWN0
IG5ldyBvcmRlci4KKyAgICAgICAgKiBmYXN0L2Nzcy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXNlcmlh
bGl6ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jc3MvcmVtb3ZlLXNob3J0aGFuZC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvaW5zcGVjdG9yL3N0eWxl
LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2luc3BlY3Rv
ci9zdHlsZS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvaW5zcGVj
dG9yL3N0eWxlLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0yOCAgR3VzdGF2byBOb3JvbmhhIFNp
bHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBSZS1za2lwcGluZyB0ZXN0cyB0aGF0IHN0
aWxsIGZhaWwgb24gdGhlIGJvdC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMv
cmVwZWF0L3BhcnNpbmctYmFja2dyb3VuZC1yZXBlYXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvYmFja2dyb3VuZHMvcmVwZWF0L3BhcnNpbmctYmFja2dyb3Vu
ZC1yZXBlYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0Nzg3OSkKKysrIExheW91dFRlc3RzL2Zh
c3QvYmFja2dyb3VuZHMvcmVwZWF0L3BhcnNpbmctYmFja2dyb3VuZC1yZXBlYXQtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksMTAgQEAgUEFTUyB0ZXN0KCJiYWNrZ3JvdW5k
LXJlcGVhdDogcmVwZWF0OyIpIAogUEFTUyB0ZXN0KCJiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw
ZWF0OyIpIGlzICJuby1yZXBlYXQiCiBQQVNTIHRlc3QoImJhY2tncm91bmQtcmVwZWF0OiByb3Vu
ZDsiKSBpcyAicm91bmQiCiBQQVNTIHRlc3QoImJhY2tncm91bmQtcmVwZWF0OiBzcGFjZTsiKSBp
cyAic3BhY2UiCitQQVNTIHRlc3QoImJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQgcmVwZWF0OyIp
IGlzICJyZXBlYXQgcmVwZWF0IgorUEFTUyB0ZXN0KCJiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw
ZWF0IHNwYWNlOyIpIGlzICJuby1yZXBlYXQgc3BhY2UiCitQQVNTIHRlc3QoImJhY2tncm91bmQt
cmVwZWF0OiByb3VuZCByb3VuZDsiKSBpcyAicm91bmQgcm91bmQiCitQQVNTIHRlc3QoImJhY2tn
cm91bmQtcmVwZWF0OiBzcGFjZSByZXBlYXQ7IikgaXMgInNwYWNlIHJlcGVhdCIKIFBBU1MgdGVz
dCgiYmFja2dyb3VuZDogcHVycGxlIHVybChyZXNvdXJjZXMvZ3JhZGllbnQuZ2lmKSByZXBlYXQt
eCB0b3AgbGVmdCIpIGlzICJyZXBlYXQteCIKIFBBU1MgdGVzdCgiYmFja2dyb3VuZDogcHVycGxl
IHVybChyZXNvdXJjZXMvZ3JhZGllbnQuZ2lmKSByZXBlYXQteSA1MCUgNTAlIikgaXMgInJlcGVh
dC15IgogUEFTUyB0ZXN0KCJiYWNrZ3JvdW5kOiBwdXJwbGUgdXJsKHJlc291cmNlcy9ncmFkaWVu
dC5naWYpIHJlcGVhdCBjZW50ZXIiKSBpcyAicmVwZWF0IgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9iYWNrZ3JvdW5kcy9yZXBlYXQvcmVzb3VyY2VzL3BhcnNpbmctYmFja2dyb3VuZC1yZXBlYXQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9yZXBlYXQvcmVz
b3VyY2VzL3BhcnNpbmctYmFja2dyb3VuZC1yZXBlYXQuanMJKHJldmlzaW9uIDQ3ODc5KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9iYWNrZ3JvdW5kcy9yZXBlYXQvcmVzb3VyY2VzL3BhcnNpbmctYmFj
a2dyb3VuZC1yZXBlYXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDExIEBAIHNob3Vs
ZEJlKCd0ZXN0KCJiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmUKIHNob3VsZEJlKCd0ZXN0KCJiYWNr
Z3JvdW5kLXJlcGVhdDogcm91bmQ7IiknLCAnInJvdW5kIicpOwogc2hvdWxkQmUoJ3Rlc3QoImJh
Y2tncm91bmQtcmVwZWF0OiBzcGFjZTsiKScsICcic3BhY2UiJyk7CiAKK3Nob3VsZEJlKCd0ZXN0
KCJiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0IHJlcGVhdDsiKScsICcicmVwZWF0IHJlcGVhdCIn
KTsKK3Nob3VsZEJlKCd0ZXN0KCJiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0IHNwYWNlOyIp
JywgJyJuby1yZXBlYXQgc3BhY2UiJyk7CitzaG91bGRCZSgndGVzdCgiYmFja2dyb3VuZC1yZXBl
YXQ6IHJvdW5kIHJvdW5kOyIpJywgJyJyb3VuZCByb3VuZCInKTsKK3Nob3VsZEJlKCd0ZXN0KCJi
YWNrZ3JvdW5kLXJlcGVhdDogc3BhY2UgcmVwZWF0OyIpJywgJyJzcGFjZSByZXBlYXQiJyk7CisK
IHNob3VsZEJlKCd0ZXN0KCJiYWNrZ3JvdW5kOiBwdXJwbGUgdXJsKHJlc291cmNlcy9ncmFkaWVu
dC5naWYpIHJlcGVhdC14IHRvcCBsZWZ0IiknLCAnInJlcGVhdC14IicpOwogc2hvdWxkQmUoJ3Rl
c3QoImJhY2tncm91bmQ6IHB1cnBsZSB1cmwocmVzb3VyY2VzL2dyYWRpZW50LmdpZikgcmVwZWF0
LXkgNTAlIDUwJSIpJywgJyJyZXBlYXQteSInKTsKIHNob3VsZEJlKCd0ZXN0KCJiYWNrZ3JvdW5k
OiBwdXJwbGUgdXJsKHJlc291cmNlcy9ncmFkaWVudC5naWYpIHJlcGVhdCBjZW50ZXIiKScsICci
cmVwZWF0IicpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvYmFja2dyb3VuZC1wb3NpdGlv
bi1zZXJpYWxpemUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2JhY2tncm91bmQtcG9zaXRpb24tc2VyaWFsaXplLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NDc4NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXNlcmlh
bGl6ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU5LDQgKzU5LDQgQEAgUEFTUzog
dC5zdHlsZS5jc3NUZXh0IHNob3VsZCBiZSBiYWNrZ3JvdQogdC5zZXRBdHRyaWJ1dGUoJ3N0eWxl
JywgJ2JhY2tncm91bmQ6IHVybChhYm91dDpibGFuaykgODAlIDgwJTsnKTsKIHQuc3R5bGUuYmFj
a2dyb3VuZFBvc2l0aW9uWSA9ICc1MHB4Jwogc3R5bGUuY3NzVGV4dCA9Ci1iYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoYWJvdXQ6YmxhbmspOyBiYWNrZ3JvdW5kLXJlcGVhdDogaW5pdGlhbDsgYmFja2dy
b3VuZC1hdHRhY2htZW50OiBpbml0aWFsOyBiYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgYmFj
a2dyb3VuZC1jbGlwOiBpbml0aWFsOyBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsOyBiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiA4MCUgNTBweDsKK2JhY2tncm91bmQtaW1hZ2U6IHVybChhYm91dDpibGFu
ayk7IGJhY2tncm91bmQtYXR0YWNobWVudDogaW5pdGlhbDsgYmFja2dyb3VuZC1vcmlnaW46IGlu
aXRpYWw7IGJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlh
bDsgYmFja2dyb3VuZC1wb3NpdGlvbjogODAlIDUwcHg7IGJhY2tncm91bmQtcmVwZWF0OiBpbml0
aWFsIGluaXRpYWw7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9yZW1vdmUtc2hvcnRoYW5k
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9yZW1vdmUt
c2hvcnRoYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDc4NzkpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9yZW1vdmUtc2hvcnRoYW5kLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Miw3ICsyLDcgQEAgVGVzdCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1ZwogCiBT
dGFydGluZyB3aXRoIGEgZGVjbGFyYXRpb24gY29udGFpbmluZyBhbGwgcHJvcGVydGllcyB0aGF0
IGFyZSBjb25zdGl0dWVudHMgb2Ygc2hvcnRjdXRzLCBzZWUgd2hhdCBpcyByZW1vdmVkIHdoZW4g
YSBzaG9ydGN1dCBwcm9wZXJ0eSBpcyByZW1vdmVkLiBUaGUgc2hvcnRjdXTigJlzIGNvbnN0aXR1
ZW50cyBhbmQgb25seSB0aGVtIHNob3VsZCBiZSByZW1vdmVkLgogCi1SZW1vdmluZyBiYWNrZ3Jv
dW5kIHJlbW92ZXMgYmFja2dyb3VuZC1pbWFnZSwgYmFja2dyb3VuZC1yZXBlYXQsIGJhY2tncm91
bmQtYXR0YWNobWVudCwgYmFja2dyb3VuZC1vcmlnaW4sIGJhY2tncm91bmQtY2xpcCwgYmFja2dy
b3VuZC1jb2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbi4KK1JlbW92aW5nIGJhY2tncm91bmQgcmVt
b3ZlcyBiYWNrZ3JvdW5kLWltYWdlLCBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQsIGJhY2tncm91bmQt
b3JpZ2luLCBiYWNrZ3JvdW5kLWNsaXAsIGJhY2tncm91bmQtY29sb3IsIGJhY2tncm91bmQtcG9z
aXRpb24sIGJhY2tncm91bmQtcmVwZWF0LgogUmVtb3ZpbmcgYmFja2dyb3VuZC1wb3NpdGlvbiBy
ZW1vdmVzIGJhY2tncm91bmQtcG9zaXRpb24uCiBSZW1vdmluZyBib3JkZXIgcmVtb3ZlcyBib3Jk
ZXItdG9wLXdpZHRoLCBib3JkZXItcmlnaHQtd2lkdGgsIGJvcmRlci1ib3R0b20td2lkdGgsIGJv
cmRlci1sZWZ0LXdpZHRoLCBib3JkZXItdG9wLXN0eWxlLCBib3JkZXItcmlnaHQtc3R5bGUsIGJv
cmRlci1ib3R0b20tc3R5bGUsIGJvcmRlci1sZWZ0LXN0eWxlLCBib3JkZXItdG9wLWNvbG9yLCBi
b3JkZXItcmlnaHQtY29sb3IsIGJvcmRlci1ib3R0b20tY29sb3IsIGJvcmRlci1sZWZ0LWNvbG9y
LgogUmVtb3ZpbmcgYm9yZGVyLXRvcCByZW1vdmVzIGJvcmRlci10b3Atd2lkdGgsIGJvcmRlci10
b3Atc3R5bGUsIGJvcmRlci10b3AtY29sb3IuCkBAIC0yMSw3ICsyMSw3IEBAIFJlbW92aW5nIGxp
c3Qtc3R5bGUgcmVtb3ZlcyBsaXN0LXN0eWxlLXQKIFJlbW92aW5nIG1hcmdpbiByZW1vdmVzIG1h
cmdpbi10b3AsIG1hcmdpbi1yaWdodCwgbWFyZ2luLWJvdHRvbSwgbWFyZ2luLWxlZnQuCiBSZW1v
dmluZyAtd2Via2l0LW1hcmdpbi1jb2xsYXBzZSByZW1vdmVzIC13ZWJraXQtbWFyZ2luLXRvcC1j
b2xsYXBzZSwgLXdlYmtpdC1tYXJnaW4tYm90dG9tLWNvbGxhcHNlLgogUmVtb3ZpbmcgLXdlYmtp
dC1tYXJxdWVlIHJlbW92ZXMgLXdlYmtpdC1tYXJxdWVlLWRpcmVjdGlvbiwgLXdlYmtpdC1tYXJx
dWVlLWluY3JlbWVudCwgLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24sIC13ZWJraXQtbWFycXVl
ZS1zdHlsZSwgLXdlYmtpdC1tYXJxdWVlLXNwZWVkLgotUmVtb3ZpbmcgLXdlYmtpdC1tYXNrIHJl
bW92ZXMgLXdlYmtpdC1tYXNrLWltYWdlLCAtd2Via2l0LW1hc2stcmVwZWF0LCAtd2Via2l0LW1h
c2stYXR0YWNobWVudCwgLXdlYmtpdC1tYXNrLXBvc2l0aW9uLXgsIC13ZWJraXQtbWFzay1wb3Np
dGlvbi15LCAtd2Via2l0LW1hc2stb3JpZ2luLCAtd2Via2l0LW1hc2stY2xpcC4KK1JlbW92aW5n
IC13ZWJraXQtbWFzayByZW1vdmVzIC13ZWJraXQtbWFzay1pbWFnZSwgLXdlYmtpdC1tYXNrLXJl
cGVhdC14LCAtd2Via2l0LW1hc2stcmVwZWF0LXksIC13ZWJraXQtbWFzay1hdHRhY2htZW50LCAt
d2Via2l0LW1hc2stcG9zaXRpb24teCwgLXdlYmtpdC1tYXNrLXBvc2l0aW9uLXksIC13ZWJraXQt
bWFzay1vcmlnaW4sIC13ZWJraXQtbWFzay1jbGlwLgogUmVtb3ZpbmcgLXdlYmtpdC1tYXNrLXBv
c2l0aW9uIHJlbW92ZXMgLXdlYmtpdC1tYXNrLXBvc2l0aW9uLXgsIC13ZWJraXQtbWFzay1wb3Np
dGlvbi15LgogUmVtb3Zpbmcgb3ZlcmZsb3cgcmVtb3ZlcyBvdmVyZmxvdy14LCBvdmVyZmxvdy15
LgogUmVtb3ZpbmcgcGFkZGluZyByZW1vdmVzIHBhZGRpbmctdG9wLCBwYWRkaW5nLXJpZ2h0LCBw
YWRkaW5nLWJvdHRvbSwgcGFkZGluZy1sZWZ0LgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvaW5zcGVjdG9yL3N0eWxlLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2luc3BlY3Rvci9zdHlsZS1leHBlY3RlZC5j
aGVja3N1bQkocmV2aXNpb24gNDc4NzkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9pbnNwZWN0b3Ivc3R5bGUtZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEg
KzEgQEAKLTlkMWQzYjYyNmVhZDAxYzY4NGY3NmU4OTYwMTZlZmNhClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorMzIwNjczNGRjY2I2Y2U0ZTdhNDhlNjFlZmU5YTA5YzgKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9pbnNw
ZWN0b3Ivc3R5bGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9mYXN0L2luc3BlY3Rvci9zdHlsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ3ODc5
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvaW5zcGVjdG9yL3N0eWxlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOSw0NiArOSw0OSBAQCBsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgyNCw0Mikgc2l6ZSA3MzZ4
MjggW2NvbG9yPSNGRkZGRkZdIFtiZ2NvbG9yPSM4MDAwODBdCiAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDUweDI4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggNTA6ICJUZXN0IgotICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsOTQp
IHNpemUgNzg0eDI1MgorICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsOTQpIHNp
emUgNzg0eDI3MAogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzODh4
MTgKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzODg6ICJiYWNrZ3JvdW5kLWlt
YWdlOiBpbml0aWFsIChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgYmFja2dyb3VuZCkiCiAgICAgICAg
IFJlbmRlckJSIHtCUn0gYXQgKDM4OCwxNCkgc2l6ZSAweDAKLSAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDE4KSBzaXplIDM4OHgxOAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4
KSB3aWR0aCAzODg6ICJiYWNrZ3JvdW5kLXJlcGVhdDogaW5pdGlhbCAob3JpZ2luYWwgcHJvcGVy
dHkgd2FzIGJhY2tncm91bmQpIgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzODgsMzIpIHNp
emUgMHgwCi0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwzNikgc2l6ZSA0MTh4MTgK
LSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggNDE4OiAiYmFja2dyb3VuZC1hdHRh
Y2htZW50OiBpbml0aWFsIChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgYmFja2dyb3VuZCkiCi0gICAg
ICAgIFJlbmRlckJSIHtCUn0gYXQgKDQxOCw1MCkgc2l6ZSAweDAKLSAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDU0KSBzaXplIDQxM3gxOAotICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDU0KSB3aWR0aCA0MTM6ICJiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IGluaXRpYWwgKG9yaWdpbmFs
IHByb3BlcnR5IHdhcyBiYWNrZ3JvdW5kKSIKLSAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoNDEz
LDY4KSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTgpIHNpemUg
NDAxeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDQwMTogImJhY2tncm91
bmQtcmVwZWF0LXg6IGluaXRpYWwgKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBiYWNrZ3JvdW5kKSIK
KyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoNDAxLDMyKSBzaXplIDB4MAorICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMzYpIHNpemUgNDAxeDE4CisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMzYpIHdpZHRoIDQwMTogImJhY2tncm91bmQtcmVwZWF0LXk6IGluaXRpYWwgKG9yaWdp
bmFsIHByb3BlcnR5IHdhcyBiYWNrZ3JvdW5kKSIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAo
NDAxLDUwKSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsNTQpIHNp
emUgNDE4eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsNTQpIHdpZHRoIDQxODogImJhY2tn
cm91bmQtYXR0YWNobWVudDogaW5pdGlhbCAob3JpZ2luYWwgcHJvcGVydHkgd2FzIGJhY2tncm91
bmQpIgorICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg0MTgsNjgpIHNpemUgMHgwCiAgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCw3Mikgc2l6ZSA0MTN4MTgKLSAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCw3Mikgd2lkdGggNDEzOiAiYmFja2dyb3VuZC1wb3NpdGlvbi15OiBpbml0aWFs
IChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgYmFja2dyb3VuZCkiCisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsNzIpIHdpZHRoIDQxMzogImJhY2tncm91bmQtcG9zaXRpb24teDogaW5pdGlhbCAob3Jp
Z2luYWwgcHJvcGVydHkgd2FzIGJhY2tncm91bmQpIgogICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0
ICg0MTMsODYpIHNpemUgMHgwCi0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCw5MCkg
c2l6ZSAzODd4MTgKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCw5MCkgd2lkdGggMzg3OiAiYmFj
a2dyb3VuZC1vcmlnaW46IGluaXRpYWwgKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBiYWNrZ3JvdW5k
KSIKLSAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzg3LDEwNCkgc2l6ZSAweDAKLSAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDEwOCkgc2l6ZSAzNzN4MTgKLSAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwxMDgpIHdpZHRoIDM3MzogImJhY2tncm91bmQtY2xpcDogaW5pdGlhbCAob3Jp
Z2luYWwgcHJvcGVydHkgd2FzIGJhY2tncm91bmQpIgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0
ICgzNzMsMTIyKSBzaXplIDB4MAotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTI2
KSBzaXplIDM4N3gxOAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDEyNikgd2lkdGggMzg3OiAi
YmFja2dyb3VuZC1jb2xvcjogcHVycGxlIChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgYmFja2dyb3Vu
ZCkiCi0gICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDM4NywxNDApIHNpemUgMHgwCi0gICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwxNDQpIHNpemUgMzAweDE4Ci0gICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMTQ0KSB3aWR0aCAzMDA6ICJtYXJnaW4tdG9wOiAxZW0gKG9yaWdpbmFsIHBy
b3BlcnR5IHdhcyBtYXJnaW4pIgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzMDAsMTU4KSBz
aXplIDB4MAotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTYyKSBzaXplIDUxMHgx
OAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE2Mikgd2lkdGggNTEwOiAibWFyZ2luLXJpZ2h0
OiAxZW0gKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBtYXJnaW4gYW5kIHByb3BlcnR5IHdhcyBpbXBs
aWNpdGx5IHNldC4pIgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MTAsMTc2KSBzaXplIDB4
MAotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTgwKSBzaXplIDUyNXgxOAotICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDE4MCkgd2lkdGggNTI1OiAibWFyZ2luLWJvdHRvbTogMWVt
IChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgbWFyZ2luIGFuZCBwcm9wZXJ0eSB3YXMgaW1wbGljaXRs
eSBzZXQuKSIKLSAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoNTI1LDE5NCkgc2l6ZSAweDAKLSAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDE5OCkgc2l6ZSA1MDF4MTgKLSAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwxOTgpIHdpZHRoIDUwMTogIm1hcmdpbi1sZWZ0OiAxZW0gKG9yaWdp
bmFsIHByb3BlcnR5IHdhcyBtYXJnaW4gYW5kIHByb3BlcnR5IHdhcyBpbXBsaWNpdGx5IHNldC4p
IgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MDEsMjEyKSBzaXplIDB4MAotICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMjE2KSBzaXplIDc1eDE4Ci0gICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMjE2KSB3aWR0aCA3NTogImNvbG9yOiB3aGl0ZSIKLSAgICAgICAgUmVuZGVyQlIg
e0JSfSBhdCAoNzUsMjMwKSBzaXplIDB4MAotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMjM0KSBzaXplIDM2MngxOAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDIzNCkgd2lkdGgg
MzYyOiAiZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMjRweC9ub3JtYWwgJ0x1Y2lkYSBHcmFu
ZGUnIgotICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzNjIsMjQ4KSBzaXplIDB4MAorICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsOTApIHNpemUgNDEzeDE4CisgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsOTApIHdpZHRoIDQxMzogImJhY2tncm91bmQtcG9zaXRpb24teTogaW5pdGlh
bCAob3JpZ2luYWwgcHJvcGVydHkgd2FzIGJhY2tncm91bmQpIgorICAgICAgICBSZW5kZXJCUiB7
QlJ9IGF0ICg0MTMsMTA0KSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMTA4KSBzaXplIDM4N3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDEwOCkgd2lkdGgg
Mzg3OiAiYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWwgKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBi
YWNrZ3JvdW5kKSIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMzg3LDEyMikgc2l6ZSAweDAK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDEyNikgc2l6ZSAzNzN4MTgKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwxMjYpIHdpZHRoIDM3MzogImJhY2tncm91bmQtY2xpcDogaW5p
dGlhbCAob3JpZ2luYWwgcHJvcGVydHkgd2FzIGJhY2tncm91bmQpIgorICAgICAgICBSZW5kZXJC
UiB7QlJ9IGF0ICgzNzMsMTQwKSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMTQ0KSBzaXplIDM4N3gxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE0NCkgd2lk
dGggMzg3OiAiYmFja2dyb3VuZC1jb2xvcjogcHVycGxlIChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMg
YmFja2dyb3VuZCkiCisgICAgICAgIFJlbmRlckJSIHtCUn0gYXQgKDM4NywxNTgpIHNpemUgMHgw
CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwxNjIpIHNpemUgMzAweDE4CisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMTYyKSB3aWR0aCAzMDA6ICJtYXJnaW4tdG9wOiAxZW0gKG9y
aWdpbmFsIHByb3BlcnR5IHdhcyBtYXJnaW4pIgorICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgz
MDAsMTc2KSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTgwKSBz
aXplIDUxMHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4MCkgd2lkdGggNTEwOiAibWFy
Z2luLXJpZ2h0OiAxZW0gKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBtYXJnaW4gYW5kIHByb3BlcnR5
IHdhcyBpbXBsaWNpdGx5IHNldC4pIgorICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MTAsMTk0
KSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTk4KSBzaXplIDUy
NXgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE5OCkgd2lkdGggNTI1OiAibWFyZ2luLWJv
dHRvbTogMWVtIChvcmlnaW5hbCBwcm9wZXJ0eSB3YXMgbWFyZ2luIGFuZCBwcm9wZXJ0eSB3YXMg
aW1wbGljaXRseSBzZXQuKSIKKyAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoNTI1LDIxMikgc2l6
ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDIxNikgc2l6ZSA1MDF4MTgK
KyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwyMTYpIHdpZHRoIDUwMTogIm1hcmdpbi1sZWZ0OiAx
ZW0gKG9yaWdpbmFsIHByb3BlcnR5IHdhcyBtYXJnaW4gYW5kIHByb3BlcnR5IHdhcyBpbXBsaWNp
dGx5IHNldC4pIgorICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICg1MDEsMjMwKSBzaXplIDB4MAor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMjM0KSBzaXplIDc1eDE4CisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMjM0KSB3aWR0aCA3NTogImNvbG9yOiB3aGl0ZSIKKyAgICAgICAg
UmVuZGVyQlIge0JSfSBhdCAoNzUsMjQ4KSBzaXplIDB4MAorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMjUyKSBzaXplIDM2MngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDI1
Mikgd2lkdGggMzYyOiAiZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMjRweC9ub3JtYWwgJ0x1
Y2lkYSBHcmFuZGUnIgorICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgzNjIsMjY2KSBzaXplIDB4
MAo=
</data>
<flag name="review"
          id="19758"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>