<?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>213820</bug_id>
          
          <creation_ts>2020-06-30 16:27:57 -0700</creation_ts>
          <short_desc>Split Color serialization out of Color classes</short_desc>
          <delta_ts>2020-07-01 10:45:10 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=213841</see_also>
          <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>aakash_jain</cc>
    
    <cc>annulen</cc>
    
    <cc>calvaris</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>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1667779</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 16:27:57 -0700</bug_when>
    <thetext>Split Color serialization out of Color classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667786</commentid>
    <comment_count>1</comment_count>
      <attachid>403251</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 16:42:07 -0700</bug_when>
    <thetext>Created attachment 403251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667791</commentid>
    <comment_count>2</comment_count>
      <attachid>403252</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 17:02:33 -0700</bug_when>
    <thetext>Created attachment 403252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667795</commentid>
    <comment_count>3</comment_count>
      <attachid>403251</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 17:12:08 -0700</bug_when>
    <thetext>Comment on attachment 403251
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Now all color serialization calls one of the following three functions, depending on need:
&gt; +
&gt; +            - serializationForCSS(...)
&gt; +            - serializationForHTML(...)
&gt; +            - serializationForRenderTreeAsText(...)

Note that I moved parsing, the other side of this, into CSS entirely. Or maybe I had planned to do it and never landed the patch?

You chose &quot;serialization [of color]&quot; rather than &quot;[color] serialized&quot;. I think I like your choice better than that alternative, but I am not sure.

&gt; Source/WebCore/ChangeLog:17
&gt; +        These are overload for all three Color classes (Color, SimpleColor and ExtendedColor) to

overloaded

&gt; Source/WebCore/html/canvas/CanvasStyle.h:113
&gt;      auto&amp; color = WTF::holds_alternative&lt;Color&gt;(m_style) ? WTF::get&lt;Color&gt;(m_style) : WTF::get&lt;CMYKAColor&gt;(m_style).colorConvertedToSRGBA;
&gt; -    return color.serialized();
&gt; +    return serializationForHTML(color);

Maybe this should be a one-liner now.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:360
&gt; +    // FIXME: Seems like this should be using serializationForCSS instead?

Triumph of the good function names!

&gt; Source/WebCore/page/DragController.cpp:1448
&gt; -        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, Color(Color::black).colorWithAlpha(0.05).cssText());
&gt; +        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, serializationForCSS(Color::black.colorWithAlpha(13)));

Kinda like how the old code was clearly 5%, seems like we lost a tiny bit here, although runtime-wise way better to have this constant-folded. Maybe we should take the constant folding even further and write &quot;rgba(0, 0, 0, 0.05)&quot;_s.

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:45
&gt; +static std::array&lt;char, 4&gt; fractionDigitsForFractionalAlphaValue(uint8_t alpha)

Pretty proud of this function.

&gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:119
&gt; +String serializationForHTML(const ExtendedColor&amp; color)
&gt; +{
&gt; +    return serializationForCSS(color);
&gt; +}
&gt; +
&gt; +String serializationForRenderTreeAsText(const ExtendedColor&amp; color)
&gt; +{
&gt; +    return serializationForCSS(color);
&gt; +}

Consider moving these function bodies to the header to facilitate additional inlining?

&gt; Source/WebCore/platform/graphics/ColorSerialization.h:41
&gt; +WEBCORE_EXPORT String serializationForCSS(const SimpleColor&amp;);
&gt; +WEBCORE_EXPORT String serializationForHTML(const SimpleColor&amp;);
&gt; +WEBCORE_EXPORT String serializationForRenderTreeAsText(const SimpleColor&amp;);

Why not take SimpleColor by value instead of by reference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667796</commentid>
    <comment_count>4</comment_count>
      <attachid>403252</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 17:12:29 -0700</bug_when>
    <thetext>Comment on attachment 403252
Patch

r=me, see my comments on the older version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667813</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 18:47:30 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 403251 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403251&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        Now all color serialization calls one of the following three functions, depending on need:
&gt; &gt; +
&gt; &gt; +            - serializationForCSS(...)
&gt; &gt; +            - serializationForHTML(...)
&gt; &gt; +            - serializationForRenderTreeAsText(...)
&gt; 
&gt; Note that I moved parsing, the other side of this, into CSS entirely. Or
&gt; maybe I had planned to do it and never landed the patch?

You moved them. I kept these in platform/ for now because of the three variants. They likely don&apos;t make sense there long term, but I couldn&apos;t decide on which directory they should go in (or if they should be split up). 

&gt; 
&gt; You chose &quot;serialization [of color]&quot; rather than &quot;[color] serialized&quot;. I
&gt; think I like your choice better than that alternative, but I am not sure.

The naming is entirely stolen from SimpleColor. 

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        These are overload for all three Color classes (Color, SimpleColor and ExtendedColor) to
&gt; 
&gt; overloaded
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasStyle.h:113
&gt; &gt;      auto&amp; color = WTF::holds_alternative&lt;Color&gt;(m_style) ? WTF::get&lt;Color&gt;(m_style) : WTF::get&lt;CMYKAColor&gt;(m_style).colorConvertedToSRGBA;
&gt; &gt; -    return color.serialized();
&gt; &gt; +    return serializationForHTML(color);
&gt; 
&gt; Maybe this should be a one-liner now.

Good call.

&gt; 
&gt; &gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:360
&gt; &gt; +    // FIXME: Seems like this should be using serializationForCSS instead?
&gt; 
&gt; Triumph of the good function names!
&gt; 
&gt; &gt; Source/WebCore/page/DragController.cpp:1448
&gt; &gt; -        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, Color(Color::black).colorWithAlpha(0.05).cssText());
&gt; &gt; +        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, serializationForCSS(Color::black.colorWithAlpha(13)));
&gt; 
&gt; Kinda like how the old code was clearly 5%, seems like we lost a tiny bit
&gt; here, although runtime-wise way better to have this constant-folded. Maybe
&gt; we should take the constant folding even further and write &quot;rgba(0, 0, 0,
&gt; 0.05)&quot;_s.

I agree on both points. I think I am going to have to write a constexpr std::lround() myself, as https://wg21.link/p0533r6 was not accepted into c++20. But I think that may also have to wait for c++20 anyway, as lround() no doubt requires bitcasting the float to a uint32_t, which is something that you can&apos;t do in a constexpr until c++20.

I maybe could write a really dumb version, that only guaranteed to work for values between 0 - 255:

constexpr long dumb_lroundf(float x)
{
    long truncatedToLong = static_cast&lt;long&gt;(x);
    float castedBackToFloat = static_cast&lt;float&gt;(truncatedToLong);
 
    if (castedBackToFloat == x)
        return truncatedToLong;

    float remainder = x - castedBackToFloat;
    if (remainder &gt;= 0.5)
        return truncatedToLong + 1;
    return truncatedToLong;
}

That seems to work with my test cases. Of course, I don&apos;t know if we can conditionally use a constexpr function like this until we have support for std::is_constant_evaluated(), which is also c++ 20. Will keep thinking


Also do kinda want to write the constexpr parser for &quot;rgba(0, 0, 0, 0.05&quot;_color when I figure out the rounding.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:45
&gt; &gt; +static std::array&lt;char, 4&gt; fractionDigitsForFractionalAlphaValue(uint8_t alpha)
&gt; 
&gt; Pretty proud of this function.

* chefs kiss *

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.cpp:119
&gt; &gt; +String serializationForHTML(const ExtendedColor&amp; color)
&gt; &gt; +{
&gt; &gt; +    return serializationForCSS(color);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +String serializationForRenderTreeAsText(const ExtendedColor&amp; color)
&gt; &gt; +{
&gt; &gt; +    return serializationForCSS(color);
&gt; &gt; +}
&gt; 
&gt; Consider moving these function bodies to the header to facilitate additional
&gt; inlining?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorSerialization.h:41
&gt; &gt; +WEBCORE_EXPORT String serializationForCSS(const SimpleColor&amp;);
&gt; &gt; +WEBCORE_EXPORT String serializationForHTML(const SimpleColor&amp;);
&gt; &gt; +WEBCORE_EXPORT String serializationForRenderTreeAsText(const SimpleColor&amp;);
&gt; 
&gt; Why not take SimpleColor by value instead of by reference?

Oh good call.


Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667815</commentid>
    <comment_count>6</comment_count>
      <attachid>403258</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 18:58:28 -0700</bug_when>
    <thetext>Created attachment 403258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667847</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-30 22:53:25 -0700</bug_when>
    <thetext>Committed r263788: &lt;https://trac.webkit.org/changeset/263788&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403258.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667848</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-30 22:54:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/64972755&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667911</commentid>
    <comment_count>9</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-01 06:44:11 -0700</bug_when>
    <thetext>(In reply to EWS from comment #7)
&gt; Committed r263788: &lt;https://trac.webkit.org/changeset/263788&gt;
This seems to have broken windows build. Tracked in https://bugs.webkit.org/show_bug.cgi?id=213841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667923</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-01 07:26:55 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #9)
&gt; (In reply to EWS from comment #7)
&gt; &gt; Committed r263788: &lt;https://trac.webkit.org/changeset/263788&gt;
&gt; This seems to have broken windows build. Tracked in
&gt; https://bugs.webkit.org/show_bug.cgi?id=213841

Fixing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667977</commentid>
    <comment_count>11</comment_count>
      <attachid>403251</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 09:52:32 -0700</bug_when>
    <thetext>Comment on attachment 403251
Patch

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

&gt;&gt; Source/WebCore/page/DragController.cpp:1448
&gt;&gt; +        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, serializationForCSS(Color::black.colorWithAlpha(13)));
&gt; 
&gt; Kinda like how the old code was clearly 5%, seems like we lost a tiny bit here, although runtime-wise way better to have this constant-folded. Maybe we should take the constant folding even further and write &quot;rgba(0, 0, 0, 0.05)&quot;_s.

I think you misunderstood my suggestions here. I suggest we come back here and change it to this:

    image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, &quot;rgba(0, 0, 0, 0.05)&quot;_s);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668000</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-01 10:39:04 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 403251 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403251&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/DragController.cpp:1448
&gt; &gt;&gt; +        image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, serializationForCSS(Color::black.colorWithAlpha(13)));
&gt; &gt; 
&gt; &gt; Kinda like how the old code was clearly 5%, seems like we lost a tiny bit here, although runtime-wise way better to have this constant-folded. Maybe we should take the constant folding even further and write &quot;rgba(0, 0, 0, 0.05)&quot;_s.
&gt; 
&gt; I think you misunderstood my suggestions here. I suggest we come back here
&gt; and change it to this:
&gt; 
&gt;     image-&gt;setInlineStyleProperty(CSSPropertyBackgroundColor, &quot;rgba(0, 0, 0,
&gt; 0.05)&quot;_s);

Oh, heh. Yeah. That is of course much more reasonable than the current code :). Makes me actually want to go further, and see if there is a way we can just create the parsed CSSProperty, why parse it at all!

(I still do want to write a constexpr color parser at some point, just because)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668005</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 10:45:10 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #12)
&gt; Makes me actually want to go further, and see if there is a way we can
&gt; just create the parsed CSSProperty, why parse it at all!

I feel the same. This is a recurring pattern in WebKit, creating content that we then parse. And maybe sometimes it’s the best way, but probably not often!

&gt; (I still do want to write a constexpr color parser at some point, just
&gt; because)

Yes, quite relevant to the above. Let people feel free to use markup as long as it’s parsed at compile time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403251</attachid>
            <date>2020-06-30 16:42:07 -0700</date>
            <delta_ts>2020-06-30 18:47:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213820-20200630164206.patch</filename>
            <type>text/plain</type>
            <size>63710</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA2LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBDb2xvciBzZXJpYWxpemF0
aW9uIG91dCBvZiBDb2xvciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlIGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIHJlbGF0ZWQgZnVu
Y3Rpb25zIG91dCBvZiB0aGUgQ29sb3IgZmFtaWx5CisgICAgICAgIG9mIGNsYXNzZXMsIGFuZCBp
bnRvIGEgc3RhbmRhbG9uZSBDb2xvclNlcmlhbGl6YXRpb24uaAorICAgICAgICAKKyAgICAgICAg
Tm93IGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIGNhbGxzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRo
cmVlIGZ1bmN0aW9ucywgZGVwZW5kaW5nIG9uIG5lZWQ6CisKKyAgICAgICAgICAgIC0gc2VyaWFs
aXphdGlvbkZvckNTUyguLi4pCisgICAgICAgICAgICAtIHNlcmlhbGl6YXRpb25Gb3JIVE1MKC4u
LikKKyAgICAgICAgICAgIC0gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoLi4uKQor
CisgICAgICAgIFRoZXNlIGFyZSBvdmVybG9hZCBmb3IgYWxsIHRocmVlIENvbG9yIGNsYXNzZXMg
KENvbG9yLCBTaW1wbGVDb2xvciBhbmQgRXh0ZW5kZWRDb2xvcikgdG8KKyAgICAgICAgYWxsb3cg
ZWFzeSB1c2Ugd2l0aG91dCBuZWNlc3NhcmlseSBuZWVkaW5nIHRvIGNvbnN0cnVjdCBhbm90aGVy
IHR5cGUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
QWRkIG5ldyBmaWxlcy4KKyAgICAKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmZvcm1hdE51bWJlckZvckN1
c3RvbUNTU1RleHQgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6aW52ZXJzZVRyYW5zZm9ybUNvbG9ySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVz
KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAgICog
aHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6ZGlkQ2hvb3NlQ29sb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Y29sb3IgY29uc3Qp
OgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTiBjb25z
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudCk6Cisg
ICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y29sb3JQcm9wZXJ0eUNT
UyBjb25zdCk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJl
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXplZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y3NzVGV4dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1Rl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25G
b3JIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
ZGVkQ29sb3I6OmNzc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9w
ZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmlj
Q3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNDdWU6OnRvSlNPTlN0cmlu
ZyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY2ltYWxEaWdpdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9y
Q1NTIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29k
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlUmVuZGVyU1ZHVGV4dEJveCk6Cisg
ICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlld0Jh
c2VCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpoaWdobGln
aHRQc2V1ZG9FbGVtZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzeXN0
ZW1Db2xvckZvckNTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Zm9jdXNS
aW5nQ29sb3IpOgorICAgICAgICBBZG9wdCBuZXcgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisK
IDIwMjAtMDYtMzAgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvZGUgY2xlYW51cCBpbiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGFuZCBBWElz
b2xhdGVkVHJlZS5oLgpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjM3NTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYg
KzEwODUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZp
c2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkwNyw2ICsxOTA3LDcgQEAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHku
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQ0LDYgKzIzNDQsNyBAQAogCQk3
Q0NFQkZDMDFERDhGNkFCMDAyQzQwQjggLyogU1ZHTGVuZ3RoVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTU4RDUzMUREN0IwOTMwMDEyODU1
MiAvKiBTVkdMZW5ndGhWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBF
MkI1MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJN0NEMEUy
QkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaCAqLzsgfTsKKwkJN0NEMUU2OTMyNEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2Vy
aWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NEMUU2OTEyNEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRDQ5NENEMUE4
NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Q0OTRDQjFBODZFQjFEMDAwQTg3RUMgLyogUmVu
ZGVyQXR0YWNobWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdDRDU4REZCMUY5NTY1QTUwMDExMjc5MSAvKiBTZXR0aW5ncy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFQjU3RTkxRjk1NjUxNTAw
MDk3QUVDIC8qIFNldHRpbmdzLmggKi87IH07CiAJCTdDRDU4REZEMUY5NTY1QTgwMDExMjc5MSAv
KiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0VCNTdFQTFGOTU2NTE1MDAwOTdBRUMgLyogU2V0dGluZ3MuY3BwICovOyB9OwpAQCAt
MTAxOTEsNiArMTAxOTIsOCBAQAogCQk3Q0QwRTJCQzFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRT
aWduYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NEMEUyQkQxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEFib3J0U2lnbmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NEMEUyQkUxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBBYm9ydFNpZ25hbC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDFFNjkx
MjRBQkY2MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29sb3JTZXJpYWxpemF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRDFF
NjkyMjRBQkY2MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29sb3JTZXJpYWxpemF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NEMzQ0MEQxRjMxMDgzNjAwMERDRDQ5IC8qIE11dGF0aW9uQ2FsbGJhY2suaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IE11dGF0aW9uQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0QzNDQxMTFGMzEwOEREMDAwRENENDkgLyogSlNNdXRhdGlvbkNh
bGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0QzNDQxMjFGMzEwOEUyMDAwRENENDkgLyogSlNNdXRhdGlv
bkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTXV0YXRpb25DYWxsYmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTQ5Niw2ICsyNTQ5OSw4IEBACiAJCQkJ
N0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5IC8qIENvbG9yQ29tcG9uZW50cy5oICovLAogCQkJCTMx
MDNCN0RFMURCMDE1NTYwMDhCQjg5MCAvKiBDb2xvckhhc2guaCAqLywKIAkJCQk3Q0FDNkFFODI0
N0YwODIwMDBFNjFENTkgLyogQ29sb3JNYXRyaXguaCAqLywKKwkJCQk3Q0QxRTY5MjI0QUJGNjI0
MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmNwcCAqLywKKwkJCQk3Q0QxRTY5MTI0QUJG
NjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmggKi8sCiAJCQkJOTM4MkRGNTcxMEE4
RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQk3QzAyOUM2RDI0OTNDOEY4MDAy
NjgyMDQgLyogQ29sb3JUeXBlcy5oICovLAogCQkJCTBGRTZDNzZCMUZCRkI3QTYwMDI1QzA1MyAv
KiBDb2xvclV0aWxpdGllcy5jcHAgKi8sCkBAIC0zMDA3NCw2ICszMDA3OSw3IEBACiAJCQkJQ0U1
MTY5RTcyMUYxQjg0NzAwRUE0Rjc4IC8qIENvbG9ySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
REUzQTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDQUM2QUU5MjQ3RjA4MkYwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJN0NEMUU2OTMyNEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM4MkRGNTgxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDI5QzZFMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5
cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBRjY2QjIzQkZDMzlFMDA0MDMwREEgLyogQ29s
b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFs
dWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5o
IgogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC0xMDg2LDcgKzEwODcsNyBA
QCBBTFdBWVNfSU5MSU5FIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6CiAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1FVQUQ6CiAgICAgICAgIHJldHVybiBxdWFkVmFsdWUoKS0+Y3NzVGV4dCgp
OwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKLSAgICAgICAgcmV0dXJuIGNv
bG9yKCkuY3NzVGV4dCgpOworICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xv
cigpKTsKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEFJUjoKICAgICAgICAgcmV0dXJuIHBh
aXJWYWx1ZSgpLT5jc3NUZXh0KCk7CiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTEM6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAyNjM3
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRl
ICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAi
RWRpdG9yLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBAIC0xNjMxLDcgKzE2MzIsNyBAQCBS
ZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmludmVyc2VUCiAgICAgYXV0byBpbnZlcnRl
ZENvbG9yID0gWyZdKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgewogICAgICAgICBDb2xvciBu
ZXdDb2xvciA9IGNzc1ZhbHVlVG9Db2xvcihleHRyYWN0UHJvcGVydHlWYWx1ZSgqbV9tdXRhYmxl
U3R5bGUsIHByb3BlcnR5SUQpLmdldCgpKTsKICAgICAgICAgY29sb3JGaWx0ZXIuaW52ZXJzZVRy
YW5zZm9ybUNvbG9yKG5ld0NvbG9yKTsKLSAgICAgICAgc3R5bGVXaXRoSW52ZXJ0ZWRDb2xvcnMt
Pm1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdDb2xvci5jc3NUZXh0
KCkpOworICAgICAgICBzdHlsZVdpdGhJbnZlcnRlZENvbG9ycy0+bV9tdXRhYmxlU3R5bGUtPnNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHNlcmlhbGl6YXRpb25Gb3JDU1MobmV3Q29sb3IpKTsKICAg
ICB9OwogCiAgICAgaWYgKGNvbG9yKQpAQCAtMTgwNyw3ICsxODA4LDcgQEAgdm9pZCBTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdQogICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKSB7CiAgICAgICAgIGF1dG8gY29sb3IgPSB0ZXh0Q29s
b3JGcm9tU3R5bGUoc3R5bGUpOwogICAgICAgICBpZiAoY29sb3IuaXNPcGFxdWUoKSkgewotICAg
ICAgICAgICAgbV9hcHBseUZvbnRDb2xvciA9IGNvbG9yLnNlcmlhbGl6ZWQoKTsKKyAgICAgICAg
ICAgIG1fYXBwbHlGb250Q29sb3IgPSBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvcik7CiAgICAg
ICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0JKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW1wb3J0ICJBdHRyLmgiCiAjaW1wb3J0ICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCisjaW1wb3J0
ICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbXBvcnQgIkVkaXRpbmcuaCIKICNpbXBvcnQgIkVs
ZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJFbGVtZW50VHJhdmVyc2FsLmgiCkBA
IC02MjgsNyArNjI5LDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UgogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcih0b1NSR0JBKGhzbGEpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9y
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1
ZUN1cnJlbnRjb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgdW5k
ZXJsaW5lQ29sb3Iuc2VyaWFsaXphdGlvbkZvckNTUygpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbkNvbG9yLCBzZXJpYWxpemF0aW9uRm9yQ1NTKHVuZGVybGluZUNvbG9yKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjYzNzU4
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkhUTUxEYXRhTGlzdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgpAQCAtMjE5LDcgKzIyMCw3IEBA
IHZvaWQgQ29sb3JJbnB1dFR5cGU6OmRpZENob29zZUNvbG9yKGNvbnMKICAgICBpZiAoZWxlbWVu
dCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSB8fCBjb2xvciA9PSB2YWx1ZUFzQ29sb3IoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEV2ZW50UXVldWVTY29wZSBzY29wZTsKLSAgICBlbGVtZW50
KCktPnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgZWxlbWVu
dCgpLT5zZXRWYWx1ZUZyb21SZW5kZXJlcihzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvcikpOwog
ICAgIHVwZGF0ZUNvbG9yU3dhdGNoKCk7CiAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250
cm9sQ2hhbmdlRXZlbnQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lv
biAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRl
ICJDYW52YXNQYXR0ZXJuLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5j
bHVkZSAiRE9NTWF0cml4LmgiCiAjaW5jbHVkZSAiRE9NTWF0cml4MkRJbml0LmgiCiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgpAQCAtNjI2LDcgKzYyNyw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNoYWRvd0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3Rh
dGUoKS5zaGFkb3dDb2xvci5zZXJpYWxpemVkKCk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25G
b3JIVE1MKHN0YXRlKCkuc2hhZG93Q29sb3IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgJKHJldmlzaW9uIDI2
Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
IkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTEwOSw3ICsxMTAsNyBAQCBpbmxpbmUgUmVmUHRyPENhbnZhc1Bh
dHRlcm4+IENhbnZhc1N0eWxlCiBpbmxpbmUgU3RyaW5nIENhbnZhc1N0eWxlOjpjb2xvcigpIGNv
bnN0CiB7CiAgICAgYXV0byYgY29sb3IgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPiht
X3N0eWxlKSA/IFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IFdURjo6Z2V0PENNWUtBQ29sb3I+
KG1fc3R5bGUpLmNvbG9yQ29udmVydGVkVG9TUkdCQTsKLSAgICByZXR1cm4gY29sb3Iuc2VyaWFs
aXplZCgpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxTcGFuRWxl
bWVudC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCkBAIC0xMjUsOSArMTI2LDkgQEAgdm9pZCBUZXh0VHJhY2tDdWVHZW5l
cmljQm94RWxlbWVudDo6YXBwbAogICAgIH0KIAogICAgIGlmIChjdWUtPmZvcmVncm91bmRDb2xv
cigpLmlzVmFsaWQoKSkKLSAgICAgICAgY3VlRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUNvbG9yLCBjdWUtPmZvcmVncm91bmRDb2xvcigpLnNlcmlhbGl6ZWQoKSk7
CisgICAgICAgIGN1ZUVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlD
b2xvciwgc2VyaWFsaXphdGlvbkZvckhUTUwoY3VlLT5mb3JlZ3JvdW5kQ29sb3IoKSkpOwogICAg
IGlmIChjdWUtPmhpZ2hsaWdodENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICBjdWVFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBjdWUt
PmhpZ2hsaWdodENvbG9yKCkuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgY3VlRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgc2VyaWFsaXph
dGlvbkZvckhUTUwoY3VlLT5oaWdobGlnaHRDb2xvcigpKSk7CiAKICAgICBpZiAoY3VlLT5nZXRX
cml0aW5nRGlyZWN0aW9uKCkgPT0gVlRUQ3VlOjpIb3Jpem9udGFsKQogICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBDU1NWYWx1ZUF1dG8pOwpAQCAtMTQ1
LDcgKzE0Niw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ6OmFwcGwKICAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgQ1NTVmFs
dWVTdGFydCk7CiAKICAgICBpZiAoY3VlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCi0g
ICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Is
IGN1ZS0+YmFja2dyb3VuZENvbG9yKCkuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgc2VyaWFsaXphdGlvbkZv
ckhUTUwoY3VlLT5iYWNrZ3JvdW5kQ29sb3IoKSkpOwogICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlXcml0aW5nTW9kZSwgY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgpLCBmYWxz
ZSk7CiAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENT
U1ZhbHVlUHJlV3JhcCk7CiAKQEAgLTI0NSwxMSArMjQ2LDExIEBAIGJvb2wgVGV4dFRyYWNrQ3Vl
R2VuZXJpYzo6aXNQb3NpdGlvbmVkQWIKIHZvaWQgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6dG9KU09O
KEpTT046Ok9iamVjdCYgb2JqZWN0KSBjb25zdAogewogICAgIGlmIChtX2ZvcmVncm91bmRDb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImZvcmVncm91bmRDb2xvciJf
cywgbV9mb3JlZ3JvdW5kQ29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgb2JqZWN0LnNldFN0
cmluZygiZm9yZWdyb3VuZENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2ZvcmVncm91
bmRDb2xvcikpOwogICAgIGlmIChtX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IG9iamVjdC5zZXRTdHJpbmcoImJhY2tncm91bmRDb2xvciJfcywgbV9iYWNrZ3JvdW5kQ29sb3Iu
c2VyaWFsaXplZCgpKTsKKyAgICAgICAgb2JqZWN0LnNldFN0cmluZygiYmFja2dyb3VuZENvbG9y
Il9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2JhY2tncm91bmRDb2xvcikpOwogICAgIGlmICht
X2hpZ2hsaWdodENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgb2JqZWN0LnNldFN0cmluZygiaGln
aGxpZ2h0Q29sb3IiX3MsIG1faGlnaGxpZ2h0Q29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICAgICAg
b2JqZWN0LnNldFN0cmluZygiaGlnaGxpZ2h0Q29sb3IiX3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1M
KG1faGlnaGxpZ2h0Q29sb3IpKTsKICAgICBpZiAobV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQpCiAgICAgICAgIG9iamVjdC5zZXREb3VibGUoInJlbGF0aXZlRm9udFNpemUiX3Ms
IG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KTsKICAgICBpZiAobV9mb250U2l6
ZU11bHRpcGxpZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkNv
bG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKQEAgLTExODgsNyArMTE4OSw3IEBAIFJl
ZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG8KICAgICBmb3IgKGF1dG8mIGNv
bG9yU3RvcCA6IGdyYWRpZW50LnN0b3BzKCkpIHsKICAgICAgICAgYXV0byBzdG9wID0gSlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogICAgICAgICBzdG9wLT5hZGRJdGVtKGNv
bG9yU3RvcC5vZmZzZXQpOwotICAgICAgICBzdG9wLT5hZGRJdGVtKGluZGV4Rm9yRGF0YShjb2xv
clN0b3AuY29sb3IuY3NzVGV4dCgpKSk7CisgICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JE
YXRhKHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3JTdG9wLmNvbG9yKSkpOwogICAgICAgICBzdG9w
cy0+YWRkSXRlbShXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZp
c2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgiCiAKICNpbmNsdWRlICJBdWRpb1RyYWNr
TGlzdC5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJM
b2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0zNTYsNyArMzU3LDggQEAgU3RyaW5nIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjp3aQogU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IENvbG9yJiBjb2xv
ciwgYm9vbCBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGFwcGVuZENTUyhidWlsZGVyLCBpZCwgY29sb3Iuc2VyaWFsaXplZCgpLCBpbXBvcnRhbnQp
OworICAgIC8vIEZJWE1FOiBTZWVtcyBsaWtlIHRoaXMgc2hvdWxkIGJlIHVzaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MgaW5zdGVhZD8KKyAgICBhcHBlbmRDU1MoYnVpbGRlciwgaWQsIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbG9yKSwgaW1wb3J0YW50KTsKICAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJEYXRh
VHJhbnNmZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKQEAgLTU1OCw3ICs1NTksNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVk
ZUVkaXREcmFnKGNvCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAgICAgICAgIGlmIChp
c0VuYWJsZWRDb2xvcklucHV0KCplbGVtZW50KSkgewogICAgICAgICAgICAgYXV0byYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCk7Ci0gICAgICAgICAgICBpbnB1
dC5zZXRWYWx1ZShjb2xvci5zZXJpYWxpemVkKCksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVu
dCk7CisgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZShzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xv
ciksIERpc3BhdGNoSW5wdXRBbmRDaGFuZ2VFdmVudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC01NjYsNyArNTY3LDcgQEAgYm9vbCBEcmFnQ29udHJv
bGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjbwogICAgICAgICBpZiAoIWlubmVyUmFuZ2UpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Q29sb3IsIGNvbG9yLnNlcmlhbGl6ZWQoKSwgZmFsc2UpOworICAgICAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IpLCBm
YWxzZSk7CiAgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHls
ZShzdHlsZS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVz
dGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CkBA
IC0xNDQ0LDcgKzE0NDUsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1h
Z2VQCiAgICAgICAgIGltYWdlLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhU
TUxOYW1lczo6d2lkdGhBdHRyLCBBdG9tU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSk7CiAg
ICAgICAgIGltYWdlLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1l
czo6aGVpZ2h0QXR0ciwgQXRvbVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpKTsKICAgICAg
ICAgaW1hZ2UtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXhXaWR0aCwgMTAw
LCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgICAgICBpbWFnZS0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3IoQ29sb3I6OmJs
YWNrKS5jb2xvcldpdGhBbHBoYSgwLjA1KS5jc3NUZXh0KCkpOworICAgICAgICBpbWFnZS0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgc2VyaWFsaXph
dGlvbkZvckNTUyhDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEoMTMpKSk7CiAgICAgICAgIGlt
YWdlLT5zZXRJc0Ryb3BwZWRJbWFnZVBsYWNlaG9sZGVyKCk7CiAgICAgICAgIGZyYWdtZW50LT5h
cHBlbmRDaGlsZChXVEZNb3ZlKGltYWdlKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkNv
bG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNzksMjcgKzgwLDYgQEAgQ29sb3ImIENvbG9yOjpvcGVyYXRv
cj0oQ29sb3ImJiBvdGhlcikKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVN0cmluZyBDb2xvcjo6
c2VyaWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuc2VyaWFs
aXphdGlvbkZvckhUTUwoKTsKLX0KLQotU3RyaW5nIENvbG9yOjpjc3NUZXh0KCkgY29uc3QKLXsK
LSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1Rl
eHQoKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7Ci19Ci0K
LVN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIGlm
IChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4dCgpOwot
ICAgIHJldHVybiBhc1NpbXBsZSgpLnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCk7
Ci19Ci0KIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogewogICAgIC8vIEhhcmRjb2Rl
IHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgpAQCAtMjkzLDcgKzI3Myw3IEBAIENvbG9yIGJs
ZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG8KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiB0cyA8
PCBjb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpOworICAgIHJldHVybiB0cyA8PCBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcik7CiB9CiAKIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYzNzU4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDE1ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yLT5kZXJlZigpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgdGhlIGNvbG9y
IHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1Ci0gICAgLy8gPGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHls
ZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFs
aXplZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLQotICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0aGVyICNSUkdH
QkIgb3IgI1JSR0dCQkFBCi0gICAgU3RyaW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29u
c3Q7Ci0KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgfHwg
KG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgJiB2YWxpZFNpbXBsZUNvbG9yQml0KTsg
fQogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzU2ltcGxlKCkuaXNPcGFxdWUoKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNl
cmlhbGl6YXRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29s
b3JTZXJpYWxpemF0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTaW1wbGVD
b2xvciBvdmVybG9hZHMKKworc3RhdGljIGNoYXIgZGVjaW1hbERpZ2l0KHVuc2lnbmVkIG51bWJl
cikKK3sKKyAgICBBU1NFUlQobnVtYmVyIDwgMTApOworICAgIHJldHVybiAnMCcgKyBudW1iZXI7
Cit9CisKK3N0YXRpYyBzdGQ6OmFycmF5PGNoYXIsIDQ+IGZyYWN0aW9uRGlnaXRzRm9yRnJhY3Rp
b25hbEFscGhhVmFsdWUodWludDhfdCBhbHBoYSkKK3sKKyAgICBBU1NFUlQoYWxwaGEgPiAwKTsK
KyAgICBBU1NFUlQoYWxwaGEgPCAweEZGKTsKKyAgICBpZiAoKChhbHBoYSAqIDEwMCArIDB4N0Yp
IC8gMHhGRiAqIDB4RkYgKyA1MCkgLyAxMDAgIT0gYWxwaGEpCisgICAgICAgIHJldHVybiB7IHsg
ZGVjaW1hbERpZ2l0KGFscGhhICogMTAgLyAweEZGICUgMTApLCBkZWNpbWFsRGlnaXQoYWxwaGEg
KiAxMDAgLyAweEZGICUgMTApLCBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAwMCArIDB4N0YpIC8g
MHhGRiAlIDEwKSwgJ1wwJyB9IH07CisgICAgaWYgKGludCB0aGlyZERpZ2l0ID0gKGFscGhhICog
MTAwICsgMHg3RikgLyAweEZGICUgMTApCisgICAgICAgIHJldHVybiB7IHsgZGVjaW1hbERpZ2l0
KGFscGhhICogMTAgLyAweEZGKSwgZGVjaW1hbERpZ2l0KHRoaXJkRGlnaXQpLCAnXDAnLCAnXDAn
IH0gfTsKKyAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMCArIDB4N0YpIC8g
MHhGRiksICdcMCcsICdcMCcsICdcMCcgfSB9OworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhjb25zdCBTaW1wbGVDb2xvciYgY29sb3IpCit7CisgICAgYXV0byBbcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGFdID0gY29sb3I7CisgICAgc3dpdGNoIChhbHBoYSkgeworICAgIGNhc2UgMDoK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVkLCAiLCAiLCBncmVlbiwgIiwg
IiwgYmx1ZSwgIiwgMCkiKTsKKyAgICBjYXNlIDB4RkY6CisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJyZ2IoIiwgcmVkLCAiLCAiLCBncmVlbiwgIiwgIiwgYmx1ZSwgJyknKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWQsICIsICIsIGdyZWVu
LCAiLCAiLCBibHVlLCAiLCAwLiIsIGZyYWN0aW9uRGlnaXRzRm9yRnJhY3Rpb25hbEFscGhhVmFs
dWUoYWxwaGEpLmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBTaW1wbGVDb2xvciYgY29sb3IpCit7CisgICAgYXV0byBbcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CisgICAgaWYgKGNvbG9yLmlzT3BhcXVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiwgTG93ZXJjYXNlKSwgaGV4KGdy
ZWVuLCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZSwgMiwgTG93ZXJjYXNlKSk7CisgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoY29uc3QgU2ltcGxlQ29sb3ImIGNvbG9yKQoreworICAgIGF1dG8g
W3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yOworICAgIGlmIChhbHBoYSA8IDB4RkYp
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhleChncmVlbiwg
MiksIGhleChibHVlLCAyKSwgaGV4KGFscGhhLCAyKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
JyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAyKSwgaGV4KGJsdWUsIDIpKTsKK30KKworCisv
LyBFeHRlbmRlZENvbG9yIG92ZXJsb2FkcworCitzdGF0aWMgQVNDSUlMaXRlcmFsIHNlcmlhbGl6
YXRpb24oQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkg
eworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuICJzcmdiIl9zOwor
ICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgorICAgICAgICByZXR1cm4gImxpbmVhci1z
cmdiIl9zOworICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICByZXR1cm4g
ImRpc3BsYXktcDMiX3M7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuICIiX3M7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVu
ZGVkQ29sb3ImIGNvbG9yKQoreworICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9y
LmNvbXBvbmVudHMoKTsKKyAgICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGFscGhhLCAx
LjBmKSkKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbG9yKCIsIHNlcmlhbGl6YXRpb24o
Y29sb3IuY29sb3JTcGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihjb2xvci5jb2xvclNw
YWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgYWxwaGEsICcpJyk7Cit9
CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xv
cikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7Cit9CisKK1N0cmlu
ZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBFeHRlbmRlZENvbG9yJiBj
b2xvcikKK3sKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7Cit9CisKKy8v
IENvbG9yIG92ZXJsb2FkcworCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3IuYXNFeHRlbmRlZCgpKTsKKyAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvckNTUyhjb2xvci5hc1NpbXBsZSgpKTsKK30KKworU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IuaXNFeHRl
bmRlZCgpKQorICAgICAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNFeHRl
bmRlZCgpKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3IuYXNTaW1wbGUo
KSk7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzRXh0ZW5kZWQoKSk7
CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yLmFzU2lt
cGxlKCkpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU2VyaWFsaXphdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEV4dGVuZGVkQ29sb3I7Citj
bGFzcyBTaW1wbGVDb2xvcjsKKworLy8gc2VyaWFsaXphdGlvbkZvckhUTUwgcmV0dXJucyB0aGUg
Y29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUgPGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0cm9rZS1zdHlsZXM+
ICgxMCBTZXB0ZW1iZXIgMjAxNSkKKy8vIHNlcmlhbGl6YXRpb25Gb3JDU1MgcmV0dXJucyB0aGUg
Y29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gQ1NTCisvLyBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGZvciBEdW1wUmVuZGVy
VHJlZSwgI1JSR0dCQiwgI1JSR0dCQkFBIG9yIHRoZSBDU1Mgc2VyaWFsaXphdGlvbgorCisKK1dF
QkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IFNpbXBsZUNvbG9y
Jik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgU2lt
cGxlQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChjb25zdCBTaW1wbGVDb2xvciYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xvciYpOworV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0
IEV4dGVuZGVkQ29sb3ImKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JDU1MoY29uc3QgQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9u
Rm9ySFRNTChjb25zdCBDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJik7CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZp
c2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRl
ZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNv
bG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMjkgKzQ1LDYgQEAgdW5zaWduZWQg
RXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGMxLCBj
MiwgYzMsIGFscGhhLCBtX2NvbG9yU3BhY2UpOwogfQogCi1TdHJpbmcgRXh0ZW5kZWRDb2xvcjo6
Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgY2hhciogY29sb3JTcGFjZTsKLSAgICBzd2l0
Y2ggKG1fY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKLSAgICAgICAg
Y29sb3JTcGFjZSA9ICJzcmdiIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvclNwYWNl
OjpEaXNwbGF5UDM6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSAiZGlzcGxheS1wMyI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOwotICAgIH0KLQotICAgIGF1dG8gW2MxLCBj
MiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9uZW50cygpOwotCi0gICAgaWYgKFdURjo6YXJl
RXNzZW50aWFsbHlFcXVhbChhbHBoYSgpLCAxLjBmKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoImNvbG9yKCIsIGNvbG9yU3BhY2UsICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7
Ci0KLSAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgY29sb3JTcGFjZSwgJyAnLCBjMSwg
JyAnLCBjMiwgJyAnLCBjMywgIiAvICIsIGV4aXN0aW5nQWxwaGEsICcpJyk7Ci19Ci0KIFJlZjxF
eHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBvdmVycmlk
ZUFscGhhKSBjb25zdAogewogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0g
Y29tcG9uZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDggKzQ2LDYgQEAgcHVibGljOgog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQogICAgIFJlZjxFeHRlbmRlZENvbG9y
PiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGlu
dmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24g
MjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0KICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAKKyNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC05MzEsNyArOTMxLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0UwogICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIihwcmltYXJ5LWxheWVyLWlkICIgPDwgcHJpbWFyeUxheWVySUQoKSA8PCAi
KVxuIjsKIAogICAgIGlmIChtX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgY2xpZW50KCku
c2hvdWxkRHVtcFByb3BlcnR5Rm9yTGF5ZXIodGhpcywgImJhY2tncm91bmRDb2xvciIsIGJlaGF2
aW9yKSkKLSAgICAgICAgdHMgPDwgaW5kZW50IDw8ICIoYmFja2dyb3VuZENvbG9yICIgPDwgbV9i
YWNrZ3JvdW5kQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiKVxuIjsKKyAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICIoYmFja2dyb3VuZENvbG9yICIgPDwgc2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQobV9iYWNrZ3JvdW5kQ29sb3IpIDw8ICIpXG4iOwogCiAgICAgaWYg
KGJlaGF2aW9yICYgTGF5ZXJUcmVlQXNUZXh0SW5jbHVkZUFjY2VsZXJhdGVzRHJhd2luZyAmJiBt
X2FjY2VsZXJhdGVzRHJhd2luZykKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICIoYWNjZWxlcmF0
ZXNEcmF3aW5nICIgPDwgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPDwgIilcbiI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmljQ3VlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmljQ3Vl
LmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW5iYW5kR2VuZXJpY0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAK
IAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgor
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsMTMgKzk2LDEzIEBAIFN0cmluZyBJbmJh
bmRHZW5lcmljQ3VlOjp0b0pTT05TdHJpbmcoKSAKICAgICB9CiAKICAgICBpZiAobV9jdWVEYXRh
Lm1fZm9yZWdyb3VuZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmco
ImZvcmVncm91bmRDb2xvciJfcywgbV9jdWVEYXRhLm1fZm9yZWdyb3VuZENvbG9yLnNlcmlhbGl6
ZWQoKSk7CisgICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJmb3JlZ3JvdW5kQ29sb3IiX3MsIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKG1fY3VlRGF0YS5tX2ZvcmVncm91bmRDb2xvcikpOwogCiAgICAg
aWYgKG1fY3VlRGF0YS5tX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG9iamVj
dC0+c2V0U3RyaW5nKCJiYWNrZ3JvdW5kQ29sb3IiX3MsIG1fY3VlRGF0YS5tX2JhY2tncm91bmRD
b2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3QtPnNldFN0cmluZygiYmFja2dyb3Vu
ZENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2N1ZURhdGEubV9iYWNrZ3JvdW5kQ29s
b3IpKTsKIAogICAgIGlmIChtX2N1ZURhdGEubV9oaWdobGlnaHRDb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJoaWdobGlnaHRDb2xvciJfcywgbV9jdWVEYXRhLm1f
aGlnaGxpZ2h0Q29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmco
ImhpZ2hsaWdodENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2N1ZURhdGEubV9oaWdo
bGlnaHRDb2xvcikpOwogCiAgICAgaWYgKG1fY3VlRGF0YS5tX2Jhc2VGb250U2l6ZSkKICAgICAg
ICAgb2JqZWN0LT5zZXREb3VibGUoImJhc2VGb250U2l6ZSJfcywgbV9jdWVEYXRhLm1fYmFzZUZv
bnRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVDb2xvci5oIgogCi0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlG
bG9vcmluZyhTaW1wbGVDb2xvciBjb2xvcikKQEAgLTYyLDQ3ICs1Nyw1IEBAIFNpbXBsZUNvbG9y
IHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgY28KICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHVucHJlbXVsdGlwbHlDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChnLCBhKSwg
dW5wcmVtdWx0aXBseUNoYW5uZWwoYiwgYSksIGEpOwogfQogCi1TdHJpbmcgU2ltcGxlQ29sb3I6
OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKLXsKLSAgICBpZiAoaXNPcGFxdWUoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIsIExvd2Vy
Y2FzZSksIGhleChncmVlbkNvbXBvbmVudCgpLCAyLCBMb3dlcmNhc2UpLCBoZXgoYmx1ZUNvbXBv
bmVudCgpLCAyLCBMb3dlcmNhc2UpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUygp
OwotfQotCi1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQotewotICAg
IEFTU0VSVChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsKLX0KLQotc3Rh
dGljIHN0ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFW
YWx1ZSh1aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwotICAgIEFTU0VS
VChhbHBoYSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3RikgLyAweEZGICog
MHhGRiArIDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGln
aXQoYWxwaGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwMCAvIDB4
RkYgJSAxMCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAweEZGICUgMTAp
LCAnXDAnIH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAxMDAgKyAweDdG
KSAvIDB4RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxwaGEgKiAx
MCAvIDB4RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcgfSB9OwotICAg
IHJldHVybiB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAweEZGKSwgJ1ww
JywgJ1wwJywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlv
bkZvckNTUygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgpKSB7Ci0gICAg
Y2FzZSAwOgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRDb21wb25lbnQo
KSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAiLCAwKSIp
OwotICAgIGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYigiLCByZWRD
b21wb25lbnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgp
LCAnKScpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIs
IHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9u
ZW50KCksICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZShhbHBo
YUNvbXBvbmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCi1TdHJpbmcgU2ltcGxlQ29s
b3I6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBpZiAo
YWxwaGFDb21wb25lbnQoKSA8IDB4RkYpCi0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywg
aGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1
ZUNvbXBvbmVudCgpLCAyKSwgaGV4KGFscGhhQ29tcG9uZW50KCksIDIpKTsKLSAgICByZXR1cm4g
bWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiksIGhleChncmVlbkNvbXBvbmVu
dCgpLCAyKSwgaGV4KGJsdWVDb21wb25lbnQoKSwgMikpOwotfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmgJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1Miw2IEBAIHB1
YmxpYzoKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KIAotICAgIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTCgpIGNvbnN0OwotICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29u
c3Q7Ci0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7
Ci0KICAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBo
YSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikg
fCBhbHBoYSA8PCAyNCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNpb24gMjYzNzU4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6
YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTMxLDcgKzEzMiw3IEBAIFRleHRT
dHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXMKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8
IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5
PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgbV9zaGFkb3dDb2xvci5uYW1l
Rm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8IlwiIGZsb29kLW9wYWNpdHk9XCIiIDw8IG1fc2hhZG93
T3BhY2l0eSA8PCAiXVxuIjsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRY
IDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIgZHk9XCIiIDw8
IG1fZHkgPDwgIlwiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChtX3NoYWRvd0NvbG9yKSA8PCJcIiBmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX3NoYWRv
d09wYWNpdHkgPDwgIl1cbiI7CiAKICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRT
Y29wZSh0cyk7CiAgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRmxvb2QuaCIKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTcxLDcgKzcyLDcgQEAgVGV4dFN0cmVhbSYgRkVGbG9vZDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwog
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IGZsb29kQ29sb3IoKS5uYW1lRm9y
UmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJcIiAiCisgICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIg
PDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoZmxvb2RDb2xvcigpKSA8PCAiXCIg
IgogICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKIAogI2luY2x1ZGUgIkNs
aXBSZWN0LmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CkBAIC0yMzksMjMgKzI0MCwyMyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVy
T2JqZWN0CiAgICAgICAgIGlmIChvLnBhcmVudCgpKSB7CiAgICAgICAgICAgICBDb2xvciBjb2xv
ciA9IG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAg
ICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCktPnN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBjb2xvcikpCi0g
ICAgICAgICAgICAgICAgdHMgPDwgIiBbY29sb3I9IiA8PCBjb2xvci5uYW1lRm9yUmVuZGVyVHJl
ZUFzVGV4dCgpIDw8ICJdIjsKKyAgICAgICAgICAgICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiXSI7CiAKICAgICAgICAg
ICAgIC8vIERvIG5vdCBkdW1wIGludmFsaWQgb3IgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMsIHNp
bmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQuCiAgICAgICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29s
b3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5w
YXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpLCBiYWNrZ3JvdW5kQ29sb3IpCiAgICAgICAgICAgICAgICAgJiYgYmFja2dyb3Vu
ZENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKLSAgICAgICAgICAgICAgICB0cyA8PCAiIFti
Z2NvbG9yPSIgPDwgYmFja2dyb3VuZENvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwg
Il0iOworICAgICAgICAgICAgICAgIHRzIDw8ICIgW2JnY29sb3I9IiA8PCBzZXJpYWxpemF0aW9u
Rm9yUmVuZGVyVHJlZUFzVGV4dChiYWNrZ3JvdW5kQ29sb3IpIDw8ICJdIjsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQ29sb3IgdGV4dEZpbGxDb2xvciA9IG8uc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKTsKICAgICAgICAgICAg
IGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJlbnQoKS0+c3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSwgdGV4dEZp
bGxDb2xvcikKICAgICAgICAgICAgICAgICAmJiB0ZXh0RmlsbENvbG9yICE9IGNvbG9yICYmIHRl
eHRGaWxsQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQotICAgICAgICAgICAgICAgIHRzIDw8
ICIgW3RleHRGaWxsQ29sb3I9IiA8PCB0ZXh0RmlsbENvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgPDwgIl0iOworICAgICAgICAgICAgICAgIHRzIDw8ICIgW3RleHRGaWxsQ29sb3I9IiA8
PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCh0ZXh0RmlsbENvbG9yKSA8PCAiXSI7
CiAKICAgICAgICAgICAgIENvbG9yIHRleHRTdHJva2VDb2xvciA9IG8uc3R5bGUoKS52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOwogICAgICAg
ICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBhcmVudCgpLT5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciks
IHRleHRTdHJva2VDb2xvcikKICAgICAgICAgICAgICAgICAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0g
Y29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKLSAgICAgICAg
ICAgICAgICB0cyA8PCAiIFt0ZXh0U3Ryb2tlQ29sb3I9IiA8PCB0ZXh0U3Ryb2tlQ29sb3IubmFt
ZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CisgICAgICAgICAgICAgICAgdHMgPDwgIiBb
dGV4dFN0cm9rZUNvbG9yPSIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQodGV4
dFN0cm9rZUNvbG9yKSA8PCAiXSI7CiAKICAgICAgICAgICAgIGlmIChvLnBhcmVudCgpLT5zdHls
ZSgpLnRleHRTdHJva2VXaWR0aCgpICE9IG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAmJiBv
LnN0eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgPiAwKQogICAgICAgICAgICAgICAgIHRzIDw8ICIg
W3RleHRTdHJva2VXaWR0aD0iIDw8IG8uc3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSA8PCAiXSI7
CkBAIC0yOTAsMTAgKzI5MSwxMCBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVy
T2JqZWN0CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8
IGJvcmRlclRvcCA8PCAicHggIjsKICAgICAgICAgICAgICAgICBwcmludEJvcmRlclN0eWxlKHRz
LCBvLnN0eWxlKCkuYm9yZGVyVG9wU3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgQ29sb3IgY29s
ID0gby5zdHlsZSgpLmJvcmRlclRvcENvbG9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb2wu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCkuY29sb3IoKTsK
LSAgICAgICAgICAgICAgICB0cyA8PCBjb2wubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAi
KSI7CisgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG8uc3R5bGUoKS5ib3JkZXJUb3BDb2xv
cigpOworICAgICAgICAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICBjb2xvciA9IG8uc3R5bGUoKS5jb2xvcigpOworICAgICAgICAgICAgICAgIHRzIDw8
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChvLnN0eWxlKCkuYm9yZGVyUmlnaHQoKSAhPSBwcmV2
Qm9yZGVyKSB7CkBAIC0zMDMsMTAgKzMwNCwxMCBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6Ondy
aXRlUmVuZGVyT2JqZWN0CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHRzIDw8ICIgKCIgPDwgYm9yZGVyUmlnaHQgPDwgInB4ICI7CiAgICAgICAgICAgICAgICAg
ICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5bGUoKS5ib3JkZXJSaWdodFN0eWxlKCkpOwot
ICAgICAgICAgICAgICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxlKCkuYm9yZGVyUmlnaHRDb2xv
cigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCkuY29sb3IoKTsKLSAgICAgICAgICAgICAgICAg
ICAgdHMgPDwgY29sLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIikiOworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgpLmJvcmRlclJpZ2h0Q29sb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvciA9IG8uc3R5bGUoKS5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICB0
cyA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIikiOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMzE3LDEwICszMTgsMTAgQEAgdm9p
ZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IGJvcmRlckJvdHRvbSA8PCAi
cHggIjsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgby5zdHlsZSgp
LmJvcmRlckJvdHRvbVN0eWxlKCkpOwotICAgICAgICAgICAgICAgICAgICBDb2xvciBjb2wgPSBv
LnN0eWxlKCkuYm9yZGVyQm90dG9tQ29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFj
b2wuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gby5zdHlsZSgpLmNv
bG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRzIDw8IGNvbC5uYW1lRm9yUmVuZGVyVHJlZUFz
VGV4dCgpIDw8ICIpIjsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG8uc3R5bGUo
KS5ib3JkZXJCb3R0b21Db2xvcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gby5zdHlsZSgpLmNvbG9y
KCk7CisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
CkBAIC0zMzEsMTAgKzMzMiwxMCBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVy
T2JqZWN0CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8
ICIgKCIgPDwgYm9yZGVyTGVmdCA8PCAicHggIjsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRC
b3JkZXJTdHlsZSh0cywgby5zdHlsZSgpLmJvcmRlckxlZnRTdHlsZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgQ29sb3IgY29sID0gby5zdHlsZSgpLmJvcmRlckxlZnRDb2xvcigpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb2wgPSBvLnN0eWxlKCkuY29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgY29s
Lm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIikiOworICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbG9yID0gby5zdHlsZSgpLmJvcmRlckxlZnRDb2xvcigpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
ID0gby5zdHlsZSgpLmNvbG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24u
aCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTMwMCw3ICszMDEsNyBAQCBzdGF0aWMg
dm9pZCB3cml0ZVJlbmRlclNWR1RleHRCb3goVGV4dFN0CiAgICAgdHMgPDwgIiBjb250YWlucyAx
IGNodW5rKHMpIjsKIAogICAgIGlmICh0ZXh0LnBhcmVudCgpICYmICh0ZXh0LnBhcmVudCgpLT5z
dHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSB0ZXh0LnN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSkKLSAgICAgICAg
d3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0LnN0eWxlKCkudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkpOwor
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjb2xvciIsIHNlcmlhbGl6YXRpb25Gb3JS
ZW5kZXJUcmVlQXNUZXh0KHRleHQuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvcikpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4
dEJveChUZXh0U3RyZWFtJiB0cywgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAko
cmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJv
cGVydHlUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlh
bGl6YXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8Q29sb3I+IHsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhjb25zdCBDb2xvciYgdHlwZSkgeyByZXR1cm4gdHlwZS5zZXJpYWxpemVkKCk7IH0KKyAg
ICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IENvbG9yJiB0eXBlKSB7IHJldHVybiBzZXJp
YWxpemF0aW9uRm9ySFRNTCh0eXBlKTsgfQogfTsKIAogdGVtcGxhdGU8PgpJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2xpZW50T3JpZ2luLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAj
aW5jbHVkZSAiQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIK
ICNpbmNsdWRlICJDdXJzb3IuaCIKQEAgLTE5NTUsNyArMTk1Niw3IEBAIEV4Y2VwdGlvbk9yPFN0
cmluZz4gSW50ZXJuYWxzOjp2aWV3QmFzZUIKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0
dXJuIGRvY3VtZW50LT52aWV3KCktPmJhc2VCYWNrZ3JvdW5kQ29sb3IoKS5jc3NUZXh0KCk7Cisg
ICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoZG9jdW1lbnQtPnZpZXcoKS0+YmFzZUJhY2tn
cm91bmRDb2xvcigpKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRWaWV3
QmFzZUJhY2tncm91bmRDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUpCkBAIC01NjYwLDcg
KzU2NjEsNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpoaWdobGlnaHRQc2V1ZG9FbGVtZW50CiAgICAg
aWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBzdHlsZS0+Y29s
b3IoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1Moc3R5bGUtPmNv
bG9yKCkpOwogfQogICAgIAogSW50ZXJuYWxzOjpUZXh0SW5kaWNhdG9ySW5mbzo6VGV4dEluZGlj
YXRvckluZm8oKQpAQCAtNTc3Miw3ICs1NzczLDcgQEAgU3RyaW5nIEludGVybmFsczo6c3lzdGVt
Q29sb3JGb3JDU1NWYWx1ZQogICAgIGlmICh1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCkK
ICAgICAgICAgb3B0aW9ucy5hZGQoU3R5bGVDb2xvcjo6T3B0aW9uczo6VXNlRWxldmF0ZWRVc2Vy
SW50ZXJmYWNlTGV2ZWwpOwogICAgIAotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkuc3lzdGVtQ29sb3IoaWQsIG9wdGlvbnMpLmNzc1RleHQoKTsKKyAgICByZXR1cm4gc2VyaWFs
aXphdGlvbkZvckNTUyhSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtQ29sb3IoaWQsIG9w
dGlvbnMpKTsKIH0KIAogYm9vbCBJbnRlcm5hbHM6OnN5c3RlbUhhc0JhdHRlcnkoKSBjb25zdApA
QCAtNTgyNyw4ICs1ODI4LDcgQEAgYm9vbCBJbnRlcm5hbHM6OnN1cHBvcnRzUGljdHVyZUluUGlj
dHVyZQogCiBTdHJpbmcgSW50ZXJuYWxzOjpmb2N1c1JpbmdDb2xvcigpCiB7Ci0gICAgT3B0aW9u
U2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnM7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5mb2N1c1JpbmdDb2xvcihvcHRpb25zKS5jc3NUZXh0KCk7CisgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLmZvY3VzUmlu
Z0NvbG9yKHsgfSkpOwogfQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6OmNyZWF0ZVNsZWVwRGlzYWJs
ZXIoY29uc3QgU3RyaW5nJiByZWFzb24sIGJvb2wgZGlzcGxheSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDIwLTA2LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBTcGxpdCBDb2xvciBzZXJpYWxpemF0aW9uIG91dCBvZiBDb2xvciBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM4
MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZG9w
dCBDb2xvclNlcmlhbGl6YXRpb24uaCBzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoZGljdGlvbmFy
eVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKC1bV0tUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxl
ciBfd2tDaGFuZ2VDb2xvcjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2V0VGV4dENvbG9y
Rm9yV2ViVmlldzpzZW5kZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zv
cm1Db2xvclBpY2tlci5tbToKKyAgICAgICAgKC1bV0tDb2xvclBpY2tlciBzZXRDb250cm9sVmFs
dWVGcm9tVUlDb2xvcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbkNob2ljZUFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkNob2lj
ZUFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVtZW50KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW5UZXh0QW5ub3RhdGlvbjo6Y3JlYXRlQW5ub3RhdGlvbkVsZW1lbnQpOgor
CiAyMDIwLTA2LTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBcHAtYm91bmQgSmF2YVNjcmlwdCBhbmQgTmF2aWdhdGlvbiBmYWlsdXJlcyBzaG91bGQgaGF2
ZSBzcGVjaWZpYyBlcnJvciBjb2Rlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDYgKzExNiw3IEBACiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIl9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0F0dHJpYnV0ZWRTdHJpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9u
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnRDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0pTRE9NQmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
Lmg+CkBAIC0xMzc5LDcgKzEzODAsNyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5
UmVwcmVzZW50CiAgICAgICAgIEAiaXRhbGljIjogcG9zdExheW91dERhdGEudHlwaW5nQXR0cmli
dXRlcyAmIFdlYktpdDo6QXR0cmlidXRlSXRhbGljcyA/IEBZRVMgOiBATk8sCiAgICAgICAgIEAi
dW5kZXJsaW5lIjogcG9zdExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyAmIFdlYktpdDo6QXR0
cmlidXRlVW5kZXJsaW5lID8gQFlFUyA6IEBOTywKICAgICAgICAgQCJ0ZXh0LWFsaWdubWVudCI6
IEAobnNUZXh0QWxpZ25tZW50KHN0YXRpY19jYXN0PFdlYktpdDo6VGV4dEFsaWdubWVudD4ocG9z
dExheW91dERhdGEudGV4dEFsaWdubWVudCkpKSwKLSAgICAgICAgQCJ0ZXh0LWNvbG9yIjogKE5T
U3RyaW5nICopcG9zdExheW91dERhdGEudGV4dENvbG9yLmNzc1RleHQoKQorICAgICAgICBAInRl
eHQtY29sb3IiOiAoTlNTdHJpbmcgKilzZXJpYWxpemF0aW9uRm9yQ1NTKHBvc3RMYXlvdXREYXRh
LnRleHRDb2xvcikKICAgICB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTg0LDYg
Kzg0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9BdHRyaWJ1dGVkU3RyaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b21wb3NpdGlvbkhpZ2hsaWdodC5oPgogI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3Vw
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC04MzIsNyArODMzLDcgQEAgLSAo
dm9pZClfd2tDaGFuZ2VDb2xvcjooaWQpc2VuZGVyCiAgICAgICAgIHJldHVybjsKIAogICAgIF90
ZXh0Q29sb3IgPSBzZWxmLmNvbG9yUGlja2VySXRlbS5jb2xvcjsKLSAgICBfd2ViVmlld0ltcGwt
PnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciIsIFdlYkNvcmU6OmNvbG9yRnJv
bU5TQ29sb3IoX3RleHRDb2xvci5nZXQoKSkuc2VyaWFsaXplZCgpKTsKKyAgICBfd2ViVmlld0lt
cGwtPnBhZ2UoKS5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciIsIFdlYkNvcmU6OnNlcmlh
bGl6YXRpb25Gb3JIVE1MKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IoX3RleHRDb2xvci5nZXQo
KSkpKTsKIH0KIAogLSAoTlNWaWV3Q29udHJvbGxlciAqKXRleHRMaXN0Vmlld0NvbnRyb2xsZXIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtOTcsNiArOTcsNyBAQAogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL1VUQ29yZVR5cGVz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9ySU9T
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Db21wb3NpdGlvbkhpZ2hsaWdodC5oPgogI2ltcG9ydCA8V2ViQ29yZS9ET01QYXN0ZUFj
Y2Vzcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CkBAIC0zMTk2LDcgKzMx
OTcsNyBAQCAtICh2b2lkKV9zZXRGb250U2l6ZUZvcldlYlZpZXc6KENHRmxvYXQpCiAKIC0gKHZv
aWQpX3NldFRleHRDb2xvckZvcldlYlZpZXc6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNl
bmRlcgogewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciJfcywgV2Vi
Q29yZTo6Q29sb3IoY29sb3IuQ0dDb2xvcikuc2VyaWFsaXplZCgpKTsKKyAgICBfcGFnZS0+ZXhl
Y3V0ZUVkaXRDb21tYW5kKCJGb3JlQ29sb3IiX3MsIFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKFdlYkNvcmU6OkNvbG9yKGNvbG9yLkNHQ29sb3IpKSk7CiB9CiAKIC0gKHZvaWQpdG9nZ2xl
U3RyaWtlVGhyb3VnaEZvcldlYlZpZXc6KGlkKXNlbmRlcgpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1Db2xvclBpY2tlci5tbQkocmV2
aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9y
bUNvbG9yUGlja2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5o
PgogCiBTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoUGVuY2lsS2l0KQpAQCAtMjc4LDcgKzI3
OSw3IEBAIC0gKHZvaWQpZHJhd1NlbGVjdGlvbkluZGljYXRvckZvckNvbG9yQnUKIC0gKHZvaWQp
c2V0Q29udHJvbFZhbHVlRnJvbVVJQ29sb3I6KFVJQ29sb3IgKil1aUNvbG9yCiB7CiAgICAgV2Vi
Q29yZTo6Q29sb3IgY29sb3IodWlDb2xvci5DR0NvbG9yKTsKLSAgICBbX3ZpZXcgcGFnZV0tPnNl
dEZvY3VzZWRFbGVtZW50VmFsdWUoY29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBbX3ZpZXcgcGFn
ZV0tPnNldEZvY3VzZWRFbGVtZW50VmFsdWUoV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwo
Y29sb3IpKTsKIH0KIAogI3ByYWdtYSBtYXJrIFdLRm9ybUNvbnRyb2wKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCShyZXZpc2lvbiAyNjM3NTgpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9DU1NQcmlt
aXRpdmVWYWx1ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DU1NQcm9wZXJ0eU5hbWVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yU2VyaWFsaXph
dGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE9wdGlvbkVsZW1lbnQuaD4KQEAg
LTc2LDcgKzc3LDcgQEAgUmVmPEVsZW1lbnQ+IFBERlBsdWdpbkNob2ljZUFubm90YXRpb246Ogog
ICAgIGF1dG8mIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50
LmdldCgpKTsKIAogICAgIC8vIEZJWE1FOiBNYXRjaCBmb250IHdlaWdodCBhbmQgc3R5bGUgYXMg
d2VsbD8KLSAgICBzdHlsZWRFbGVtZW50LnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlDb2xvciwgY29sb3JGcm9tTlNDb2xvcihjaG9pY2VBbm5vdGF0aW9uLmZvbnRDb2xvcikuc2Vy
aWFsaXplZCgpKTsKKyAgICBzdHlsZWRFbGVtZW50LnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlDb2xvciwgc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3JGcm9tTlNDb2xvcihjaG9p
Y2VBbm5vdGF0aW9uLmZvbnRDb2xvcikpKTsKICAgICBzdHlsZWRFbGVtZW50LnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBjaG9pY2VBbm5vdGF0aW9uLmZvbnQu
ZmFtaWx5TmFtZSk7CiAKICAgICBOU0FycmF5ICpjaG9pY2VzID0gY2hvaWNlQW5ub3RhdGlvbi5j
aG9pY2VzOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpblRleHRBbm5vdGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbQkocmV2aXNpb24gMjYz
NzU4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRl
eHRBbm5vdGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0NTU1ByaW1pdGl2ZVZhbHVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1Byb3Bl
cnR5TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQu
aD4KQEAgLTk0LDcgKzk1LDcgQEAgUmVmPEVsZW1lbnQ+IFBERlBsdWdpblRleHRBbm5vdGF0aW9u
OjpjcgogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAogICAgIC8vIEZJWE1FOiBNYXRjaCBmb250
IHdlaWdodCBhbmQgc3R5bGUgYXMgd2VsbD8KLSAgICBzdHlsZWRFbGVtZW50LnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3JGcm9tTlNDb2xvcih0ZXh0QW5ub3Rh
dGlvbi5mb250Q29sb3IpLnNlcmlhbGl6ZWQoKSk7CisgICAgc3R5bGVkRWxlbWVudC5zZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNv
bG9yRnJvbU5TQ29sb3IodGV4dEFubm90YXRpb24uZm9udENvbG9yKSkpOwogICAgIHN0eWxlZEVs
ZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHRleHRB
bm5vdGF0aW9uLmZvbnQuZmFtaWx5TmFtZSk7CiAgICAgc3R5bGVkRWxlbWVudC5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBjc3NBbGlnbm1lbnRWYWx1ZUZvck5T
VGV4dEFsaWdubWVudCh0ZXh0QW5ub3RhdGlvbi5hbGlnbm1lbnQpKTsKIApJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNzU4KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAt
MDYtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IENv
bG9yIHNlcmlhbGl6YXRpb24gb3V0IG9mIENvbG9yIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzgyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkb3B0IENvbG9yU2VyaWFsaXphdGlvbi5o
IHNlcmlhbGl6YXRpb24gZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJUZXh0VG91Y2hCYXJJdGVtQ29udHJvbGxlciBfd2ViQ2hhbmdlQ29s
b3I6XSk6CisKIDIwMjAtMDYtMzAgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtYY29kZV0gRW5hYmxlIHRoZSAiTXkgTWFjIChNYWMgQ2F0YWx5c3QpIiBkZXN0aW5h
dGlvbiBpbiBXZWJLaXQgWGNvZGUgcHJvamVjdHMKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDI2Mzc1OCkKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYg
KzEzNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlU3RvcmFnZVByb3ZpZGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29v
a2llSmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTEyMDgsNyArMTIwOSw3IEBA
IC0gKHZvaWQpc2V0VGV4dENvbG9yOihOU0NvbG9yICopY29sb3IKIC0gKHZvaWQpX3dlYkNoYW5n
ZUNvbG9yOihpZClzZW5kZXIKIHsKICAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xvclBpY2tlckl0
ZW0uY29sb3I7Ci0gICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6QCJGb3Jl
Q29sb3IiIHZhbHVlOiBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkp
LnNlcmlhbGl6ZWQoKV07CisgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6
QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRNTChXZWJDb3Jl
Ojpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpKV07CiB9CiAKIC0gKE5TVmlld0Nv
bnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3NzcpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wNi0zMCAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ29sb3Igc2Vy
aWFsaXphdGlvbiBvdXQgb2YgQ29sb3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0
ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIENvbG9yU2VyaWFsaXphdGlvbi5oCisKIDIwMjAtMDYt
MzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFwcC1ib3Vu
ZCBKYXZhU2NyaXB0IGFuZCBOYXZpZ2F0aW9uIGZhaWx1cmVzIHNob3VsZCBoYXZlIHNwZWNpZmlj
IGVycm9yIGNvZGVzLgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2Mzc1OCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVGVzdC5oIgogI2lu
Y2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsNyArNDcsNyBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LjI1LCBiKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQRUNUX0VR
KDF1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKGMxLmNzc1Rl
eHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEoc2Vy
aWFsaXphdGlvbkZvckNTUyhjMSksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7CiB9
CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQpAQCAtNjQsNyArNjUsNyBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291
bnQoKSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0g
ICAgRVhQRUNUX0VRKGMyLmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSki
KTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5
LXAzIDEgMC41IDAuMjUpIik7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkK
QEAgLTgyLDcgKzgzLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1RfRVEoMnUsIGMxLmFzRXh0ZW5k
ZWQoKS5yZWZDb3VudCgpKTsKICAgICBFWFBFQ1RfRVEoMnUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZD
b3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzIuY3NzVGV4dCgpLCAiY29sb3IoZGlzcGxheS1wMyAx
IDAuNSAwLjI1KSIpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNv
bG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBF
cXVhbGl0eSkKQEAgLTE2Niw3ICsxNjcsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25z
dHJ1Y3RvcikKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNv
dW50KCkpOwotICAgIEVYUEVDVF9FUShjMi5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5LXAzIDEg
MC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29s
b3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1v
dmVBc3NpZ25tZW50KQpAQCAtMTg4LDcgKzE4OSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92
ZUFzc2lnbm1lbnQpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwogICAgIEVYUEVDVF9G
TE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMyLmFzRXh0ZW5kZWQoKS5y
ZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzIuY3NzVGV4dCgpLCAiY29sb3IoZGlzcGxheS1w
MyAxIDAuNSAwLjI1KSIpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwg
ImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9y
LCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQpAQCAtMjA2LDcgKzIwNyw3IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGkKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwg
Yik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgzdSwg
YzItPmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzItPmNzc1RleHQo
KSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFs
aXphdGlvbkZvckNTUygqYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogCiAg
ICAgZGVsZXRlIGMxOwogICAgIEVYUEVDVF9FUSgydSwgYzItPmFzRXh0ZW5kZWQoKS5yZWZDb3Vu
dCgpKTsKQEAgLTIzMiw3ICsyMzMsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFJldHVyblZhbHVl
cykKICAgICBFWFBFQ1RfVFJVRShjMi5pc0V4dGVuZGVkKCkpOwogCiAgICAgRVhQRUNUX0VRKDF1
LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKGMyLmNzc1RleHQo
KSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFs
aXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7CiB9CiAK
IFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403252</attachid>
            <date>2020-06-30 17:02:33 -0700</date>
            <delta_ts>2020-06-30 18:58:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213820-20200630170232.patch</filename>
            <type>text/plain</type>
            <size>63687</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA2LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBDb2xvciBzZXJpYWxpemF0
aW9uIG91dCBvZiBDb2xvciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlIGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIHJlbGF0ZWQgZnVu
Y3Rpb25zIG91dCBvZiB0aGUgQ29sb3IgZmFtaWx5CisgICAgICAgIG9mIGNsYXNzZXMsIGFuZCBp
bnRvIGEgc3RhbmRhbG9uZSBDb2xvclNlcmlhbGl6YXRpb24uaAorICAgICAgICAKKyAgICAgICAg
Tm93IGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIGNhbGxzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRo
cmVlIGZ1bmN0aW9ucywgZGVwZW5kaW5nIG9uIG5lZWQ6CisKKyAgICAgICAgICAgIC0gc2VyaWFs
aXphdGlvbkZvckNTUyguLi4pCisgICAgICAgICAgICAtIHNlcmlhbGl6YXRpb25Gb3JIVE1MKC4u
LikKKyAgICAgICAgICAgIC0gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoLi4uKQor
CisgICAgICAgIFRoZXNlIGFyZSBvdmVybG9hZCBmb3IgYWxsIHRocmVlIENvbG9yIGNsYXNzZXMg
KENvbG9yLCBTaW1wbGVDb2xvciBhbmQgRXh0ZW5kZWRDb2xvcikgdG8KKyAgICAgICAgYWxsb3cg
ZWFzeSB1c2Ugd2l0aG91dCBuZWNlc3NhcmlseSBuZWVkaW5nIHRvIGNvbnN0cnVjdCBhbm90aGVy
IHR5cGUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
QWRkIG5ldyBmaWxlcy4KKyAgICAKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmZvcm1hdE51bWJlckZvckN1
c3RvbUNTU1RleHQgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6aW52ZXJzZVRyYW5zZm9ybUNvbG9ySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVz
KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAgICog
aHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6ZGlkQ2hvb3NlQ29sb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Y29sb3IgY29uc3Qp
OgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTiBjb25z
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudCk6Cisg
ICAgICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y29sb3JQcm9wZXJ0eUNT
UyBjb25zdCk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJl
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXplZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y3NzVGV4dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1Rl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25G
b3JIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
ZGVkQ29sb3I6OmNzc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9w
ZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmlj
Q3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNDdWU6OnRvSlNPTlN0cmlu
ZyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY2ltYWxEaWdpdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9y
Q1NTIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29k
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlUmVuZGVyU1ZHVGV4dEJveCk6Cisg
ICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlld0Jh
c2VCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpoaWdobGln
aHRQc2V1ZG9FbGVtZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzeXN0
ZW1Db2xvckZvckNTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Zm9jdXNS
aW5nQ29sb3IpOgorICAgICAgICBBZG9wdCBuZXcgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisK
IDIwMjAtMDYtMzAgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvZGUgY2xlYW51cCBpbiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGFuZCBBWElz
b2xhdGVkVHJlZS5oLgpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjM3NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYg
KzEwODUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZp
c2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkwOCw2ICsxOTA4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlk
Z2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNDQsNiArMjM0NCw3IEBACiAJCTdD
Q0VCRkMwMUREOEY2QUIwMDJDNDBCOCAvKiBTVkdMZW5ndGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENTMxREQ3QjA5MzAwMTI4NTUy
IC8qIFNWR0xlbmd0aFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NEMEUy
QjUxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oICovOyB9OwogCQk3Q0QwRTJC
RjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBFMkJDMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9y
dFNpZ25hbC5oICovOyB9OworCQk3Q0QxRTY5MzI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJp
YWxpemF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0QxRTY5MTI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NENDk0Q0QxQTg2
RUIxRDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5k
ZXJBdHRhY2htZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0NENThERkIxRjk1NjVBNTAwMTEyNzkxIC8qIFNldHRpbmdzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VCNTdFOTFGOTU2NTE1MDAw
OTdBRUMgLyogU2V0dGluZ3MuaCAqLzsgfTsKIAkJN0NENThERkQxRjk1NjVBODAwMTEyNzkxIC8q
IFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRUI1N0VBMUY5NTY1MTUwMDA5N0FFQyAvKiBTZXR0aW5ncy5jcHAgKi87IH07CkBAIC0x
MDE5Myw2ICsxMDE5NCw4IEBACiAJCTdDRDBFMkJDMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNp
Z25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBYm9ydFNpZ25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0QwRTJCRDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEFib3J0U2lnbmFsLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMUU2OTEy
NEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2xvclNlcmlhbGl6YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMUU2
OTIyNEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb2xvclNlcmlhbGl6YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0QzNDQwRDFGMzEwODM2MDAwRENENDkgLyogTXV0YXRpb25DYWxsYmFjay5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTXV0YXRpb25DYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDRDM0NDExMUYzMTA4REQwMDBEQ0Q0OSAvKiBKU011dGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNdXRhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDRDM0NDEyMUYzMTA4RTIwMDBEQ0Q0OSAvKiBKU011dGF0aW9u
Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNdXRhdGlvbkNhbGxiYWNrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTAwLDYgKzI1NTAzLDggQEAKIAkJCQk3
Q0FDNkFFQzI0N0YxQzUxMDBFNjFENTkgLyogQ29sb3JDb21wb25lbnRzLmggKi8sCiAJCQkJMzEw
M0I3REUxREIwMTU1NjAwOEJCODkwIC8qIENvbG9ySGFzaC5oICovLAogCQkJCTdDQUM2QUU4MjQ3
RjA4MjAwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5oICovLAorCQkJCTdDRDFFNjkyMjRBQkY2MjQw
MDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTdDRDFFNjkxMjRBQkY2
MjQwMDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCAqLywKIAkJCQk5MzgyREY1NzEwQThE
NUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovLAogCQkJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2
ODIwNCAvKiBDb2xvclR5cGVzLmggKi8sCiAJCQkJMEZFNkM3NkIxRkJGQjdBNjAwMjVDMDUzIC8q
IENvbG9yVXRpbGl0aWVzLmNwcCAqLywKQEAgLTMwMDc5LDYgKzMwMDg0LDcgQEAKIAkJCQlDRTUx
NjlFNzIxRjFCODQ3MDBFQTRGNzggLyogQ29sb3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUVE
RTNBNTAwMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NBQzZBRTkyNDdGMDgyRjAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLywK
KwkJCQk3Q0QxRTY5MzI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzgyREY1ODEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlw
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUFGNjZCMjNCRkMzOUUwMDQwMzBEQSAvKiBDb2xv
clV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgi
CiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRDU1NPTVByaW1pdGl2
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKQEAgLTEwODYsNyArMTA4Nyw3IEBA
IEFMV0FZU19JTkxJTkUgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjoKICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUVVBRDoKICAgICAgICAgcmV0dXJuIHF1YWRWYWx1ZSgpLT5jc3NUZXh0KCk7
CiAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JHQkNPTE9SOgotICAgICAgICByZXR1cm4gY29s
b3IoKS5jc3NUZXh0KCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9y
KCkpOwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgogICAgICAgICByZXR1cm4gcGFp
clZhbHVlKCktPmNzc1RleHQoKTsKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQzoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDI2Mzc3
NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgorI2luY2x1ZGUg
IkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJF
ZGl0b3IuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTE2MzEsNyArMTYzMiw3IEBAIFJl
ZjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6aW52ZXJzZVQKICAgICBhdXRvIGludmVydGVk
Q29sb3IgPSBbJl0oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSB7CiAgICAgICAgIENvbG9yIG5l
d0NvbG9yID0gY3NzVmFsdWVUb0NvbG9yKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKCptX211dGFibGVT
dHlsZSwgcHJvcGVydHlJRCkuZ2V0KCkpOwogICAgICAgICBjb2xvckZpbHRlci5pbnZlcnNlVHJh
bnNmb3JtQ29sb3IobmV3Q29sb3IpOwotICAgICAgICBzdHlsZVdpdGhJbnZlcnRlZENvbG9ycy0+
bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld0NvbG9yLmNzc1RleHQo
KSk7CisgICAgICAgIHN0eWxlV2l0aEludmVydGVkQ29sb3JzLT5tX211dGFibGVTdHlsZS0+c2V0
UHJvcGVydHkocHJvcGVydHlJRCwgc2VyaWFsaXphdGlvbkZvckNTUyhuZXdDb2xvcikpOwogICAg
IH07CiAKICAgICBpZiAoY29sb3IpCkBAIC0xODA3LDcgKzE4MDgsNyBAQCB2b2lkIFN0eWxlQ2hh
bmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1CiAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpIHsKICAgICAgICAgYXV0byBjb2xvciA9IHRleHRDb2xv
ckZyb21TdHlsZShzdHlsZSk7CiAgICAgICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0gICAg
ICAgICAgICBtX2FwcGx5Rm9udENvbG9yID0gY29sb3Iuc2VyaWFsaXplZCgpOworICAgICAgICAg
ICAgbV9hcHBseUZvbnRDb2xvciA9IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKTsKICAgICAg
ICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQkocmV2aXNpb24gMjYzNzc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bXBvcnQgIkF0dHIuaCIKICNpbXBvcnQgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKKyNpbXBvcnQg
IkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2ltcG9ydCAiRWRpdGluZy5oIgogI2ltcG9ydCAiRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKQEAg
LTYyOCw3ICs2MjksNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKHRvU1JHQkEoaHNsYSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVl
Q3VycmVudGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCB1bmRl
cmxpbmVDb2xvci5zZXJpYWxpemF0aW9uRm9yQ1NTKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRE
ZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1ModW5kZXJsaW5lQ29sb3IpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyNjM3Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFs
aXphdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSFRNTERhdGFMaXN0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCkBAIC0yMTksNyArMjIwLDcgQEAg
dm9pZCBDb2xvcklucHV0VHlwZTo6ZGlkQ2hvb3NlQ29sb3IoY29ucwogICAgIGlmIChlbGVtZW50
KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8IGNvbG9yID09IHZhbHVlQXNDb2xvcigpKQog
ICAgICAgICByZXR1cm47CiAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwotICAgIGVsZW1lbnQo
KS0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBlbGVtZW50
KCktPnNldFZhbHVlRnJvbVJlbmRlcmVyKHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSk7CiAg
ICAgdXBkYXRlQ29sb3JTd2F0Y2goKTsKICAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9u
IDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkNhbnZhc1BhdHRlcm4uaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNs
dWRlICJET01NYXRyaXguaCIKICNpbmNsdWRlICJET01NYXRyaXgyREluaXQuaCIKICNpbmNsdWRl
ICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCkBAIC02MjYsNyArNjI3LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogCiBTdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2hhZG93Q29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0
ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQoKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZv
ckhUTUwoc3RhdGUoKS5zaGFkb3dDb2xvcik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gMjYz
Nzc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAj
aW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
Q29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTA5LDcgKzExMCw3IEBAIGlubGluZSBSZWZQdHI8Q2FudmFzUGF0
dGVybj4gQ2FudmFzU3R5bGUKIGlubGluZSBTdHJpbmcgQ2FudmFzU3R5bGU6OmNvbG9yKCkgY29u
c3QKIHsKICAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1f
c3R5bGUpID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpnZXQ8Q01ZS0FDb2xvcj4o
bV9zdHlsZSkuY29sb3JDb252ZXJ0ZWRUb1NSR0JBOwotICAgIHJldHVybiBjb2xvci5zZXJpYWxp
emVkKCk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWVHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTFNwYW5FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKQEAgLTEyNSw5ICsxMjYsOSBAQCB2b2lkIFRleHRUcmFja0N1ZUdlbmVy
aWNCb3hFbGVtZW50OjphcHBsCiAgICAgfQogCiAgICAgaWYgKGN1ZS0+Zm9yZWdyb3VuZENvbG9y
KCkuaXNWYWxpZCgpKQotICAgICAgICBjdWVFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5Q29sb3IsIGN1ZS0+Zm9yZWdyb3VuZENvbG9yKCkuc2VyaWFsaXplZCgpKTsK
KyAgICAgICAgY3VlRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNv
bG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjdWUtPmZvcmVncm91bmRDb2xvcigpKSk7CiAgICAg
aWYgKGN1ZS0+aGlnaGxpZ2h0Q29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgIGN1ZUVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGN1ZS0+
aGlnaGxpZ2h0Q29sb3IoKS5zZXJpYWxpemVkKCkpOworICAgICAgICBjdWVFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBzZXJpYWxpemF0
aW9uRm9ySFRNTChjdWUtPmhpZ2hsaWdodENvbG9yKCkpKTsKIAogICAgIGlmIChjdWUtPmdldFdy
aXRpbmdEaXJlY3Rpb24oKSA9PSBWVFRDdWU6Okhvcml6b250YWwpCiAgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIENTU1ZhbHVlQXV0byk7CkBAIC0xNDUs
NyArMTQ2LDcgQEAgdm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6YXBwbAogICAg
ICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBDU1NWYWx1
ZVN0YXJ0KTsKIAogICAgIGlmIChjdWUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
Y3VlLT5iYWNrZ3JvdW5kQ29sb3IoKS5zZXJpYWxpemVkKCkpOworICAgICAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBzZXJpYWxpemF0aW9uRm9y
SFRNTChjdWUtPmJhY2tncm91bmRDb2xvcigpKSk7CiAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdyaXRpbmdNb2RlLCBjdWUtPmdldENTU1dyaXRpbmdNb2RlKCksIGZhbHNl
KTsKICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NT
VmFsdWVQcmVXcmFwKTsKIApAQCAtMjQ1LDExICsyNDYsMTEgQEAgYm9vbCBUZXh0VHJhY2tDdWVH
ZW5lcmljOjppc1Bvc2l0aW9uZWRBYgogdm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljOjp0b0pTT04o
SlNPTjo6T2JqZWN0JiBvYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKG1fZm9yZWdyb3VuZENvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgb2JqZWN0LnNldFN0cmluZygiZm9yZWdyb3VuZENvbG9yIl9z
LCBtX2ZvcmVncm91bmRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3Quc2V0U3Ry
aW5nKCJmb3JlZ3JvdW5kQ29sb3IiX3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKG1fZm9yZWdyb3Vu
ZENvbG9yKSk7CiAgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
b2JqZWN0LnNldFN0cmluZygiYmFja2dyb3VuZENvbG9yIl9zLCBtX2JhY2tncm91bmRDb2xvci5z
ZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJiYWNrZ3JvdW5kQ29sb3Ii
X3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKG1fYmFja2dyb3VuZENvbG9yKSk7CiAgICAgaWYgKG1f
aGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJoaWdo
bGlnaHRDb2xvciJfcywgbV9oaWdobGlnaHRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBv
YmplY3Quc2V0U3RyaW5nKCJoaWdobGlnaHRDb2xvciJfcywgc2VyaWFsaXphdGlvbkZvckhUTUwo
bV9oaWdobGlnaHRDb2xvcikpOwogICAgIGlmIChtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRl
b0hlaWdodCkKICAgICAgICAgb2JqZWN0LnNldERvdWJsZSgicmVsYXRpdmVGb250U2l6ZSJfcywg
bV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQpOwogICAgIGlmIChtX2ZvbnRTaXpl
TXVsdGlwbGllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiQ29s
b3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgpAQCAtMTE4OCw3ICsxMTg5LDcgQEAgUmVm
PEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0bwogICAgIGZvciAoYXV0byYgY29s
b3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgewogICAgICAgICBhdXRvIHN0b3AgPSBKU09OOjpB
cnJheU9mPEpTT046OlZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oY29s
b3JTdG9wLm9mZnNldCk7Ci0gICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGNvbG9y
U3RvcC5jb2xvci5jc3NUZXh0KCkpKTsKKyAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRh
dGEoc2VyaWFsaXphdGlvbkZvckNTUyhjb2xvclN0b3AuY29sb3IpKSk7CiAgICAgICAgIHN0b3Bz
LT5hZGRJdGVtKFdURk1vdmUoc3RvcCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlz
aW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tM
aXN0LmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKQEAgLTM1Niw3ICszNTcsOCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUY6OndpCiBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUY6OmNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBib29sIGltcG9ydGFudCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgYXBwZW5kQ1NTKGJ1aWxkZXIsIGlkLCBjb2xvci5zZXJpYWxpemVkKCksIGltcG9ydGFudCk7
CisgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyBzaG91bGQgYmUgdXNpbmcgc2VyaWFsaXph
dGlvbkZvckNTUyBpbnN0ZWFkPworICAgIGFwcGVuZENTUyhidWlsZGVyLCBpZCwgc2VyaWFsaXph
dGlvbkZvckhUTUwoY29sb3IpLCBpbXBvcnRhbnQpOwogICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxv
YWRlci5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkRhdGFU
cmFuc2Zlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgpAQCAtNTU4LDcgKzU1OSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRl
RWRpdERyYWcoY28KICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKICAgICAgICAgaWYgKGlz
RW5hYmxlZENvbG9ySW5wdXQoKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICBhdXRvJiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KTsKLSAgICAgICAgICAgIGlucHV0
LnNldFZhbHVlKGNvbG9yLnNlcmlhbGl6ZWQoKSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50
KTsKKyAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9y
KSwgRGlzcGF0Y2hJbnB1dEFuZENoYW5nZUV2ZW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAjZW5kaWYKQEAgLTU2Niw3ICs1NjcsNyBAQCBib29sIERyYWdDb250cm9s
bGVyOjpjb25jbHVkZUVkaXREcmFnKGNvCiAgICAgICAgIGlmICghaW5uZXJSYW5nZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVBy
b3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlDb2xvciwgY29sb3Iuc2VyaWFsaXplZCgpLCBmYWxzZSk7CisgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvciksIGZh
bHNlKTsKICAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxl
KHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKQEAg
LTE0NDQsNyArMTQ0NSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6Omluc2VydERyb3BwZWRJbWFn
ZVAKICAgICAgICAgaW1hZ2UtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRN
TE5hbWVzOjp3aWR0aEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpKTsKICAg
ICAgICAgaW1hZ2UtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVz
OjpoZWlnaHRBdHRyLCBBdG9tU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAg
ICBpbWFnZS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1heFdpZHRoLCAxMDAs
IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIGltYWdlLT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihDb2xvcjo6Ymxh
Y2spLmNvbG9yV2l0aEFscGhhKDAuMDUpLmNzc1RleHQoKSk7CisgICAgICAgIGltYWdlLT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBzZXJpYWxpemF0
aW9uRm9yQ1NTKENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgxMykpKTsKICAgICAgICAgaW1h
Z2UtPnNldElzRHJvcHBlZEltYWdlUGxhY2Vob2xkZXIoKTsKICAgICAgICAgZnJhZ21lbnQtPmFw
cGVuZENoaWxkKFdURk1vdmUoaW1hZ2UpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CkBAIC03OSwyNyArODAsNiBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9y
PShDb2xvciYmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotU3RyaW5nIENvbG9yOjpz
ZXJpYWxpemVkKCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1
cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5zZXJpYWxp
emF0aW9uRm9ySFRNTCgpOwotfQotCi1TdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAotewot
ICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3NzVGV4
dCgpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLnNlcmlhbGl6YXRpb25Gb3JDU1MoKTsKLX0KLQot
U3RyaW5nIENvbG9yOjpuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7Ci0g
ICAgcmV0dXJuIGFzU2ltcGxlKCkuc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsK
LX0KLQogQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgpIGNvbnN0CiB7CiAgICAgLy8gSGFyZGNvZGUg
dGhpcyBjb21tb24gY2FzZSBmb3Igc3BlZWQuCkBAIC0xOTUsNyArMTc1LDcgQEAgU1JHQkE8Zmxv
YXQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIHRzIDw8
IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7CisgICAgcmV0dXJuIHRzIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKTsKIH0KIAogVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjM3NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsMTUgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY29sb3JEYXRhLmV4
dGVuZGVkQ29sb3ItPmRlcmVmKCk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgY29sb3Ig
c2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKLSAgICAvLyA8aHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxl
cz4gKDEwIFNlcHRlbWJlciAyMDE1KQotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emVkKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotCi0gICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhcyBlaXRoZXIgI1JSR0dC
QiBvciAjUlJHR0JCQUEKLSAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dDsKLQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAo
bV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyAmIHZhbGlkU2ltcGxlQ29sb3JCaXQpOyB9
CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNTaW1wbGUoKS5pc09wYXF1ZSgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2Vy
aWFsaXphdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNpbXBsZUNv
bG9yIG92ZXJsb2FkcworCitzdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVy
KQoreworICAgIEFTU0VSVChudW1iZXIgPCAxMCk7CisgICAgcmV0dXJuICcwJyArIG51bWJlcjsK
K30KKworc3RhdGljIHN0ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlv
bmFsQWxwaGFWYWx1ZSh1aW50OF90IGFscGhhKQoreworICAgIEFTU0VSVChhbHBoYSA+IDApOwor
ICAgIEFTU0VSVChhbHBoYSA8IDB4RkYpOworICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3Rikg
LyAweEZGICogMHhGRiArIDUwKSAvIDEwMCAhPSBhbHBoYSkKKyAgICAgICAgcmV0dXJuIHsgeyBk
ZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAq
IDEwMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAw
eEZGICUgMTApLCAnXDAnIH0gfTsKKyAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAx
MDAgKyAweDdGKSAvIDB4RkYgJSAxMCkKKyAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQo
YWxwaGEgKiAxMCAvIDB4RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcg
fSB9OworICAgIHJldHVybiB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAw
eEZGKSwgJ1wwJywgJ1wwJywgJ1wwJyB9IH07Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKGNvbnN0IFNpbXBsZUNvbG9yJiBjb2xvcikKK3sKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBzd2l0Y2ggKGFscGhhKSB7CisgICAgY2FzZSAwOgor
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWQsICIsICIsIGdyZWVuLCAiLCAi
LCBibHVlLCAiLCAwKSIpOworICAgIGNhc2UgMHhGRjoKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoInJnYigiLCByZWQsICIsICIsIGdyZWVuLCAiLCAiLCBibHVlLCAnKScpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZCwgIiwgIiwgZ3JlZW4s
ICIsICIsIGJsdWUsICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1
ZShhbHBoYSkuZGF0YSgpLCAnKScpOworICAgIH0KK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbnN0IFNpbXBsZUNvbG9yJiBjb2xvcikKK3sKKyAgICBhdXRvIFtyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYV0gPSBjb2xvcjsKKyAgICBpZiAoY29sb3IuaXNPcGFxdWUoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyLCBMb3dlcmNhc2UpLCBoZXgoZ3Jl
ZW4sIDIsIExvd2VyY2FzZSksIGhleChibHVlLCAyLCBMb3dlcmNhc2UpKTsKKyAgICByZXR1cm4g
c2VyaWFsaXphdGlvbkZvckNTUyhjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChjb25zdCBTaW1wbGVDb2xvciYgY29sb3IpCit7CisgICAgYXV0byBb
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3I7CisgICAgaWYgKGFscGhhIDwgMHhGRikK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkLCAyKSwgaGV4KGdyZWVuLCAy
KSwgaGV4KGJsdWUsIDIpLCBoZXgoYWxwaGEsIDIpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygn
IycsIGhleChyZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMikpOworfQorCisKKy8v
IEV4dGVuZGVkQ29sb3Igb3ZlcmxvYWRzCisKK3N0YXRpYyBBU0NJSUxpdGVyYWwgc2VyaWFsaXph
dGlvbihDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7
CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgorICAgICAgICByZXR1cm4gInNyZ2IiX3M7Cisg
ICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiAibGluZWFyLXNy
Z2IiX3M7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiAi
ZGlzcGxheS1wMyJfczsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gIiJfczsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgRXh0ZW5k
ZWRDb2xvciYgY29sb3IpCit7CisgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3Iu
Y29tcG9uZW50cygpOworICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYWxwaGEsIDEu
MGYpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgc2VyaWFsaXphdGlvbihj
b2xvci5jb2xvclNwYWNlKCkpLCAnICcsIGMxLCAnICcsIGMyLCAnICcsIGMzLCAnKScpOworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3Bh
Y2UoKSksICcgJywgYzEsICcgJywgYzIsICcgJywgYzMsICIgLyAiLCBhbHBoYSwgJyknKTsKK30K
KworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNvbG9y
KQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKK30KKworU3RyaW5n
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGNv
bG9yKQoreworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKTsKK30KKworLy8g
Q29sb3Igb3ZlcmxvYWRzCisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4g
c2VyaWFsaXphdGlvbkZvckNTUyhjb2xvci5hc0V4dGVuZGVkKCkpOworICAgIHJldHVybiBzZXJp
YWxpemF0aW9uRm9yQ1NTKGNvbG9yLmFzU2ltcGxlKCkpOworfQorCitTdHJpbmcgc2VyaWFsaXph
dGlvbkZvckhUTUwoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChjb2xvci5pc0V4dGVu
ZGVkKCkpCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc0V4dGVu
ZGVkKCkpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvci5hc1NpbXBsZSgp
KTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENv
bG9yJiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNFeHRlbmRlZCgpKTsK
KyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IuYXNTaW1w
bGUoKSk7Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JTZXJpYWxpemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRXh0ZW5kZWRDb2xvcjsKK2Ns
YXNzIFNpbXBsZUNvbG9yOworCisvLyBzZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBj
b2xvciBzZXJpYWxpemVkIGFjY29yZGluZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hh
dHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4g
KDEwIFNlcHRlbWJlciAyMDE1KQorLy8gc2VyaWFsaXphdGlvbkZvckNTUyByZXR1cm5zIHRoZSBj
b2xvciBzZXJpYWxpemVkIGFjY29yZGluZyB0byBDU1MKKy8vIHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0IHJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgZm9yIER1bXBSZW5kZXJU
cmVlLCAjUlJHR0JCLCAjUlJHR0JCQUEgb3IgdGhlIENTUyBzZXJpYWxpemF0aW9uCisKKworV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgU2ltcGxlQ29sb3Im
KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBTaW1w
bGVDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJU
cmVlQXNUZXh0KGNvbnN0IFNpbXBsZUNvbG9yJik7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9yQ1NTKGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBFeHRlbmRlZENvbG9yJik7CitXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3Qg
RXh0ZW5kZWRDb2xvciYpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZv
ckNTUyhjb25zdCBDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25G
b3JIVE1MKGNvbnN0IENvbG9yJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgQ29sb3ImKTsKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlz
aW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwyOSArNDUsNiBAQCB1bnNpZ25lZCBF
eHRlbmRlZENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gY29tcHV0ZUhhc2goYzEsIGMy
LCBjMywgYWxwaGEsIG1fY29sb3JTcGFjZSk7CiB9CiAKLVN0cmluZyBFeHRlbmRlZENvbG9yOjpj
c3NUZXh0KCkgY29uc3QKLXsKLSAgICBjb25zdCBjaGFyKiBjb2xvclNwYWNlOwotICAgIHN3aXRj
aCAobV9jb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICBj
b2xvclNwYWNlID0gInNyZ2IiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbG9yU3BhY2U6
OkRpc3BsYXlQMzoKLSAgICAgICAgY29sb3JTcGFjZSA9ICJkaXNwbGF5LXAzIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBXVEY6OmVtcHR5U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgYXV0byBbYzEsIGMy
LCBjMywgZXhpc3RpbmdBbHBoYV0gPSBjb21wb25lbnRzKCk7Ci0KLSAgICBpZiAoV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGFscGhhKCksIDEuMGYpKQotICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygiY29sb3IoIiwgY29sb3JTcGFjZSwgJyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgJyknKTsK
LQotICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb2xvcigiLCBjb2xvclNwYWNlLCAnICcsIGMxLCAn
ICcsIGMyLCAnICcsIGMzLCAiIC8gIiwgZXhpc3RpbmdBbHBoYSwgJyknKTsKLX0KLQogUmVmPEV4
dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IG92ZXJyaWRl
QWxwaGEpIGNvbnN0CiB7CiAgICAgYXV0byBbYzEsIGMyLCBjMywgZXhpc3RpbmdBbHBoYV0gPSBj
b21wb25lbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsOCArNDYsNiBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+
IGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAy
NjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKIAorI2luY2x1ZGUgIkNvbG9y
U2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTkzMSw3ICs5MzEsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRTCiAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiKHByaW1hcnktbGF5ZXItaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIp
XG4iOwogCiAgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSAmJiBjbGllbnQoKS5z
aG91bGREdW1wUHJvcGVydHlGb3JMYXllcih0aGlzLCAiYmFja2dyb3VuZENvbG9yIiwgYmVoYXZp
b3IpKQotICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIihiYWNrZ3JvdW5kQ29sb3IgIiA8PCBtX2Jh
Y2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICIpXG4iOworICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIihiYWNrZ3JvdW5kQ29sb3IgIiA8PCBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChtX2JhY2tncm91bmRDb2xvcikgPDwgIilcbiI7CiAKICAgICBpZiAo
YmVoYXZpb3IgJiBMYXllclRyZWVBc1RleHRJbmNsdWRlQWNjZWxlcmF0ZXNEcmF3aW5nICYmIG1f
YWNjZWxlcmF0ZXNEcmF3aW5nKQogICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIihhY2NlbGVyYXRl
c0RyYXdpbmcgIiA8PCBtX2FjY2VsZXJhdGVzRHJhd2luZyA8PCAiKVxuIjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZEdlbmVyaWNDdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZEdlbmVyaWNDdWUu
Y3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbmJhbmRHZW5lcmljQ3VlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAog
CiAjaWYgRU5BQkxFKFZJREVPKQogCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NCwxMyArOTYsMTMgQEAgU3RyaW5nIEluYmFu
ZEdlbmVyaWNDdWU6OnRvSlNPTlN0cmluZygpIAogICAgIH0KIAogICAgIGlmIChtX2N1ZURhdGEu
bV9mb3JlZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBvYmplY3QtPnNldFN0cmluZygi
Zm9yZWdyb3VuZENvbG9yIl9zLCBtX2N1ZURhdGEubV9mb3JlZ3JvdW5kQ29sb3Iuc2VyaWFsaXpl
ZCgpKTsKKyAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoImZvcmVncm91bmRDb2xvciJfcywgc2Vy
aWFsaXphdGlvbkZvckhUTUwobV9jdWVEYXRhLm1fZm9yZWdyb3VuZENvbG9yKSk7CiAKICAgICBp
ZiAobV9jdWVEYXRhLm1fYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgb2JqZWN0
LT5zZXRTdHJpbmcoImJhY2tncm91bmRDb2xvciJfcywgbV9jdWVEYXRhLm1fYmFja2dyb3VuZENv
bG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJiYWNrZ3JvdW5k
Q29sb3IiX3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKG1fY3VlRGF0YS5tX2JhY2tncm91bmRDb2xv
cikpOwogCiAgICAgaWYgKG1fY3VlRGF0YS5tX2hpZ2hsaWdodENvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoImhpZ2hsaWdodENvbG9yIl9zLCBtX2N1ZURhdGEubV9o
aWdobGlnaHRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3QtPnNldFN0cmluZygi
aGlnaGxpZ2h0Q29sb3IiX3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKG1fY3VlRGF0YS5tX2hpZ2hs
aWdodENvbG9yKSk7CiAKICAgICBpZiAobV9jdWVEYXRhLm1fYmFzZUZvbnRTaXplKQogICAgICAg
ICBvYmplY3QtPnNldERvdWJsZSgiYmFzZUZvbnRTaXplIl9zLCBtX2N1ZURhdGEubV9iYXNlRm9u
dFNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29s
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYzNzc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAKLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTaW1wbGVDb2xvciBwcmVtdWx0aXBseUZs
b29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQpAQCAtNjIsNDcgKzU3LDUgQEAgU2ltcGxlQ29sb3Ig
dW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjbwogICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
dW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKLVN0cmluZyBTaW1wbGVDb2xvcjo6
c2VyaWFsaXphdGlvbkZvckhUTUwoKSBjb25zdAotewotICAgIGlmIChpc09wYXF1ZSgpKQotICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiwgTG93ZXJj
YXNlKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSksIGhleChibHVlQ29tcG9u
ZW50KCksIDIsIExvd2VyY2FzZSkpOwotICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7
Ci19Ci0KLXN0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCi17Ci0gICAg
QVNTRVJUKG51bWJlciA8IDEwKTsKLSAgICByZXR1cm4gJzAnICsgbnVtYmVyOwotfQotCi1zdGF0
aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZh
bHVlKHVpbnQ4X3QgYWxwaGEpCi17Ci0gICAgQVNTRVJUKGFscGhhID4gMCk7Ci0gICAgQVNTRVJU
KGFscGhhIDwgMHhGRik7Ci0gICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4RkYgKiAw
eEZGICsgNTApIC8gMTAwICE9IGFscGhhKQotICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdp
dChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICogMTAwIC8gMHhG
RiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4RkYgJSAxMCks
ICdcMCcgfSB9OwotICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEwMCArIDB4N0Yp
IC8gMHhGRiAlIDEwKQotICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChhbHBoYSAqIDEw
IC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9IH07Ci0gICAg
cmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4RkYpLCAnXDAn
LCAnXDAnLCAnXDAnIH0gfTsKLX0KLQotU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9u
Rm9yQ1NTKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGFscGhhQ29tcG9uZW50KCkpIHsKLSAgICBj
YXNlIDA6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENvbXBvbmVudCgp
LCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCksICIsIDApIik7
Ci0gICAgY2FzZSAweEZGOgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICcpJyk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwg
cmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9uZW50KCksICIsICIsIGJsdWVDb21wb25l
bnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKGFscGhh
Q29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xv
cjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIGlmIChh
bHBoYUNvbXBvbmVudCgpIDwgMHhGRikKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBo
ZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVl
Q29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFDb21wb25lbnQoKSwgMikpOwotICAgIHJldHVybiBt
YWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50
KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7Ci19CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAkocmV2aXNpb24gMjYzNzc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDYgQEAgcHVi
bGljOgogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFD
b21wb25lbnQoKSA9PSAweEZGOyB9CiAgICAgY29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29u
c3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQogCi0gICAgU3RyaW5nIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25z
dDsKLSAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsK
LQogICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhh
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHsgKG1fdmFsdWUgJiAweDAwRkZGRkZGKSB8
IGFscGhhIDw8IDI0IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNjM3Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMzEsNyArMTMyLDcgQEAgVGV4dFN0
cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlcwogewogICAgIHRzIDw8IGluZGVudCA8
PCJbZmVEcm9wU2hhZG93IjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwg
bV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIgZHk9
XCIiIDw8IG1fZHkgPDwgIlwiIGZsb29kLWNvbG9yPVwiIiA8PCBtX3NoYWRvd0NvbG9yLm5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dP
cGFjaXR5IDw8ICJdXG4iOworICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBtX3N0ZFgg
PDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiIGR4PVwiIiA8PCBtX2R4IDw8ICJcIiBkeT1cIiIgPDwg
bV9keSA8PCAiXCIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KG1fc2hhZG93Q29sb3IpIDw8IlwiIGZsb29kLW9wYWNpdHk9XCIiIDw8IG1fc2hhZG93
T3BhY2l0eSA8PCAiXVxuIjsKIAogICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKICAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVGbG9vZC5oIgogCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgpAQCAtNzEsNyArNzIsNyBAQCBUZXh0U3RyZWFtJiBGRUZsb29kOjpl
eHRlcm5hbFJlcHJlc2VudGF0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CiAg
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7Ci0gICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwgZmxvb2RDb2xvcigpLm5hbWVGb3JS
ZW5kZXJUcmVlQXNUZXh0KCkgPDwgIlwiICIKKyAgICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8
PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChmbG9vZENvbG9yKCkpIDw8ICJcIiAi
CiAgICAgICAgPDwgImZsb29kLW9wYWNpdHk9XCIiIDw8IGZsb29kT3BhY2l0eSgpIDw8ICJcIl1c
biI7CiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMjYzNzc3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ2xp
cFJlY3QuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIK
QEAgLTIzOSwyMyArMjQwLDIzIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJP
YmplY3QKICAgICAgICAgaWYgKG8ucGFyZW50KCkpIHsKICAgICAgICAgICAgIENvbG9yIGNvbG9y
ID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKICAg
ICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJlbnQoKS0+c3R5
bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIGNvbG9yKSkKLSAg
ICAgICAgICAgICAgICB0cyA8PCAiIFtjb2xvcj0iIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVl
QXNUZXh0KCkgPDwgIl0iOworICAgICAgICAgICAgICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpIDw8ICJdIjsKIAogICAgICAgICAg
ICAgLy8gRG8gbm90IGR1bXAgaW52YWxpZCBvciB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcywgc2lu
Y2UgdGhhdCBpcyB0aGUgZGVmYXVsdC4KICAgICAgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xv
ciA9IG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBh
cmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciksIGJhY2tncm91bmRDb2xvcikKICAgICAgICAgICAgICAgICAmJiBiYWNrZ3JvdW5k
Q29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQotICAgICAgICAgICAgICAgIHRzIDw8ICIgW2Jn
Y29sb3I9IiA8PCBiYWNrZ3JvdW5kQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAi
XSI7CisgICAgICAgICAgICAgICAgdHMgPDwgIiBbYmdjb2xvcj0iIDw8IHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KGJhY2tncm91bmRDb2xvcikgPDwgIl0iOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBDb2xvciB0ZXh0RmlsbENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwogICAgICAgICAgICAg
aWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLCB0ZXh0Rmls
bENvbG9yKQogICAgICAgICAgICAgICAgICYmIHRleHRGaWxsQ29sb3IgIT0gY29sb3IgJiYgdGV4
dEZpbGxDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCi0gICAgICAgICAgICAgICAgdHMgPDwg
IiBbdGV4dEZpbGxDb2xvcj0iIDw8IHRleHRGaWxsQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1Rl
eHQoKSA8PCAiXSI7CisgICAgICAgICAgICAgICAgdHMgPDwgIiBbdGV4dEZpbGxDb2xvcj0iIDw8
IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KHRleHRGaWxsQ29sb3IpIDw8ICJdIjsK
IAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcik7CiAgICAgICAg
ICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCktPnN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKSwg
dGV4dFN0cm9rZUNvbG9yKQogICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VDb2xvciAhPSBj
b2xvciAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQotICAgICAgICAg
ICAgICAgIHRzIDw8ICIgW3RleHRTdHJva2VDb2xvcj0iIDw8IHRleHRTdHJva2VDb2xvci5uYW1l
Rm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKKyAgICAgICAgICAgICAgICB0cyA8PCAiIFt0
ZXh0U3Ryb2tlQ29sb3I9IiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCh0ZXh0
U3Ryb2tlQ29sb3IpIDw8ICJdIjsKIAogICAgICAgICAgICAgaWYgKG8ucGFyZW50KCktPnN0eWxl
KCkudGV4dFN0cm9rZVdpZHRoKCkgIT0gby5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpICYmIG8u
c3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSA+IDApCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBb
dGV4dFN0cm9rZVdpZHRoPSIgPDwgby5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpIDw8ICJdIjsK
QEAgLTI5MCwxMCArMjkxLDEwIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJP
YmplY3QKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwg
Ym9yZGVyVG9wIDw8ICJweCAiOwogICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMs
IG8uc3R5bGUoKS5ib3JkZXJUb3BTdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBDb2xvciBjb2wg
PSBvLnN0eWxlKCkuYm9yZGVyVG9wQ29sb3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbCA9IG8uc3R5bGUoKS5jb2xvcigpOwot
ICAgICAgICAgICAgICAgIHRzIDw8IGNvbC5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICIp
IjsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgpLmJvcmRlclRvcENvbG9y
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbG9yID0gby5zdHlsZSgpLmNvbG9yKCk7CisgICAgICAgICAgICAgICAgdHMgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpIDw8ICIpIjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKG8uc3R5bGUoKS5ib3JkZXJSaWdodCgpICE9IHByZXZC
b3JkZXIpIHsKQEAgLTMwMywxMCArMzA0LDEwIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3Jp
dGVSZW5kZXJPYmplY3QKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgdHMgPDwgIiAoIiA8PCBib3JkZXJSaWdodCA8PCAicHggIjsKICAgICAgICAgICAgICAgICAg
ICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgby5zdHlsZSgpLmJvcmRlclJpZ2h0U3R5bGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS5ib3JkZXJSaWdodENvbG9y
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbCA9IG8uc3R5bGUoKS5jb2xvcigpOwotICAgICAgICAgICAgICAgICAg
ICB0cyA8PCBjb2wubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiKSI7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29sb3IgPSBvLnN0eWxlKCkuYm9yZGVyUmlnaHRDb2xvcigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yID0gby5zdHlsZSgpLmNvbG9yKCk7CisgICAgICAgICAgICAgICAgICAgIHRz
IDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0zMTcsMTAgKzMxOCwxMCBAQCB2b2lk
IFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAgICAgICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwgYm9yZGVyQm90dG9tIDw8ICJw
eCAiOwogICAgICAgICAgICAgICAgICAgICBwcmludEJvcmRlclN0eWxlKHRzLCBvLnN0eWxlKCku
Ym9yZGVyQm90dG9tU3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8u
c3R5bGUoKS5ib3JkZXJCb3R0b21Db2xvcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNv
bC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCkuY29s
b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgY29sLm5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgPDwgIikiOworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgp
LmJvcmRlckJvdHRvbUNvbG9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29sb3IuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBvLnN0eWxlKCkuY29sb3Io
KTsKKyAgICAgICAgICAgICAgICAgICAgdHMgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoY29sb3IpIDw8ICIpIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
QEAgLTMzMSwxMCArMzMyLDEwIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJP
YmplY3QKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdHMgPDwg
IiAoIiA8PCBib3JkZXJMZWZ0IDw8ICJweCAiOwogICAgICAgICAgICAgICAgICAgICBwcmludEJv
cmRlclN0eWxlKHRzLCBvLnN0eWxlKCkuYm9yZGVyTGVmdFN0eWxlKCkpOwotICAgICAgICAgICAg
ICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxlKCkuYm9yZGVyTGVmdENvbG9yKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbCA9IG8uc3R5bGUoKS5jb2xvcigpOwotICAgICAgICAgICAgICAgICAgICB0cyA8PCBjb2wu
bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiKSI7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29sb3IgPSBvLnN0eWxlKCkuYm9yZGVyTGVmdENvbG9yKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Ig
PSBvLnN0eWxlKCkuY29sb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgdHMgPDwgc2VyaWFsaXph
dGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpIDw8ICIpIjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMjYzNzc3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtMzAwLDcgKzMwMSw3IEBAIHN0YXRpYyB2
b2lkIHdyaXRlUmVuZGVyU1ZHVGV4dEJveChUZXh0U3QKICAgICB0cyA8PCAiIGNvbnRhaW5zIDEg
Y2h1bmsocykiOwogCiAgICAgaWYgKHRleHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IHRleHQuc3R5
bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpKQotICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjb2xvciIsIHRleHQuc3R5bGUoKS52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSk7Cisg
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9yIiwgc2VyaWFsaXphdGlvbkZvclJl
bmRlclRyZWVBc1RleHQodGV4dC5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0
Qm94KFRleHRTdHJlYW0mIHRzLCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94KQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCShy
ZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9w
ZXJ0eVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRl
ICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFs
aXphdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCkBAIC01Miw3ICs1Myw3IEBAIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxDb2xvcj4gewogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgIH0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IENvbG9yJiB0eXBlKSB7IHJldHVybiB0eXBlLnNlcmlhbGl6ZWQoKTsgfQorICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgQ29sb3ImIHR5cGUpIHsgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JIVE1MKHR5cGUpOyB9CiB9OwogCiB0ZW1wbGF0ZTw+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcg
QEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNs
dWRlICJDbGllbnRPcmlnaW4uaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNp
bmNsdWRlICJDb21wb3NlZFRyZWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIkN1cnNvci5oIgpAQCAtMTk1NSw3ICsxOTU2LDcgQEAgRXhjZXB0aW9uT3I8U3Ry
aW5nPiBJbnRlcm5hbHM6OnZpZXdCYXNlQgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT52aWV3KCkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1
cm4gZG9jdW1lbnQtPnZpZXcoKS0+YmFzZUJhY2tncm91bmRDb2xvcigpLmNzc1RleHQoKTsKKyAg
ICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhkb2N1bWVudC0+dmlldygpLT5iYXNlQmFja2dy
b3VuZENvbG9yKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldFZpZXdC
YXNlQmFja2dyb3VuZENvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZSkKQEAgLTU2NjAsNyAr
NTY2MSw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OmhpZ2hsaWdodFBzZXVkb0VsZW1lbnQKICAgICBp
ZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHN0eWxlLT5jb2xv
cigpLmNzc1RleHQoKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhzdHlsZS0+Y29s
b3IoKSk7CiB9CiAgICAgCiBJbnRlcm5hbHM6OlRleHRJbmRpY2F0b3JJbmZvOjpUZXh0SW5kaWNh
dG9ySW5mbygpCkBAIC01NzcyLDcgKzU3NzMsNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpzeXN0ZW1D
b2xvckZvckNTU1ZhbHVlCiAgICAgaWYgKHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsKQog
ICAgICAgICBvcHRpb25zLmFkZChTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VFbGV2YXRlZFVzZXJJ
bnRlcmZhY2VMZXZlbCk7CiAgICAgCi0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24o
KS5zeXN0ZW1Db2xvcihpZCwgb3B0aW9ucykuY3NzVGV4dCgpOworICAgIHJldHVybiBzZXJpYWxp
emF0aW9uRm9yQ1NTKFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihpZCwgb3B0
aW9ucykpOwogfQogCiBib29sIEludGVybmFsczo6c3lzdGVtSGFzQmF0dGVyeSgpIGNvbnN0CkBA
IC01ODI3LDggKzU4MjgsNyBAQCBib29sIEludGVybmFsczo6c3VwcG9ydHNQaWN0dXJlSW5QaWN0
dXJlCiAKIFN0cmluZyBJbnRlcm5hbHM6OmZvY3VzUmluZ0NvbG9yKCkKIHsKLSAgICBPcHRpb25T
ZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9uczsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLmZvY3VzUmluZ0NvbG9yKG9wdGlvbnMpLmNzc1RleHQoKTsKKyAgICByZXR1
cm4gc2VyaWFsaXphdGlvbkZvckNTUyhSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9jdXNSaW5n
Q29sb3IoeyB9KSk7CiB9CiAKIHVuc2lnbmVkIEludGVybmFsczo6Y3JlYXRlU2xlZXBEaXNhYmxl
cihjb25zdCBTdHJpbmcmIHJlYXNvbiwgYm9vbCBkaXNwbGF5KQpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMjAtMDYtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFNwbGl0IENvbG9yIHNlcmlhbGl6YXRpb24gb3V0IG9mIENvbG9yIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzgy
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkb3B0
IENvbG9yU2VyaWFsaXphdGlvbi5oIHNlcmlhbGl6YXRpb24gZnVuY3Rpb25zLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgIChkaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb25Gb3JFZGl0b3JTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoLVtXS1RleHRUb3VjaEJhckl0ZW1Db250cm9sbGVy
IF93a0NoYW5nZUNvbG9yOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zZXRUZXh0Q29sb3JG
b3JXZWJWaWV3OnNlbmRlcjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9y
bUNvbG9yUGlja2VyLm1tOgorICAgICAgICAoLVtXS0NvbG9yUGlja2VyIHNldENvbnRyb2xWYWx1
ZUZyb21VSUNvbG9yOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luQ2hvaWNl
QW5ub3RhdGlvbjo6Y3JlYXRlQW5ub3RhdGlvbkVsZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW06CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpblRleHRBbm5vdGF0aW9uOjpjcmVhdGVBbm5vdGF0aW9uRWxlbWVudCk6CisK
IDIwMjAtMDYtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IEFwcC1ib3VuZCBKYXZhU2NyaXB0IGFuZCBOYXZpZ2F0aW9uIGZhaWx1cmVzIHNob3VsZCBoYXZl
IHNwZWNpZmljIGVycm9yIGNvZGVzLgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNiArMTE2LDcgQEAKICNpbXBvcnQgIl9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGljaWVzSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUv
QXR0cmlidXRlZFN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SlNET01CaW5kaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aD4KQEAgLTEzODIsNyArMTM4Myw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnlS
ZXByZXNlbnQKICAgICAgICAgQCJpdGFsaWMiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1
dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVJdGFsaWNzID8gQFlFUyA6IEBOTywKICAgICAgICAgQCJ1
bmRlcmxpbmUiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRy
aWJ1dGVVbmRlcmxpbmUgPyBAWUVTIDogQE5PLAogICAgICAgICBAInRleHQtYWxpZ25tZW50Ijog
QChuc1RleHRBbGlnbm1lbnQoc3RhdGljX2Nhc3Q8V2ViS2l0OjpUZXh0QWxpZ25tZW50Pihwb3N0
TGF5b3V0RGF0YS50ZXh0QWxpZ25tZW50KSkpLAotICAgICAgICBAInRleHQtY29sb3IiOiAoTlNT
dHJpbmcgKilwb3N0TGF5b3V0RGF0YS50ZXh0Q29sb3IuY3NzVGV4dCgpCisgICAgICAgIEAidGV4
dC1jb2xvciI6IChOU1N0cmluZyAqKXNlcmlhbGl6YXRpb25Gb3JDU1MocG9zdExheW91dERhdGEu
dGV4dENvbG9yKQogICAgIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0F0dHJpYnV0ZWRTdHJpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nv
bXBvc2l0aW9uSGlnaGxpZ2h0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAgLTgzMiw3ICs4MzMsNyBAQCAtICh2
b2lkKV93a0NoYW5nZUNvbG9yOihpZClzZW5kZXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgX3Rl
eHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yOwotICAgIF93ZWJWaWV3SW1wbC0+
cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNvbG9yIiwgV2ViQ29yZTo6Y29sb3JGcm9t
TlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5zZXJpYWxpemVkKCkpOworICAgIF93ZWJWaWV3SW1w
bC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNvbG9yIiwgV2ViQ29yZTo6c2VyaWFs
aXphdGlvbkZvckhUTUwoV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgp
KSkpOwogfQogCiAtIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3Q29udHJvbGxlcgpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw2ICs5Nyw3IEBACiAjaW1wb3J0IDxNb2JpbGVDb3JlU2VydmljZXMvVVRDb3JlVHlwZXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JJT1Mu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RPTVBhc3RlQWNj
ZXNzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rpb24uaD4KQEAgLTMxOTYsNyArMzE5
Nyw3IEBAIC0gKHZvaWQpX3NldEZvbnRTaXplRm9yV2ViVmlldzooQ0dGbG9hdCkKIAogLSAodm9p
ZClfc2V0VGV4dENvbG9yRm9yV2ViVmlldzooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQpc2Vu
ZGVyCiB7Ci0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNvbG9yIl9zLCBXZWJD
b3JlOjpDb2xvcihjb2xvci5DR0NvbG9yKS5zZXJpYWxpemVkKCkpOworICAgIF9wYWdlLT5leGVj
dXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciJfcywgV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhU
TUwoV2ViQ29yZTo6Q29sb3IoY29sb3IuQ0dDb2xvcikpKTsKIH0KIAogLSAodm9pZCl0b2dnbGVT
dHJpa2VUaHJvdWdoRm9yV2ViVmlldzooaWQpc2VuZGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtQ29sb3JQaWNrZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybUNvbG9yUGlja2VyLm1tCShyZXZp
c2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
Q29sb3JQaWNrZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgogCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+
CiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhQZW5jaWxLaXQpCkBAIC0yNzgsNyArMjc5
LDcgQEAgLSAodm9pZClkcmF3U2VsZWN0aW9uSW5kaWNhdG9yRm9yQ29sb3JCdQogLSAodm9pZClz
ZXRDb250cm9sVmFsdWVGcm9tVUlDb2xvcjooVUlDb2xvciAqKXVpQ29sb3IKIHsKICAgICBXZWJD
b3JlOjpDb2xvciBjb2xvcih1aUNvbG9yLkNHQ29sb3IpOwotICAgIFtfdmlldyBwYWdlXS0+c2V0
Rm9jdXNlZEVsZW1lbnRWYWx1ZShjb2xvci5zZXJpYWxpemVkKCkpOworICAgIFtfdmlldyBwYWdl
XS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRNTChj
b2xvcikpOwogfQogCiAjcHJhZ21hIG1hcmsgV0tGb3JtQ29udHJvbApJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbkNob2ljZUFubm90YXRpb24ubW0JKHJldmlzaW9uIDI2Mzc3NykKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0NTU1ByaW1p
dGl2ZVZhbHVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1Byb3BlcnR5TmFtZXMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0
aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MT3B0aW9uRWxlbWVudC5oPgpAQCAt
NzYsNyArNzcsNyBAQCBSZWY8RWxlbWVudD4gUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6CiAg
ICAgYXV0byYgc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQu
Z2V0KCkpOwogCiAgICAgLy8gRklYTUU6IE1hdGNoIGZvbnQgd2VpZ2h0IGFuZCBzdHlsZSBhcyB3
ZWxsPwotICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUNvbG9yLCBjb2xvckZyb21OU0NvbG9yKGNob2ljZUFubm90YXRpb24uZm9udENvbG9yKS5zZXJp
YWxpemVkKCkpOworICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvckZyb21OU0NvbG9yKGNob2lj
ZUFubm90YXRpb24uZm9udENvbG9yKSkpOwogICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGNob2ljZUFubm90YXRpb24uZm9udC5m
YW1pbHlOYW1lKTsKIAogICAgIE5TQXJyYXkgKmNob2ljZXMgPSBjaG9pY2VBbm5vdGF0aW9uLmNo
b2ljZXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luVGV4dEFubm90YXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tCShyZXZpc2lvbiAyNjM3
NzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4
dEFubm90YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvQ1NTUHJpbWl0aXZlVmFsdWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVy
dHlOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5o
PgpAQCAtOTQsNyArOTUsNyBAQCBSZWY8RWxlbWVudD4gUERGUGx1Z2luVGV4dEFubm90YXRpb246
OmNyCiAgICAgICAgIHJldHVybiBlbGVtZW50OwogCiAgICAgLy8gRklYTUU6IE1hdGNoIGZvbnQg
d2VpZ2h0IGFuZCBzdHlsZSBhcyB3ZWxsPwotICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvckZyb21OU0NvbG9yKHRleHRBbm5vdGF0
aW9uLmZvbnRDb2xvcikuc2VyaWFsaXplZCgpKTsKKyAgICBzdHlsZWRFbGVtZW50LnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgc2VyaWFsaXphdGlvbkZvckhUTUwoY29s
b3JGcm9tTlNDb2xvcih0ZXh0QW5ub3RhdGlvbi5mb250Q29sb3IpKSk7CiAgICAgc3R5bGVkRWxl
bWVudC5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgdGV4dEFu
bm90YXRpb24uZm9udC5mYW1pbHlOYW1lKTsKICAgICBzdHlsZWRFbGVtZW50LnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIGNzc0FsaWdubWVudFZhbHVlRm9yTlNU
ZXh0QWxpZ25tZW50KHRleHRBbm5vdGF0aW9uLmFsaWdubWVudCkpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0w
Ni0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ29s
b3Igc2VyaWFsaXphdGlvbiBvdXQgb2YgQ29sb3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzODIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRvcHQgQ29sb3JTZXJpYWxpemF0aW9uLmgg
c2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06
CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9sbGVyIF93ZWJDaGFuZ2VDb2xv
cjpdKToKKwogMjAyMC0wNi0zMCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAg
ICAgICAgIEVuYWJsZSB0aGUgc3VwcG9ydCBvZiBGVUxMU0NSRUVOX0FQSSBpbiBXZWJLaXRUZXN0
UnVubmVyCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CShyZXZpc2lvbiAyNjM3NzcpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9DYWNoZVN0b3JhZ2VQcm92aWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJp
YWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9EYXRhYmFzZU1hbmFnZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGVwcmVjYXRlZEdsb2Jh
bFNldHRpbmdzLmg+CkBAIC0xMjA4LDcgKzEyMDksNyBAQCAtICh2b2lkKXNldFRleHRDb2xvcjoo
TlNDb2xvciAqKWNvbG9yCiAtICh2b2lkKV93ZWJDaGFuZ2VDb2xvcjooaWQpc2VuZGVyCiB7CiAg
ICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9yOwotICAgIFtfd2ViVmll
dyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiRm9yZUNvbG9yIiB2YWx1ZTogV2ViQ29yZTo6
Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5zZXJpYWxpemVkKCldOworICAgIFtf
d2ViVmlldyBfZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOkAiRm9yZUNvbG9yIiB2YWx1ZTogV2Vi
Q29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwoV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4
dENvbG9yLmdldCgpKSldOwogfQogCiAtIChOU1ZpZXdDb250cm9sbGVyICopdGV4dExpc3RWaWV3
Q29udHJvbGxlcgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjYzNzc3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IENvbG9yIHNlcmlhbGl6YXRpb24gb3V0IG9mIENvbG9y
IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzgyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRvIHVz
ZSBDb2xvclNlcmlhbGl6YXRpb24uaAorCiAyMDIwLTA2LTMwICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBcHAtYm91bmQgSmF2YVNjcmlwdCBhbmQgTmF2aWdh
dGlvbiBmYWlsdXJlcyBzaG91bGQgaGF2ZSBzcGVjaWZpYyBlcnJvciBjb2Rlcy4KSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjM3NzcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlRlc3QuaCIKICNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
clNlcmlhbGl6YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ2LDcgKzQ3LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBD
b25zdHJ1Y3RvcikKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJl
ZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShjMS5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5LXAz
IDEgMC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzEpLCAi
Y29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQogCiBURVNUKEV4dGVuZGVkQ29sb3Is
IENvcHlDb25zdHJ1Y3RvcikKQEAgLTY0LDcgKzY1LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBD
b3B5Q29uc3RydWN0b3IpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVY
UEVDVF9FUSgydSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogICAgIEVYUEVDVF9FUSgy
dSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShjMi5jc3NUZXh0
KCksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlh
bGl6YXRpb25Gb3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQog
CiBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCkBAIC04Miw3ICs4Myw3IEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBo
YSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7CiAgICAg
RVhQRUNUX0VRKDJ1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VR
KGMyLmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBF
Q1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAu
MjUpIik7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCkBAIC0xNjYsNyArMTY3
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDAuMjUsIGIpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBF
WFBFQ1RfRVEoMXUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEo
YzIuY3NzVGV4dCgpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOworICAgIEVYUEVD
VF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4y
NSkiKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKQEAgLTE4OCw3
ICsxODksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjI1LCBiKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CiAg
ICAgRVhQRUNUX0VRKDF1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNU
X0VRKGMyLmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBF
WFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41
IDAuMjUpIik7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGlu
ZykKQEAgLTIwNiw3ICsyMDcsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNl
Q291bnRpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwogICAgIEVYUEVDVF9GTE9BVF9F
USgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1RfRVEoM3UsIGMyLT5hc0V4dGVuZGVkKCkucmVmQ291
bnQoKSk7Ci0gICAgRVhQRUNUX0VRKGMyLT5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5LXAzIDEg
MC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoKmMyKSwgImNv
bG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKIAogICAgIGRlbGV0ZSBjMTsKICAgICBFWFBF
Q1RfRVEoMnUsIGMyLT5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7CkBAIC0yMzIsNyArMjMzLDcg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiAgICAgRVhQRUNUX1RSVUUoYzIu
aXNFeHRlbmRlZCgpKTsKIAogICAgIEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNv
dW50KCkpOwotICAgIEVYUEVDVF9FUShjMi5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5LXAzIDEg
MC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29s
b3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIFAz
Q29udmVyc2lvblRvU1JHQikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403258</attachid>
            <date>2020-06-30 18:58:28 -0700</date>
            <delta_ts>2020-06-30 22:53:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213820-20200630185827.patch</filename>
            <type>text/plain</type>
            <size>64286</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIwLTA2LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBDb2xvciBzZXJpYWxpemF0
aW9uIG91dCBvZiBDb2xvciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICBNb3ZlIGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIHJlbGF0ZWQgZnVuY3Rp
b25zIG91dCBvZiB0aGUgQ29sb3IgZmFtaWx5CisgICAgICAgIG9mIGNsYXNzZXMsIGFuZCBpbnRv
IGEgc3RhbmRhbG9uZSBDb2xvclNlcmlhbGl6YXRpb24uaAorICAgICAgICAKKyAgICAgICAgTm93
IGFsbCBjb2xvciBzZXJpYWxpemF0aW9uIGNhbGxzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVl
IGZ1bmN0aW9ucywgZGVwZW5kaW5nIG9uIG5lZWQ6CisKKyAgICAgICAgICAgIC0gc2VyaWFsaXph
dGlvbkZvckNTUyguLi4pCisgICAgICAgICAgICAtIHNlcmlhbGl6YXRpb25Gb3JIVE1MKC4uLikK
KyAgICAgICAgICAgIC0gc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoLi4uKQorCisg
ICAgICAgIFRoZXNlIGFyZSBvdmVybG9hZCBmb3IgYWxsIHRocmVlIENvbG9yIGNsYXNzZXMgKENv
bG9yLCBTaW1wbGVDb2xvciBhbmQgRXh0ZW5kZWRDb2xvcikgdG8KKyAgICAgICAgYWxsb3cgZWFz
eSB1c2Ugd2l0aG91dCBuZWNlc3NhcmlseSBuZWVkaW5nIHRvIGNvbnN0cnVjdCBhbm90aGVyIHR5
cGUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRk
IG5ldyBmaWxlcy4KKyAgICAKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmZvcm1hdE51bWJlckZvckN1c3Rv
bUNTU1RleHQgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6aW52ZXJzZVRyYW5zZm9ybUNvbG9ySWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKToK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJD
b3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6CisgICAgICAgICogaHRt
bC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlwZTo6
ZGlkQ2hvb3NlQ29sb3IpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Y29sb3IgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6YXBwbHlDU1NQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTiBjb25zdCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudCk6CisgICAg
ICAgICogcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y29sb3JQcm9wZXJ0eUNTUyBj
b25zdCk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXplZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y3NzVGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOgorICAgICAgICAoV2ViQ29yZTo6ZnJh
Y3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9yQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6YXRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVk
Q29sb3I6OmNzc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9wZXJ0
aWVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmljQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZEdlbmVyaWNDdWU6OnRvSlNPTlN0cmluZyBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY2ltYWxEaWdpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yQ1NT
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxp
emF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0
ZVJlbmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlUmVuZGVyU1ZHVGV4dEJveCk6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dmlld0Jhc2VC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpoaWdobGlnaHRQ
c2V1ZG9FbGVtZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzeXN0ZW1D
b2xvckZvckNTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Zm9jdXNSaW5n
Q29sb3IpOgorICAgICAgICBBZG9wdCBuZXcgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisKIDIw
MjAtMDYtMzAgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAg
ICAgIENvZGUgY2xlYW51cCBpbiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIGFuZCBBWElzb2xh
dGVkVHJlZS5oLgpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNjM3ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYgKzEw
ODUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lv
biAyNjM3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTkwOCw2ICsxOTA4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyNjM3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNDQsNiArMjM0NCw3IEBACiAJCTdDQ0VC
RkMwMUREOEY2QUIwMDJDNDBCOCAvKiBTVkdMZW5ndGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENTMxREQ3QjA5MzAwMTI4NTUyIC8q
IFNWR0xlbmd0aFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NEMEUyQjUx
RjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oICovOyB9OwogCQk3Q0QwRTJCRjFG
ODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBFMkJDMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNp
Z25hbC5oICovOyB9OworCQk3Q0QxRTY5MzI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxp
emF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0QxRTY5MTI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NENDk0Q0QxQTg2RUIx
RDAwMEE4N0VDIC8qIFJlbmRlckF0dGFjaG1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDQ5NENCMUE4NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJB
dHRhY2htZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0NENThERkIxRjk1NjVBNTAwMTEyNzkxIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VCNTdFOTFGOTU2NTE1MDAwOTdB
RUMgLyogU2V0dGluZ3MuaCAqLzsgfTsKIAkJN0NENThERkQxRjk1NjVBODAwMTEyNzkxIC8qIFNl
dHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDRUI1N0VBMUY5NTY1MTUwMDA5N0FFQyAvKiBTZXR0aW5ncy5jcHAgKi87IH07CkBAIC0xMDE5
Myw2ICsxMDE5NCw4IEBACiAJCTdDRDBFMkJDMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBYm9ydFNpZ25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0QwRTJCRDFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0QwRTJCRTFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFi
b3J0U2lnbmFsLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMUU2OTEyNEFC
RjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xv
clNlcmlhbGl6YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NEMUU2OTIy
NEFCRjYyNDAwODlDNDE5IC8qIENvbG9yU2VyaWFsaXphdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2xvclNlcmlhbGl6YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Q0QzNDQwRDFGMzEwODM2MDAwRENENDkgLyogTXV0YXRpb25DYWxsYmFjay5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTXV0YXRpb25DYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRDM0NDExMUYzMTA4REQwMDBEQ0Q0OSAvKiBKU011dGF0aW9uQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNdXRhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDRDM0NDEyMUYzMTA4RTIwMDBEQ0Q0OSAvKiBKU011dGF0aW9uQ2Fs
bGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNdXRhdGlvbkNhbGxiYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTAwLDYgKzI1NTAzLDggQEAKIAkJCQk3Q0FD
NkFFQzI0N0YxQzUxMDBFNjFENTkgLyogQ29sb3JDb21wb25lbnRzLmggKi8sCiAJCQkJMzEwM0I3
REUxREIwMTU1NjAwOEJCODkwIC8qIENvbG9ySGFzaC5oICovLAogCQkJCTdDQUM2QUU4MjQ3RjA4
MjAwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5oICovLAorCQkJCTdDRDFFNjkyMjRBQkY2MjQwMDg5
QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uY3BwICovLAorCQkJCTdDRDFFNjkxMjRBQkY2MjQw
MDg5QzQxOSAvKiBDb2xvclNlcmlhbGl6YXRpb24uaCAqLywKIAkJCQk5MzgyREY1NzEwQThENUM5
MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovLAogCQkJCTdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIw
NCAvKiBDb2xvclR5cGVzLmggKi8sCiAJCQkJMEZFNkM3NkIxRkJGQjdBNjAwMjVDMDUzIC8qIENv
bG9yVXRpbGl0aWVzLmNwcCAqLywKQEAgLTMwMDc5LDYgKzMwMDg0LDcgQEAKIAkJCQlDRTUxNjlF
NzIxRjFCODQ3MDBFQTRGNzggLyogQ29sb3JJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUVERTNB
NTAwMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NB
QzZBRTkyNDdGMDgyRjAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3Q0QxRTY5MzI0QUJGNjI0MDA4OUM0MTkgLyogQ29sb3JTZXJpYWxpemF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzgyREY1ODEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUFGNjZCMjNCRkMzOUUwMDQwMzBEQSAvKiBDb2xvclV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAj
aW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZh
bHVlLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKQEAgLTEwODYsNyArMTA4Nyw3IEBAIEFM
V0FZU19JTkxJTkUgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjoKICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUVVBRDoKICAgICAgICAgcmV0dXJuIHF1YWRWYWx1ZSgpLT5jc3NUZXh0KCk7CiAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JHQkNPTE9SOgotICAgICAgICByZXR1cm4gY29sb3Io
KS5jc3NUZXh0KCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yKCkp
OwogICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgogICAgICAgICByZXR1cm4gcGFpclZh
bHVlKCktPmNzc1RleHQoKTsKICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQzoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDI2Mzc4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgorI2luY2x1ZGUgIkNv
bG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKQEAgLTE2MzEsNyArMTYzMiw3IEBAIFJlZjxF
ZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6aW52ZXJzZVQKICAgICBhdXRvIGludmVydGVkQ29s
b3IgPSBbJl0oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKSB7CiAgICAgICAgIENvbG9yIG5ld0Nv
bG9yID0gY3NzVmFsdWVUb0NvbG9yKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKCptX211dGFibGVTdHls
ZSwgcHJvcGVydHlJRCkuZ2V0KCkpOwogICAgICAgICBjb2xvckZpbHRlci5pbnZlcnNlVHJhbnNm
b3JtQ29sb3IobmV3Q29sb3IpOwotICAgICAgICBzdHlsZVdpdGhJbnZlcnRlZENvbG9ycy0+bV9t
dXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld0NvbG9yLmNzc1RleHQoKSk7
CisgICAgICAgIHN0eWxlV2l0aEludmVydGVkQ29sb3JzLT5tX211dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkocHJvcGVydHlJRCwgc2VyaWFsaXphdGlvbkZvckNTUyhuZXdDb2xvcikpOwogICAgIH07
CiAKICAgICBpZiAoY29sb3IpCkBAIC0xODA3LDcgKzE4MDgsNyBAQCB2b2lkIFN0eWxlQ2hhbmdl
OjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1CiAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlDb2xvcikpIHsKICAgICAgICAgYXV0byBjb2xvciA9IHRleHRDb2xvckZy
b21TdHlsZShzdHlsZSk7CiAgICAgICAgIGlmIChjb2xvci5pc09wYXF1ZSgpKSB7Ci0gICAgICAg
ICAgICBtX2FwcGx5Rm9udENvbG9yID0gY29sb3Iuc2VyaWFsaXplZCgpOworICAgICAgICAgICAg
bV9hcHBseUZvbnRDb2xvciA9IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKTsKICAgICAgICAg
ICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlv
bi5tbQkocmV2aXNpb24gMjYzNzgyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBv
cnQgIkF0dHIuaCIKICNpbXBvcnQgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKKyNpbXBvcnQgIkNv
bG9yU2VyaWFsaXphdGlvbi5oIgogI2ltcG9ydCAiRWRpdGluZy5oIgogI2ltcG9ydCAiRWxlbWVu
dEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbXBvcnQgIkVsZW1lbnRUcmF2ZXJzYWwuaCIKQEAgLTYy
OCw3ICs2MjksNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKHRvU1JHQkEoaHNsYSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCB1bmRlcmxp
bmVDb2xvci5zZXJpYWxpemF0aW9uRm9yQ1NTKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1ModW5kZXJsaW5lQ29sb3IpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyNjM3ODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSFRNTERhdGFMaXN0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCkBAIC0yMTksNyArMjIwLDcgQEAgdm9p
ZCBDb2xvcklucHV0VHlwZTo6ZGlkQ2hvb3NlQ29sb3IoY29ucwogICAgIGlmIChlbGVtZW50KCkt
PmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpIHx8IGNvbG9yID09IHZhbHVlQXNDb2xvcigpKQogICAg
ICAgICByZXR1cm47CiAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwotICAgIGVsZW1lbnQoKS0+
c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBlbGVtZW50KCkt
PnNldFZhbHVlRnJvbVJlbmRlcmVyKHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSk7CiAgICAg
dXBkYXRlQ29sb3JTd2F0Y2goKTsKICAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9ybUNvbnRyb2xD
aGFuZ2VFdmVudCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2
Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNh
bnZhc1BhdHRlcm4uaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRl
ICJET01NYXRyaXguaCIKICNpbmNsdWRlICJET01NYXRyaXgyREluaXQuaCIKICNpbmNsdWRlICJE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCkBAIC02MjYsNyArNjI3LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2hhZG93Q29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0ZSgp
LnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQoKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhU
TUwoc3RhdGUoKS5zaGFkb3dDb2xvcik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gMjYzNzgy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5j
bHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29s
b3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTA4LDggKzEwOSw3IEBAIGlubGluZSBSZWZQdHI8Q2FudmFzUGF0dGVy
bj4gQ2FudmFzU3R5bGUKIAogaW5saW5lIFN0cmluZyBDYW52YXNTdHlsZTo6Y29sb3IoKSBjb25z
dAogewotICAgIGF1dG8mIGNvbG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9z
dHlsZSkgPyBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlLQUNvbG9yPiht
X3N0eWxlKS5jb2xvckNvbnZlcnRlZFRvU1JHQkE7Ci0gICAgcmV0dXJuIGNvbG9yLnNlcmlhbGl6
ZWQoKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxDb2xvcj4obV9zdHlsZSkgPyBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6Omdl
dDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb2xvckNvbnZlcnRlZFRvU1JHQkEpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
KyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJIVE1MU3BhbkVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgpAQCAtMTI1LDkgKzEyNiw5IEBAIHZvaWQgVGV4dFRyYWNrQ3VlR2VuZXJp
Y0JveEVsZW1lbnQ6OmFwcGwKICAgICB9CiAKICAgICBpZiAoY3VlLT5mb3JlZ3JvdW5kQ29sb3Io
KS5pc1ZhbGlkKCkpCi0gICAgICAgIGN1ZUVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvciwgY3VlLT5mb3JlZ3JvdW5kQ29sb3IoKS5zZXJpYWxpemVkKCkpOwor
ICAgICAgICBjdWVFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29s
b3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGN1ZS0+Zm9yZWdyb3VuZENvbG9yKCkpKTsKICAgICBp
ZiAoY3VlLT5oaWdobGlnaHRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgY3VlRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgY3VlLT5o
aWdobGlnaHRDb2xvcigpLnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIGN1ZUVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHNlcmlhbGl6YXRp
b25Gb3JIVE1MKGN1ZS0+aGlnaGxpZ2h0Q29sb3IoKSkpOwogCiAgICAgaWYgKGN1ZS0+Z2V0V3Jp
dGluZ0RpcmVjdGlvbigpID09IFZUVEN1ZTo6SG9yaXpvbnRhbCkKICAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgQ1NTVmFsdWVBdXRvKTsKQEAgLTE0NSw3
ICsxNDYsNyBAQCB2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjphcHBsCiAgICAg
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVl
U3RhcnQpOwogCiAgICAgaWYgKGN1ZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAg
ICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBj
dWUtPmJhY2tncm91bmRDb2xvcigpLnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JI
VE1MKGN1ZS0+YmFja2dyb3VuZENvbG9yKCkpKTsKICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5V3JpdGluZ01vZGUsIGN1ZS0+Z2V0Q1NTV3JpdGluZ01vZGUoKSwgZmFsc2Up
OwogICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NW
YWx1ZVByZVdyYXApOwogCkBAIC0yNDUsMTEgKzI0NiwxMSBAQCBib29sIFRleHRUcmFja0N1ZUdl
bmVyaWM6OmlzUG9zaXRpb25lZEFiCiB2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTihK
U09OOjpPYmplY3QmIG9iamVjdCkgY29uc3QKIHsKICAgICBpZiAobV9mb3JlZ3JvdW5kQ29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJmb3JlZ3JvdW5kQ29sb3IiX3Ms
IG1fZm9yZWdyb3VuZENvbG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIG9iamVjdC5zZXRTdHJp
bmcoImZvcmVncm91bmRDb2xvciJfcywgc2VyaWFsaXphdGlvbkZvckhUTUwobV9mb3JlZ3JvdW5k
Q29sb3IpKTsKICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBv
YmplY3Quc2V0U3RyaW5nKCJiYWNrZ3JvdW5kQ29sb3IiX3MsIG1fYmFja2dyb3VuZENvbG9yLnNl
cmlhbGl6ZWQoKSk7CisgICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImJhY2tncm91bmRDb2xvciJf
cywgc2VyaWFsaXphdGlvbkZvckhUTUwobV9iYWNrZ3JvdW5kQ29sb3IpKTsKICAgICBpZiAobV9o
aWdobGlnaHRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImhpZ2hs
aWdodENvbG9yIl9zLCBtX2hpZ2hsaWdodENvbG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIG9i
amVjdC5zZXRTdHJpbmcoImhpZ2hsaWdodENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTCht
X2hpZ2hsaWdodENvbG9yKSk7CiAgICAgaWYgKG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVv
SGVpZ2h0KQogICAgICAgICBvYmplY3Quc2V0RG91YmxlKCJyZWxhdGl2ZUZvbnRTaXplIl9zLCBt
X2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk7CiAgICAgaWYgKG1fZm9udFNpemVN
dWx0aXBsaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCkBAIC0xMTg4LDcgKzExODksNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvCiAgICAgZm9yIChhdXRvJiBjb2xv
clN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046OkFy
cmF5T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShjb2xv
clN0b3Aub2Zmc2V0KTsKLSAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoY29sb3JT
dG9wLmNvbG9yLmNzc1RleHQoKSkpOworICAgICAgICBzdG9wLT5hZGRJdGVtKGluZGV4Rm9yRGF0
YShzZXJpYWxpemF0aW9uRm9yQ1NTKGNvbG9yU3RvcC5jb2xvcikpKTsKICAgICAgICAgc3RvcHMt
PmFkZEl0ZW0oV1RGTW92ZShzdG9wKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAkocmV2aXNp
b24gMjYzNzgyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oIgogCiAjaW5jbHVkZSAiQXVkaW9UcmFja0xp
c3QuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgpAQCAtMzU2LDcgKzM1Nyw4IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6d2kKIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBDb2xvciYgY29sb3Is
IGJvb2wgaW1wb3J0YW50KSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBhcHBlbmRDU1MoYnVpbGRlciwgaWQsIGNvbG9yLnNlcmlhbGl6ZWQoKSwgaW1wb3J0YW50KTsK
KyAgICAvLyBGSVhNRTogU2VlbXMgbGlrZSB0aGlzIHNob3VsZCBiZSB1c2luZyBzZXJpYWxpemF0
aW9uRm9yQ1NTIGluc3RlYWQ/CisgICAgYXBwZW5kQ1NTKGJ1aWxkZXIsIGlkLCBzZXJpYWxpemF0
aW9uRm9ySFRNTChjb2xvciksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCisjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRGF0YVRy
YW5zZmVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCkBAIC01NTgsNyArNTU5LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVF
ZGl0RHJhZyhjbwogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQogICAgICAgICBpZiAoaXNF
bmFibGVkQ29sb3JJbnB1dCgqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGF1dG8mIGlucHV0ID0g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOwotICAgICAgICAgICAgaW5wdXQu
c2V0VmFsdWUoY29sb3Iuc2VyaWFsaXplZCgpLCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQp
OworICAgICAgICAgICAgaW5wdXQuc2V0VmFsdWUoc2VyaWFsaXphdGlvbkZvckhUTUwoY29sb3Ip
LCBEaXNwYXRjaElucHV0QW5kQ2hhbmdlRXZlbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNTY2LDcgKzU2Nyw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmNvbmNsdWRlRWRpdERyYWcoY28KICAgICAgICAgaWYgKCFpbm5lclJhbmdlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJv
cGVydGllczo6Y3JlYXRlKCk7Ci0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUNvbG9yLCBjb2xvci5zZXJpYWxpemVkKCksIGZhbHNlKTsKKyAgICAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yKSwgZmFs
c2UpOwogICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJhZ0RhdGEpOwpAQCAt
MTQ0NCw3ICsxNDQ1LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdl
UAogICAgICAgICBpbWFnZS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6OndpZHRoQXR0ciwgQXRvbVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkpOwogICAg
ICAgICBpbWFnZS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6
OmhlaWdodEF0dHIsIEF0b21TdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKSk7CiAgICAgICAg
IGltYWdlLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWF4V2lkdGgsIDEwMCwg
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgaW1hZ2UtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKENvbG9yOjpibGFj
aykuY29sb3JXaXRoQWxwaGEoMC4wNSkuY3NzVGV4dCgpKTsKKyAgICAgICAgaW1hZ2UtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHNlcmlhbGl6YXRp
b25Gb3JDU1MoQ29sb3I6OmJsYWNrLmNvbG9yV2l0aEFscGhhKDEzKSkpOwogICAgICAgICBpbWFn
ZS0+c2V0SXNEcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcigpOwogICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoV1RGTW92ZShpbWFnZSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAKICNpbmNsdWRlICJBbmltYXRpb25VdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTc5LDI3ICs4MCw2IEBAIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9
KENvbG9yJiYgb3RoZXIpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1TdHJpbmcgQ29sb3I6OnNl
cmlhbGl6ZWQoKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVy
biBhc0V4dGVuZGVkKCkuY3NzVGV4dCgpOwotICAgIHJldHVybiBhc1NpbXBsZSgpLnNlcmlhbGl6
YXRpb25Gb3JIVE1MKCk7Ci19Ci0KLVN0cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0
KCk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCkuc2VyaWFsaXphdGlvbkZvckNTUygpOwotfQotCi1T
dHJpbmcgQ29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBpZiAo
aXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNzc1RleHQoKTsKLSAg
ICByZXR1cm4gYXNTaW1wbGUoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwot
fQotCiBDb2xvciBDb2xvcjo6bGlnaHRlbmVkKCkgY29uc3QKIHsKICAgICAvLyBIYXJkY29kZSB0
aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KQEAgLTE5NSw3ICsxNzUsNyBAQCBTUkdCQTxmbG9h
dD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZXR1cm4gdHMgPDwg
Y29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKTsKKyAgICByZXR1cm4gdHMgPDwgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpOwogfQogCiBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2Mzc4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCwxNSArMTA4LDYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jb2xvckRhdGEuZXh0
ZW5kZWRDb2xvci0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBjb2xvciBz
ZXJpYWxpemVkIGFjY29yZGluZyB0byBIVE1MNQotICAgIC8vIDxodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNmaWxsLWFuZC1zdHJva2Utc3R5bGVz
PiAoMTAgU2VwdGVtYmVyIDIwMTUpCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6
ZWQoKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFzIGVpdGhlciAjUlJHR0JC
IG9yICNSUkdHQkJBQQotICAgIFN0cmluZyBuYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIGNvbnN0
OwotCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpIHx8ICht
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzICYgdmFsaWRTaW1wbGVDb2xvckJpdCk7IH0K
IAogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc1NpbXBsZSgpLmlzT3BhcXVlKCk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJp
YWxpemF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9y
U2VyaWFsaXphdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2ltcGxlQ29s
b3Igb3ZlcmxvYWRzCisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIp
Cit7CisgICAgQVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4gJzAnICsgbnVtYmVyOwor
fQorCitzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9u
YWxBbHBoYVZhbHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJUKGFscGhhID4gMCk7Cisg
ICAgQVNTRVJUKGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAv
IDB4RkYgKiAweEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAgICByZXR1cm4geyB7IGRl
Y2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICog
MTAwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCksICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEw
MCArIDB4N0YpIC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChh
bHBoYSAqIDEwIC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9
IH07CisgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JD
U1MoU2ltcGxlQ29sb3IgY29sb3IpCit7CisgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGFdID0gY29sb3I7CisgICAgc3dpdGNoIChhbHBoYSkgeworICAgIGNhc2UgMDoKKyAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVkLCAiLCAiLCBncmVlbiwgIiwgIiwgYmx1ZSwg
IiwgMCkiKTsKKyAgICBjYXNlIDB4RkY6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2Io
IiwgcmVkLCAiLCAiLCBncmVlbiwgIiwgIiwgYmx1ZSwgJyknKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWQsICIsICIsIGdyZWVuLCAiLCAiLCBi
bHVlLCAiLCAwLiIsIGZyYWN0aW9uRGlnaXRzRm9yRnJhY3Rpb25hbEFscGhhVmFsdWUoYWxwaGEp
LmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChT
aW1wbGVDb2xvciBjb2xvcikKK3sKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0g
PSBjb2xvcjsKKyAgICBpZiAoY29sb3IuaXNPcGFxdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoJyMnLCBoZXgocmVkLCAyLCBMb3dlcmNhc2UpLCBoZXgoZ3JlZW4sIDIsIExvd2VyY2Fz
ZSksIGhleChibHVlLCAyLCBMb3dlcmNhc2UpKTsKKyAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZv
ckNTUyhjb2xvcik7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4
dChTaW1wbGVDb2xvciBjb2xvcikKK3sKKyAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YV0gPSBjb2xvcjsKKyAgICBpZiAoYWxwaGEgPCAweEZGKQorICAgICAgICByZXR1cm4gbWFrZVN0
cmluZygnIycsIGhleChyZWQsIDIpLCBoZXgoZ3JlZW4sIDIpLCBoZXgoYmx1ZSwgMiksIGhleChh
bHBoYSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZCwgMiksIGhleChn
cmVlbiwgMiksIGhleChibHVlLCAyKSk7Cit9CisKKworLy8gRXh0ZW5kZWRDb2xvciBvdmVybG9h
ZHMKKworc3RhdGljIEFTQ0lJTGl0ZXJhbCBzZXJpYWxpemF0aW9uKENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6
OlNSR0I6CisgICAgICAgIHJldHVybiAic3JnYiJfczsKKyAgICBjYXNlIENvbG9yU3BhY2U6Okxp
bmVhclJHQjoKKyAgICAgICAgcmV0dXJuICJsaW5lYXItc3JnYiJfczsKKyAgICBjYXNlIENvbG9y
U3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuICJkaXNwbGF5LXAzIl9zOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTdHJp
bmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJiBjb2xvcikKK3sKKyAg
ICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvci5jb21wb25lbnRzKCk7CisgICAgaWYg
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSwgMS4wZikpCisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCJjb2xvcigiLCBzZXJpYWxpemF0aW9uKGNvbG9yLmNvbG9yU3BhY2UoKSksICcg
JywgYzEsICcgJywgYzIsICcgJywgYzMsICcpJyk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNv
bG9yKCIsIHNlcmlhbGl6YXRpb24oY29sb3IuY29sb3JTcGFjZSgpKSwgJyAnLCBjMSwgJyAnLCBj
MiwgJyAnLCBjMywgIiAvICIsIGFscGhhLCAnKScpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlv
bkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29sb3IpOworfQorCitTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoY29uc3QgRXh0ZW5kZWRDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JDU1MoY29sb3IpOworfQorCisvLyBDb2xvciBvdmVybG9hZHMKKworU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChj
b2xvci5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGNv
bG9yLmFzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoY29sb3Iu
YXNTaW1wbGUoKSk7Cit9CisKK1N0cmluZyBzZXJpYWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
IHNlcmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuIHNl
cmlhbGl6YXRpb25Gb3JIVE1MKGNvbG9yLmFzU2ltcGxlKCkpOworfQorCitTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlm
IChjb2xvci5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yUmVu
ZGVyVHJlZUFzVGV4dChjb2xvci5hc0V4dGVuZGVkKCkpOworICAgIHJldHVybiBzZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvci5hc1NpbXBsZSgpKTsKK30KKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxp
emF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JTZXJpYWxpemF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENvbG9yOworY2xhc3MgRXh0ZW5kZWRDb2xvcjsKK2NsYXNzIFNpbXBsZUNvbG9yOworCisvLyBz
ZXJpYWxpemF0aW9uRm9ySFRNTCByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFjY29yZGlu
ZyB0byBIVE1MNSA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0
aW5nLmh0bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorLy8g
c2VyaWFsaXphdGlvbkZvckNTUyByZXR1cm5zIHRoZSBjb2xvciBzZXJpYWxpemVkIGFjY29yZGlu
ZyB0byBDU1MKKy8vIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IHJldHVybnMgdGhl
IGNvbG9yIHNlcmlhbGl6ZWQgZm9yIER1bXBSZW5kZXJUcmVlLCAjUlJHR0JCLCAjUlJHR0JCQUEg
b3IgdGhlIENTUyBzZXJpYWxpemF0aW9uCisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9yQ1NTKFNpbXBsZUNvbG9yKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJpYWxp
emF0aW9uRm9ySFRNTChTaW1wbGVDb2xvcik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoU2ltcGxlQ29sb3IpOworCitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckNTUyhjb25zdCBFeHRlbmRlZENvbG9yJik7CitXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc2VyaWFsaXphdGlvbkZvckhUTUwoY29uc3QgRXh0ZW5kZWRDb2xv
ciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGNvbnN0IEV4dGVuZGVkQ29sb3ImKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcmlh
bGl6YXRpb25Gb3JDU1MoY29uc3QgQ29sb3ImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBzZXJp
YWxpemF0aW9uRm9ySFRNTChjb25zdCBDb2xvciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbnN0IENvbG9yJik7CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
Y3BwCShyZXZpc2lvbiAyNjM3ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMjkgKzQ1LDYgQEAg
dW5zaWduZWQgRXh0ZW5kZWRDb2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXB1dGVI
YXNoKGMxLCBjMiwgYzMsIGFscGhhLCBtX2NvbG9yU3BhY2UpOwogfQogCi1TdHJpbmcgRXh0ZW5k
ZWRDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgY2hhciogY29sb3JTcGFjZTsK
LSAgICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
LSAgICAgICAgY29sb3JTcGFjZSA9ICJzcmdiIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSAiZGlzcGxheS1wMyI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOwotICAgIH0KLQotICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5nQWxwaGFdID0gY29tcG9uZW50cygpOwotCi0gICAgaWYg
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhbHBoYSgpLCAxLjBmKSkKLSAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoImNvbG9yKCIsIGNvbG9yU3BhY2UsICcgJywgYzEsICcgJywgYzIsICcgJywg
YzMsICcpJyk7Ci0KLSAgICByZXR1cm4gbWFrZVN0cmluZygiY29sb3IoIiwgY29sb3JTcGFjZSwg
JyAnLCBjMSwgJyAnLCBjMiwgJyAnLCBjMywgIiAvICIsIGV4aXN0aW5nQWxwaGEsICcpJyk7Ci19
Ci0KIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRlbmRlZENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9h
dCBvdmVycmlkZUFscGhhKSBjb25zdAogewogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGV4aXN0aW5n
QWxwaGFdID0gY29tcG9uZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzNzgyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDggKzQ2LDYgQEAg
cHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQogICAgIFJlZjxFeHRl
bmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAgICAgUmVmPEV4dGVuZGVk
Q29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAko
cmV2aXNpb24gMjYzNzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAKKyNpbmNs
dWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC05MzEs
NyArOTMxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0UwogICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIihwcmltYXJ5LWxheWVyLWlkICIgPDwgcHJpbWFyeUxheWVy
SUQoKSA8PCAiKVxuIjsKIAogICAgIGlmIChtX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYg
Y2xpZW50KCkuc2hvdWxkRHVtcFByb3BlcnR5Rm9yTGF5ZXIodGhpcywgImJhY2tncm91bmRDb2xv
ciIsIGJlaGF2aW9yKSkKLSAgICAgICAgdHMgPDwgaW5kZW50IDw8ICIoYmFja2dyb3VuZENvbG9y
ICIgPDwgbV9iYWNrZ3JvdW5kQ29sb3IubmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSA8PCAiKVxu
IjsKKyAgICAgICAgdHMgPDwgaW5kZW50IDw8ICIoYmFja2dyb3VuZENvbG9yICIgPDwgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9iYWNrZ3JvdW5kQ29sb3IpIDw8ICIpXG4iOwog
CiAgICAgaWYgKGJlaGF2aW9yICYgTGF5ZXJUcmVlQXNUZXh0SW5jbHVkZUFjY2VsZXJhdGVzRHJh
d2luZyAmJiBtX2FjY2VsZXJhdGVzRHJhd2luZykKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICIo
YWNjZWxlcmF0ZXNEcmF3aW5nICIgPDwgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPDwgIilcbiI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRHZW5lcmljQ3VlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRH
ZW5lcmljQ3VlLmNwcAkocmV2aXNpb24gMjYzNzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW5iYW5kR2VuZXJpY0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDggQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgorCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsMTMgKzk2LDEzIEBAIFN0
cmluZyBJbmJhbmRHZW5lcmljQ3VlOjp0b0pTT05TdHJpbmcoKSAKICAgICB9CiAKICAgICBpZiAo
bV9jdWVEYXRhLm1fZm9yZWdyb3VuZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgb2JqZWN0LT5z
ZXRTdHJpbmcoImZvcmVncm91bmRDb2xvciJfcywgbV9jdWVEYXRhLm1fZm9yZWdyb3VuZENvbG9y
LnNlcmlhbGl6ZWQoKSk7CisgICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJmb3JlZ3JvdW5kQ29s
b3IiX3MsIHNlcmlhbGl6YXRpb25Gb3JIVE1MKG1fY3VlRGF0YS5tX2ZvcmVncm91bmRDb2xvcikp
OwogCiAgICAgaWYgKG1fY3VlRGF0YS5tX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIG9iamVjdC0+c2V0U3RyaW5nKCJiYWNrZ3JvdW5kQ29sb3IiX3MsIG1fY3VlRGF0YS5tX2Jh
Y2tncm91bmRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3QtPnNldFN0cmluZygi
YmFja2dyb3VuZENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2N1ZURhdGEubV9iYWNr
Z3JvdW5kQ29sb3IpKTsKIAogICAgIGlmIChtX2N1ZURhdGEubV9oaWdobGlnaHRDb2xvci5pc1Zh
bGlkKCkpCi0gICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJoaWdobGlnaHRDb2xvciJfcywgbV9j
dWVEYXRhLm1faGlnaGxpZ2h0Q29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgb2JqZWN0LT5z
ZXRTdHJpbmcoImhpZ2hsaWdodENvbG9yIl9zLCBzZXJpYWxpemF0aW9uRm9ySFRNTChtX2N1ZURh
dGEubV9oaWdobGlnaHRDb2xvcikpOwogCiAgICAgaWYgKG1fY3VlRGF0YS5tX2Jhc2VGb250U2l6
ZSkKICAgICAgICAgb2JqZWN0LT5zZXREb3VibGUoImJhc2VGb250U2l6ZSJfcywgbV9jdWVEYXRh
Lm1fYmFzZUZvbnRTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTEgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVDb2xv
ci5oIgogCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGV4TnVt
YmVyLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2ltcGxlQ29sb3IgcHJl
bXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvciBjb2xvcikKQEAgLTYyLDQ3ICs1Nyw1IEBAIFNp
bXBsZUNvbG9yIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgY28KICAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKHVucHJlbXVsdGlwbHlDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5l
bChnLCBhKSwgdW5wcmVtdWx0aXBseUNoYW5uZWwoYiwgYSksIGEpOwogfQogCi1TdHJpbmcgU2lt
cGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKLXsKLSAgICBpZiAoaXNPcGFx
dWUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCks
IDIsIExvd2VyY2FzZSksIGhleChncmVlbkNvbXBvbmVudCgpLCAyLCBMb3dlcmNhc2UpLCBoZXgo
Ymx1ZUNvbXBvbmVudCgpLCAyLCBMb3dlcmNhc2UpKTsKLSAgICByZXR1cm4gc2VyaWFsaXphdGlv
bkZvckNTUygpOwotfQotCi1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVy
KQotewotICAgIEFTU0VSVChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsK
LX0KLQotc3RhdGljIHN0ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlv
bmFsQWxwaGFWYWx1ZSh1aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwot
ICAgIEFTU0VSVChhbHBoYSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3Rikg
LyAweEZGICogMHhGRiArIDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBk
ZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAq
IDEwMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAw
eEZGICUgMTApLCAnXDAnIH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAx
MDAgKyAweDdGKSAvIDB4RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQo
YWxwaGEgKiAxMCAvIDB4RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcg
fSB9OwotICAgIHJldHVybiB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAw
eEZGKSwgJ1wwJywgJ1wwJywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2Vy
aWFsaXphdGlvbkZvckNTUygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgp
KSB7Ci0gICAgY2FzZSAwOgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRD
b21wb25lbnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgp
LCAiLCAwKSIpOwotICAgIGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJn
YigiLCByZWRDb21wb25lbnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNv
bXBvbmVudCgpLCAnKScpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KCJyZ2JhKCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBi
bHVlQ29tcG9uZW50KCksICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFW
YWx1ZShhbHBoYUNvbXBvbmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCi1TdHJpbmcg
U2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsK
LSAgICBpZiAoYWxwaGFDb21wb25lbnQoKSA8IDB4RkYpCi0gICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIp
LCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSwgaGV4KGFscGhhQ29tcG9uZW50KCksIDIpKTsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiksIGhleChncmVl
bkNvbXBvbmVudCgpLCAyKSwgaGV4KGJsdWVDb21wb25lbnQoKSwgMikpOwotfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1
Miw2IEBAIHB1YmxpYzoKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIGFscGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlz
aWJsZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KIAotICAgIFN0cmluZyBz
ZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0OwotICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9y
Q1NTKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KCkgY29uc3Q7Ci0KICAgICBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWlu
dDhfdCBhbHBoYSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB7IChtX3ZhbHVlICYgMHgw
MEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNp
b24gMjYzNzgyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAKKyNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTMxLDcgKzEzMiw3
IEBAIFRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXMKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRp
b249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHgg
PDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgbV9zaGFkb3dD
b2xvci5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8IlwiIGZsb29kLW9wYWNpdHk9XCIiIDw8
IG1fc2hhZG93T3BhY2l0eSA8PCAiXVxuIjsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIg
PDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIg
ZHk9XCIiIDw8IG1fZHkgPDwgIlwiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChtX3NoYWRvd0NvbG9yKSA8PCJcIiBmbG9vZC1vcGFjaXR5PVwiIiA8
PCBtX3NoYWRvd09wYWNpdHkgPDwgIl1cbiI7CiAKICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7CiAgICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gMjYzNzgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFRmxvb2QuaCIKIAorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTcxLDcgKzcyLDcgQEAgVGV4dFN0cmVhbSYg
RkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IGZsb29kQ29sb3Io
KS5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICJcIiAiCisgICAgdHMgPDwgIiBmbG9vZC1j
b2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoZmxvb2RDb2xvcigp
KSA8PCAiXCIgIgogICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9wYWNpdHko
KSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCisjaWYgUExBVEZPUk0o
TUFDKQorI2luY2x1ZGUgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oIgorI2luY2x1ZGUgIldp
bmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oIgorI2VuZGlmCisKICNpbmNsdWRlICJDb3JlVmlkZW9T
b2Z0TGluay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyNjM3ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAKICNp
bmNsdWRlICJDbGlwUmVjdC5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgpAQCAtMjM5LDIzICsyNDAsMjMgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdAogICAgICAgICBpZiAoby5wYXJlbnQoKSkgewogICAgICAgICAgICAg
Q29sb3IgY29sb3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBh
cmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
Y29sb3IpKQotICAgICAgICAgICAgICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwgY29sb3IubmFtZUZv
clJlbmRlclRyZWVBc1RleHQoKSA8PCAiXSI7CisgICAgICAgICAgICAgICAgdHMgPDwgIiBbY29s
b3I9IiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIl0iOwog
CiAgICAgICAgICAgICAvLyBEbyBub3QgZHVtcCBpbnZhbGlkIG9yIHRyYW5zcGFyZW50IGJhY2tn
cm91bmRzLCBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0LgogICAgICAgICAgICAgQ29sb3IgYmFj
a2dyb3VuZENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcik7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSwgYmFja2dyb3VuZENvbG9yKQogICAgICAgICAgICAgICAgICYm
IGJhY2tncm91bmRDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCi0gICAgICAgICAgICAgICAg
dHMgPDwgIiBbYmdjb2xvcj0iIDw8IGJhY2tncm91bmRDb2xvci5uYW1lRm9yUmVuZGVyVHJlZUFz
VGV4dCgpIDw8ICJdIjsKKyAgICAgICAgICAgICAgICB0cyA8PCAiIFtiZ2NvbG9yPSIgPDwgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoYmFja2dyb3VuZENvbG9yKSA8PCAiXSI7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIENvbG9yIHRleHRGaWxsQ29sb3IgPSBvLnN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcik7CiAg
ICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKG8ucGFyZW50KCktPnN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xv
ciksIHRleHRGaWxsQ29sb3IpCiAgICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBj
b2xvciAmJiB0ZXh0RmlsbENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKLSAgICAgICAgICAg
ICAgICB0cyA8PCAiIFt0ZXh0RmlsbENvbG9yPSIgPDwgdGV4dEZpbGxDb2xvci5uYW1lRm9yUmVu
ZGVyVHJlZUFzVGV4dCgpIDw8ICJdIjsKKyAgICAgICAgICAgICAgICB0cyA8PCAiIFt0ZXh0Rmls
bENvbG9yPSIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQodGV4dEZpbGxDb2xv
cikgPDwgIl0iOwogCiAgICAgICAgICAgICBDb2xvciB0ZXh0U3Ryb2tlQ29sb3IgPSBvLnN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9y
KTsKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Ioby5wYXJlbnQo
KS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlQ29sb3IpLCB0ZXh0U3Ryb2tlQ29sb3IpCiAgICAgICAgICAgICAgICAgJiYgdGV4dFN0cm9r
ZUNvbG9yICE9IGNvbG9yICYmIHRleHRTdHJva2VDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQp
Ci0gICAgICAgICAgICAgICAgdHMgPDwgIiBbdGV4dFN0cm9rZUNvbG9yPSIgPDwgdGV4dFN0cm9r
ZUNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgPDwgIl0iOworICAgICAgICAgICAgICAg
IHRzIDw8ICIgW3RleHRTdHJva2VDb2xvcj0iIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVl
QXNUZXh0KHRleHRTdHJva2VDb2xvcikgPDwgIl0iOwogCiAgICAgICAgICAgICBpZiAoby5wYXJl
bnQoKS0+c3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAhPSBvLnN0eWxlKCkudGV4dFN0cm9rZVdp
ZHRoKCkgJiYgby5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpID4gMCkKICAgICAgICAgICAgICAg
ICB0cyA8PCAiIFt0ZXh0U3Ryb2tlV2lkdGg9IiA8PCBvLnN0eWxlKCkudGV4dFN0cm9rZVdpZHRo
KCkgPDwgIl0iOwpAQCAtMjkwLDEwICsyOTEsMTAgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdHMg
PDwgIiAoIiA8PCBib3JkZXJUb3AgPDwgInB4ICI7CiAgICAgICAgICAgICAgICAgcHJpbnRCb3Jk
ZXJTdHlsZSh0cywgby5zdHlsZSgpLmJvcmRlclRvcFN0eWxlKCkpOwotICAgICAgICAgICAgICAg
IENvbG9yIGNvbCA9IG8uc3R5bGUoKS5ib3JkZXJUb3BDb2xvcigpOwotICAgICAgICAgICAgICAg
IGlmICghY29sLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29sID0gby5zdHlsZSgp
LmNvbG9yKCk7Ci0gICAgICAgICAgICAgICAgdHMgPDwgY29sLm5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgPDwgIikiOworICAgICAgICAgICAgICAgIGF1dG8gY29sb3IgPSBvLnN0eWxlKCkuYm9y
ZGVyVG9wQ29sb3IoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29sb3IgPSBvLnN0eWxlKCkuY29sb3IoKTsKKyAgICAgICAgICAg
ICAgICB0cyA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIiki
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoby5zdHlsZSgpLmJvcmRlclJpZ2h0
KCkgIT0gcHJldkJvcmRlcikgewpAQCAtMzAzLDEwICszMDQsMTAgQEAgdm9pZCBSZW5kZXJUcmVl
QXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IGJvcmRlclJpZ2h0IDw8ICJweCAiOwogICAgICAg
ICAgICAgICAgICAgICBwcmludEJvcmRlclN0eWxlKHRzLCBvLnN0eWxlKCkuYm9yZGVyUmlnaHRT
dHlsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3IgY29sID0gby5zdHlsZSgpLmJvcmRl
clJpZ2h0Q29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gby5zdHlsZSgpLmNvbG9yKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRzIDw8IGNvbC5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICIpIjsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG8uc3R5bGUoKS5ib3JkZXJSaWdodENv
bG9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3IgPSBvLnN0eWxlKCkuY29sb3IoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdHMgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpIDw8
ICIpIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTMxNywxMCArMzE4
LDEwIEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QKICAgICAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdHMgPDwgIiAoIiA8PCBib3JkZXJC
b3R0b20gPDwgInB4ICI7CiAgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMs
IG8uc3R5bGUoKS5ib3JkZXJCb3R0b21TdHlsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgQ29s
b3IgY29sID0gby5zdHlsZSgpLmJvcmRlckJvdHRvbUNvbG9yKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghY29sLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IG8u
c3R5bGUoKS5jb2xvcigpOwotICAgICAgICAgICAgICAgICAgICB0cyA8PCBjb2wubmFtZUZvclJl
bmRlclRyZWVBc1RleHQoKSA8PCAiKSI7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29sb3Ig
PSBvLnN0eWxlKCkuYm9yZGVyQm90dG9tQ29sb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IG8uc3R5
bGUoKS5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICB0cyA8PCBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIikiOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtMzMxLDEwICszMzIsMTAgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdAogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICB0cyA8PCAiICgiIDw8IGJvcmRlckxlZnQgPDwgInB4ICI7CiAgICAgICAgICAgICAgICAg
ICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5bGUoKS5ib3JkZXJMZWZ0U3R5bGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS5ib3JkZXJMZWZ0Q29sb3Io
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29sID0gby5zdHlsZSgpLmNvbG9yKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHRzIDw8IGNvbC5uYW1lRm9yUmVuZGVyVHJlZUFzVGV4dCgpIDw8ICIpIjsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb2xvciA9IG8uc3R5bGUoKS5ib3JkZXJMZWZ0Q29sb3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvciA9IG8uc3R5bGUoKS5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICB0cyA8
PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIikiOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyNjM3
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCisjaW5jbHVkZSAiQ29sb3JTZXJp
YWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0zMDAsNyArMzAxLDcg
QEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdAogICAgIHRzIDw8ICIg
Y29udGFpbnMgMSBjaHVuayhzKSI7CiAKICAgICBpZiAodGV4dC5wYXJlbnQoKSAmJiAodGV4dC5w
YXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikg
IT0gdGV4dC5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkp
Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9yIiwgdGV4dC5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5uYW1lRm9yUmVuZGVyVHJlZUFz
VGV4dCgpKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCBzZXJpYWxp
emF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCh0ZXh0LnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNW
R0lubGluZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5
VHJhaXRzLmgJKHJldmlzaW9uIDI2Mzc4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAK
IAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
Q29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKQEAgLTUyLDcgKzUzLDcg
QEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbG9yPiB7CiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgfQotICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmcoY29uc3QgQ29sb3ImIHR5cGUpIHsgcmV0dXJuIHR5cGUuc2VyaWFsaXpl
ZCgpOyB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBDb2xvciYgdHlwZSkgeyBy
ZXR1cm4gc2VyaWFsaXphdGlvbkZvckhUTUwodHlwZSk7IH0KIH07CiAKIHRlbXBsYXRlPD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDI2Mzc4MikKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNsaWVudE9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29v
a2llSmFyLmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCkBAIC0xOTU1LDcgKzE5NTYsNyBAQCBFeGNl
cHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6dmlld0Jhc2VCCiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PnZpZXcoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwotICAgIHJldHVybiBkb2N1bWVudC0+dmlldygpLT5iYXNlQmFja2dyb3VuZENvbG9yKCkuY3Nz
VGV4dCgpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKGRvY3VtZW50LT52aWV3KCkt
PmJhc2VCYWNrZ3JvdW5kQ29sb3IoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFs
czo6c2V0Vmlld0Jhc2VCYWNrZ3JvdW5kQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclZhbHVlKQpA
QCAtNTY2MCw3ICs1NjYxLDcgQEAgU3RyaW5nIEludGVybmFsczo6aGlnaGxpZ2h0UHNldWRvRWxl
bWVudAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4g
c3R5bGUtPmNvbG9yKCkuY3NzVGV4dCgpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NT
KHN0eWxlLT5jb2xvcigpKTsKIH0KICAgICAKIEludGVybmFsczo6VGV4dEluZGljYXRvckluZm86
OlRleHRJbmRpY2F0b3JJbmZvKCkKQEAgLTU3NzIsNyArNTc3Myw3IEBAIFN0cmluZyBJbnRlcm5h
bHM6OnN5c3RlbUNvbG9yRm9yQ1NTVmFsdWUKICAgICBpZiAodXNlRWxldmF0ZWRVc2VySW50ZXJm
YWNlTGV2ZWwpCiAgICAgICAgIG9wdGlvbnMuYWRkKFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZUVs
ZXZhdGVkVXNlckludGVyZmFjZUxldmVsKTsKICAgICAKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnN5c3RlbUNvbG9yKGlkLCBvcHRpb25zKS5jc3NUZXh0KCk7CisgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1MoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnN5c3RlbUNv
bG9yKGlkLCBvcHRpb25zKSk7CiB9CiAKIGJvb2wgSW50ZXJuYWxzOjpzeXN0ZW1IYXNCYXR0ZXJ5
KCkgY29uc3QKQEAgLTU4MjcsOCArNTgyOCw3IEBAIGJvb2wgSW50ZXJuYWxzOjpzdXBwb3J0c1Bp
Y3R1cmVJblBpY3R1cmUKIAogU3RyaW5nIEludGVybmFsczo6Zm9jdXNSaW5nQ29sb3IoKQogewot
ICAgIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zOwotICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9jdXNSaW5nQ29sb3Iob3B0aW9ucykuY3NzVGV4dCgp
OworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKFJlbmRlclRoZW1lOjpzaW5nbGV0b24o
KS5mb2N1c1JpbmdDb2xvcih7IH0pKTsKIH0KIAogdW5zaWduZWQgSW50ZXJuYWxzOjpjcmVhdGVT
bGVlcERpc2FibGVyKGNvbnN0IFN0cmluZyYgcmVhc29uLCBib29sIGRpc3BsYXkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjYzNzgyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wNi0zMCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgQ29sb3Igc2VyaWFsaXphdGlvbiBvdXQgb2Yg
Q29sb3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEzODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgQWRvcHQgQ29sb3JTZXJpYWxpemF0aW9uLmggc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKGRp
Y3Rpb25hcnlSZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwubW06CisgICAgICAgICgtW1dLVGV4dFRvdWNoQmFySXRlbUNv
bnRyb2xsZXIgX3drQ2hhbmdlQ29sb3I6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NldFRl
eHRDb2xvckZvcldlYlZpZXc6c2VuZGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tGb3JtQ29sb3JQaWNrZXIubW06CisgICAgICAgICgtW1dLQ29sb3JQaWNrZXIgc2V0Q29u
dHJvbFZhbHVlRnJvbVVJQ29sb3I6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW5DaG9pY2VBbm5vdGF0aW9uOjpjcmVhdGVBbm5vdGF0aW9uRWxlbWVudCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luVGV4dEFubm90YXRpb246OmNyZWF0ZUFubm90YXRpb25FbGVt
ZW50KToKKwogMjAyMC0wNi0zMCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJBdXRobl0gUmVtb3ZlIHdoaXRlbGlzdGVkUnBJZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAy
NjM3ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAKICNpbXBvcnQgIl9XS1Zpc2l0ZWRM
aW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGljaWVzSW50ZXJuYWwu
aCIKICNpbXBvcnQgPFdlYkNvcmUvQXR0cmlidXRlZFN0cmluZy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01CaW5kaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KQEAgLTEzODIsNyArMTM4Myw3IEBAIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKmRpY3Rpb25hcnlSZXByZXNlbnQKICAgICAgICAgQCJpdGFsaWMiOiBwb3N0TGF5
b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVJdGFsaWNzID8gQFlF
UyA6IEBOTywKICAgICAgICAgQCJ1bmRlcmxpbmUiOiBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRy
aWJ1dGVzICYgV2ViS2l0OjpBdHRyaWJ1dGVVbmRlcmxpbmUgPyBAWUVTIDogQE5PLAogICAgICAg
ICBAInRleHQtYWxpZ25tZW50IjogQChuc1RleHRBbGlnbm1lbnQoc3RhdGljX2Nhc3Q8V2ViS2l0
OjpUZXh0QWxpZ25tZW50Pihwb3N0TGF5b3V0RGF0YS50ZXh0QWxpZ25tZW50KSkpLAotICAgICAg
ICBAInRleHQtY29sb3IiOiAoTlNTdHJpbmcgKilwb3N0TGF5b3V0RGF0YS50ZXh0Q29sb3IuY3Nz
VGV4dCgpCisgICAgICAgIEAidGV4dC1jb2xvciI6IChOU1N0cmluZyAqKXNlcmlhbGl6YXRpb25G
b3JDU1MocG9zdExheW91dERhdGEudGV4dENvbG9yKQogICAgIH07CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZpc2lvbiAyNjM3
ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BY3Rpdml0eVN0
YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0F0dHJpYnV0ZWRTdHJpbmcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KQEAg
LTgzMiw3ICs4MzMsNyBAQCAtICh2b2lkKV93a0NoYW5nZUNvbG9yOihpZClzZW5kZXIKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgX3RleHRDb2xvciA9IHNlbGYuY29sb3JQaWNrZXJJdGVtLmNvbG9y
OwotICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNvbG9y
IiwgV2ViQ29yZTo6Y29sb3JGcm9tTlNDb2xvcihfdGV4dENvbG9yLmdldCgpKS5zZXJpYWxpemVk
KCkpOworICAgIF93ZWJWaWV3SW1wbC0+cGFnZSgpLmV4ZWN1dGVFZGl0Q29tbWFuZCgiRm9yZUNv
bG9yIiwgV2ViQ29yZTo6c2VyaWFsaXphdGlvbkZvckhUTUwoV2ViQ29yZTo6Y29sb3JGcm9tTlND
b2xvcihfdGV4dENvbG9yLmdldCgpKSkpOwogfQogCiAtIChOU1ZpZXdDb250cm9sbGVyICopdGV4
dExpc3RWaWV3Q29udHJvbGxlcgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyNjM3ODIp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW1wb3J0IDxNb2JpbGVDb3Jl
U2VydmljZXMvVVRDb3JlVHlwZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3JJT1MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0
aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbXBvc2l0aW9uSGlnaGxpZ2h0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0RPTVBhc3RlQWNjZXNzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rp
b24uaD4KQEAgLTMxOTYsNyArMzE5Nyw3IEBAIC0gKHZvaWQpX3NldEZvbnRTaXplRm9yV2ViVmll
dzooQ0dGbG9hdCkKIAogLSAodm9pZClfc2V0VGV4dENvbG9yRm9yV2ViVmlldzooVUlDb2xvciAq
KWNvbG9yIHNlbmRlcjooaWQpc2VuZGVyCiB7Ci0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFu
ZCgiRm9yZUNvbG9yIl9zLCBXZWJDb3JlOjpDb2xvcihjb2xvci5DR0NvbG9yKS5zZXJpYWxpemVk
KCkpOworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIkZvcmVDb2xvciJfcywgV2ViQ29y
ZTo6c2VyaWFsaXphdGlvbkZvckhUTUwoV2ViQ29yZTo6Q29sb3IoY29sb3IuQ0dDb2xvcikpKTsK
IH0KIAogLSAodm9pZCl0b2dnbGVTdHJpa2VUaHJvdWdoRm9yV2ViVmlldzooaWQpc2VuZGVyCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtQ29sb3JQaWNrZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9y
bUNvbG9yUGlja2VyLm1tCShyZXZpc2lvbiAyNjM3ODIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvZm9ybXMvV0tGb3JtQ29sb3JQaWNrZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogCiAjaW1wb3J0IDxXZWJDb3Jl
L0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2ltcG9y
dCA8d3RmL1NvZnRMaW5raW5nLmg+CiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhQZW5j
aWxLaXQpCkBAIC0yNzgsNyArMjc5LDcgQEAgLSAodm9pZClkcmF3U2VsZWN0aW9uSW5kaWNhdG9y
Rm9yQ29sb3JCdQogLSAodm9pZClzZXRDb250cm9sVmFsdWVGcm9tVUlDb2xvcjooVUlDb2xvciAq
KXVpQ29sb3IKIHsKICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcih1aUNvbG9yLkNHQ29sb3IpOwot
ICAgIFtfdmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShjb2xvci5zZXJpYWxpemVk
KCkpOworICAgIFtfdmlldyBwYWdlXS0+c2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZShXZWJDb3JlOjpz
ZXJpYWxpemF0aW9uRm9ySFRNTChjb2xvcikpOwogfQogCiAjcHJhZ21hIG1hcmsgV0tGb3JtQ29u
dHJvbApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bkNob2ljZUFubm90YXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0JKHJldmlzaW9uIDI2
Mzc4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5D
aG9pY2VBbm5vdGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0NTU1ByaW1pdGl2ZVZhbHVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1By
b3BlcnR5TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
T3B0aW9uRWxlbWVudC5oPgpAQCAtNzYsNyArNzcsNyBAQCBSZWY8RWxlbWVudD4gUERGUGx1Z2lu
Q2hvaWNlQW5ub3RhdGlvbjo6CiAgICAgYXV0byYgc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0
eWxlZEVsZW1lbnQ+KGVsZW1lbnQuZ2V0KCkpOwogCiAgICAgLy8gRklYTUU6IE1hdGNoIGZvbnQg
d2VpZ2h0IGFuZCBzdHlsZSBhcyB3ZWxsPwotICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvckZyb21OU0NvbG9yKGNob2ljZUFubm90
YXRpb24uZm9udENvbG9yKS5zZXJpYWxpemVkKCkpOworICAgIHN0eWxlZEVsZW1lbnQuc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBzZXJpYWxpemF0aW9uRm9ySFRNTChj
b2xvckZyb21OU0NvbG9yKGNob2ljZUFubm90YXRpb24uZm9udENvbG9yKSkpOwogICAgIHN0eWxl
ZEVsZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGNo
b2ljZUFubm90YXRpb24uZm9udC5mYW1pbHlOYW1lKTsKIAogICAgIE5TQXJyYXkgKmNob2ljZXMg
PSBjaG9pY2VBbm5vdGF0aW9uLmNob2ljZXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0
aW9uLm1tCShyZXZpc2lvbiAyNjM3ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJpbWl0aXZlVmFsdWUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ1NTUHJvcGVydHlOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1h
Yy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdl
YkNvcmUvRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MRWxlbWVudC5oPgpAQCAtOTQsNyArOTUsNyBAQCBSZWY8RWxlbWVudD4gUERG
UGx1Z2luVGV4dEFubm90YXRpb246OmNyCiAgICAgICAgIHJldHVybiBlbGVtZW50OwogCiAgICAg
Ly8gRklYTUU6IE1hdGNoIGZvbnQgd2VpZ2h0IGFuZCBzdHlsZSBhcyB3ZWxsPwotICAgIHN0eWxl
ZEVsZW1lbnQuc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvckZy
b21OU0NvbG9yKHRleHRBbm5vdGF0aW9uLmZvbnRDb2xvcikuc2VyaWFsaXplZCgpKTsKKyAgICBz
dHlsZWRFbGVtZW50LnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgc2Vy
aWFsaXphdGlvbkZvckhUTUwoY29sb3JGcm9tTlNDb2xvcih0ZXh0QW5ub3RhdGlvbi5mb250Q29s
b3IpKSk7CiAgICAgc3R5bGVkRWxlbWVudC5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udEZhbWlseSwgdGV4dEFubm90YXRpb24uZm9udC5mYW1pbHlOYW1lKTsKICAgICBzdHls
ZWRFbGVtZW50LnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIGNz
c0FsaWdubWVudFZhbHVlRm9yTlNUZXh0QWxpZ25tZW50KHRleHRBbm5vdGF0aW9uLmFsaWdubWVu
dCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3ODIp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAyMC0wNi0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgU3BsaXQgQ29sb3Igc2VyaWFsaXphdGlvbiBvdXQgb2YgQ29sb3IgY2xhc3Nl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzODIw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRvcHQgQ29s
b3JTZXJpYWxpemF0aW9uLmggc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlRleHRUb3VjaEJhckl0ZW1Db250cm9s
bGVyIF93ZWJDaGFuZ2VDb2xvcjpdKToKKwogMjAyMC0wNi0zMCAgS2F0ZSBDaGVuZXkgIDxrYXRo
ZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTmVlZHNJbkFwcEJyb3dz
ZXJQcml2YWN5UXVpcmtzIGZsYWcgZnJvbSBXZWJLaXRMZWdhY3kKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDI2Mzc4MikKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDYgKzEzNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlU3RvcmFnZVByb3ZpZGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1h
Yy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ29va2llSmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTEyMDgsNyAr
MTIwOSw3IEBAIC0gKHZvaWQpc2V0VGV4dENvbG9yOihOU0NvbG9yICopY29sb3IKIC0gKHZvaWQp
X3dlYkNoYW5nZUNvbG9yOihpZClzZW5kZXIKIHsKICAgICBfdGV4dENvbG9yID0gc2VsZi5jb2xv
clBpY2tlckl0ZW0uY29sb3I7Ci0gICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5h
bWU6QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29s
b3IuZ2V0KCkpLnNlcmlhbGl6ZWQoKV07CisgICAgW193ZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1h
bmRCeU5hbWU6QCJGb3JlQ29sb3IiIHZhbHVlOiBXZWJDb3JlOjpzZXJpYWxpemF0aW9uRm9ySFRN
TChXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKF90ZXh0Q29sb3IuZ2V0KCkpKV07CiB9CiAKIC0g
KE5TVmlld0NvbnRyb2xsZXIgKil0ZXh0TGlzdFZpZXdDb250cm9sbGVyCkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM3ODIp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAy
MC0wNi0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQg
Q29sb3Igc2VyaWFsaXphdGlvbiBvdXQgb2YgQ29sb3IgY2xhc3NlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzODIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorICAgICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIENvbG9yU2VyaWFsaXphdGlvbi5oCisKIDIw
MjAtMDYtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFw
cC1ib3VuZCBKYXZhU2NyaXB0IGFuZCBOYXZpZ2F0aW9uIGZhaWx1cmVzIHNob3VsZCBoYXZlIHNw
ZWNpZmljIGVycm9yIGNvZGVzLgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2Mzc4
MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVGVzdC5o
IgogI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsNyAr
NDcsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLjI1LCBiKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQ
RUNUX0VRKDF1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKGMx
LmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1Rf
RVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMSksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUp
Iik7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQpAQCAtNjQsNyAr
NjUsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCBhbHBoYSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCku
cmVmQ291bnQoKSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQo
KSk7Ci0gICAgRVhQRUNUX0VRKGMyLmNzc1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUg
MC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihk
aXNwbGF5LXAzIDEgMC41IDAuMjUpIik7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdu
bWVudCkKQEAgLTgyLDcgKzgzLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1RfRVEoMnUsIGMxLmFz
RXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKICAgICBFWFBFQ1RfRVEoMnUsIGMyLmFzRXh0ZW5kZWQo
KS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzIuY3NzVGV4dCgpLCAiY29sb3IoZGlzcGxh
eS1wMyAxIDAuNSAwLjI1KSIpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMy
KSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKIH0KIAogVEVTVChFeHRlbmRlZENv
bG9yLCBFcXVhbGl0eSkKQEAgLTE2Niw3ICsxNjcsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1v
dmVDb25zdHJ1Y3RvcikKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgp
LnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShjMi5jc3NUZXh0KCksICJjb2xvcihkaXNwbGF5
LXAzIDEgMC41IDAuMjUpIik7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIp
LCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwogfQogCiBURVNUKEV4dGVuZGVkQ29s
b3IsIE1vdmVBc3NpZ25tZW50KQpAQCAtMTg4LDcgKzE4OSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgTW92ZUFzc2lnbm1lbnQpCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMyLmFzRXh0ZW5k
ZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzIuY3NzVGV4dCgpLCAiY29sb3IoZGlz
cGxheS1wMyAxIDAuNSAwLjI1KSIpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NT
KGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKIH0KIAogVEVTVChFeHRlbmRl
ZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQpAQCAtMjA2LDcgKzIwNyw3IEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGkKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MC4yNSwgYik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwogICAgIEVYUEVDVF9F
USgzdSwgYzItPmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoYzItPmNz
c1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEo
c2VyaWFsaXphdGlvbkZvckNTUygqYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIp
OwogCiAgICAgZGVsZXRlIGMxOwogICAgIEVYUEVDVF9FUSgydSwgYzItPmFzRXh0ZW5kZWQoKS5y
ZWZDb3VudCgpKTsKQEAgLTIzMiw3ICsyMzMsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFJldHVy
blZhbHVlcykKICAgICBFWFBFQ1RfVFJVRShjMi5pc0V4dGVuZGVkKCkpOwogCiAgICAgRVhQRUNU
X0VRKDF1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKGMyLmNz
c1RleHQoKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKKyAgICBFWFBFQ1RfRVEo
c2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7
CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>