<?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>214082</bug_id>
          
          <creation_ts>2020-07-08 07:39:33 -0700</creation_ts>
          <short_desc>Part 3 of SimpleColor and SRGBA&lt;uint8_t&gt; are essentially the same - let&apos;s converge them</short_desc>
          <delta_ts>2020-07-08 14:48:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1669745</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-08 07:39:33 -0700</bug_when>
    <thetext>Part 3 of SimpleColor and SRGBA&lt;uint8_t&gt; are essentially the same - let&apos;s converge them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669749</commentid>
    <comment_count>1</comment_count>
      <attachid>403782</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-08 08:14:15 -0700</bug_when>
    <thetext>Created attachment 403782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669848</commentid>
    <comment_count>2</comment_count>
      <attachid>403782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-08 12:30:03 -0700</bug_when>
    <thetext>Comment on attachment 403782
Patch

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

SRGBA&lt;uint8_t&gt; sure is more explicit, and also *much* less human readable than &quot;simple color&quot;.

&gt; Source/WebCore/ChangeLog:8
&gt; +        - Replaces all uses of SimpleColor that are not implementation details of Color, with SRGBA&lt;uint8_t&gt;.

Why is SimpleColor needed as an implementation detail of Color?

&gt; Source/WebCore/css/parser/CSSParserFastPaths.h:39
&gt;  class CSSValue;
&gt; -class SimpleColor;
&gt; +template&lt;typename&gt; struct SRGBA;

We typically use blank lines, to separate paragraphs, between a paragraph of forward-declared classes and a paragraph of forward-declared struct templates. Might even nice to have a canonical order.

&gt; Source/WebCore/platform/graphics/Color.h:57
&gt;      Color() { }

= default

&gt; Source/WebCore/platform/graphics/Color.h:199
&gt; +    Color(SimpleColor color)
&gt; +        : Color(color.asSRGBA&lt;uint8_t&gt;())
&gt; +    {
&gt; +    }

This is yet another, but multi-line function bodies really detract from the exposition qualities of a class definition.

&gt; Source/WebCore/platform/graphics/ColorBlending.cpp:123
&gt; -    return makeSimpleColor(
&gt; +    return clampToComponentBytes&lt;SRGBA&gt;(

This seems unfortunate. After interpolating uint8_t values then we should not need to clamp.

&gt; Source/WebCore/platform/graphics/ColorBuilder.h:33
&gt; +template&lt;typename ColorType&gt;
&gt; +struct ColorBuilder : public ColorType {

Put on a single line? Omit explicit &quot;public&quot; since this is a struct?

&gt; Source/WebCore/platform/graphics/ColorBuilder.h:44
&gt; +    constexpr ColorBuilder colorWithAlpha(uint8_t overrideAlpha) const

Not sure I like the name, since the starting color might also have alpha. Might need the name &quot;override&quot; in the function, or could go even more terse for this &quot;builder&quot; idiom and just name this &quot;alpha&quot;, &quot;withAlpha&quot;, &quot;setAlpha&quot; or something nutty like that.

&gt; Source/WebCore/platform/graphics/SimpleColor.h:35
&gt;  class SimpleColor {

I think this class’s days are numbered!

&gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:2557
&gt; -    return showingBorders ? makeSimpleColor(255, 122, 251) : Color();
&gt; +    return showingBorders ? makeSimpleColor(255, 122, 251) : Color { };

Gratuitous!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669856</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-08 12:40:43 -0700</bug_when>
    <thetext>One of my goals was to eventually wean WebKit off the gratuitous features of Color:

- built-in alternate transparent black null value, with yet another idiom for nullity (&quot;is valid&quot;)
    - so annoying that we have nullptr, nullopt, null string, and other nulls all with their own strategies
- two non-equal ways to represent the identical color, simple and extended, for all simple colors
- &lt;new&gt; special &quot;semantic&quot; bit
- unpredictable which algorithms preserve color space, precision, semantic-ness, and nullity, and which ones do not, clamping to SRGBA&lt;uint8_t&gt;
- can&apos;t be constexpr because of reference counting

I wanted SimpleColor to be attractive because I was thinking that there was a substantial part of the code that is manipulating SRGBA&lt;uint8_t&gt; and even SRGB&lt;uint8_t&gt;. I figured we’d use Optional&lt;SRGBA&lt;uint8_t&gt;&gt; in some places instead of Color, and so I wanted it to have an attractive name.

I also wanted to minimize the number of times one would need to use Color just to access some useful algorithm like serialization or parsing.

Just wanted to reiterate those thoughts/goals in case they still have effect on our path forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669882</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-08 14:07:45 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 403782 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403782&amp;action=review
&gt; 
&gt; SRGBA&lt;uint8_t&gt; sure is more explicit, and also *much* less human readable
&gt; than &quot;simple color&quot;.

My latest thinking here is that this might end up with:

using SimpleColor = SRGBA&lt;uint8_t&gt;;

after all the dust settles.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        - Replaces all uses of SimpleColor that are not implementation details of Color, with SRGBA&lt;uint8_t&gt;.
&gt; 
&gt; Why is SimpleColor needed as an implementation detail of Color?

It&apos;s not. It was just a good checkpoint along the way to avoid the change ballooning.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSParserFastPaths.h:39
&gt; &gt;  class CSSValue;
&gt; &gt; -class SimpleColor;
&gt; &gt; +template&lt;typename&gt; struct SRGBA;
&gt; 
&gt; We typically use blank lines, to separate paragraphs, between a paragraph of
&gt; forward-declared classes and a paragraph of forward-declared struct
&gt; templates. Might even nice to have a canonical order.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:57
&gt; &gt;      Color() { }
&gt; 
&gt; = default

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:199
&gt; &gt; +    Color(SimpleColor color)
&gt; &gt; +        : Color(color.asSRGBA&lt;uint8_t&gt;())
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; This is yet another, but multi-line function bodies really detract from the
&gt; exposition qualities of a class definition.

It will go away in the next change. Really need to remove all the multiline function bodies from Color.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorBlending.cpp:123
&gt; &gt; -    return makeSimpleColor(
&gt; &gt; +    return clampToComponentBytes&lt;SRGBA&gt;(
&gt; 
&gt; This seems unfortunate. After interpolating uint8_t values then we should
&gt; not need to clamp.

The WebCore::blend it calls currently uses/returns ints, and since progress can be greater than 1 (and probably negative), this can lead to it returning values greater than 255 (or less than 0), hence the clamping. makeSimpleColor did as well. We probably want to have a WebCore::blend overload for uint8_t that properly saturates rather than overflow.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorBuilder.h:33
&gt; &gt; +template&lt;typename ColorType&gt;
&gt; &gt; +struct ColorBuilder : public ColorType {
&gt; 
&gt; Put on a single line? Omit explicit &quot;public&quot; since this is a struct?

Erk, how do I keep messing this one up!

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorBuilder.h:44
&gt; &gt; +    constexpr ColorBuilder colorWithAlpha(uint8_t overrideAlpha) const
&gt; 
&gt; Not sure I like the name, since the starting color might also have alpha.
&gt; Might need the name &quot;override&quot; in the function, or could go even more terse
&gt; for this &quot;builder&quot; idiom and just name this &quot;alpha&quot;, &quot;withAlpha&quot;, &quot;setAlpha&quot;
&gt; or something nutty like that.

I liked the name you used in a earlier change. It was either colorWithOverrideAlpha or colorWithOverriddenAlpha (I somewhat prefer the later). But, since this was added to avoid churn in this change, I am going to keep it matching SimpleColor for now, and follow up with better names. 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/SimpleColor.h:35
&gt; &gt;  class SimpleColor {
&gt; 
&gt; I think this class’s days are numbered!

Oh yes. 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:2557
&gt; &gt; -    return showingBorders ? makeSimpleColor(255, 122, 251) : Color();
&gt; &gt; +    return showingBorders ? makeSimpleColor(255, 122, 251) : Color { };
&gt; 
&gt; Gratuitous!

The function right above it looks like this:

static Color contentsLayerDebugBorderColor(bool showingBorders)
{
    return showingBorders ? makeSimpleColor(0, 0, 128, 180) : Color { };
}

I couldn&apos;t leave them not matching!

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669883</commentid>
    <comment_count>5</comment_count>
      <attachid>403809</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-08 14:09:39 -0700</bug_when>
    <thetext>Created attachment 403809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669901</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-08 14:47:01 -0700</bug_when>
    <thetext>Committed r264136: &lt;https://trac.webkit.org/changeset/264136&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403809.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669902</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-08 14:48:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/65242137&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403782</attachid>
            <date>2020-07-08 08:14:15 -0700</date>
            <delta_ts>2020-07-08 14:09:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214082-20200708081415.patch</filename>
            <type>text/plain</type>
            <size>43879</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAyMC0wNy0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAzIG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQwODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIFJlcGxhY2VzIGFsbCB1c2VzIG9mIFNpbXBsZUNvbG9yIHRoYXQgYXJlIG5vdCBpbXBsZW1l
bnRhdGlvbiBkZXRhaWxzIG9mIENvbG9yLCB3aXRoIFNSR0JBPHVpbnQ4X3Q+LgorICAgICAgICAt
IEFkZHMgQ29sb3JCdWlsZGVyPFQ+IHRvIGFsbG93IG1haW50YWluaW5nIHRoZSBzeW50YXggU2lt
cGxlQ29sb3IgZm9yIGNvbnN0YW50IGNvbG9ycy4gZS5nOgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp5ZWxsb3cuY29sb3JXaXRoQWxwaGEoMTI4KTsKKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ29sb3JCdWlsZGVyLmgKKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdo
dGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc1NpbXBsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6c2V0U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzQmxhY2tDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNXaGl0ZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIC0gTWFrZSBjb25zdHJ1Y3RvciB0YWtpbmcg
YSBTaW1wbGVDb2xvciBwcml2YXRlLiAKKyAgICAgICAgLSBBZGQgLyBtb2RpZml5IGNvbnN0cnVj
dG9ycyB0byB0YWtlIFNSR0JBPHVpbnQ4X3Q+LgorICAgICAgICAtIE1ha2Ugc2V0U2ltcGxlQ29s
b3IoKSB0YWtlIGEgU1JHQkE8dWludDhfdD4gKHRoaXMgd2lsbCBiZSByZW5hbWVkIGFsb25nIHdp
dGgKKyAgICAgICAgICBvdGhlciBhc3BlY3RzIG9mIENvbG9yJ3MgaW50ZXJuYWxzIGluIGEgc3Vi
c2VxdWVudCBjaGFuZ2UpLgorICAgICAgICAtIFVwZGF0ZSBjYWxscyB0aGF0IHN0aWxsIG5lZWQg
U2ltcGxlQ29sb3IgdG8gdXNlIGFuIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tCisgICAgICAg
ICAgU1JHQkE8dWludDhfdD4uCisgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JCdWlsZGVyOjpDb2xv
ckJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JCdWlsZGVyOjpjb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvckJ1aWxkZXI6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToK
KyAgICAgICAgQWRkZWQgdG8gaGVscCBtYWludGFpbiBjdXJyZW50IHN5bnRheCB3aHkgY29uc3Ry
dWN0aW5nIGNvbG9ycy4gQ3VycmVudGx5IGl0IG9ubHkKKyAgICAgICAgc3VwcG9ydHMgY29sb3Ig
dHlwZSB3aXRoIHVpbnQ4X3QgY29tcG9uZW50cywgYnV0IGNhbiBiZSBleHBhbmRlZCB0byBzdXBw
b3J0IG1vcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
OgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICBSZW1v
dmUgdW5uZWNlc3NhcnkgY2FzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6U2ltcGxlQ29sb3IpOgor
ICAgICAgICBSZXN0cmljdCB0byBleHBsaWNpdCBjb25zdHJ1Y3Rpb24gdmlhIGEgU1JHQkE8dWlu
dDhfdD4uCisgCisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICBV
cGRhdGUgdG8gcmV0dXJuIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4uIEEgZnV0dXJlIGNo
YW5nZSB3aWxsIHVwZGF0ZQorICAgICAgICB0aGUgZnVuY3Rpb24gbmFtZSwgYnV0IGtlcHQgdGhl
IHNhbWUgaGVyZSB0byBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgY2hhbmdlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bnNDb2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNo
ZWRDR0NvbG9yKToKKyAgICAgICAgUmVwbGFjZSBkaXJlY3QgU2ltcGxlQ29sb3IgdXNhZ2Ugd2l0
aCBTUkdCQTx1aW50OF90PiBhbmQgc2ltcGxpZnkgUGFja2VkCisgICAgICAgIGNvbnN0cnVjdGlv
biBub3cgdGhhdCAuYXNTUkdCQTx1aW50OF90PigpIGlzIG5vdCBuZWVkZWQgZm9yIGNvbG9yIGNv
bnN0YW50cy4KKworICAgICAgICAqIGNzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VOYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VIZXhDb2xvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuaDoKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpm
aW5pc2hQYXJzaW5nSGV4Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvcklu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtZXJpY0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbmlzaFBhcnNpbmdOYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlTmFtZWRDb2xvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2ltcGxlQ29s
b3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNl
U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJz
ZUhleENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VO
YW1lZENvbG9yKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5oOiAg
ICAKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSGV4Q29sb3Ip
OgorICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VTaW1wbGVDb2xvclZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGVnYWN5Q29sb3JWYWx1ZSk6CisgICAgICAgICogcGFn
ZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKToKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29j
b2EubW06CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbzo6SGlz
dG9yaWNNZW1vcnlDYXRlZ29yeUluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRoV2hpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJl
bXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVD
b2xvckZyb21BUkdCQ0ZBcnJheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsb25lTGF5ZXJEZWJ1Z0JvcmRl
ckNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94
ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGRpcmVjdCBTaW1wbGVDb2xvciB1c2Fn
ZSB3aXRoIFNSR0JBPHVpbnQ4X3Q+LiAKKwogMjAyMC0wNy0wOCAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjYzODM2KTogW0dT
dHJlYW1lcl0gRGVidWcgQVNTRVJUIGhpdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNp
b24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMTA4Miw2ICsxMDgyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZl
cnNpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNjQwNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMDgsNiArMjIwOCw3IEBACiAJCTdBRjlCMjBGMThD
RkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZH
R3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQu
aCAqLzsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDI5QzZEMjQ5M0M4
RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MxNEEwMDcyNEI1RkUyMTAwMUE2QzZDIC8qIENvbG9yQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mx
NEEwMDYyNEI1RkUyMTAwMUE2QzZDIC8qIENvbG9yQnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3
MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxOTNCQkIxRjVFMEVFRDAw
ODhGM0U2IC8qIENhbnZhc0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MxOTNCQjYxRjVFMEVCOTAwODhGM0U2IC8qIENhbnZhc0RpcmVj
dGlvbi5oICovOyB9OwogCQk3QzE5M0JCQzFGNUUwRUVEMDA4OEYzRTYgLyogQ2FudmFzRmlsbFJ1
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTkz
QkExMUY1RTBFQUIwMDg4RjNFNiAvKiBDYW52YXNGaWxsUnVsZS5oICovOyB9OwpAQCAtOTkyMSw2
ICs5OTIyLDcgQEAKIAkJN0MwQ0VGMkUxRTRBNTgzMjAwOERFQjgwIC8qIEpTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzBDRUYyRjFFNEE1OEFEMDA4REVCODAgLyogSlNET01Db25zdHJ1Y3RvckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01Db25zdHJ1Y3RvckJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBDRUYzMDFFNEE1OEYxMDA4
REVCODAgLyogSlNET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxNEEwMDYyNEI1RkUyMTAwMUE2QzZDIC8q
IENvbG9yQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvckJ1aWxkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkIxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9maWxsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8q
IEF1dG9maWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9maWxsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMTkzQjlBMUY1RTBFQTcwMDg4RjNFNiAv
KiBDYW52YXNEcmF3SW1hZ2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc0RyYXdJ
bWFnZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTUxMiw2ICsyNTUxNCw3
IEBACiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCiAJCQkJN0Mx
QjRBNjUyNEE5OTc1OTAwMzM3MjdGIC8qIENvbG9yQmxlbmRpbmcuY3BwICovLAogCQkJCTdDMUI0
QTY3MjRBOTk3NjYwMDMzNzI3RiAvKiBDb2xvckJsZW5kaW5nLmggKi8sCisJCQkJN0MxNEEwMDYy
NEI1RkUyMTAwMUE2QzZDIC8qIENvbG9yQnVpbGRlci5oICovLAogCQkJCTdDQUM2QUVDMjQ3RjFD
NTEwMEU2MUQ1OSAvKiBDb2xvckNvbXBvbmVudHMuaCAqLywKIAkJCQk3QzUxNEUwMjI0QUY4MDU4
MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmNwcCAqLywKIAkJCQk3QzUxNEUwMDI0QUY4MDU4
MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmggKi8sCkBAIC0zMDA5MywxMCArMzAwOTYsMTIg
QEAKIAkJCQk0NkVCRUEwMjFCN0Q0RDY1MDBCRTQ5NDEgLyogQ29sbGVjdGlvblRyYXZlcnNhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDNDQyMDAwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rp
b25UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2NzBCMDUzODE0MDAyQ0U2NEYgLyog
Q29sb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMTRBMDA3MjRCNUZFMjEwMDFBNkM2QyAvKiBD
b2xvckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzMzBBMjIzMTNFQzE5NkIwMDAwQjQ1
QiAvKiBDb2xvckNob29zZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzN0NERUJEMTQ5RUYyMDMw
MDQyMDkwRCAvKiBDb2xvckNob29zZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0OEQy
QUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0FDNkFGMDI0N0Y0MTEwMDBFNjFENTkgLyogQ29sb3JDb21wb25lbnRzLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3QzUxNEUwMzI0QUY4MDVFMDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAzQjdERjFEQjAxNTY3MDA4QkI4OTAgLyogQ29sb3JIYXNoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCNDEyNTFGMTJEMDAzRUYyNjkgLyogQ29sb3JJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNTE2OUU3MjFGMUI4NDcwMEVBNEY3OCAvKiBD
b2xvcklPUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzkyMyw3ICszMzkyOCw2IEBACiAJCQkJOTEy
NzhENjIyMURFREFGMDAwQjU3MTg0IC8qIFdvcmtlckF1ZGl0QWdlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxQTdEMzUzMUY0MzhEMTYwMDg5ODhERSAvKiBXb3JrZXJDYWNoZVN0b3JhZ2VDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUI4MUNDRDFGQUE0NERFMDAzN0QxRTYgLyog
V29ya2VyQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzUxNEUwMzI0QUY4MDVF
MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTU2MzlE
MTFDNkYwOUUzMDA4MDZEOEUgLyogV29ya2VyQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCODFDQ0UxRkFBNDRERTAwMzdEMUU2IC8qIFdvcmtlckRlYnVnZ2VyQWdlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MkIzNDlFMUZBNDE3MDMwMDhCNjI0NiAvKiBXb3JrZXJEZWJ1
Z2dlclByb3h5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9E
ZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNjQwNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUmIGJs
dWUoKSB7IHJldHVybiBtX2JsdWU7IH0KICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1
ZSYgYWxwaGEoKSB7IHJldHVybiBtX2FscGhhOyB9CiAKLSAgICBTaW1wbGVDb2xvciBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihtX2NvbG9yKTsgfQorICAgIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09N
UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIs
IE51bWJlclR5cGUgbnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcAkocmV2aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBDb2xvciBD
U1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nCiAgICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihrZXl3b3JkLCB7IH0pOwogfQogCi1PcHRpb25hbDxT
aW1wbGVDb2xvcj4gQ1NTUGFyc2VyOjpwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcp
CitPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZU5hbWVkQ29sb3IoU3Ry
aW5nVmlldyBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VO
YW1lZENvbG9yKHN0cmluZyk7CiB9CiAKLU9wdGlvbmFsPFNpbXBsZUNvbG9yPiBDU1NQYXJzZXI6
OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCitPcHRpb25hbDxTUkdCQTx1aW50OF90
Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIHJl
dHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjY0MDUzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTEgKzM3LDExIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0
YWJsZVN0eWxlUHJvcGVydGllczsKIGNsYXNzIE11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFz
cyBTaW1wbGVDb2xvcjsKIGNsYXNzIFN0eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlm
cmFtZTsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxlOwordGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNz
IEJ1aWxkZXJTdGF0ZTsKQEAgLTg4LDggKzg4LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0g
ZmFsc2UpOwogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShTdHJpbmdWaWV3
KTsKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKLSAgICBz
dGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmll
dyk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3Io
U3RyaW5nVmlldyk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhl
eENvbG9yKFN0cmluZ1ZpZXcpOwogCiBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYs
IGJvb2wgaW1wb3J0YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyRmFzdFBhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckZhc3RQYXRocy5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDA5LDM4ICs0MDksMzggQEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgQ2hh
cgogICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdi
Jyk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gZmluaXNoUGFyc2luZ0hleENv
bG9yKHVpbnQzMl90IHZhbHVlLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgT3B0aW9uYWw8U1JH
QkE8dWludDhfdD4+IGZpbmlzaFBhcnNpbmdIZXhDb2xvcih1aW50MzJfdCB2YWx1ZSwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIHN3aXRjaCAobGVuZ3RoKSB7CiAgICAgY2FzZSAzOgogICAgICAg
ICAvLyAjYWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2Ug
Y29udmVyc2lvbiB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRvIGNvbnN0
cnVjdAogICAgICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAgICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeworICAgICAgICByZXR1
cm4gYXNTUkdCQShQYWNrZWQ6OkFSR0IgewogICAgICAgICAgICAgICAgMHhGRjAwMDAwMAogICAg
ICAgICAgICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUgJiAweEYwMCkgPDwgOAog
ICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAot
ICAgICAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH0pKTsKKyAg
ICAgICAgICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKSB9KTsKICAgICBj
YXNlIDQ6CiAgICAgICAgIC8vICNhYmNkIGNvbnZlcnRzIHRvIGRkYWFiYmNjIHNpbmNlIGFscGhh
IGJ5dGVzIGFyZSB0aGUgaGlnaCBieXRlcy4KICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgY29u
dmVyc2lvbiB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRvIGNvbnN0cnVj
dAogICAgICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAgICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeworICAgICAgICByZXR1cm4g
YXNTUkdCQShQYWNrZWQ6OkFSR0IgewogICAgICAgICAgICAgICAodmFsdWUgJiAweEYpIDw8IDI4
IHwgKHZhbHVlICYgMHhGKSA8PCAyNAogICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMDApIDw8
IDggfCAodmFsdWUgJiAweEYwMDApIDw8IDQKICAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDAp
IDw8IDQgfCAodmFsdWUgJiAweEYwMCkKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAo
dmFsdWUgJiAweEYwKSA+PiA0IH0pKTsKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAo
dmFsdWUgJiAweEYwKSA+PiA0IH0pOwogICAgIGNhc2UgNjoKICAgICAgICAgLy8gRklYTUU6IFJl
cGxhY2UgY29udmVyc2lvbiB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRv
IGNvbnN0cnVjdAogICAgICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAg
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyAweEZGMDAw
MDAwIHwgdmFsdWUgfSkpOworICAgICAgICByZXR1cm4gYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyAw
eEZGMDAwMDAwIHwgdmFsdWUgfSk7CiAgICAgY2FzZSA4OgotICAgICAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgdmFsdWUgfSkpOworICAgICAgICByZXR1
cm4gYXNTUkdCQShQYWNrZWQ6OlJHQkEgeyB2YWx1ZSB9KTsKICAgICB9CiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENv
bG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0g
NiAmJiBsZW5ndGggIT0gOCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTQ1NSw3
ICs0NTUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAg
cmV0dXJuIGZpbmlzaFBhcnNpbmdIZXhDb2xvcih2YWx1ZSwgbGVuZ3RoKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBw
YXJzZU51bWVyaWNDb2xvcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIGJvb2wgc3RyaWN0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU51bWVyaWNDb2xvcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgc3RyaWN0KQog
ewogICAgIGlmIChsZW5ndGggPj0gNCAmJiBjaGFyYWN0ZXJzWzBdID09ICcjJykgewogICAgICAg
ICBpZiAoYXV0byBoZXhDb2xvciA9IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjaGFyYWN0ZXJzICsg
MSwgbGVuZ3RoIC0gMSkpCkBAIC01MTEsNyArNTExLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RhdGljIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRp
YyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOdW1lcmljQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMgT3B0aW9uYWw8U1JH
QkE8dWludDhfdD4+IHBhcnNlTnVtZXJpY0NvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIGJvb2wgc3RyaWN0ID0gIWlzUXVpcmtz
TW9kZUJlaGF2aW9yKGNvbnRleHQubW9kZSk7CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKQEAg
LTUzMywxNiArNTMzLDE2IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ29sb3IoU3Ry
aW4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9y
PiBmaW5pc2hQYXJzaW5nTmFtZWRDb2xvcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkK
K3N0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gZmluaXNoUGFyc2luZ05hbWVkQ29sb3Io
Y2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgYnVmZmVyW2xlbmd0aF0gPSAn
XDAnOwogICAgIGF1dG8gbmFtZWRDb2xvciA9IGZpbmRDb2xvcihidWZmZXIsIGxlbmd0aCk7CiAg
ICAgaWYgKCFuYW1lZENvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyBuYW1lZENvbG9yLT5B
UkdCVmFsdWUgfSkpOworICAgIHJldHVybiBhc1NSR0JBKFBhY2tlZDo6QVJHQiB7IG5hbWVkQ29s
b3ItPkFSR0JWYWx1ZSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZU5hbWVkQ29sb3JJbnRlcm5hbChjb25z
dCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBh
cnNlTmFtZWRDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKICAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIEVhc2lseSBiaWcgZW5v
dWdoIGZvciB0aGUgbG9uZ2VzdCBjb2xvciBuYW1lLgogICAgIGlmIChsZW5ndGggPiBzaXplb2Yo
YnVmZmVyKSAtIDEpCkBAIC01NTYsMjggKzU1NiwyOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGZpbmlzaFBhcnNpbmdOYW1lZENvbG9yKGJ1
ZmZlciwgbGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3Rh
dGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9ySW50ZXJuYWwoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIHN0cmljdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1
aW50OF90Pj4gcGFyc2VTaW1wbGVDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBzdHJpY3QpCiB7CiAgICAgaWYgKGF1dG8g
Y29sb3IgPSBwYXJzZU51bWVyaWNDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0cmljdCkpCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gcGFyc2VOYW1lZENvbG9ySW50ZXJuYWwo
Y2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNl
ckZhc3RQYXRoczo6cGFyc2VTaW1wbGVDb2xvcihTdHJpbmdWaWV3IHN0cmluZywgYm9vbCBzdHJp
Y3QpCitPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNp
bXBsZUNvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBib29sIHN0cmljdCkKIHsKICAgICBpZiAoc3Ry
aW5nLmlzOEJpdCgpKQogICAgICAgICByZXR1cm4gcGFyc2VTaW1wbGVDb2xvckludGVybmFsKHN0
cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHN0cmljdCk7CiAgICAgcmV0dXJu
IHBhcnNlU2ltcGxlQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5s
ZW5ndGgoKSwgc3RyaWN0KTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlckZh
c3RQYXRoczo6cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3IHN0cmluZykKK09wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBz
dHJpbmcpCiB7CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIHBhcnNl
SGV4Q29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsK
ICAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlckZh
c3RQYXRoczo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQorT3B0aW9uYWw8U1JH
QkE8dWludDhfdD4+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1Zp
ZXcgc3RyaW5nKQogewogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBw
YXJzZU5hbWVkQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0
aCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0
UGF0aHMuaAkocmV2aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXJGYXN0UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFNpbXBsZUNvbG9yOwor
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKIAogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQ7CiAKQEAgLTUwLDkgKzUwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRL
ZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlELCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0Jik7CiAKICAgICAvLyBQYXJzZXMgbnVtZXJpYyBhbmQgbmFtZWQgY29s
b3JzLgotICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VTaW1wbGVDb2xvcihT
dHJpbmdWaWV3LCBib29sIHN0cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8U2lt
cGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7IC8vIEhleCBjb2xvcnMgb2YgbGVu
Z3RoIDMsIDQsIDYsIG9yIDgsIHdpdGhvdXQgbGVhZGluZyAiIyIuCi0gICAgc3RhdGljIE9wdGlv
bmFsPFNpbXBsZUNvbG9yPiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CisgICAgc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZVNpbXBsZUNvbG9yKFN0cmluZ1ZpZXcsIGJv
b2wgc3RyaWN0ID0gZmFsc2UpOworICAgIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4g
cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsgLy8gSGV4IGNvbG9ycyBvZiBsZW5ndGggMywgNCwg
Niwgb3IgOCwgd2l0aG91dCBsZWFkaW5nICIjIi4KKyAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjg5LDcgKzY4OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rp
b25QYXJhbWV0ZXIKICAgICByZXR1cm4gbWFrZUV4dGVuZGVkQ29sb3IoY29sb3JDaGFubmVsc1sw
XSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwg
Y29sb3JTcGFjZSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhD
b2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMp
CitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQogewogICAgIFN0cmlu
ZyBzdHJpbmc7CiAgICAgU3RyaW5nVmlldyB2aWV3OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9Db2xvcklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ29sb3JJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHN0
YXRpYyBib29sIGlzVmFsaWRTaW1wbGVDb2xvcihTdHJpbmdWaWUKIH0KIAogLy8gaHR0cHM6Ly9o
dG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNy
dWxlcy1mb3ItcGFyc2luZy1zaW1wbGUtY29sb3VyLXZhbHVlcwotc3RhdGljIE9wdGlvbmFsPFNp
bXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9yVmFsdWUoU3RyaW5nVmlldyBzdHJpbmcpCitzdGF0
aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShTdHJpbmdW
aWV3IHN0cmluZykKIHsKICAgICBpZiAoIWlzVmFsaWRTaW1wbGVDb2xvcihzdHJpbmcpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA2LDcgKzEwMDYsNyBAQCB2b2lkIEhUTUxFbGVt
ZW50OjphZGRIVE1MTGVuZ3RoVG9TdHlsZShNCiAKIC8vIENvbG9yIHBhcnNpbmcgdGhhdCBtYXRj
aGVzIEhUTUwncyAicnVsZXMgZm9yIHBhcnNpbmcgYSBsZWdhY3kgY29sb3IgdmFsdWUiCiAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNydWxlcy1mb3ItcGFyc2luZy1hLWxlZ2FjeS1j
b2xvdXItdmFsdWUKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VMZWdhY3lDb2xv
clZhbHVlKFN0cmluZ1ZpZXcgc3RyaW5nKQorc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+
PiBwYXJzZUxlZ2FjeUNvbG9yVmFsdWUoU3RyaW5nVmlldyBzdHJpbmcpCiB7CiAgICAgLy8gQW4g
ZW1wdHkgc3RyaW5nIGRvZXNuJ3QgYXBwbHkgYSBjb2xvci4KICAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCShy
ZXZpc2lvbiAyNjQwNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDE0ICsxNDQsMTQgQEAgYm9vbCBOb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbk92ZXJsYXk6OnVwZAogICAgIHJldHVybiByZWdpb25DaGFuZ2VkOwogfQog
Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiYgdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpCitzdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+
PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcmVn
aW9uQ29sb3JzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKICAgICAgICAgc3RydWN0IE1hcEVu
dHJ5IHsKICAgICAgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwotICAgICAgICAgICAgaW50IHI7
Ci0gICAgICAgICAgICBpbnQgZzsKLSAgICAgICAgICAgIGludCBiOworICAgICAgICAgICAgdWlu
dDhfdCByOworICAgICAgICAgICAgdWludDhfdCBnOworICAgICAgICAgICAgdWludDhfdCBiOwog
ICAgICAgICB9OwogICAgICAgICBzdGF0aWMgY29uc3QgTWFwRW50cnkgZW50cmllc1tdID0gewog
ICAgICAgICAgICAgeyAidG91Y2hzdGFydCJfcywgMTkxLCAxOTEsIDYzIH0sCkBAIC0xNjMsNyAr
MTYzLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcgogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgU2ltcGxlQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVp
bnQ4X3Q+PiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAg
ICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnkuciwgZW50cnku
ZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0J
KHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHN0
YXRpYyBDR0NvbG9yUmVmIGNyZWF0ZUNvbG9yKGZsb2F0IHIsIGYKIHN0cnVjdCBIaXN0b3JpY01l
bW9yeUNhdGVnb3J5SW5mbyB7CiAgICAgSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8oKSB7IH0g
Ly8gTmVlZGVkIGZvciBzdGQ6OmFycmF5LgogCi0gICAgSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUlu
Zm8odW5zaWduZWQgY2F0ZWdvcnksIFNpbXBsZUNvbG9yIGNvbG9yLCBTdHJpbmcgbmFtZSwgYm9v
bCBzdWJjYXRlZ29yeSA9IGZhbHNlKQorICAgIEhpc3RvcmljTWVtb3J5Q2F0ZWdvcnlJbmZvKHVu
c2lnbmVkIGNhdGVnb3J5LCBTUkdCQTx1aW50OF90PiBjb2xvciwgU3RyaW5nIG5hbWUsIGJvb2wg
c3ViY2F0ZWdvcnkgPSBmYWxzZSkKICAgICAgICAgOiBuYW1lKFdURk1vdmUobmFtZSkpCiAgICAg
ICAgICwgY29sb3IoY2FjaGVkQ0dDb2xvcihjb2xvcikpCiAgICAgICAgICwgaXNTdWJjYXRlZ29y
eShzdWJjYXRlZ29yeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBDb2xvciYg
Q29sb3I6Om9wZXJhdG9yPShDb2xvciYmIG90aGVyKQogQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgp
IGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0g
ICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBibGFjaykKKyAgICBpZiAoaXNTaW1w
bGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgYmxhY2sgfSkKICAgICAgICAgcmV0
dXJuIGxpZ2h0ZW5lZEJsYWNrOwogCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9z
c3k8ZmxvYXQ+KCk7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgp
IGNvbnN0CiBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2Rl
IHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2lt
cGxlKCkgPT0gd2hpdGUpCisgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBTaW1w
bGVDb2xvciB7IHdoaXRlIH0pCiAgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOwogICAgIAog
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwpAQCAtMTQ5LDcg
KzE0OSw3IEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICBpZiAoaXNT
ZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICByZXR1cm4geyBtYWtlU2lt
cGxlQ29sb3IodG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpLCBTZW1hbnRpYyB9OworICAgIHJldHVy
biB7IHRvU1JHQkFMb3NzeTx1aW50OF90PigpLCBTZW1hbnRpYyB9OwogfQogCiBzdGQ6OnBhaXI8
Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAkocmV2aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTMgKzU2LDEzIEBAIGNsYXNzIENv
bG9yIHsKIHB1YmxpYzoKICAgICBDb2xvcigpIHsgfQogCi0gICAgQ29sb3IoU2ltcGxlQ29sb3Ig
Y29sb3IpCisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiAgICAgewogICAgICAgICBz
ZXRTaW1wbGVDb2xvcihjb2xvcik7CiAgICAgfQogCiAgICAgZW51bSBTZW1hbnRpY1RhZyB7IFNl
bWFudGljIH07Ci0gICAgQ29sb3IoU2ltcGxlQ29sb3IgY29sb3IsIFNlbWFudGljVGFnKQorICAg
IENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTZW1hbnRpY1RhZykKICAgICAgICAgOiBDb2xv
cihjb2xvcikKICAgICB7CiAgICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKQEAgLTE5Myw3ICsxOTMs
MTIgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldFNpbXBs
ZUNvbG9yKFNpbXBsZUNvbG9yKTsKKyAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvcikKKyAgICAg
ICAgOiBDb2xvcihjb2xvci5hc1NSR0JBPHVpbnQ4X3Q+KCkpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgc2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4pOwogCiAgICAgdm9pZCB0YWdBc1Nl
bWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNT
aW1wbGVDb2xvckJpdDsgfQogICAgIHZvaWQgdGFnQXNWYWxpZCgpIHsgbV9jb2xvckRhdGEuc2lt
cGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNvbG9yOyB9CkBAIC0zMDEsMTIgKzMwNiwx
MiBAQCBpbmxpbmUgY29uc3QgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmFzRXh0CiBpbmxpbmUgY29u
c3QgU2ltcGxlQ29sb3IgQ29sb3I6OmFzU2ltcGxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNT
aW1wbGUoKSk7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihhc1NSR0JBKFBhY2tlZDo6UkdC
QSB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
ID4+IDMyKSB9KSk7CisgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgYXNTUkdCQShQYWNrZWQ6OlJH
QkEgeyBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyA+PiAzMikgfSkgfTsKIH0KIAotaW5saW5lIHZvaWQgQ29sb3I6OnNldFNpbXBsZUNvbG9yKFNp
bXBsZUNvbG9yIHNpbXBsZUNvbG9yKQoraW5saW5lIHZvaWQgQ29sb3I6OnNldFNpbXBsZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5k
RmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JBIHsgc2ltcGxlQ29sb3Iu
YXNTUkdCQTx1aW50OF90PigpIH0udmFsdWUpIDw8IDMyOworICAgIG1fY29sb3JEYXRhLnNpbXBs
ZUNvbG9yQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oUGFja2VkOjpSR0JBIHsgY29s
b3IgfS52YWx1ZSkgPDwgMzI7CiAgICAgdGFnQXNWYWxpZCgpOwogfQogCkBAIC0zMTQsMTQgKzMx
OSwxNCBAQCBpbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvCiB7CiAgICAg
aWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5kZWQo
KS5pc0JsYWNrKCk7Ci0gICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkgPT0gQ29sb3I6OmJsYWNr
OworICAgIHJldHVybiBjb2xvci5hc1NpbXBsZSgpID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OmJs
YWNrIH07CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0V4dGVuZGVkKCkpCiAgICAgICAgIHJldHVybiBj
b2xvci5hc0V4dGVuZGVkKCkuaXNXaGl0ZSgpOwotICAgIHJldHVybiBjb2xvci5hc1NpbXBsZSgp
ID09IENvbG9yOjp3aGl0ZTsKKyAgICByZXR1cm4gY29sb3IuYXNTaW1wbGUoKSA9PSBTaW1wbGVD
b2xvciB7IENvbG9yOjp3aGl0ZSB9OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAt
MzkwLDcgKzM5NSw3IEBAIE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBDb2xvciB7IG1ha2VTaW1wbGVDb2xvcihhc1NSR0JBKFBhY2tl
ZDo6UkdCQSB7IHZhbHVlIH0pKSB9OworICAgIHJldHVybiBDb2xvciB7IGFzU1JHQkEoUGFja2Vk
OjpSR0JBIHsgdmFsdWUgfSkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5j
cHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIENvbG9y
IGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKIAogICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICBTaW1wbGVDb2xvciByZXN1bHQ7CisgICAgU1JHQkE8dWlu
dDhfdD4gcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsgYWxwaGEgPD0g
ZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CiAgICAgICAgIC8vIFdlIGhhdmUg
YSBzb2xpZCBjb2xvci4gIENvbnZlcnQgdG8gYW4gZXF1aXZhbGVudCBjb2xvciB0aGF0IGxvb2tz
IHRoZSBzYW1lIHdoZW4gYmxlbmRlZCB3aXRoIHdoaXRlCiAgICAgICAgIC8vIGF0IHRoZSBjdXJy
ZW50IGFscGhhLiAgVHJ5IHVzaW5nIGxlc3MgdHJhbnNwYXJlbmN5IGlmIHRoZSBudW1iZXJzIGVu
ZCB1cCBiZWluZyBuZWdhdGl2ZS4KQEAgLTEwNyw3ICsxMDcsNyBAQCBDb2xvciBibGVuZChjb25z
dCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRp
cGxpZWRGcm9tLmFscGhhLCBwcmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQogICAgICk7
CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBs
aWVkQmxlbmRlZCkpOworICAgIHJldHVybiB1bnByZW11bHRpcGxpZWQocHJlbXVsdGlwbGllZEJs
ZW5kZWQpOwogfQogCiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYg
ZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMjAsNyArMTIwLDcg
QEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogICAgIGF1dG8gZnJv
bVNSR0IgPSBmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIGF1dG8gdG9TUkdCID0g
ZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoCisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oCiAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyks
CiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9n
cmVzcyksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckJ1aWxkZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvckJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSGVscGVy
IHRvIGFsbG93IGNvbnZlbmllbnQgc3ludGF4IGZvciB3b3JraW5nIHdpdGggY29sb3IgdHlwZXMu
CisvLyBlLmcuIGF1dG8geWVsbG93V2l0aDUwUGVyY2VudEFscGhhID0gQ29sb3I6OnllbGxvdy5j
b2xvcldpdGhBbHBoYSgxMjgpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgorc3RydWN0
IENvbG9yQnVpbGRlciA6IHB1YmxpYyBDb2xvclR5cGUgeworICAgIGNvbnN0ZXhwciBDb2xvckJ1
aWxkZXIoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKKyAgICAgICAgOiBDb2xvclR5cGUgeyBjb2xv
ciB9CisgICAgeworICAgIH0KKworICAgIGNvbnN0ZXhwciBDb2xvclR5cGUgY29sb3IoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNvbnN0ZXhwciBD
b2xvckJ1aWxkZXIgY29sb3JXaXRoQWxwaGEodWludDhfdCBvdmVycmlkZUFscGhhKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxkZWNsdHlwZShDb2xv
clR5cGUoKS5hbHBoYSksIHVpbnQ4X3Q+LCAiT25seSB1aW50OF90IGJhc2VkIGNvbG9yIHR5cGVz
IGFyZSBzdXBwb3J0ZWQuIik7CisKKyAgICAgICAgQ29sb3JCdWlsZGVyIGNvcHkgPSAqdGhpczsK
KyAgICAgICAgY29weS5hbHBoYSA9IG92ZXJyaWRlQWxwaGE7CisgICAgICAgIHJldHVybiBjb3B5
OworICAgIH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBpbmxpbmUgdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZs
CiAKIGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRCeXRlKGludCBjKQogewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKGMsIDAsIDB4RkYpKTsKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcChjLCAwLCAyNTUpOwogfQogCiBjb25zdGV4cHIgdWludDhfdCBj
bGFtcFRvQ29tcG9uZW50RmxvYXQoZmxvYXQgZikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjY0MDUzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTcgKzI1LDE2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29sb3JC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2ltcGxlQ29sb3Ig
ewogcHVibGljOgotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcigpIDogbV92YWx1ZSB7IH0geyB9
Ci0gICAgY29uc3RleHByIFNpbXBsZUNvbG9yKHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90
IGIsIHVpbnQ4X3QgYSkgOiBtX3ZhbHVlIHsgciwgZywgYiwgYSB9IHsgfQorICAgIGNvbnN0ZXhw
ciBleHBsaWNpdCBTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90PiB2YWx1ZSkgOiBtX3ZhbHVlIHsg
dmFsdWUgfSB7IH0KIAogICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZS5hbHBoYTsgfQogICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNv
bXBvbmVudEFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCht
X3ZhbHVlLmFscGhhKTsgfQpAQCAtNzYsMTcgKzc1LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6CisgICAgY29uc3RleHByIFNpbXBsZUNvbG9yKHVpbnQ4X3QgciwgdWludDhfdCBnLCB1
aW50OF90IGIsIHVpbnQ4X3QgYSkgOiBtX3ZhbHVlIHsgciwgZywgYiwgYSB9IHsgfQorCiAgICAg
U1JHQkE8dWludDhfdD4gbV92YWx1ZSB7IDAsIDAsIDAsIDAgfTsKIH07CiAKIGJvb2wgb3BlcmF0
b3I9PShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOwogYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNv
bG9yLCBTaW1wbGVDb2xvcik7CiAKLWNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYik7Ci1jb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLWNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mKTsKLVNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKLQogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewogICAgIHJldHVybiBhLmFzU1JH
QkE8dWludDhfdD4oKSA9PSBiLmFzU1JHQkE8dWludDhfdD4oKTsKQEAgLTk3LDI0ICs5MywyOSBA
QCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEsIFNpCiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KIAotY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25z
dCBTUkdCQTx1aW50OF90PiYgc1JHQkEpCitjb25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVp
bnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYik7Citjb25zdGV4cHIg
Q29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEpOworY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4g
bWFrZVNpbXBsZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKK0NvbG9yQnVpbGRlcjxTUkdCQTx1aW50
OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworCitjb25zdGV4cHIg
Q29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBn
LCBpbnQgYikKIHsKLSAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdyZWVuLCBzUkdCQS5i
bHVlLCBzUkdCQS5hbHBoYSB9OworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JH
QkE+KHIsIGcsIGIsIDB4RkYpOwogfQogCi1pbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCitjb25zdGV4cHIgQ29sb3JCdWlsZGVyPFNS
R0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
CiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhz
UkdCQSkpOworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIs
IGEpOwogfQogCi1jb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBp
bnQgZywgaW50IGIpCitjb25zdGV4cHIgQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiBtYWtl
U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gc1JHQkEpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcihjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIDB4RkYpKTsKKyAg
ICByZXR1cm4gc1JHQkE7CiB9CiAKLWNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCitpbmxpbmUgQ29sb3JCdWlsZGVyPFNSR0JB
PHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBzUkdCQSkKIHsK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
ciwgZywgYiwgYSkpOworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHJldmlzaW9uIDI2NDA1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGOjp+SW5iYW5kVGV4dFRyCiAgICAgZGlzY29ubmVjdCgpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZB
cnJheShDRkFycmF5UmVmIGNvbG9yQXJyYXkpCitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IG1ha2VTaW1wbGVDb2xvckZyb21BUkdCQ0ZBcnJheShDRkFycmF5UmVmIGNvbG9yQXJyYXkp
CiB7CiAgICAgaWYgKENGQXJyYXlHZXRDb3VudChjb2xvckFycmF5KSA8IDQpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDI2NDA1MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NTQsNyArMjU1NCw3IEBAIHN0YXRpYyBDb2xvciBjb250
ZW50c0xheWVyRGVidWdCb3JkZXJDb2wKIHN0YXRpYyBjb25zdCBmbG9hdCBjbG9uZUxheWVyQm9y
ZGVyV2lkdGggPSAyOwogc3RhdGljIENvbG9yIGNsb25lTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJv
b2wgc2hvd2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gbWFrZVNp
bXBsZUNvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0Jv
cmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvciB7IH07CiB9CiAK
IHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlz
aW9uIDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFJldGFpblB0cjxDR0NvbG9y
UmVmPiBUaW55TFJVQ2FjaGVQb2xpY3kKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNHQ29sb3IoQ0dDb2xvclJlZiBjb2xvcikK
K3N0YXRpYyBTUkdCQTx1aW50OF90PiBtYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcihDR0NvbG9y
UmVmIGNvbG9yKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFu
ZGxlIGNvbG9yIHNwYWNlcy4KIApAQCAtMTMwLDE1ICsxMzAsMTUgQEAgQ0dDb2xvclJlZiBjYWNo
ZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjbwogewogICAgIGlmIChjb2xvci5pc1NpbXBsZSgpKSB7
CiAgICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNTaW1wbGUoKS5hc1NSR0JB
PHVpbnQ4X3Q+KCkgfS52YWx1ZSkgewotICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9y
Ojp0cmFuc3BhcmVudC5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZTogeworICAgICAgICBjYXNl
IFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudCB9LnZhbHVlOiB7CiAgICAgICAgICAg
ICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xv
cik7CiAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OmJsYWNrLmFzU1JHQkE8dWludDhfdD4o
KSB9LnZhbHVlOiB7CisgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OmJsYWNrIH0u
dmFsdWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIGJsYWNrQ0dDb2xvciA9IGxl
YWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVybiBibGFja0NHQ29sb3I7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6d2hpdGUuYXNTUkdCQTx1
aW50OF90PigpIH0udmFsdWU6IHsKKyAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6
d2hpdGUgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgd2hpdGVDR0Nv
bG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgcmV0dXJuIHdoaXRlQ0dDb2xv
cjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3
ICs2Miw3IEBAIGJvb2wgdXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKQogICAgIHJldHVybiB1
c2VPbGRBcXVhRm9jdXNSaW5nQ29sb3I7CiB9CiAKLXN0YXRpYyBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKK3N0YXRpYyBTUkdCQTx1aW50OF90
PiBtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsKICAgICAvLyBG
SVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCiAKQEAg
LTEyNCwxNSArMTI0LDE1IEBAIE5TQ29sb3IgKm5zQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewogICAgIGlmIChjb2xvci5pc1NpbXBsZSgpKSB7CiAgICAgICAgIHN3aXRjaCAoUGFja2VkOjpS
R0JBIHsgY29sb3IuYXNTaW1wbGUoKS5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZSkgewotICAg
ICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudC5hc1NSR0JBPHVpbnQ4
X3Q+KCkgfS52YWx1ZTogeworICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFu
c3BhcmVudCB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgTlNDb2xvciAqY2xlYXJDb2xv
ciA9IFtbTlNDb2xvciBjb2xvcldpdGhTUkdCUmVkOjAgZ3JlZW46MCBibHVlOjAgYWxwaGE6MF0g
cmV0YWluXTsKICAgICAgICAgICAgIHJldHVybiBjbGVhckNvbG9yOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OmJsYWNrLmFzU1JHQkE8dWludDhfdD4oKSB9
LnZhbHVlOiB7CisgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OmJsYWNrIH0udmFs
dWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBOU0NvbG9yICpibGFja0NvbG9yID0gW1tOU0NvbG9y
IGNvbG9yV2l0aFNSR0JSZWQ6MCBncmVlbjowIGJsdWU6MCBhbHBoYToxXSByZXRhaW5dOwogICAg
ICAgICAgICAgcmV0dXJuIGJsYWNrQ29sb3I7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBQYWNr
ZWQ6OlJHQkEgeyBDb2xvcjo6d2hpdGUuYXNTUkdCQTx1aW50OF90PigpIH0udmFsdWU6IHsKKyAg
ICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6d2hpdGUgfS52YWx1ZTogewogICAgICAg
ICAgICAgc3RhdGljIE5TQ29sb3IgKndoaXRlQ29sb3IgPSBbW05TQ29sb3IgY29sb3JXaXRoU1JH
QlJlZDoxIGdyZWVuOjEgYmx1ZToxIGFscGhhOjFdIHJldGFpbl07CiAgICAgICAgICAgICByZXR1
cm4gd2hpdGVDb2xvcjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAJKHJldmlzaW9u
IDI2NDA1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZTo6ZHJhd0JveGVzKAogCiAgICAgYm94VG9wICs9IGJveFNpemUg
KyAyOwogICAgIGJveExlZnQgPSBib3hTaXplOwotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBi
b3hDb2xvcnNbXSA9IHsgQ29sb3I6OndoaXRlLCBDb2xvcjo6eWVsbG93LCBDb2xvcjo6Y3lhbiwg
ZGFya0dyZWVuLCBtYWdlbnRhLCByZWQsIGJsdWUgfTsKKyAgICBjb25zdGV4cHIgU1JHQkE8dWlu
dDhfdD4gYm94Q29sb3JzW10gPSB7IENvbG9yOjp3aGl0ZSwgQ29sb3I6OnllbGxvdywgQ29sb3I6
OmN5YW4sIGRhcmtHcmVlbiwgbWFnZW50YSwgcmVkLCBibHVlIH07CiAgICAgZm9yIChhdXRvJiBi
b3hDb2xvciA6IGJveENvbG9ycykgewogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dChib3hMZWZ0LCBib3hUb3AsIGJveFNpemUgKyAxLCBib3hTaXplICsgMSksIGJveENvbG9yKTsK
ICAgICAgICAgYm94TGVmdCArPSBib3hTaXplICsgMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNjQwNTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5OSw3ICszMDk5LDcgQEAgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpQYWlu
dExheWVyRmxhZz4gUgogc3RydWN0IFBhdHRlcm5EZXNjcmlwdGlvbiB7CiAgICAgQVNDSUlMaXRl
cmFsIG5hbWU7CiAgICAgRmxvYXRTaXplIHBoYXNlOwotICAgIFNpbXBsZUNvbG9yIGZpbGxDb2xv
cjsKKyAgICBTUkdCQTx1aW50OF90PiBmaWxsQ29sb3I7CiB9OwogCiBzdGF0aWMgUmVmUHRyPFBh
dHRlcm4+IHBhdHRlcm5Gb3JEZXNjcmlwdGlvbihQYXR0ZXJuRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24sIEZsb2F0U2l6ZSBjb250ZW50T2Zmc2V0LCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMjY0MDUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVN
YWM6OnBsYXRmb3JtVGV4dFNlYXJjaAogICAgIHJldHVybiBjb2xvckZyb21OU0NvbG9yKFtOU0Nv
bG9yIGZpbmRIaWdobGlnaHRDb2xvcl0pOwogfQogCi1zdGF0aWMgU2ltcGxlQ29sb3IgbWVudUJh
Y2tncm91bmRDb2xvcigpCitzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91bmRDb2xv
cigpCiB7CiAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+IG9mZnNjcmVlblJlcCA9IGFk
b3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQbGFuZXM6
bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNh
bXBsZXNQZXJQaXhlbDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpO
U0RldmljZVJHQkNvbG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2NDA5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDIwLTA3LTA4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBQYXJ0IDMgb2YgU2ltcGxlQ29sb3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRp
YWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDA4MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
IFVwZGF0ZSB0byBhY2NvdW50IGZvciBtYWtlU2ltcGxlQ29sb3Igbm8gbG9uZ2VyIHJldHVybmlu
ZyBhbiBvYmplY3QgdGhhdCBoYXMgYQorICAgICAgICBhc1NSR0JBPHVpbnQ4X3Q+KCkgZnVuY3Rp
b24gKGl0IGlzIGFscmVhZHkgYSBTUkdCQTx1aW50OF90PikuCisKIDIwMjAtMDctMDggIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNE
S10gUHJlLXN0YXJ0IHNjY2FjaGUgc2VydmVyCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjQwNTMpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMywyMiArMjEzLDIxIEBAIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBF
WFBFQ1RfRkxPQVRfRVEoQ29sb3IoQ29sb3I6OmJsYWNrKS5sdW1pbmFuY2UoKSwgMCk7CiAgICAg
RVhQRUNUX0ZMT0FUX0VRKENvbG9yKENvbG9yOjp3aGl0ZSkubHVtaW5hbmNlKCksIDEpOwogCi0g
ICAgYXV0byBjID0gbWFrZVNpbXBsZUNvbG9yKDg1LCA5MCwgMTYwKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoQ29sb3IoYykubHVtaW5hbmNlKCksIDAuMTE3ODE2OTIpOworICAgIGF1dG8gY0NvbXBv
bmVudHMgPSBtYWtlU2ltcGxlQ29sb3IoODUsIDkwLCAxNjApOworICAgIEVYUEVDVF9GTE9BVF9F
UShDb2xvcihjQ29tcG9uZW50cykubHVtaW5hbmNlKCksIDAuMTE3ODE2OTIpOwogCi0gICAgYXV0
byBjQ29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90PigpOwogICAgIEVYUEVDVF9FUShjQ29t
cG9uZW50cy5yZWQsIDg1KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuZ3JlZW4sIDkwKTsK
ICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKIAotICAgIGF1dG8gY0xpZ3Rl
bmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjTGlndGVuZWQpKS5sdW1pbmFu
Y2UoKSwgMC4yOTE2ODgwOCk7CisgICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50
cykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKENvbG9yKGNMaWd0ZW5lZCkubHVtaW5hbmNlKCksIDAuMjkxNjg4MDgpOwogICAgIEVYUEVD
VF9FUShjTGlndGVuZWQucmVkLCAxMzApOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW4s
IDEzNyk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAyNDQpOwogCi0gICAgYXV0byBj
RGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0RhcmtlbmVkKSkubHVt
aW5hbmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21w
b25lbnRzKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9G
TE9BVF9FUShDb2xvcihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7CiAgICAg
RVhQRUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdy
ZWVuLCA0Myk7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlLCA3Nik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403809</attachid>
            <date>2020-07-08 14:09:39 -0700</date>
            <delta_ts>2020-07-08 14:47:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214082-20200708140938.patch</filename>
            <type>text/plain</type>
            <size>43192</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAyMC0wNy0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAzIG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTQwODIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAt
IFJlcGxhY2VzIGFsbCB1c2VzIG9mIFNpbXBsZUNvbG9yIHRoYXQgYXJlIG5vdCBpbXBsZW1lbnRh
dGlvbiBkZXRhaWxzIG9mIENvbG9yLCB3aXRoIFNSR0JBPHVpbnQ4X3Q+LgorICAgICAgICAtIEFk
ZHMgQ29sb3JCdWlsZGVyPFQ+IHRvIGFsbG93IG1haW50YWluaW5nIHRoZSBzeW50YXggU2ltcGxl
Q29sb3IgZm9yIGNvbnN0YW50IGNvbG9ycy4gZS5nOgorICAgICAgICAgICAgCisgICAgICAgICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjp5ZWxsb3cuY29sb3JXaXRoQWxwaGEoMTI4KTsKKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICBBZGQgQ29sb3JCdWlsZGVyLmgKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVu
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc1NpbXBsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6c2V0U2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmlzQmxhY2tDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNXaGl0ZUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAgIC0gTWFrZSBjb25zdHJ1Y3RvciB0YWtpbmcgYSBT
aW1wbGVDb2xvciBwcml2YXRlLiAKKyAgICAgICAgLSBBZGQgLyBtb2RpZml5IGNvbnN0cnVjdG9y
cyB0byB0YWtlIFNSR0JBPHVpbnQ4X3Q+LgorICAgICAgICAtIE1ha2Ugc2V0U2ltcGxlQ29sb3Io
KSB0YWtlIGEgU1JHQkE8dWludDhfdD4gKHRoaXMgd2lsbCBiZSByZW5hbWVkIGFsb25nIHdpdGgK
KyAgICAgICAgICBvdGhlciBhc3BlY3RzIG9mIENvbG9yJ3MgaW50ZXJuYWxzIGluIGEgc3Vic2Vx
dWVudCBjaGFuZ2UpLgorICAgICAgICAtIFVwZGF0ZSBjYWxscyB0aGF0IHN0aWxsIG5lZWQgU2lt
cGxlQ29sb3IgdG8gdXNlIGFuIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tCisgICAgICAgICAg
U1JHQkE8dWludDhfdD4uCisgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JC
dWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JCdWlsZGVyOjpDb2xvckJ1
aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JCdWlsZGVyOjpjb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvckJ1aWxkZXI6OmNvbG9yV2l0aEFscGhhIGNvbnN0KToKKyAg
ICAgICAgQWRkZWQgdG8gaGVscCBtYWludGFpbiBjdXJyZW50IHN5bnRheCB3aHkgY29uc3RydWN0
aW5nIGNvbG9ycy4gQ3VycmVudGx5IGl0IG9ubHkKKyAgICAgICAgc3VwcG9ydHMgY29sb3IgdHlw
ZSB3aXRoIHVpbnQ4X3QgY29tcG9uZW50cywgYnV0IGNhbiBiZSBleHBhbmRlZCB0byBzdXBwb3J0
IG1vcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6Y2xhbXBUb0NvbXBvbmVudEJ5dGUpOgorICAgICAgICBSZW1vdmUg
dW5uZWNlc3NhcnkgY2FzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6U2ltcGxlQ29sb3IpOgorICAg
ICAgICBSZXN0cmljdCB0byBleHBsaWNpdCBjb25zdHJ1Y3Rpb24gdmlhIGEgU1JHQkE8dWludDhf
dD4uCisgCisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICBVcGRh
dGUgdG8gcmV0dXJuIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4uIEEgZnV0dXJlIGNoYW5n
ZSB3aWxsIHVwZGF0ZQorICAgICAgICB0aGUgZnVuY3Rpb24gbmFtZSwgYnV0IGtlcHQgdGhlIHNh
bWUgaGVyZSB0byBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUgY2hhbmdlLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNp
bXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bnNDb2xvcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlU2ltcGxlQ29sb3JGcm9tQ0dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRD
R0NvbG9yKToKKyAgICAgICAgUmVwbGFjZSBkaXJlY3QgU2ltcGxlQ29sb3IgdXNhZ2Ugd2l0aCBT
UkdCQTx1aW50OF90PiBhbmQgc2ltcGxpZnkgUGFja2VkCisgICAgICAgIGNvbnN0cnVjdGlvbiBu
b3cgdGhhdCAuYXNTUkdCQTx1aW50OF90PigpIGlzIG5vdCBuZWVkZWQgZm9yIGNvbG9yIGNvbnN0
YW50cy4KKworICAgICAgICAqIGNzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oOgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VOYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VI
ZXhDb2xvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5p
c2hQYXJzaW5nSGV4Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtZXJpY0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFBhcnNpbmdOYW1lZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
TmFtZWRDb2xvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2ltcGxlQ29sb3JJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlU2lt
cGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZUhl
eENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VOYW1l
ZENvbG9yKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5oOiAgICAK
KyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSGV4Q29sb3IpOgor
ICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTaW1wbGVDb2xvclZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlTGVnYWN5Q29sb3JWYWx1ZSk6CisgICAgICAgICogcGFnZS9E
ZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKToKKyAgICAgICAgKiBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbzo6SGlzdG9y
aWNNZW1vcnlDYXRlZ29yeUluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
QmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVs
dGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xv
ckZyb21BUkdCQ0ZBcnJheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsb25lTGF5ZXJEZWJ1Z0JvcmRlckNv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICBSZXBsYWNlIGRpcmVjdCBTaW1wbGVDb2xvciB1c2FnZSB3
aXRoIFNSR0JBPHVpbnQ4X3Q+LiAKKwogMjAyMC0wNy0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBNYWtlIGl0IHBvc3NpYmxlIHRvIGVz
dGFibGlzaCBkaXJlY3QgWFBDIGNvbm5lY3Rpb25zIGJldHdlZW4gV2ViS2l0IHByb2Nlc3NlcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgyLDYgKzEwODIsNyBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
QXVkaW9UcmFja1ByaXZhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JCdWlsZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JIYXNoLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2NDEzMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIw
OCw2ICsyMjA4LDcgQEAKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FG
OUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3
NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThF
MkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4
MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzE0QTAw
NzI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE0QTAwNjI0QjVGRTIxMDAxQTZDNkMgLyogQ29s
b3JCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5
NzMgLyogQXV0b2ZpbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QzE5M0JCQjFGNUUwRUVEMDA4OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE5M0JCNjFG
NUUwRUI5MDA4OEYzRTYgLyogQ2FudmFzRGlyZWN0aW9uLmggKi87IH07CiAJCTdDMTkzQkJDMUY1
RTBFRUQwMDg4RjNFNiAvKiBDYW52YXNGaWxsUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxOTNCQTExRjVFMEVBQjAwODhGM0U2IC8qIENhbnZh
c0ZpbGxSdWxlLmggKi87IH07CkBAIC05OTI1LDYgKzk5MjYsNyBAQAogCQk3QzBDRUYyRTFFNEE1
ODMyMDA4REVCODAgLyogSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMENFRjJGMUU0QTU4QUQwMDhERUI4
MCAvKiBKU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDMENFRjMwMUU0QTU4RjEwMDhERUI4MCAvKiBKU0RPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QzE0QTAwNjI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWlsZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbG9yQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzE4NDNG
QjFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQXV0b2ZpbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MxOTNCOUExRjVFMEVBNzAwODhGM0U2IC8qIENhbnZhc0RyYXdJbWFnZS5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFzRHJhd0ltYWdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI1NTI0LDYgKzI1NTI2LDcgQEAKIAkJCQlCMjc1MzUzOTBCMDUzODE0MDAy
Q0U2NEYgLyogQ29sb3IuaCAqLywKIAkJCQk3QzFCNEE2NTI0QTk5NzU5MDAzMzcyN0YgLyogQ29s
b3JCbGVuZGluZy5jcHAgKi8sCiAJCQkJN0MxQjRBNjcyNEE5OTc2NjAwMzM3MjdGIC8qIENvbG9y
QmxlbmRpbmcuaCAqLywKKwkJCQk3QzE0QTAwNjI0QjVGRTIxMDAxQTZDNkMgLyogQ29sb3JCdWls
ZGVyLmggKi8sCiAJCQkJN0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5IC8qIENvbG9yQ29tcG9uZW50
cy5oICovLAogCQkJCTdDNTE0RTAyMjRBRjgwNTgwMDUwNzEwRiAvKiBDb2xvckNvbnZlcnNpb24u
Y3BwICovLAogCQkJCTdDNTE0RTAwMjRBRjgwNTgwMDUwNzEwRiAvKiBDb2xvckNvbnZlcnNpb24u
aCAqLywKQEAgLTMwMTA1LDYgKzMwMTA4LDcgQEAKIAkJCQk0NkVCRUEwMjFCN0Q0RDY1MDBCRTQ5
NDEgLyogQ29sbGVjdGlvblRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDNDQyMDAw
RjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Mjc1MzU2NzBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTdD
MTRBMDA3MjRCNUZFMjEwMDFBNkM2QyAvKiBDb2xvckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMzMzBBMjIzMTNFQzE5NkIwMDAwQjQ1QiAvKiBDb2xvckNob29zZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMzN0NERUJEMTQ5RUYyMDMwMDQyMDkwRCAvKiBDb2xvckNob29zZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNv
Y29hLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVk
Q1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUmIGJsdWUoKSB7
IHJldHVybiBtX2JsdWU7IH0KICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYWxw
aGEoKSB7IHJldHVybiBtX2FscGhhOyB9CiAKLSAgICBTaW1wbGVDb2xvciBjb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihtX2NvbG9yKTsgfQorICAgIFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiBwcml2YXRlOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE51bWJlclR5cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0
aXZlVmFsdWU+IGNyZWF0ZVdyYXBwZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJl
clR5cGUgbnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNw
cAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBDb2xvciBDU1NQYXJz
ZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5n
bGV0b24oKS5zeXN0ZW1Db2xvcihrZXl3b3JkLCB7IH0pOwogfQogCi1PcHRpb25hbDxTaW1wbGVD
b2xvcj4gQ1NTUGFyc2VyOjpwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCitPcHRp
b25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmll
dyBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VOYW1lZENv
bG9yKHN0cmluZyk7CiB9CiAKLU9wdGlvbmFsPFNpbXBsZUNvbG9yPiBDU1NQYXJzZXI6OnBhcnNl
SGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCitPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NT
UGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIHJldHVybiBD
U1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEg
KzM3LDExIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0YWJsZVN0
eWxlUHJvcGVydGllczsKIGNsYXNzIE11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFzcyBTaW1w
bGVDb2xvcjsKIGNsYXNzIFN0eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZTsK
IGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxlOwordGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBTUkdCQTsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNzIEJ1aWxk
ZXJTdGF0ZTsKQEAgLTg4LDggKzg4LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2Up
OwogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShTdHJpbmdWaWV3KTsKICAg
ICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKLSAgICBzdGF0aWMg
T3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKLSAgICBz
dGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7Cisg
ICAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5n
Vmlldyk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9y
KFN0cmluZ1ZpZXcpOwogCiBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wg
aW1wb3J0YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFz
dFBhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckZhc3RQYXRocy5jcHAJKHJldmlzaW9uIDI2NDEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDM4
ICs0MDksMzggQEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgQ2hhcgogICAg
ICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdiJyk7CiB9
CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gZmluaXNoUGFyc2luZ0hleENvbG9yKHVp
bnQzMl90IHZhbHVlLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IGZpbmlzaFBhcnNpbmdIZXhDb2xvcih1aW50MzJfdCB2YWx1ZSwgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIHN3aXRjaCAobGVuZ3RoKSB7CiAgICAgY2FzZSAzOgogICAgICAgICAvLyAj
YWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgY29udmVy
c2lvbiB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRvIGNvbnN0cnVjdAog
ICAgICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAgICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeworICAgICAgICByZXR1cm4gYXNT
UkdCQShQYWNrZWQ6OkFSR0IgewogICAgICAgICAgICAgICAgMHhGRjAwMDAwMAogICAgICAgICAg
ICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFsdWUgJiAweEYwMCkgPDwgOAogICAgICAg
ICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAotICAgICAg
ICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH0pKTsKKyAgICAgICAg
ICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKSB9KTsKICAgICBjYXNlIDQ6
CiAgICAgICAgIC8vICNhYmNkIGNvbnZlcnRzIHRvIGRkYWFiYmNjIHNpbmNlIGFscGhhIGJ5dGVz
IGFyZSB0aGUgaGlnaCBieXRlcy4KICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2UgY29udmVyc2lv
biB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRvIGNvbnN0cnVjdAogICAg
ICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAgICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeworICAgICAgICByZXR1cm4gYXNTUkdC
QShQYWNrZWQ6OkFSR0IgewogICAgICAgICAgICAgICAodmFsdWUgJiAweEYpIDw8IDI4IHwgKHZh
bHVlICYgMHhGKSA8PCAyNAogICAgICAgICAgICAgfCAodmFsdWUgJiAweEYwMDApIDw8IDggfCAo
dmFsdWUgJiAweEYwMDApIDw8IDQKICAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDQg
fCAodmFsdWUgJiAweEYwMCkKLSAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAodmFsdWUg
JiAweEYwKSA+PiA0IH0pKTsKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgfCAodmFsdWUg
JiAweEYwKSA+PiA0IH0pOwogICAgIGNhc2UgNjoKICAgICAgICAgLy8gRklYTUU6IFJlcGxhY2Ug
Y29udmVyc2lvbiB0byBQYWNrZWQ6OkFSR0Igd2l0aCBzaW1wbGVyIGJpdCBtYXRoIHRvIGNvbnN0
cnVjdAogICAgICAgICAvLyB0aGUgU1JHQkE8dWludDhfdD4gZGlyZWN0bHkuCi0gICAgICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyAweEZGMDAwMDAwIHwg
dmFsdWUgfSkpOworICAgICAgICByZXR1cm4gYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyAweEZGMDAw
MDAwIHwgdmFsdWUgfSk7CiAgICAgY2FzZSA4OgotICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yKGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgdmFsdWUgfSkpOworICAgICAgICByZXR1cm4gYXNT
UkdCQShQYWNrZWQ6OlJHQkEgeyB2YWx1ZSB9KTsKICAgICB9CiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlv
bmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9ySW50
ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0gNiAmJiBs
ZW5ndGggIT0gOCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTQ1NSw3ICs0NTUs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJu
IGZpbmlzaFBhcnNpbmdIZXhDb2xvcih2YWx1ZSwgbGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZU51
bWVyaWNDb2xvcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIGJvb2wgc3RyaWN0KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU51bWVyaWNDb2xvcihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgc3RyaWN0KQogewogICAg
IGlmIChsZW5ndGggPj0gNCAmJiBjaGFyYWN0ZXJzWzBdID09ICcjJykgewogICAgICAgICBpZiAo
YXV0byBoZXhDb2xvciA9IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjaGFyYWN0ZXJzICsgMSwgbGVu
Z3RoIC0gMSkpCkBAIC01MTEsNyArNTExLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOdW1lcmljQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IHBhcnNlTnVtZXJpY0NvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIGJvb2wgc3RyaWN0ID0gIWlzUXVpcmtzTW9kZUJl
aGF2aW9yKGNvbnRleHQubW9kZSk7CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKQEAgLTUzMywx
NiArNTMzLDE2IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ29sb3IoU3RyaW4KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBmaW5p
c2hQYXJzaW5nTmFtZWRDb2xvcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRp
YyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gZmluaXNoUGFyc2luZ05hbWVkQ29sb3IoY2hhciog
YnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwog
ICAgIGF1dG8gbmFtZWRDb2xvciA9IGZpbmRDb2xvcihidWZmZXIsIGxlbmd0aCk7CiAgICAgaWYg
KCFuYW1lZENvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoYXNTUkdCQShQYWNrZWQ6OkFSR0IgeyBuYW1lZENvbG9yLT5BUkdCVmFs
dWUgfSkpOworICAgIHJldHVybiBhc1NSR0JBKFBhY2tlZDo6QVJHQiB7IG5hbWVkQ29sb3ItPkFS
R0JWYWx1ZSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZU5hbWVkQ29sb3JJbnRlcm5hbChjb25zdCBDaGFy
YWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlTmFt
ZWRDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIEVhc2lseSBiaWcgZW5vdWdoIGZv
ciB0aGUgbG9uZ2VzdCBjb2xvciBuYW1lLgogICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVy
KSAtIDEpCkBAIC01NTYsMjggKzU1NiwyOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGZpbmlzaFBhcnNpbmdOYW1lZENvbG9yKGJ1ZmZlciwg
bGVuZ3RoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9w
dGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIHN0cmljdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90
Pj4gcGFyc2VTaW1wbGVDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBzdHJpY3QpCiB7CiAgICAgaWYgKGF1dG8gY29sb3Ig
PSBwYXJzZU51bWVyaWNDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0cmljdCkpCiAgICAgICAg
IHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gcGFyc2VOYW1lZENvbG9ySW50ZXJuYWwoY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlckZhc3RQ
YXRoczo6cGFyc2VTaW1wbGVDb2xvcihTdHJpbmdWaWV3IHN0cmluZywgYm9vbCBzdHJpY3QpCitP
cHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNv
bG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBib29sIHN0cmljdCkKIHsKICAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQogICAgICAgICByZXR1cm4gcGFyc2VTaW1wbGVDb2xvckludGVybmFsKHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHN0cmljdCk7CiAgICAgcmV0dXJuIHBhcnNl
U2ltcGxlQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSwgc3RyaWN0KTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlckZhc3RQYXRo
czo6cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3IHN0cmluZykKK09wdGlvbmFsPFNSR0JBPHVpbnQ4
X3Q+PiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcp
CiB7CiAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29s
b3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICBy
ZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKIH0KIAotT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlckZhc3RQYXRo
czo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQorT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcgc3Ry
aW5nKQogewogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBwYXJzZU5h
bWVkQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
aAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXJGYXN0UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFNpbXBsZUNvbG9yOworCit0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dDsK
IApAQCAtNTAsOSArNTEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZEtleXdv
cmRQcm9wZXJ0eUFuZFZhbHVlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQsIGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmKTsKIAogICAgIC8vIFBhcnNlcyBudW1lcmljIGFuZCBuYW1lZCBjb2xvcnMu
Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZVNpbXBsZUNvbG9yKFN0cmlu
Z1ZpZXcsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVD
b2xvcj4gcGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsgLy8gSGV4IGNvbG9ycyBvZiBsZW5ndGgg
MywgNCwgNiwgb3IgOCwgd2l0aG91dCBsZWFkaW5nICIjIi4KLSAgICBzdGF0aWMgT3B0aW9uYWw8
U2ltcGxlQ29sb3I+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKKyAgICBzdGF0aWMgT3B0
aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlU2ltcGxlQ29sb3IoU3RyaW5nVmlldywgYm9vbCBz
dHJpY3QgPSBmYWxzZSk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJz
ZUhleENvbG9yKFN0cmluZ1ZpZXcpOyAvLyBIZXggY29sb3JzIG9mIGxlbmd0aCAzLCA0LCA2LCBv
ciA4LCB3aXRob3V0IGxlYWRpbmcgIiMiLgorICAgIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50
OF90Pj4gcGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02ODksNyArNjg5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBh
cmFtZXRlcgogICAgIHJldHVybiBtYWtlRXh0ZW5kZWRDb2xvcihjb2xvckNoYW5uZWxzWzBdLCBj
b2xvckNoYW5uZWxzWzFdLCBjb2xvckNoYW5uZWxzWzJdLCBjb2xvckNoYW5uZWxzWzNdLCBjb2xv
clNwYWNlKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9y
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKK3N0
YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCiB7CiAgICAgU3RyaW5nIHN0
cmluZzsKICAgICBTdHJpbmdWaWV3IHZpZXc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Nv
bG9ySW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9y
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGlj
IGJvb2wgaXNWYWxpZFNpbXBsZUNvbG9yKFN0cmluZ1ZpZQogfQogCiAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3J1bGVz
LWZvci1wYXJzaW5nLXNpbXBsZS1jb2xvdXItdmFsdWVzCi1zdGF0aWMgT3B0aW9uYWw8U2ltcGxl
Q29sb3I+IHBhcnNlU2ltcGxlQ29sb3JWYWx1ZShTdHJpbmdWaWV3IHN0cmluZykKK3N0YXRpYyBP
cHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VTaW1wbGVDb2xvclZhbHVlKFN0cmluZ1ZpZXcg
c3RyaW5nKQogewogICAgIGlmICghaXNWYWxpZFNpbXBsZUNvbG9yKHN0cmluZykpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6
OmFkZEhUTUxMZW5ndGhUb1N0eWxlKE0KIAogLy8gQ29sb3IgcGFyc2luZyB0aGF0IG1hdGNoZXMg
SFRNTCdzICJydWxlcyBmb3IgcGFyc2luZyBhIGxlZ2FjeSBjb2xvciB2YWx1ZSIKIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3J1bGVzLWZvci1wYXJzaW5nLWEtbGVnYWN5LWNvbG91
ci12YWx1ZQotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUxlZ2FjeUNvbG9yVmFs
dWUoU3RyaW5nVmlldyBzdHJpbmcpCitzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBh
cnNlTGVnYWN5Q29sb3JWYWx1ZShTdHJpbmdWaWV3IHN0cmluZykKIHsKICAgICAvLyBBbiBlbXB0
eSBzdHJpbmcgZG9lc24ndCBhcHBseSBhIGNvbG9yLgogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJKHJldmlz
aW9uIDI2NDEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTQgKzE0NCwxNCBAQCBib29sIE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uT3ZlcmxheTo6dXBkCiAgICAgcmV0dXJuIHJlZ2lvbkNoYW5nZWQ7CiB9CiAKLXN0
YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU2ltcGxlQ29sb3I+JiB0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkKK3N0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhfdD4+JiB0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byByZWdpb25D
b2xvcnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkg
ewogICAgICAgICAgICAgQVNDSUlMaXRlcmFsIG5hbWU7Ci0gICAgICAgICAgICBpbnQgcjsKLSAg
ICAgICAgICAgIGludCBnOwotICAgICAgICAgICAgaW50IGI7CisgICAgICAgICAgICB1aW50OF90
IHI7CisgICAgICAgICAgICB1aW50OF90IGc7CisgICAgICAgICAgICB1aW50OF90IGI7CiAgICAg
ICAgIH07CiAgICAgICAgIHN0YXRpYyBjb25zdCBNYXBFbnRyeSBlbnRyaWVzW10gPSB7CiAgICAg
ICAgICAgICB7ICJ0b3VjaHN0YXJ0Il9zLCAxOTEsIDE5MSwgNjMgfSwKQEAgLTE2Myw3ICsxNjMs
NyBAQCBzdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yCiAgICAgICAgICAg
ICB7ICJtb3VzZW1vdmUiX3MsIDI0NSwgMjQ1LCA4MCB9LAogICAgICAgICAgICAgeyAibW91c2V1
cCJfcywgODAsIDI0NSwgMTc2IH0sCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTaW1wbGVDb2xvcj4gbWFwOworICAgICAgICBIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhf
dD4+IG1hcDsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpCiAgICAgICAgICAg
ICBtYXAuYWRkKGVudHJ5Lm5hbWUsIG1ha2VTaW1wbGVDb2xvcihlbnRyeS5yLCBlbnRyeS5nLCBl
bnRyeS5iLCA1MCkpOwogICAgICAgICByZXR1cm4gbWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQkocmV2
aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdl
T3ZlcmxheUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGlj
IENHQ29sb3JSZWYgY3JlYXRlQ29sb3IoZmxvYXQgciwgZgogc3RydWN0IEhpc3RvcmljTWVtb3J5
Q2F0ZWdvcnlJbmZvIHsKICAgICBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbygpIHsgfSAvLyBO
ZWVkZWQgZm9yIHN0ZDo6YXJyYXkuCiAKLSAgICBIaXN0b3JpY01lbW9yeUNhdGVnb3J5SW5mbyh1
bnNpZ25lZCBjYXRlZ29yeSwgU2ltcGxlQ29sb3IgY29sb3IsIFN0cmluZyBuYW1lLCBib29sIHN1
YmNhdGVnb3J5ID0gZmFsc2UpCisgICAgSGlzdG9yaWNNZW1vcnlDYXRlZ29yeUluZm8odW5zaWdu
ZWQgY2F0ZWdvcnksIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yLCBTdHJpbmcgbmFtZSwgYm9vbCBzdWJj
YXRlZ29yeSA9IGZhbHNlKQogICAgICAgICA6IG5hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAg
LCBjb2xvcihjYWNoZWRDR0NvbG9yKGNvbG9yKSkKICAgICAgICAgLCBpc1N1YmNhdGVnb3J5KHN1
YmNhdGVnb3J5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIENvbG9yJiBDb2xv
cjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCiBDb2xvciBDb2xvcjo6bGlnaHRlbmVkKCkgY29u
c3QKIHsKICAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KLSAgICBp
ZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJsYWNrKQorICAgIGlmIChpc1NpbXBsZSgp
ICYmIGFzU2ltcGxlKCkgPT0gU2ltcGxlQ29sb3IgeyBibGFjayB9KQogICAgICAgICByZXR1cm4g
bGlnaHRlbmVkQmxhY2s7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKQEAgLTEwMCw3ICsxMDAsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHRlbmVkKCkgY29u
c3QKIENvbG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUgdGhp
cyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUo
KSA9PSB3aGl0ZSkKKyAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IFNpbXBsZUNv
bG9yIHsgd2hpdGUgfSkKICAgICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCiAgICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CkBAIC0xNDksNyArMTQ5
LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdAogICAgIGlmIChpc1NlbWFu
dGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIHJldHVybiB7IG1ha2VTaW1wbGVD
b2xvcih0b1NSR0JBTG9zc3k8dWludDhfdD4oKSksIFNlbWFudGljIH07CisgICAgcmV0dXJuIHsg
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCksIFNlbWFudGljIH07CiB9CiAKIHN0ZDo6cGFpcjxDb2xv
clNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBv
bmVudHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNSArNTQsMTUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIENvbG9yKCkgeyB9CisgICAgQ29sb3IoKSA9IGRlZmF1bHQ7CiAKLSAgICBDb2xv
cihTaW1wbGVDb2xvciBjb2xvcikKKyAgICBDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKICAg
ICB7CiAgICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKICAgICB9CiAKICAgICBlbnVtIFNl
bWFudGljVGFnIHsgU2VtYW50aWMgfTsKLSAgICBDb2xvcihTaW1wbGVDb2xvciBjb2xvciwgU2Vt
YW50aWNUYWcpCisgICAgQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIFNlbWFudGljVGFnKQog
ICAgICAgICA6IENvbG9yKGNvbG9yKQogICAgIHsKICAgICAgICAgdGFnQXNTZW1hbnRpYygpOwpA
QCAtMTkzLDcgKzE5MywxMiBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAg
IHZvaWQgc2V0U2ltcGxlQ29sb3IoU2ltcGxlQ29sb3IpOworICAgIENvbG9yKFNpbXBsZUNvbG9y
IGNvbG9yKQorICAgICAgICA6IENvbG9yKGNvbG9yLmFzU1JHQkE8dWludDhfdD4oKSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBzZXRTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7CiAKICAg
ICB2b2lkIHRhZ0FzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3Mg
fD0gaXNTZW1hbnRpY1NpbXBsZUNvbG9yQml0OyB9CiAgICAgdm9pZCB0YWdBc1ZhbGlkKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7IH0KQEAg
LTMwMSwxMiArMzA2LDEyIEBAIGlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNF
eHQKIGlubGluZSBjb25zdCBTaW1wbGVDb2xvciBDb2xvcjo6YXNTaW1wbGUoKSBjb25zdAogewog
ICAgIEFTU0VSVChpc1NpbXBsZSgpKTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGFzU1JH
QkEoUGFja2VkOjpSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnNpbXBs
ZUNvbG9yQW5kRmxhZ3MgPj4gMzIpIH0pKTsKKyAgICByZXR1cm4gU2ltcGxlQ29sb3IgeyBhc1NS
R0JBKFBhY2tlZDo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5zaW1w
bGVDb2xvckFuZEZsYWdzID4+IDMyKSB9KSB9OwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0
U2ltcGxlQ29sb3IoU2ltcGxlQ29sb3Igc2ltcGxlQ29sb3IpCitpbmxpbmUgdm9pZCBDb2xvcjo6
c2V0U2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7Ci0gICAgbV9jb2xvckRhdGEu
c2ltcGxlQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNrZWQ6OlJHQkEg
eyBzaW1wbGVDb2xvci5hc1NSR0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZSkgPDwgMzI7CisgICAgbV9j
b2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihQYWNr
ZWQ6OlJHQkEgeyBjb2xvciB9LnZhbHVlKSA8PCAzMjsKICAgICB0YWdBc1ZhbGlkKCk7CiB9CiAK
QEAgLTMxNCwxNCArMzE5LDE0IEBAIGlubGluZSBib29sIENvbG9yOjppc0JsYWNrQ29sb3IoY29u
c3QgQ28KIHsKICAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4gY29s
b3IuYXNFeHRlbmRlZCgpLmlzQmxhY2soKTsKLSAgICByZXR1cm4gY29sb3IuYXNTaW1wbGUoKSA9
PSBDb2xvcjo6YmxhY2s7CisgICAgcmV0dXJuIGNvbG9yLmFzU2ltcGxlKCkgPT0gU2ltcGxlQ29s
b3IgeyBDb2xvcjo6YmxhY2sgfTsKIH0KIAogaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKICAg
ICAgICAgcmV0dXJuIGNvbG9yLmFzRXh0ZW5kZWQoKS5pc1doaXRlKCk7Ci0gICAgcmV0dXJuIGNv
bG9yLmFzU2ltcGxlKCkgPT0gQ29sb3I6OndoaXRlOworICAgIHJldHVybiBjb2xvci5hc1NpbXBs
ZSgpID09IFNpbXBsZUNvbG9yIHsgQ29sb3I6OndoaXRlIH07CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CkBAIC0zOTAsNyArMzk1LDcgQEAgT3B0aW9uYWw8Q29sb3I+IENvbG9yOjpkZWNv
ZGUoRGVjb2RlciYgZAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIENvbG9yIHsgbWFrZVNpbXBsZUNvbG9y
KGFzU1JHQkEoUGFja2VkOjpSR0JBIHsgdmFsdWUgfSkpIH07CisgICAgcmV0dXJuIENvbG9yIHsg
YXNTUkdCQShQYWNrZWQ6OlJHQkEgeyB2YWx1ZSB9KSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogCiAgICAg
YXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBj
b2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIFNpbXBsZUNvbG9yIHJlc3VsdDsK
KyAgICBTUkdCQTx1aW50OF90PiByZXN1bHQ7CiAgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFs
cGhhOyBhbHBoYSA8PSBlbmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKICAgICAg
ICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50IGNv
bG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKICAgICAgICAg
Ly8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kgaWYg
dGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgpAQCAtMTA3LDcgKzEwNyw3IEBAIENv
bG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYWxwaGEsIHByZW11bHRpcGxpZWRUby5hbHBoYSwgcHJv
Z3Jlc3MpCiAgICAgKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBs
aWVkKHByZW11bHRpcGxpZWRCbGVuZGVkKSk7CisgICAgcmV0dXJuIHVucHJlbXVsdGlwbGllZChw
cmVtdWx0aXBsaWVkQmxlbmRlZCk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5
KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKQEAg
LTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xv
CiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAg
YXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKKyAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PigKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9n
cmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3Jl
ZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9T
UkdCLmJsdWUsIHByb2dyZXNzKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBIZWxwZXIgdG8gYWxsb3cgY29udmVuaWVudCBzeW50YXggZm9yIHdvcmtpbmcgd2l0
aCBjb2xvciB0eXBlcy4KKy8vIGUuZy4gYXV0byB5ZWxsb3dXaXRoNTBQZXJjZW50QWxwaGEgPSBD
b2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDEyOCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+IHN0cnVjdCBDb2xvckJ1aWxkZXIgOiBwdWJsaWMgQ29sb3JUeXBlIHsKKyAgICBjb25z
dGV4cHIgQ29sb3JCdWlsZGVyKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCisgICAgICAgIDogQ29s
b3JUeXBlIHsgY29sb3IgfQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgQ29sb3JUeXBl
IGNvbG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBjb25zdGV4cHIgQ29sb3JCdWlsZGVyIGNvbG9yV2l0aEFscGhhKHVpbnQ4X3Qgb3ZlcnJpZGVB
bHBoYSkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8
ZGVjbHR5cGUoQ29sb3JUeXBlKCkuYWxwaGEpLCB1aW50OF90PiwgIk9ubHkgdWludDhfdCBiYXNl
ZCBjb2xvciB0eXBlcyBhcmUgc3VwcG9ydGVkLiIpOworCisgICAgICAgIENvbG9yQnVpbGRlciBj
b3B5ID0gKnRoaXM7CisgICAgICAgIGNvcHkuYWxwaGEgPSBvdmVycmlkZUFscGhhOworICAgICAg
ICByZXR1cm4gY29weTsKKyAgICB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2NDEzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgaW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShmbAogCiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShp
bnQgYykKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChjLCAw
LCAweEZGKSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoYywgMCwgMjU1KTsKIH0KIAogY29uc3Rl
eHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGZsb2F0IGYpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2
NDEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxNiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkNvbG9yQnVpbGRlci5oIgogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2lu
Y2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNpbXBsZUNvbG9yIHsKIHB1YmxpYzoKLSAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IoKSA6IG1f
dmFsdWUgeyB9IHsgfQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50OF90IHIsIHVpbnQ4
X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpIDogbV92YWx1ZSB7IHIsIGcsIGIsIGEgfSB7IH0K
KyAgICBjb25zdGV4cHIgZXhwbGljaXQgU2ltcGxlQ29sb3IoU1JHQkE8dWludDhfdD4gdmFsdWUp
IDogbV92YWx1ZSB7IHZhbHVlIH0geyB9CiAKICAgICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNv
bXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuYWxwaGE7IH0KICAgICBjb25zdGV4cHIg
ZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRvQ29t
cG9uZW50RmxvYXQobV92YWx1ZS5hbHBoYSk7IH0KQEAgLTc2LDE3ICs3NSwxNCBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50OF90IHIs
IHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpIDogbV92YWx1ZSB7IHIsIGcsIGIsIGEg
fSB7IH0KKwogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fdmFsdWUgeyAwLCAwLCAwLCAwIH07CiB9Owog
CiBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKIGJvb2wgb3BlcmF0
b3IhPShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOwogCi1jb25zdGV4cHIgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpOwotY29uc3RleHByIFNpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci1jb25zdGV4
cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7Ci1T
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKICAgICBy
ZXR1cm4gYS5hc1NSR0JBPHVpbnQ4X3Q+KCkgPT0gYi5hc1NSR0JBPHVpbnQ4X3Q+KCk7CkBAIC05
NywyNCArOTMsMjkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaQog
ICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2lt
cGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mIHNSR0JBKQorY29uc3RleHByIENvbG9yQnVp
bGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIp
OworY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK2NvbnN0ZXhwciBDb2xvckJ1aWxkZXI8U1JH
QkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihTUkdCQTx1aW50OF90Pik7CitDb2xvckJ1aWxk
ZXI8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsK
KworY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9y
KGludCByLCBpbnQgZywgaW50IGIpCiB7Ci0gICAgcmV0dXJuIHsgc1JHQkEucmVkLCBzUkdCQS5n
cmVlbiwgc1JHQkEuYmx1ZSwgc1JHQkEuYWxwaGEgfTsKKyAgICByZXR1cm4gY2xhbXBUb0NvbXBv
bmVudEJ5dGVzPFNSR0JBPihyLCBnLCBiLCAweEZGKTsKIH0KIAotaW5saW5lIFNpbXBsZUNvbG9y
IG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIHNSR0JBKQorY29uc3RleHByIENv
bG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKQogewotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29udmVydFRvQ29t
cG9uZW50Qnl0ZXMoc1JHQkEpKTsKKyAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNS
R0JBPihyLCBnLCBiLCBhKTsKIH0KIAotY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVD
b2xvcihpbnQgciwgaW50IGcsIGludCBiKQorY29uc3RleHByIENvbG9yQnVpbGRlcjxTUkdCQTx1
aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHNSR0JBKQogewotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBnLCBi
LCAweEZGKSk7CisgICAgcmV0dXJuIHNSR0JBOwogfQogCi1jb25zdGV4cHIgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoraW5saW5lIENvbG9y
QnVpbGRlcjxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0
PiYgc1JHQkEpCiB7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGEpKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXMoc1JHQkEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAy
NjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRpc2Nv
bm5lY3QoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBtYWtlU2ltcGxlQ29s
b3JGcm9tQVJHQkNGQXJyYXkoQ0ZBcnJheVJlZiBjb2xvckFycmF5KQorc3RhdGljIE9wdGlvbmFs
PFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tQVJHQkNGQXJyYXkoQ0ZBcnJheVJl
ZiBjb2xvckFycmF5KQogewogICAgIGlmIChDRkFycmF5R2V0Q291bnQoY29sb3JBcnJheSkgPCA0
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZp
c2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTU0LDcgKzI1NTQsNyBAQCBzdGF0
aWMgQ29sb3IgY29udGVudHNMYXllckRlYnVnQm9yZGVyQ29sCiBzdGF0aWMgY29uc3QgZmxvYXQg
Y2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVyRGVidWdC
b3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93aW5nQm9y
ZGVycyA/IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyMiwgMjUxKSA6IENvbG9yKCk7CisgICAgcmV0
dXJuIHNob3dpbmdCb3JkZXJzID8gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29s
b3IgeyB9OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3Jz
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwCShyZXZpc2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBSZXRh
aW5QdHI8Q0dDb2xvclJlZj4gVGlueUxSVUNhY2hlUG9saWN5CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKENHQ29s
b3JSZWYgY29sb3IpCitzdGF0aWMgU1JHQkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvbUNH
Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAt
IG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCiAKQEAgLTEzMCwxNSArMTMwLDE1IEBAIENH
Q29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY28KIHsKICAgICBpZiAoY29sb3Iu
aXNTaW1wbGUoKSkgewogICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzU2lt
cGxlKCkuYXNTUkdCQTx1aW50OF90PigpIH0udmFsdWUpIHsKLSAgICAgICAgY2FzZSBQYWNrZWQ6
OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnQuYXNTUkdCQTx1aW50OF90PigpIH0udmFsdWU6IHsK
KyAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTog
ewogICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgdHJhbnNwYXJlbnRDR0NvbG9yID0gbGVh
a0NHQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50Q0dDb2xvcjsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjpibGFjay5hc1NS
R0JBPHVpbnQ4X3Q+KCkgfS52YWx1ZTogeworICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENv
bG9yOjpibGFjayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiBibGFj
a0NHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gYmxhY2tD
R0NvbG9yOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6Ondo
aXRlLmFzU1JHQkE8dWludDhfdD4oKSB9LnZhbHVlOiB7CisgICAgICAgIGNhc2UgUGFja2VkOjpS
R0JBIHsgQ29sb3I6OndoaXRlIH0udmFsdWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBDR0NvbG9y
UmVmIHdoaXRlQ0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJldHVy
biB3aGl0ZUNHQ29sb3I7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2NDEzMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkK
ICAgICByZXR1cm4gdXNlT2xkQXF1YUZvY3VzUmluZ0NvbG9yOwogfQogCi1zdGF0aWMgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCitzdGF0aWMg
U1JHQkE8dWludDhfdD4gbWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3Ip
CiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Ig
c3BhY2VzLgogCkBAIC0xMjQsMTUgKzEyNCwxNSBAQCBOU0NvbG9yICpuc0NvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKICAgICBpZiAoY29sb3IuaXNTaW1wbGUoKSkgewogICAgICAgICBzd2l0
Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzU2ltcGxlKCkuYXNTUkdCQTx1aW50OF90PigpIH0u
dmFsdWUpIHsKLSAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnQu
YXNTUkdCQTx1aW50OF90PigpIH0udmFsdWU6IHsKKyAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEg
eyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5TQ29s
b3IgKmNsZWFyQ29sb3IgPSBbW05TQ29sb3IgY29sb3JXaXRoU1JHQlJlZDowIGdyZWVuOjAgYmx1
ZTowIGFscGhhOjBdIHJldGFpbl07CiAgICAgICAgICAgICByZXR1cm4gY2xlYXJDb2xvcjsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjpibGFjay5hc1NSR0JB
PHVpbnQ4X3Q+KCkgfS52YWx1ZTogeworICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9y
OjpibGFjayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgTlNDb2xvciAqYmxhY2tDb2xv
ciA9IFtbTlNDb2xvciBjb2xvcldpdGhTUkdCUmVkOjAgZ3JlZW46MCBibHVlOjAgYWxwaGE6MV0g
cmV0YWluXTsKICAgICAgICAgICAgIHJldHVybiBibGFja0NvbG9yOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OndoaXRlLmFzU1JHQkE8dWludDhfdD4oKSB9
LnZhbHVlOiB7CisgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OndoaXRlIH0udmFs
dWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBOU0NvbG9yICp3aGl0ZUNvbG9yID0gW1tOU0NvbG9y
IGNvbG9yV2l0aFNSR0JSZWQ6MSBncmVlbjoxIGJsdWU6MSBhbHBoYToxXSByZXRhaW5dOwogICAg
ICAgICAgICAgcmV0dXJuIHdoaXRlQ29sb3I7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwCShyZXZpc2lvbiAyNjQxMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDcgKzMxOCw3
IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcygKIAogICAgIGJveFRv
cCArPSBib3hTaXplICsgMjsKICAgICBib3hMZWZ0ID0gYm94U2l6ZTsKLSAgICBjb25zdGV4cHIg
U2ltcGxlQ29sb3IgYm94Q29sb3JzW10gPSB7IENvbG9yOjp3aGl0ZSwgQ29sb3I6OnllbGxvdywg
Q29sb3I6OmN5YW4sIGRhcmtHcmVlbiwgbWFnZW50YSwgcmVkLCBibHVlIH07CisgICAgY29uc3Rl
eHByIFNSR0JBPHVpbnQ4X3Q+IGJveENvbG9yc1tdID0geyBDb2xvcjo6d2hpdGUsIENvbG9yOjp5
ZWxsb3csIENvbG9yOjpjeWFuLCBkYXJrR3JlZW4sIG1hZ2VudGEsIHJlZCwgYmx1ZSB9OwogICAg
IGZvciAoYXV0byYgYm94Q29sb3IgOiBib3hDb2xvcnMpIHsKICAgICAgICAgY29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoYm94TGVmdCwgYm94VG9wLCBib3hTaXplICsgMSwgYm94U2l6ZSArIDEp
LCBib3hDb2xvcik7CiAgICAgICAgIGJveExlZnQgKz0gYm94U2l6ZSArIDE7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNp
b24gMjY0MTMxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOTksNyArMzA5OSw3IEBAIE9wdGlvblNldDxSZW5k
ZXJMYXllcjo6UGFpbnRMYXllckZsYWc+IFIKIHN0cnVjdCBQYXR0ZXJuRGVzY3JpcHRpb24gewog
ICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgIEZsb2F0U2l6ZSBwaGFzZTsKLSAgICBTaW1wbGVD
b2xvciBmaWxsQ29sb3I7CisgICAgU1JHQkE8dWludDhfdD4gZmlsbENvbG9yOwogfTsKIAogc3Rh
dGljIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuRm9yRGVzY3JpcHRpb24oUGF0dGVybkRlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uLCBGbG9hdFNpemUgY29udGVudE9mZnNldCwgR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHJldmlzaW9uIDI2NDEzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIENvbG9y
IFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybVRleHRTZWFyY2gKICAgICByZXR1cm4gY29sb3JGcm9t
TlNDb2xvcihbTlNDb2xvciBmaW5kSGlnaGxpZ2h0Q29sb3JdKTsKIH0KIAotc3RhdGljIFNpbXBs
ZUNvbG9yIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQorc3RhdGljIFNSR0JBPHVpbnQ4X3Q+IG1lbnVC
YWNrZ3JvdW5kQ29sb3IoKQogewogICAgIFJldGFpblB0cjxOU0JpdG1hcEltYWdlUmVwPiBvZmZz
Y3JlZW5SZXAgPSBhZG9wdE5TKFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRt
YXBEYXRhUGxhbmVzOm5pbCBwaXhlbHNXaWRlOjEgcGl4ZWxzSGlnaDoxCiAgICAgICAgIGJpdHNQ
ZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFuYXI6Tk8gY29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQgYml0c1BlclBp
eGVsOjMyXSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjQxMzEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNy0wOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUGFydCAzIG9mIFNpbXBsZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90
PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252ZXJnZSB0aGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQwODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorICAgICAgICBVcGRhdGUgdG8gYWNjb3VudCBmb3IgbWFrZVNpbXBsZUNvbG9yIG5vIGxvbmdl
ciByZXR1cm5pbmcgYW4gb2JqZWN0IHRoYXQgaGFzIGEKKyAgICAgICAgYXNTUkdCQTx1aW50OF90
PigpIGZ1bmN0aW9uIChpdCBpcyBhbHJlYWR5IGEgU1JHQkE8dWludDhfdD4pLgorCiAyMDIwLTA3
LTA4ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29j
b2FdIE1ha2UgaXQgcG9zc2libGUgdG8gZXN0YWJsaXNoIGRpcmVjdCBYUEMgY29ubmVjdGlvbnMg
YmV0d2VlbiBXZWJLaXQgcHJvY2Vzc2VzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjQxMzEpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMywyMiArMjEzLDIxIEBAIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBFWFBF
Q1RfRkxPQVRfRVEoQ29sb3IoQ29sb3I6OmJsYWNrKS5sdW1pbmFuY2UoKSwgMCk7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKENvbG9yKENvbG9yOjp3aGl0ZSkubHVtaW5hbmNlKCksIDEpOwogCi0gICAg
YXV0byBjID0gbWFrZVNpbXBsZUNvbG9yKDg1LCA5MCwgMTYwKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoQ29sb3IoYykubHVtaW5hbmNlKCksIDAuMTE3ODE2OTIpOworICAgIGF1dG8gY0NvbXBvbmVu
dHMgPSBtYWtlU2ltcGxlQ29sb3IoODUsIDkwLCAxNjApOworICAgIEVYUEVDVF9GTE9BVF9FUShD
b2xvcihjQ29tcG9uZW50cykubHVtaW5hbmNlKCksIDAuMTE3ODE2OTIpOwogCi0gICAgYXV0byBj
Q29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90PigpOwogICAgIEVYUEVDVF9FUShjQ29tcG9u
ZW50cy5yZWQsIDg1KTsKICAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuZ3JlZW4sIDkwKTsKICAg
ICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKIAotICAgIGF1dG8gY0xpZ3RlbmVk
ID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjTGlndGVuZWQpKS5sdW1pbmFuY2Uo
KSwgMC4yOTE2ODgwOCk7CisgICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjQ29tcG9uZW50cyku
bGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KENvbG9yKGNMaWd0ZW5lZCkubHVtaW5hbmNlKCksIDAuMjkxNjg4MDgpOwogICAgIEVYUEVDVF9F
UShjTGlndGVuZWQucmVkLCAxMzApOwogICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW4sIDEz
Nyk7CiAgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAyNDQpOwogCi0gICAgYXV0byBjRGFy
a2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwotICAg
IEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0RhcmtlbmVkKSkubHVtaW5h
bmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGNDb21wb25l
bnRzKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9B
VF9FUShDb2xvcihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7CiAgICAgRVhQ
RUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKICAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVu
LCA0Myk7CiAgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlLCA3Nik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>