<?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>225853</bug_id>
          
          <creation_ts>2021-05-16 08:59:57 -0700</creation_ts>
          <short_desc>HTMLCanvasElement toDataURL and toBlob do unnecessary data copies through a CFDataRef</short_desc>
          <delta_ts>2021-05-19 14:20:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760611</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 08:59:57 -0700</bug_when>
    <thetext>HTMLCanvasElement toDataURL and toBlob do unnecessary data copies through a CFDataRef</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760614</commentid>
    <comment_count>1</comment_count>
      <attachid>428790</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 09:13:11 -0700</bug_when>
    <thetext>Created attachment 428790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760632</commentid>
    <comment_count>2</comment_count>
      <attachid>428796</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 11:02:55 -0700</bug_when>
    <thetext>Created attachment 428796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760659</commentid>
    <comment_count>3</comment_count>
      <attachid>428805</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 15:27:37 -0700</bug_when>
    <thetext>Created attachment 428805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760664</commentid>
    <comment_count>4</comment_count>
      <attachid>428806</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 16:32:31 -0700</bug_when>
    <thetext>Created attachment 428806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760666</commentid>
    <comment_count>5</comment_count>
      <attachid>428807</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-16 19:26:52 -0700</bug_when>
    <thetext>Created attachment 428807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760766</commentid>
    <comment_count>6</comment_count>
      <attachid>428835</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-17 09:10:07 -0700</bug_when>
    <thetext>Created attachment 428835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760794</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-17 09:59:03 -0700</bug_when>
    <thetext>Ok, ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760987</commentid>
    <comment_count>8</comment_count>
      <attachid>428835</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-17 18:22:14 -0700</bug_when>
    <thetext>Comment on attachment 428835
Patch

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

&gt; Source/WTF/wtf/text/Base64.cpp:94
&gt; +template&lt;typename CharacterType&gt; static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, CharacterType* destinationDataBuffer, unsigned destinationLength, Base64EncodePolicy policy)

Maybe we should be using uint8_t instead of unsigned char?

&gt; Source/WTF/wtf/text/Base64.cpp:143
&gt; +static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, Vector&lt;char&gt;&amp; destinationVector, Base64EncodePolicy policy)

Can this use a return value instead of an out vector?

&gt; Source/WTF/wtf/text/Base64.h:52
&gt; +static constexpr unsigned maximumBase64EncoderInputBufferSize = UINT_MAX / 77 * 76 / 4 * 3 - 2;

std::numeric_limits instead of UINT_MAX? Comment should explain the nature of the conservative estimate.

&gt; Source/WTF/wtf/text/Base64.h:153
&gt; +WTF_EXPORT_PRIVATE void base64Encode(const void*, unsigned, Vector&lt;char&gt;&amp;, Base64EncodePolicy = Base64DoNotInsertLFs);

Can we change this to product a return value instead of taking an out argument?

&gt; Source/WTF/wtf/text/Base64.h:159
&gt; +void base64Encode(ConstSignedOrUnsignedCharVectorAdapter, Vector&lt;char&gt;&amp;, Base64EncodePolicy = Base64DoNotInsertLFs);
&gt; +void base64Encode(const CString&amp;, Vector&lt;char&gt;&amp;, Base64EncodePolicy = Base64DoNotInsertLFs);

Can we change this to product a return value instead of taking an out argument?

&gt; Source/WTF/wtf/text/Base64.h:252
&gt; +        if (result &gt; 76)
&gt; +            return result + ((result - 1) / 76);

Can we name the 76 constant?

Why the if statement? Seems like values in the 1-76 range would still yield the correct result.

I would drop one set of parentheses here.

&gt; Source/WebCore/ChangeLog:49
&gt; +        Replace encodeImage(), which use a filled in a CFMutableDataRef with overloads
&gt; +        of data and dataURL that now use a callback based CGDataConsumer and some callback
&gt; +        functors to allow the encoded data to be consumed as it is being created.

Some grammar problems in this sentence. &quot;which use a&quot;, and not enough commas.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp:203
&gt; +        auto image = nativeImage-&gt;platformImage();
&gt; +        return createCroppedImageIfNecessary(image.get(), backendSize());

Better without the local?

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.h:58
&gt; -    virtual RetainPtr&lt;CFDataRef&gt; toCFData(const String&amp; mimeType, Optional&lt;double&gt; quality, PreserveResolution) const;
&gt; +
&gt; +    virtual PlatformImagePtr copyPlatformImageForEncoding(CFStringRef destinationUTI, PreserveResolution) const;

Is this really an improvement? I’m not sure we need to use the typedef name when this is not platform-independent code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761011</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-17 19:58:42 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 428835 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428835&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.cpp:94
&gt; &gt; +template&lt;typename CharacterType&gt; static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, CharacterType* destinationDataBuffer, unsigned destinationLength, Base64EncodePolicy policy)
&gt; 
&gt; Maybe we should be using uint8_t instead of unsigned char?

Sounds good.

&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.cpp:143
&gt; &gt; +static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, Vector&lt;char&gt;&amp; destinationVector, Base64EncodePolicy policy)
&gt; 
&gt; Can this use a return value instead of an out vector?

There are still some places that are passing one in, but I plan to resolve those soon.

&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.h:52
&gt; &gt; +static constexpr unsigned maximumBase64EncoderInputBufferSize = UINT_MAX / 77 * 76 / 4 * 3 - 2;
&gt; 
&gt; std::numeric_limits instead of UINT_MAX? Comment should explain the nature
&gt; of the conservative estimate.

Will change to std::numeric_limits. I will do some digging, but the reason may be lost to time. I was just moving the comment along.

&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.h:153
&gt; &gt; +WTF_EXPORT_PRIVATE void base64Encode(const void*, unsigned, Vector&lt;char&gt;&amp;, Base64EncodePolicy = Base64DoNotInsertLFs);
&gt; 
&gt; Can we change this to product a return value instead of taking an out
&gt; argument?

Yep, planning on it, just not in this round.

&gt; 
&gt; &gt; Source/WTF/wtf/text/Base64.h:252
&gt; &gt; +        if (result &gt; 76)
&gt; &gt; +            return result + ((result - 1) / 76);
&gt; 
&gt; Can we name the 76 constant?

Will do.

&gt; 
&gt; Why the if statement? Seems like values in the 1-76 range would still yield
&gt; the correct result.

I think you are right. I was moving it from the encode function and didn&apos;t think it through.

&gt; 
&gt; I would drop one set of parentheses here.

But which one? :).

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:49
&gt; &gt; +        Replace encodeImage(), which use a filled in a CFMutableDataRef with overloads
&gt; &gt; +        of data and dataURL that now use a callback based CGDataConsumer and some callback
&gt; &gt; +        functors to allow the encoded data to be consumed as it is being created.
&gt; 
&gt; Some grammar problems in this sentence. &quot;which use a&quot;, and not enough commas.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp:203
&gt; &gt; +        auto image = nativeImage-&gt;platformImage();
&gt; &gt; +        return createCroppedImageIfNecessary(image.get(), backendSize());
&gt; 
&gt; Better without the local?

Yeah. Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.h:58
&gt; &gt; -    virtual RetainPtr&lt;CFDataRef&gt; toCFData(const String&amp; mimeType, Optional&lt;double&gt; quality, PreserveResolution) const;
&gt; &gt; +
&gt; &gt; +    virtual PlatformImagePtr copyPlatformImageForEncoding(CFStringRef destinationUTI, PreserveResolution) const;
&gt; 
&gt; Is this really an improvement? I’m not sure we need to use the typedef name
&gt; when this is not platform-independent code.

Which part of it are you concerned isn&apos;t an improvement? I agree making the function return a RetainPtr&lt;CGImageRef&gt; and calling it something like createCGImageForEncoding() would be even better and will do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761050</commentid>
    <comment_count>10</comment_count>
      <attachid>428835</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-17 23:20:57 -0700</bug_when>
    <thetext>Comment on attachment 428835
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/text/Base64.cpp:143
&gt;&gt;&gt; +static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, Vector&lt;char&gt;&amp; destinationVector, Base64EncodePolicy policy)
&gt;&gt; 
&gt;&gt; Can this use a return value instead of an out vector?
&gt; 
&gt; There are still some places that are passing one in, but I plan to resolve those soon.

The places that are passing one in can just assign it to the result, so I see no reason to wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761053</commentid>
    <comment_count>11</comment_count>
      <attachid>428835</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-17 23:22:42 -0700</bug_when>
    <thetext>Comment on attachment 428835
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.h:58
&gt;&gt;&gt; +    virtual PlatformImagePtr copyPlatformImageForEncoding(CFStringRef destinationUTI, PreserveResolution) const;
&gt;&gt; 
&gt;&gt; Is this really an improvement? I’m not sure we need to use the typedef name when this is not platform-independent code.
&gt; 
&gt; Which part of it are you concerned isn&apos;t an improvement? I agree making the function return a RetainPtr&lt;CGImageRef&gt; and calling it something like createCGImageForEncoding() would be even better and will do that.

If PlatformImagePtr exists so we can write platform-independent code that manipulates an image pointer, I still suggest calling it RetainPtr&lt;CGImageRef&gt; in CoreGraphics-platform-only code. I don’t think the typedef is an abstraction. But your idea is even better because this virtual function is platform-specific!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761141</commentid>
    <comment_count>12</comment_count>
      <attachid>428932</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 07:05:59 -0700</bug_when>
    <thetext>Created attachment 428932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761156</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 08:17:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 428835 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428835&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/wtf/text/Base64.cpp:143
&gt; &gt;&gt;&gt; +static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, Vector&lt;char&gt;&amp; destinationVector, Base64EncodePolicy policy)
&gt; &gt;&gt; 
&gt; &gt;&gt; Can this use a return value instead of an out vector?
&gt; &gt; 
&gt; &gt; There are still some places that are passing one in, but I plan to resolve those soon.
&gt; 
&gt; The places that are passing one in can just assign it to the result, so I
&gt; see no reason to wait.

Fair enough.

To do this, I am going to somehow differentiate the base64Encode() that returns a String and the one that returns a Vector&lt;char&gt;. Do you have a naming preference here?
I was thinking of just using base64EncodeToString() and base64EncodeToVector(). I could also do base64Encode&lt;String&gt;() and base64Encode&lt;Vector&lt;char&gt;&gt;()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761160</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 08:23:20 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #13)
&gt; (In reply to Darin Adler from comment #10)
&gt; &gt; Comment on attachment 428835 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=428835&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WTF/wtf/text/Base64.cpp:143
&gt; &gt; &gt;&gt;&gt; +static inline void base64EncodeInternal(const unsigned char* inputDataBuffer, unsigned inputLength, Vector&lt;char&gt;&amp; destinationVector, Base64EncodePolicy policy)
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Can this use a return value instead of an out vector?
&gt; &gt; &gt; 
&gt; &gt; &gt; There are still some places that are passing one in, but I plan to resolve those soon.
&gt; &gt; 
&gt; &gt; The places that are passing one in can just assign it to the result, so I
&gt; &gt; see no reason to wait.
&gt; 
&gt; Fair enough.
&gt; 
&gt; To do this, I am going to somehow differentiate the base64Encode() that
&gt; returns a String and the one that returns a Vector&lt;char&gt;. Do you have a
&gt; naming preference here?
&gt; I was thinking of just using base64EncodeToString() and
&gt; base64EncodeToVector(). I could also do base64Encode&lt;String&gt;() and
&gt; base64Encode&lt;Vector&lt;char&gt;&gt;()?

Or, I could make base64Encode() always return a Vector&lt;char&gt; and use makeString(base64Encoded()) for the string cases. That might be nicer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761172</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-18 09:03:13 -0700</bug_when>
    <thetext>I decided that I should do the base64 changes first, and then land this part as they are quite disconnected. Doing the base64 bit in https://bugs.webkit.org/show_bug.cgi?id=225920.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761641</commentid>
    <comment_count>16</comment_count>
      <attachid>429082</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-19 12:00:13 -0700</bug_when>
    <thetext>Created attachment 429082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761703</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-19 14:19:04 -0700</bug_when>
    <thetext>Committed r277751 (237921@main): &lt;https://commits.webkit.org/237921@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429082.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761707</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-19 14:20:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/78224439&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428790</attachid>
            <date>2021-05-16 09:13:11 -0700</date>
            <delta_ts>2021-05-16 11:02:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210516091311.patch</filename>
            <type>text/plain</type>
            <size>21404</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDIxLTA1LTE2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0Rh
dGFVUkwgYW5kIHRvQmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZE
YXRhUmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU4NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
aGVuIHRyeWluZyB0byBlbmNvZGUgZWl0aGVyIGEgUGl4ZWxCdWZmZXIgb3IgYSBJbWFnZUJ1ZmZl
ciB0byBhbiBpbWFnZSBmb3IKKyAgICAgICAgYmxvYiBvciBkYXRhVVJMIGNyZWF0aW9uLCB3ZSB3
ZXJlIHVzaW5nIGEgbWV0aG9kIHRoYXQgcmVxdWlyZWQgYWx3YXlzIGZpcnN0CisgICAgICAgIGNy
ZWF0aW5nIGEgQ0ZEYXRhUmVmIGFuZCB0aGVuIGNvcHlpbmcgdGhhdCBDRkRhdGFSZWYncyBkYXRh
IGludG8gd2hhdCB3ZSBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCwgd2UgY2FuIHVzZSBhIGNh
bGxiYWNrIGJhc2VkIENHRGF0YUNvbnN1bWVyIGFuZCBzb21lIHBhc3NlZCBhcm91bmQKKyAgICAg
ICAgZnVuY3RvcnMgdG8gZ2V0IHRoZSBkYXRhIGRpcmVjdGx5IGFzIGl0IGlzIGJlaW5nIGVuY29k
ZWQgYW5kIHByb2Nlc3MgaXQgYXMKKyAgICAgICAgbmVlZGVkLiBTY29wZWRMYW1iZGEgaXMgdXNl
ZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBpbmxpbmluZyBvciBhbGxvY2F0aW9uIHRoYXQKKyAgICAg
ICAgYSB0ZW1wbGF0ZSBiYXNlZCBmdW5jdG9yIG9yIFdURjo6RnVuY3Rpb24gd291bGQgcmVxdWly
ZSByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b1BsYXRmb3JtSW1hZ2UgY29uc3QpOgorICAgICAgICBGYWN0b3Igb3V0IFBsYXRmb3JtSW1h
Z2VQdHIgY3JlYXRpb24gaW50byBpdHMgb3duIGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IFJlcGxhY2UgdG9DRkRhdGEgd2l0aCB0aGlzIG5ldyBlbmNvZGUgZnVuY3Rpb24gdGhhdCB1c2Vz
IGEgU2NvcGVkTGFtYmRhIGFuZAorICAgICAgICBhbmQgdGhlIG5ldyBXZWJDb3JlOjplbmNvZGUo
KSBmdW5jdGlvbiBmcm9tICBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLiBMaWtlCisgICAgICAgIHRv
Q0ZEYXRhIGJlZm9yZSBpdCwgdGhpcyBpcyB2aXJ0dWFsIHNvIHRoYXQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kIGNhbgorICAgICAgICBhdWdtZW50IGl0LgorCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICBVc2UgdGhl
IG5ldyBlbmNvZGUoKSBmdW5jdGlvbiBwbHVzIGEgZnVuY3RvciB0byBpbXBsZW1lbnQgdGhlc2Ug
YXMgaW5jcmVtZW50YWwKKyAgICAgICAgY29uc3RydWN0aW9ucy4gCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NG
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgdG9DRkRhdGEgd2l0aCBlbmNv
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y29kZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFj
ZSBlbmNvZGVJbWFnZSgpLCBmaWxsZWQgaW4gYSBDRk11dGFibGVEYXRhUmVmIHdpdGggZW5jb2Rl
KCkgd2hpY2ggdXNlcworICAgICAgICBhIFNjb3BlZExhbWJkYSBhbmQgYSBDR0RhdGFDb25zdW1l
ckNhbGxiYWNrcyBiYXNlZCBDR0RhdGFDb25zdW1lciB0byBhbGxvdyBjYWxsZXJzCisgICAgICAg
IHRvIGdldCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBlbmNvZGVkIGRhdGEgYXMgaXQgaXMgcHJvZHVj
ZWQuCisKIDIwMjEtMDUtMTYgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdIENsZWFudXAgRm9ybWF0dGluZ0NvbnRleHQgY2xhc3MKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY4LDIwICsxNjgsMTEgQEAgdm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2xpcFRvTWFz
ayhHcgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1kZXN0UmVjdC54KCks
IC1kZXN0UmVjdC5tYXhZKCkpOwogfQogCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAorUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9QbGF0Zm9ybUltYWdl
KENGU3RyaW5nUmVmIHV0aSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKIHsKLSNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgQVNTRVJUX0lNUExJRVMoIWlz
SW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0jZWxzZQotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2Vu
ZGlmCi0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBl
KTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7CisgICAg
aWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBiZSB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHPwog
Ci0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQ
RUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBj
b21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgogICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgICAgICBhdXRvIHBpeGVs
QnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBsb2dpY2FsUmVjdCgpKTsKQEAgLTE5Nyw0
OSArMTg4LDgyIEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAg
ICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigpLCBkYXRhLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNv
bnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpT
Qzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwot
ICAgICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLT5zaXplKCk7
Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgp
LCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hl
ZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1h
cEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBl
bHNlIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICog
aW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Zm9ybWF0
KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgaWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEg
fHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CiAgICAg
ICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7
CiAgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpOwotICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5k
U2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaWYgKCFuYXRpdmVJbWFn
ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbWFnZSA9IG5hdGl2ZUlt
YWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUo
KS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRl
cjMySG9zdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCks
IENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhl
aWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgICAgICBhdXRvIGltYWdlID0g
bmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNyb3Bw
ZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSgpKTsKICAgICB9Ci0K
LSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdl
dCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgIAorICAgIGF1dG8gbmF0aXZlSW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICghbmF0aXZl
SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJ
bWFnZS0+cGxhdGZvcm1JbWFnZSgpOworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5o
ZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYo
KSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
SG9zdCkpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVj
dE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgp
KSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2Uu
Z2V0KCkpOworICAgIHJldHVybiBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQuZ2V0KCkpKTsKK30KIAotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Citib29sIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjplbmNvZGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKSBjb25zdAor
eworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVBy
b2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKwor
ICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAg
IEFTU0VSVCh1dGkpOworCisgICAgYXV0byBpbWFnZSA9IHRvUGxhdGZvcm1JbWFnZSh1dGkuZ2V0
KCksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmVuY29kZShpbWFnZS5nZXQoKSwgdXRpLmdl
dCgpLCBxdWFsaXR5LCBmdW5jdGlvbik7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5
cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0
YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OworICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHQ7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBlbmNvZGUobWltZVR5cGUsIHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8sIHNjb3BlZExhbWJkYVJlZjxQdXRCeXRlc0NhbGxiYWNr
PihbJl0gKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAg
ICAgIHJldHVybiBsZW5ndGg7CisgICAgfSkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHBy
ZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5hcHBlbmQoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIpOwor
CisgICAgYm9vbCBzdWNjZXNzID0gZW5jb2RlKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJl
c29sdXRpb24sIHNjb3BlZExhbWJkYVJlZjxQdXRCeXRlc0NhbGxiYWNrPihbJl0gKGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIFN0cmlu
Z1R5cGVBZGFwdGVyIGZvciBCYXNlNjQgZW5jb2RpbmcgdG8gYXZvaWQgdGhlIGV4dHJhIGNvcHkg
aGVyZS4KKyAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgICAgIGJhc2U2NEVu
Y29kZShkYXRhLCBsZW5ndGgsIGJhc2U2NERhdGEpOworCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGJhc2U2NERhdGEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9KSk7
CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gImRhdGE6LCJfczsKKworICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRTYWZl
SW1hZ2VCdWZmZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlRmx1c2hlcigp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDExIEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBSZXRh
aW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKICAgICB2b2lkIHNldHVwQ29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmV0
YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAgdXNp
bmcgUHV0Qnl0ZXNDYWxsYmFjayA9IHNpemVfdChjb25zdCB2b2lkKiwgc2l6ZV90KTsKKyAgICB2
aXJ0dWFsIGJvb2wgZW5jb2RlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0
ZXNDYWxsYmFjaz4mKSBjb25zdDsKKworICAgIFBsYXRmb3JtSW1hZ2VQdHIgdG9QbGF0Zm9ybUlt
YWdlKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmRyYXdDbwogICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdl
LCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAK
LVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9DRkRh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmVuY29kZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24s
IGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPiYgZnVuY3Rpb24pIGNvbnN0CiB7
CiAgICAgaWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAv
LyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgpAQCAtMTc0LDcg
KzE3NCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9TdXJmYWMKICAgICAg
ICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7CiAgICAgICAgIG1f
cmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IGZhbHNlOwogICAgIH0KLSAgICByZXR1
cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZW5jb2Rl
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24sIGZ1bmN0aW9uKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRv
Q0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTc4LDYgKzc3LDkgQEAgcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFj
ZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IG92ZXJyaWRlOwogCisgICAgLy8gSW1hZ2VCdWZmZXJDR0JhY2tlbmQgZnVuY3Rpb25zLgor
ICAgIGJvb2wgZW5jb2RlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXND
YWxsYmFjaz4mKSBjb25zdCBmaW5hbDsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IG1fc3VyZmFjZTsKICAgICBtdXRhYmxlIGJvb2wgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVs
QnVmZmVyIHsgZmFsc2UgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywzNyArOTMsNDYg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAogfQogCi1ib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2Us
IENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRh
UmVmIGRhdGEpCitib29sIGVuY29kZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiBkZXN0
aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8
UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKQogewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8
fCAhZGF0YSkKKyAgICBpZiAoIWltYWdlIHx8ICFkZXN0aW5hdGlvblVUSSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3Rp
bmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tz
IGNhbGxiYWNrcyB7CisgICAgICAgIFtdKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGNvdW50KSAtPiBzaXplX3QgeworICAgICAgICAgICAgYXV0byBmdW5jdG9yID0g
KnN0YXRpY19jYXN0PGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPio+KGNvbnRl
eHQpOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYnVmZmVyLCBjb3VudCk7CisgICAgICAg
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICB9OwogCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAm
JiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAg
ICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVz
dGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1
YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxv
c3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXBy
ZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQor
ICAgIGF1dG8gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlKGNvbnN0X2Nh
c3Q8U2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+Kj4oJmZ1bmN0aW9uKSwgJmNhbGxiYWNr
cykpOworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNy
ZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLCAxLCBu
dWxscHRyKSk7CisgICAgCisgICAgYXV0byBpbWFnZVByb3BlcnRpZXMgPSBbJl0gKCkgLT4gUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4geworICAgICAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlv
blVUSSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0
eSA8PSAxLjApIHsKKyAgICAgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5
IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICAgICAgYXV0byBjb21wcmVz
c2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICAgICAgY29uc3Qgdm9p
ZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAg
ICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZh
bHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfSgpOwogCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENv
bG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2
ZSBzb21lIG1hdGgKKyAgICAvLyBGSVhNRTogU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFj
a2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMg
d291bGQgc2F2ZSBzb21lIG1hdGgKICAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1
dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKwog
ICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7
CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgUGl4ZWxCdWZm
ZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQorYm9vbCBlbmNvZGUoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8
UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0g
ICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAg
QVNTRVJUKHV0aSk7CisgICAgYXV0byBkZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKIAogICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFMYXN0OwogICAgIApAQCAtMTMyLDEwICsxNDEsMTIgQEAgc3RhdGlj
IFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHByZW11bHRpcGxpZWREYXRhOwogCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJ
KCkpKSB7CisgICAgaWYgKENGRXF1YWwoZGVzdGluYXRpb25VVEkuZ2V0KCksIGpwZWdVVEkoKSkp
IHsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBQaXhlbEJ1ZmZlckNvbnZlcnNpb24gZm9yIHRoaXMg
b25jZSBpdCBzdXBwb3J0cyBSR0JYLgorCiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9m
IGJsYWNrLgogICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0
eShkYXRhU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KGRhdGFTaXplKTsK
ICAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgp
OwpAQCAtMTY1LDQwICsxNzYsNDAgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0
YShjb25zdAogICAgIGF1dG8gaW1hZ2VTaXplID0gc291cmNlLnNpemUoKTsKICAgICBhdXRvIGlt
YWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUu
aGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFj
ZShzb3VyY2UuZm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQg
fCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7CiAKLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFn
ZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgcmV0
dXJuIGVuY29kZShpbWFnZS5nZXQoKSwgZGVzdGluYXRpb25VVEkuZ2V0KCksIHF1YWxpdHksIGZ1
bmN0aW9uKTsKIH0KIAotU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsK
KyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwogCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1l
VHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQorICAgIGJvb2wgc3VjY2VzcyA9IGVu
Y29kZShwaXhlbEJ1ZmZlciwgbWltZVR5cGUsIHF1YWxpdHksIHNjb3BlZExhbWJkYVJlZjxQdXRC
eXRlc0NhbGxiYWNrPihbJl0gKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxl
bmd0aCk7CisgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfSkpOworICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZm
ZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVh
bGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAg
ICByZXR1cm4gImRhdGE6LCJfczsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8dWlu
dDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQorU3RyaW5nIGRhdGFVUkwoY29uc3Qg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0
YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRh
KSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiKTsKIAotVmVjdG9y
PHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEg
PSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07CisgICAgYm9vbCBzdWNjZXNzID0g
ZW5jb2RlKHBpeGVsQnVmZmVyLCBtaW1lVHlwZSwgcXVhbGl0eSwgc2NvcGVkTGFtYmRhUmVmPFB1
dEJ5dGVzQ2FsbGJhY2s+KFsmXSAoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewor
ICAgICAgICAvLyBGSVhNRTogQWRkIGEgU3RyaW5nVHlwZUFkYXB0ZXIgZm9yIEJhc2U2NCBlbmNv
ZGluZyB0byBhdm9pZCB0aGUgZXh0cmEgY29weSBoZXJlLgorICAgICAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKKyAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGxlbmd0aCwgYmFzZTY0RGF0
YSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJhc2U2NERhdGEpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9KSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gImRhdGE6LCJfczsKKworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDcgQEAK
ICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Nj
b3BlZExhbWJkYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDEyICszOSwxMSBA
QCBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVyCiBDRlN0cmluZ1JlZiBq
cGVnVVRJKCk7CiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYpOwogCi1ib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3Ry
aW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsK
K3VzaW5nIFB1dEJ5dGVzQ2FsbGJhY2sgPSBzaXplX3QoY29uc3Qgdm9pZCosIHNpemVfdCk7Citi
b29sIGVuY29kZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4m
KTsKK2Jvb2wgZW5jb2RlKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXND
YWxsYmFjaz4mKTsKIAotU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKIFN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLQotVmVjdG9yPHVpbnQ4X3Q+
IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKIFZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428796</attachid>
            <date>2021-05-16 11:02:55 -0700</date>
            <delta_ts>2021-05-16 15:27:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210516110254.patch</filename>
            <type>text/plain</type>
            <size>21551</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDIxLTA1LTE2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0Rh
dGFVUkwgYW5kIHRvQmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZE
YXRhUmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjU4NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
aGVuIHRyeWluZyB0byBlbmNvZGUgZWl0aGVyIGEgUGl4ZWxCdWZmZXIgb3IgYSBJbWFnZUJ1ZmZl
ciB0byBhbiBpbWFnZSBmb3IKKyAgICAgICAgYmxvYiBvciBkYXRhVVJMIGNyZWF0aW9uLCB3ZSB3
ZXJlIHVzaW5nIGEgbWV0aG9kIHRoYXQgcmVxdWlyZWQgYWx3YXlzIGZpcnN0CisgICAgICAgIGNy
ZWF0aW5nIGEgQ0ZEYXRhUmVmIGFuZCB0aGVuIGNvcHlpbmcgdGhhdCBDRkRhdGFSZWYncyBkYXRh
IGludG8gd2hhdCB3ZSBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCwgd2UgY2FuIHVzZSBhIGNh
bGxiYWNrIGJhc2VkIENHRGF0YUNvbnN1bWVyIGFuZCBzb21lIHBhc3NlZCBhcm91bmQKKyAgICAg
ICAgZnVuY3RvcnMgdG8gZ2V0IHRoZSBkYXRhIGRpcmVjdGx5IGFzIGl0IGlzIGJlaW5nIGVuY29k
ZWQgYW5kIHByb2Nlc3MgaXQgYXMKKyAgICAgICAgbmVlZGVkLiBTY29wZWRMYW1iZGEgaXMgdXNl
ZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBpbmxpbmluZyBvciBhbGxvY2F0aW9uIHRoYXQKKyAgICAg
ICAgYSB0ZW1wbGF0ZSBiYXNlZCBmdW5jdG9yIG9yIFdURjo6RnVuY3Rpb24gd291bGQgcmVxdWly
ZSByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b1BsYXRmb3JtSW1hZ2UgY29uc3QpOgorICAgICAgICBGYWN0b3Igb3V0IFBsYXRmb3JtSW1h
Z2VQdHIgY3JlYXRpb24gaW50byBpdHMgb3duIGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IFJlcGxhY2UgdG9DRkRhdGEgd2l0aCB0aGlzIG5ldyBlbmNvZGUgZnVuY3Rpb24gdGhhdCB1c2Vz
IGEgU2NvcGVkTGFtYmRhIGFuZAorICAgICAgICBhbmQgdGhlIG5ldyBXZWJDb3JlOjplbmNvZGUo
KSBmdW5jdGlvbiBmcm9tICBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLiBMaWtlCisgICAgICAgIHRv
Q0ZEYXRhIGJlZm9yZSBpdCwgdGhpcyBpcyB2aXJ0dWFsIHNvIHRoYXQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kIGNhbgorICAgICAgICBhdWdtZW50IGl0LgorCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICBVc2UgdGhl
IG5ldyBlbmNvZGUoKSBmdW5jdGlvbiBwbHVzIGEgZnVuY3RvciB0byBpbXBsZW1lbnQgdGhlc2Ug
YXMgaW5jcmVtZW50YWwKKyAgICAgICAgY29uc3RydWN0aW9ucy4gCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NG
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgdG9DRkRhdGEgd2l0aCBlbmNv
ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y29kZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgUmVwbGFj
ZSBlbmNvZGVJbWFnZSgpLCBmaWxsZWQgaW4gYSBDRk11dGFibGVEYXRhUmVmIHdpdGggZW5jb2Rl
KCkgd2hpY2ggdXNlcworICAgICAgICBhIFNjb3BlZExhbWJkYSBhbmQgYSBDR0RhdGFDb25zdW1l
ckNhbGxiYWNrcyBiYXNlZCBDR0RhdGFDb25zdW1lciB0byBhbGxvdyBjYWxsZXJzCisgICAgICAg
IHRvIGdldCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBlbmNvZGVkIGRhdGEgYXMgaXQgaXMgcHJvZHVj
ZWQuCisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHBy
ZXBhcmF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMCArMTY4LDExIEBAIHZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmNsaXBUb01hc2soR3IKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y2dDb250ZXh0LCAtZGVzdFJlY3QueCgpLCAtZGVzdFJlY3QubWF4WSgpKTsKIH0KIAotUmV0YWlu
UHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK1BsYXRmb3JtSW1hZ2VQdHIgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnRvUGxhdGZvcm1JbWFnZShDRlN0cmluZ1JlZiB1dGksIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQotICAgIEFTU0VSVF9JTVBMSUVTKCFpc0luR1BVUHJvY2VzcygpLCBNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2Vsc2UK
LSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKLSNlbmRpZgotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBQbGF0
Zm9ybUltYWdlUHRyIGltYWdlOworICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSkgewor
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdGhlIHNhbWUgbG9naWMgYXMg
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRz8KIAotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KICAgICAg
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IgfTsKICAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
bG9naWNhbFJlY3QoKSk7CkBAIC0xOTcsNDkgKzE4OCw4MiBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRD
RihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5LmxlYWtSZWYoKSwgZGF0
YSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKiwgc2l6ZV90KSB7CiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4oY29udGV4dCkt
PmRlcmVmKCk7CiAgICAgICAgIH0pKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghZGF0YVByb3Zp
ZGVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0byBpbWFnZVNp
emUgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgNCAq
IGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2UocGl4ZWxCdWZmZXItPmZvcm1h
dCgpLmNvbG9yU3BhY2UpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBo
YU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpLCA4LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9y
U3BhY2UocGl4ZWxCdWZmZXItPmZvcm1hdCgpLmNvbG9yU3BhY2UpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKworICAgIGlm
IChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykgewogICAgICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2
ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlID0gbmF0aXZlSW1hZ2UtPnBs
YXRmb3JtSW1hZ2UoKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0gICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpOwotICAgICAgICBh
dXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6
ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgp
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
Rmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0
QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNp
emUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCku
d2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkp
KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwg
YmFja2VuZFNpemUoKSk7CiAgICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2Rl
SW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAg
ICAKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRv
IGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgp
LndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndp
ZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1v
ZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgo
KSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2Vu
ZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Cit9CiAKLSAgICByZXR1cm4g
V1RGTW92ZShjZkRhdGEpOworYm9vbCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZW5jb2RlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2Fs
bGJhY2s+JiBmdW5jdGlvbikgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAg
QVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisjZWxzZQorICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOworI2VuZGlmCisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIGF1dG8gaW1hZ2Ug
PSB0b1BsYXRmb3JtSW1hZ2UodXRpLmdldCgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIGlm
ICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBXZWJDb3JlOjpl
bmNvZGUoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgZnVuY3Rpb24pOwogfQogCiBW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0CiB7Ci0gICAgaWYgKGF1
dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJu
IHsgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworCisgICAgYm9vbCBzdWNjZXNzID0g
ZW5jb2RlKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vLCBzY29wZWRM
YW1iZGFSZWY8UHV0Qnl0ZXNDYWxsYmFjaz4oWyZdIChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEpLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0pKTsKKyAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGVuY29kZShtaW1l
VHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uLCBzY29wZWRMYW1iZGFSZWY8UHV0Qnl0
ZXNDYWxsYmFjaz4oWyZdIChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBBZGQgYSBTdHJpbmdUeXBlQWRhcHRlciBmb3IgQmFzZTY0IGVuY29kaW5n
IHRvIGF2b2lkIHRoZSBleHRyYSBjb3B5IGhlcmUuCisgICAgICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOworICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YSwgbGVuZ3RoLCBiYXNlNjREYXRhKTsK
KworICAgICAgICBidWlsZGVyLmFwcGVuZChiYXNlNjREYXRhKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBsZW5ndGg7CisgICAgfSkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuICJkYXRhOiwiX3M7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlcj4gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNyZWF0ZUZsdXNoZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
VVNFKENHKQogCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUzLDcgKzU0LDEx
IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBj
b250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIHNldHVw
Q29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAgdXNpbmcgUHV0Qnl0ZXNDYWxsYmFjayA9IHNp
emVfdChjb25zdCB2b2lkKiwgc2l6ZV90KTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5jb2RlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mKSBjb25zdDsKKwor
ICAgIFBsYXRmb3JtSW1hZ2VQdHIgdG9QbGF0Zm9ybUltYWdlKENGU3RyaW5nUmVmIGRlc3RpbmF0
aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2
LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDbwogICAgICAgICBk
ZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLVJldGFpblB0cjxDRkRhdGFSZWY+IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAorYm9vbCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmVuY29k
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIGNvbnN0IFNjb3BlZExhbWJkYTxQdXRC
eXRlc0NhbGxiYWNrPiYgZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVxdWlyZXNEcmF3
QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJ
T1N1cmZhY2UgY2FjaGVkIGltYWdlLgpAQCAtMTc0LDcgKzE3NCw3IEBAIFJldGFpblB0cjxDRkRh
dGFSZWY+IEltYWdlQnVmZmVySU9TdXJmYWMKICAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZs
b2F0UmVjdCgxLCAxLCAwLCAwKSk7CiAgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhl
bEJ1ZmZlciA9IGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZW5jb2RlKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24sIGZ1bmN0aW9uKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFBp
eGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTc4LDYgKzc3LDkgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgLy8g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgZnVuY3Rpb25zLgorICAgIGJvb2wgZW5jb2RlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mKSBjb25zdCBmaW5hbDsK
KwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBtdXRhYmxl
IGJvb2wgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyIHsgZmFsc2UgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MywzNyArOTMsNDYgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCi1i
b29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCitib29sIGVuY29kZShD
R0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0
aW9uKQogewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICBpZiAoIWltYWdl
IHx8ICFkZXN0aW5hdGlvblVUSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBk
ZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0
YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyB7CisgICAgICAgIFtd
KHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KSAtPiBzaXpl
X3QgeworICAgICAgICAgICAgYXV0byBmdW5jdG9yID0gKnN0YXRpY19jYXN0PGNvbnN0IFNjb3Bl
ZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPio+KGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0b3IoYnVmZmVyLCBjb3VudCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIKKyAg
ICB9OwogCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwot
ICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNz
aW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8g
Y29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qg
dm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5Owot
ICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAg
ICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtl
eSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQorICAgIGF1dG8gY29uc3VtZXIgPSBhZG9w
dENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlKGNvbnN0X2Nhc3Q8U2NvcGVkTGFtYmRhPFB1dEJ5dGVz
Q2FsbGJhY2s+Kj4oJmZ1bmN0aW9uKSwgJmNhbGxiYWNrcykpOworICAgIGF1dG8gZGVzdGluYXRp
b24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29u
c3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLCAxLCBudWxscHRyKSk7CisgICAgCisgICAgYXV0
byBpbWFnZVByb3BlcnRpZXMgPSBbJl0gKCkgLT4gUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
eworICAgICAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVUSSwganBlZ1VUSSgpKSAmJiBxdWFs
aXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgICAg
IC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3Rp
bmF0aW9uLgorICAgICAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENG
TnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYq
cXVhbGl0eSkpOworICAgICAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5h
dGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICAgICAgY29uc3Qgdm9pZCogdmFs
dWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSgpOwogCi0gICAgLy8gU2V0dGlu
ZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGlt
YWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBGSVhN
RTogU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZv
ciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKICAg
ICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29y
ay4KIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBp
bWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKwogICAgIHJldHVybiBDR0ltYWdlRGVzdGlu
YXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorYm9vbCBlbmNvZGUoY29uc3Qg
UGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0
aW9uKQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7CisgICAgYXV0byBk
ZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKIAog
ICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0Owog
ICAgIApAQCAtMTMyLDEwICsxNDEsMTIgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNm
RGF0YShjb25zdAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwogCi0g
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgaWYgKENGRXF1YWwo
ZGVzdGluYXRpb25VVEkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFVz
ZSBQaXhlbEJ1ZmZlckNvbnZlcnNpb24gZm9yIHRoaXMgb25jZSBpdCBzdXBwb3J0cyBSR0JYLgor
CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2
ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgogICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShkYXRhU2l6ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YS5ncm93KGRhdGFTaXplKTsKICAgICAgICAgdW5zaWduZWQgY2hhciog
YnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwpAQCAtMTY1LDQwICsxNzYsNDAgQEAg
c3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgIGF1dG8gaW1hZ2VT
aXplID0gc291cmNlLnNpemUoKTsKICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1h
Z2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShzb3VyY2UuZm9ybWF0KCkuY29sb3JT
cGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKLSAg
ICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgp
LCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgcmV0dXJuIGVuY29kZShpbWFnZS5nZXQoKSwg
ZGVzdGluYXRpb25VVEkuZ2V0KCksIHF1YWxpdHksIGZ1bmN0aW9uKTsKIH0KIAotU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitWZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0OwogCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNl
NjREYXRhOwotfQorICAgIGJvb2wgc3VjY2VzcyA9IGVuY29kZShwaXhlbEJ1ZmZlciwgbWltZVR5
cGUsIHF1YWxpdHksIHNjb3BlZExhbWJkYVJlZjxQdXRCeXRlc0NhbGxiYWNrPihbJl0gKGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBs
ZW5ndGg7CisgICAgfSkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRh
dGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBk
YXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFS
ZWYgY2ZEYXRhKQorU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0
cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiKTsKIAotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4
ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlw
ZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAg
IHJldHVybiB7IH07CisgICAgYm9vbCBzdWNjZXNzID0gZW5jb2RlKHBpeGVsQnVmZmVyLCBtaW1l
VHlwZSwgcXVhbGl0eSwgc2NvcGVkTGFtYmRhUmVmPFB1dEJ5dGVzQ2FsbGJhY2s+KFsmXSAoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICAgICAgICAvLyBGSVhNRTogQWRkIGEg
U3RyaW5nVHlwZUFkYXB0ZXIgZm9yIEJhc2U2NCBlbmNvZGluZyB0byBhdm9pZCB0aGUgZXh0cmEg
Y29weSBoZXJlLgorICAgICAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICAgICAgYmFz
ZTY0RW5jb2RlKGRhdGEsIGxlbmd0aCwgYmFzZTY0RGF0YSk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGJhc2U2NERhdGEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9
KSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gImRhdGE6LCJfczsKKworICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQyLDEyICszOSwxMSBAQCBXRUJDT1JFX0VYUE9SVCB1aW50OF90
IHZlcmlmeUltYWdlQnVmZmVyCiBDRlN0cmluZ1JlZiBqcGVnVVRJKCk7CiBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwogCi1i
b29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKK3VzaW5nIFB1dEJ5dGVzQ2FsbGJhY2sg
PSBzaXplX3QoY29uc3Qgdm9pZCosIHNpemVfdCk7Citib29sIGVuY29kZShDR0ltYWdlUmVmLCBD
RlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25z
dCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mKTsKK2Jvb2wgZW5jb2RlKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mKTsKIAotU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIFN0cmluZyBkYXRhVVJM
KGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KTsKLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsK
IFZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428805</attachid>
            <date>2021-05-16 15:27:37 -0700</date>
            <delta_ts>2021-05-16 16:38:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210516152736.patch</filename>
            <type>text/plain</type>
            <size>38011</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA1LTE2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwgYW5kIHRv
QmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgU3Ry
aW5nVHlwZUFkYXB0ZXIgZm9yIGlubGluZSBiYXNlNjQgZW5jb2RpbmcgZGF0YSBpbiBlaXRoZXIg
bWFrZVN0cmluZygpCisgICAgICAgIG9yIFN0cmluZ0J1aWxkZXIuIFRvIG1ha2UgdGhpcyB3b3Jr
LCBhIGZldyBtb2RpZmljYXRpb25zIHdlcmUgbmVlZCB0byB0aGUgCisgICAgICAgIGJhc2U2NEVu
Y29kZSgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5j
dGlvbi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlz
IG5vdyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAg
VGhpcyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkg
YmFzZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29k
aW5nIHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0
aW1hdGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAg
ZG93biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVy
bmFsIHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5l
dyAKKyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVD
aGFyKiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3Ig
dG8gd3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFs
bCBjaGFuZ2UgaXMgdGhhdCBhbGwgdXNlIG9mIEJhc2U2NFVSTFBvbGljeSBub3cgcmVzdWx0cyBp
biB1c2luZyAKKyAgICAgICAgYmFzZTY0VVJMRW5jTWFwLCBub3QganVzdCB3aGVuIGNhbGxlZCBm
cm9tIGJhc2U2NFVSTEVuY29kZS4gVGhlcmUgYXJlIG5vIGNhbGxlcnMgd2hvCisgICAgICAgIGdv
IGRvd24gdGhpcyBwYXRoIGN1cnJlbnRseSwgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVu
dGF0aW9uIGFuZCBtYWtlcyBpdCBtb3JlCisgICAgICAgIGNvbnNpc3RlbnQuCisKKyAgICAgICAg
KiB3dGYvRm9yd2FyZC5oOgorICAgICAgICBBZGQgU2NvcGVkTGFtYmRhIHNvIGl0IGNhbiBiZSB1
c2VkIGluIGhlYWRlcnMgd2l0aG91dCBiZWluZyBkaXJlY3RseSBpbmNsdWRlZC4KKworICAgICAg
ICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVy
bmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0
VVJMRW5jb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6
Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVk
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OlN0cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFz
ZTY0U3BlY2lmaWNhdGlvbj46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5
cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjppczhCaXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6d3JpdGVUbyBjb25z
dCk6CisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHBy
ZXBhcmF0aW9uCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IFJhd1B0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgPSBSYXdQdHJUcmFpdHM8VD4sIHR5cGVuYW1lID0gRGVmYXVsdFJlZkRlcmVmVHJh
aXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmV0YWluUHRy
OwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFNjb3BlZExhbWJkYTsKIHRlbXBsYXRlPHR5cGVu
YW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5n
UGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNz
IFN0cmluZ1R5cGVBZGFwdGVyOwpAQCAtMTM5LDYgKzE0MCw3IEBAIHVzaW5nIFdURjo6UmVmOwog
dXNpbmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5nIFdURjo6U0hB
MTsKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBX
VEY6OlN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmln
aHQgKEMpIDIwMDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkxLDkzICs5MSw5OSBAQCBz
dGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwg
MHgzMywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClb
NjRdKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB2b2lk
IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5n
dGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhh
biBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0g
ICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2
IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5
KSA/IGJhc2U2NEVuY01hcCA6IGJhc2U2NFVSTEVuY01hcDsKIAogICAgIHVuc2lnbmVkIHNpZHgg
PSAwOwogICAgIHVuc2lnbmVkIGRpZHggPSAwOworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKIAot
ICAgIHVuc2lnbmVkIG91dExlbmd0aCA9ICgobGVuICsgMikgLyAzKSAqIDQ7CisgICAgYm9vbCBp
bnNlcnRMRnMgPSAocG9saWN5ID09IEJhc2U2NEluc2VydExGcyAmJiBkZXN0aW5hdGlvbkxlbmd0
aCA+IDc2KTsKIAotICAgIC8vIERlYWwgd2l0aCB0aGUgNzYgY2hhcmFjdGVyIHBlciBsaW5lIGxp
bWl0IHNwZWNpZmllZCBpbiBSRkMgMjA0NS4KLSAgICBib29sIGluc2VydExGcyA9IChwb2xpY3kg
PT0gQmFzZTY0SW5zZXJ0TEZzICYmIG91dExlbmd0aCA+IDc2KTsKLSAgICBpZiAoaW5zZXJ0TEZz
KQotICAgICAgICBvdXRMZW5ndGggKz0gKChvdXRMZW5ndGggLSAxKSAvIDc2KTsKLQotICAgIGlu
dCBjb3VudCA9IDA7Ci0gICAgb3V0Lmdyb3cob3V0TGVuZ3RoKTsKLQotICAgIC8vIDMtYnl0ZSB0
byA0LWJ5dGUgY29udmVyc2lvbiArIDAtNjMgdG8gYXNjaWkgcHJpbnRhYmxlIGNvbnZlcnNpb24K
LSAgICBpZiAobGVuID4gMSkgewotICAgICAgICB3aGlsZSAoc2lkeCA8IGxlbiAtIDIpIHsKKyAg
ICBpZiAoaW5wdXRMZW5ndGggPiAxKSB7CisgICAgICAgIHdoaWxlIChzaWR4IDwgaW5wdXRMZW5n
dGggLSAyKSB7CiAgICAgICAgICAgICBpZiAoaW5zZXJ0TEZzKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGNvdW50ICYmICEoY291bnQgJSA3NikpCi0gICAgICAgICAgICAgICAgICAgIG91dFtkaWR4
KytdID0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2Rp
ZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgIGNvdW50ICs9IDQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0YVtzaWR4XSA+PiAyKSAm
IDA3N107Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCAr
IDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAgICAg
ICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAyXSA+PiA2KSAmIDAwMykg
fCAoKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsr
XSA9IGVuY29kZU1hcFtkYXRhW3NpZHggKyAyXSAmIDA3N107CisKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3Np
ZHggICAgXSA+PiAyKSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkgJiAw
MTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3KV07CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0
YUJ1ZmZlcltzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeCAr
IDFdIDw8IDIpICYgMDc3KV07CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9IGVuY29kZU1hcFsgIGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMl0gICAgICAgJiAwNzdd
OwogICAgICAgICAgICAgc2lkeCArPSAzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHNp
ZHggPCBsZW4pIHsKKyAgICBpZiAoc2lkeCA8IGlucHV0TGVuZ3RoKSB7CiAgICAgICAgIGlmIChp
bnNlcnRMRnMgJiYgKGNvdW50ID4gMCkgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgb3V0
W2RpZHgrK10gPSAnXG4nOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgr
K10gPSAnXG4nOwogCi0gICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhd
ID4+IDIpICYgMDc3XTsKLSAgICAgICAgaWYgKHNpZHggPCBsZW4gLSAxKSB7Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8
ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBl
bmNvZGVNYXBbKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKKyAgICAgICAgZGVzdGluYXRp
b25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA+
PiAyKSAmIDA3N107CisgICAgICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGggLSAxKSB7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0
RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lk
eF0gPDwgNCkgJiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWyAoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA8PCAyKSAmIDA3N107
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRh
dGFbc2lkeF0gPDwgNCkgJiAwNzddOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVy
W2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYg
MDc3XTsKICAgICB9CiAKLSAgICAvLyBBZGQgcGFkZGluZwotICAgIGlmIChwb2xpY3kgPT0gQmFz
ZTY0VVJMUG9saWN5KQotICAgICAgICBvdXQucmVzaXplKGRpZHgpOwotICAgIGVsc2UgewotICAg
ICAgICB3aGlsZSAoZGlkeCA8IG91dC5zaXplKCkpIHsKLSAgICAgICAgICAgIG91dFtkaWR4XSA9
ICc9JzsKLSAgICAgICAgICAgICsrZGlkeDsKLSAgICAgICAgfQorICAgIEFTU0VSVChwb2xpY3kg
IT0gQmFzZTY0VVJMUG9saWN5IHx8IGRpZHggPT0gZGVzdGluYXRpb25MZW5ndGgpOworCisgICAg
d2hpbGUgKGRpZHggPCBkZXN0aW5hdGlvbkxlbmd0aCkgeworICAgICAgICBkZXN0aW5hdGlvbkRh
dGFCdWZmZXJbZGlkeF0gPSAnPSc7CisgICAgICAgICsrZGlkeDsKICAgICB9CiB9CiAKLVN0cmlu
ZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5KQorc3RhdGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVy
bmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIFZlY3RvcjxjaGFyPiYgZGVzdGluYXRpb25WZWN0b3IsIEJhc2U2NEVuY29kZVBvbGlj
eSBwb2xpY3kpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJ
bnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwg
cmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQu
ZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBkZXN0aW5hdGlvblZlY3Rvci5jbGVhcigpOwor
ICAgIAorICAgIGF1dG8gZGVzdGluYXRpb25MZW5ndGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZShpbnB1dExlbmd0aCwgcG9saWN5KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQor
ICAgICAgICByZXR1cm47CisKKyAgICBkZXN0aW5hdGlvblZlY3Rvci5ncm93KGRlc3RpbmF0aW9u
TGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChpbnB1dERhdGFCdWZmZXIsIGlucHV0
TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRhKCksIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xp
Y3kpOwogfQogCi12b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBs
ZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0
TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQogewotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuLCBvdXQs
IHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNv
ZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIHBvbGljeSkpOworfQorCit2b2lkIGJh
c2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVu
Z3RoLCBWZWN0b3I8Y2hhcj4mIGRlc3RpbmF0aW9uVmVjdG9yLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5KQoreworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25W
ZWN0b3IsIHBvbGljeSk7Cit9CisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0
RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVDaGFyKiBkZXN0aW5hdGlvbkRhdGFC
dWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5KQoreworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAg
ICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgZGVz
dGluYXRpb25MZW5ndGgsIHBvbGljeSk7Cit9CisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZv
aWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIExDaGFyKiBkZXN0aW5h
dGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBCYXNlNjRFbmNvZGVQ
b2xpY3kgcG9saWN5KQoreworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisgICAgICAgIHJl
dHVybjsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSk7CiB9CiAKLVN0cmluZyBiYXNlNjRVUkxF
bmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5nIGJhc2U2NFVS
TEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3Ro
KQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgsIHJlc3VsdCwg
QmFzZTY0VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOwotICAgIHJldHVybiBTdHJpbmcocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbnB1
dERhdGFCdWZmZXIsIGlucHV0TGVuZ3RoLCBCYXNlNjRVUkxQb2xpY3kpOwogfQogCi12b2lkIGJh
c2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFy
PiYgb3V0KQordm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXREYXRhQnVmZmVy
LCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBkZXN0aW5hdGlvblZlY3RvcikK
IHsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7
CisgICAgYmFzZTY0RW5jb2RlKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0
aW9uVmVjdG9yLCBCYXNlNjRVUkxQb2xpY3kpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIGVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKICAgICBCYXNlNjREb05vdEluc2VydExG
cywKICAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9saWN5IC8vIE5vIHBhZGRp
bmcsIG5vIExGcy4KKyAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGluZywgbm8gTEZzLCB1
c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2ZWx5Li4KIH07
CiAKIGVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7CkBAIC00Niw2ICs0NywxMCBAQCBlbnVtIEJh
c2U2NERlY29kZU9wdGlvbnMgewogICAgIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYiA9IDEgPDwg
MiwKIH07CiAKKy8vIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2Us
IGp1c3QgcmV0dXJuIG5vdGhpbmcuCisvLyBSYXRoZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJl
Y2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCitzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAq
IDc2IC8gNCAqIDMgLSAyOworCiBjbGFzcyBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0
ZXIgewogcHVibGljOgogICAgIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlcihWZWN0
b3I8Y2hhcj4mIHZlY3RvcikKQEAgLTE0NCwxMiArMTQ5LDE0IEBAIHByaXZhdGU6CiAgICAgfSBt
X3ZlY3RvcjsKIH07CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25z
dCB2b2lkKiwgdW5zaWduZWQsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JVbnNp
Z25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kg
PSBCYXNlNjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5n
JiwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRM
RnMpOwogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCos
IHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVuc2lnbmVk
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHVu
c2lnbmVkLCBVQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05v
dEluc2VydExGcyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBMQ2hhciosIHVuc2lnbmVkLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBC
YXNlNjREb05vdEluc2VydExGcyk7CiBTdHJpbmcgYmFzZTY0RW5jb2RlKENvbnN0U2lnbmVkT3JV
bnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05v
dEluc2VydExGcyk7CiBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRF
bmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Cit2b2lkIGJhc2U2NEVuY29kZShD
b25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFz
ZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwordm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKIAogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVj
b2RlKGNvbnN0IFN0cmluZyYsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgdW5z
aWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciwgdW5zaWduZWQgb3B0aW9ucyA9IEJhc2U2NERlZmF1bHQpOwpAQCAtMjE5LDE1ICsyMjYsODEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgIHJldHVybiBp
c0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJy0n
IHx8IGMgPT0gJ18nOwogfQogCitpbmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQmFzZTY0RW5jb2Rl
ZFNpemUodW5zaWduZWQgaW5wdXRMZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCit7
CisgICAgaWYgKCFpbnB1dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaW5w
dXRMZW5ndGggPiBtYXhpbXVtQmFzZTY0RW5jb2RlcklucHV0QnVmZmVyU2l6ZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBhdXRvIGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAg
ICAgIHJldHVybiAoKGlucHV0TGVuZ3RoICsgMikgLyAzKSAqIDQ7CisgICAgfTsKKworICAgIGF1
dG8gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAgICByZXR1cm4gKChpbnB1
dExlbmd0aCAqIDQpICsgMikgLyAzOworICAgIH07CisKKyAgICBzd2l0Y2ggKHBvbGljeSkgewor
ICAgIGNhc2UgQmFzZTY0RG9Ob3RJbnNlcnRMRnM6CisgICAgICAgIHJldHVybiBiYXNlUGFkZGVk
RW5jb2RlZFNpemUoKTsKKworICAgIGNhc2UgQmFzZTY0SW5zZXJ0TEZzOiB7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gYmFzZVBhZGRlZEVuY29kZWRTaXplKCk7CisgICAgICAgIGlmIChyZXN1bHQg
PiA3NikKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoKHJlc3VsdCAtIDEpIC8gNzYpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGNhc2UgQmFzZTY0VVJMUG9saWN5
OgorICAgICAgICByZXR1cm4gYmFzZVVucGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICB9Cit9CisK
K3N0cnVjdCBCYXNlNjRTcGVjaWZpY2F0aW9uIHsKKyAgICBjb25zdCB2b2lkKiBpbnB1dERhdGE7
CisgICAgdW5zaWduZWQgaW5wdXRMZW5ndGg7CisgICAgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGlj
eTsKK307CisKK2lubGluZSBCYXNlNjRTcGVjaWZpY2F0aW9uIGJhc2U2NEVuY29kZWQoY29uc3Qg
dm9pZCogaW5wdXREYXRhLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKQoreworICAgIHJldHVybiB7IGlucHV0RGF0
YSwgaW5wdXRMZW5ndGgsIHBvbGljeSB9OworfQorCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBl
QWRhcHRlcihjb25zdCBCYXNlNjRTcGVjaWZpY2F0aW9uJiBiYXNlNjQpCisgICAgICAgIDogbV9i
YXNlNjQgeyBiYXNlNjQgfQorICAgICAgICAsIG1fZW5jb2RlZExlbmd0aCB7IGNhbGN1bGF0ZUJh
c2U2NEVuY29kZWRTaXplKGJhc2U2NC5pbnB1dExlbmd0aCwgYmFzZTY0LnBvbGljeSkgfQorICAg
IHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2VuY29k
ZWRMZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0
ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIGJhc2U2NEVuY29kZSht
X2Jhc2U2NC5pbnB1dERhdGEsIG1fYmFzZTY0LmlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvbiwgbV9l
bmNvZGVkTGVuZ3RoLCBtX2Jhc2U2NC5wb2xpY3kpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBC
YXNlNjRTcGVjaWZpY2F0aW9uIG1fYmFzZTY0OworICAgIHVuc2lnbmVkIG1fZW5jb2RlZExlbmd0
aDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OkJhc2U2NEVuY29kZVBv
bGljeTsKK3VzaW5nIFdURjo6QmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiOwogdXNpbmcgV1RGOjpC
YXNlNjREb05vdEluc2VydExGczsKK3VzaW5nIFdURjo6QmFzZTY0RW5jb2RlUG9saWN5OwordXNp
bmcgV1RGOjpCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lczsKIHVzaW5nIFdURjo6QmFzZTY0
SW5zZXJ0TEZzOwordXNpbmcgV1RGOjpCYXNlNjRTcGVjaWZpY2F0aW9uOwogdXNpbmcgV1RGOjpC
YXNlNjRWYWxpZGF0ZVBhZGRpbmc7Ci11c2luZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzOwotdXNpbmcgV1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7Ci11c2luZyBXVEY6
OmJhc2U2NEVuY29kZTsKIHVzaW5nIFdURjo6YmFzZTY0RGVjb2RlOwordXNpbmcgV1RGOjpiYXNl
NjRFbmNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZWQ7CiB1c2luZyBXVEY6OmJhc2U2NFVS
TERlY29kZTsKIHVzaW5nIFdURjo6aXNCYXNlNjRPckJhc2U2NFVSTENoYXJhY3RlcjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI3NzU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDIxLTA1LTE2ICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwg
YW5kIHRvQmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVm
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHRy
eWluZyB0byBlbmNvZGUgZWl0aGVyIGEgUGl4ZWxCdWZmZXIgb3IgYSBJbWFnZUJ1ZmZlciB0byBh
biBpbWFnZSBmb3IKKyAgICAgICAgYmxvYiBvciBkYXRhVVJMIGNyZWF0aW9uLCB3ZSB3ZXJlIHVz
aW5nIGEgbWV0aG9kIHRoYXQgcmVxdWlyZWQgYWx3YXlzIGZpcnN0CisgICAgICAgIGNyZWF0aW5n
IGEgQ0ZEYXRhUmVmIGFuZCB0aGVuIGNvcHlpbmcgdGhhdCBDRkRhdGFSZWYncyBkYXRhIGludG8g
d2hhdCB3ZSBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCwgd2UgY2FuIHVzZSBhIGNhbGxiYWNr
IGJhc2VkIENHRGF0YUNvbnN1bWVyIGFuZCBzb21lIHBhc3NlZCBhcm91bmQKKyAgICAgICAgZnVu
Y3RvcnMgdG8gZ2V0IHRoZSBkYXRhIGRpcmVjdGx5IGFzIGl0IGlzIGJlaW5nIGVuY29kZWQgYW5k
IHByb2Nlc3MgaXQgYXMKKyAgICAgICAgbmVlZGVkLiBTY29wZWRMYW1iZGEgaXMgdXNlZCB0byBh
dm9pZCB1bm5lY2Vzc2FyeSBpbmxpbmluZyBvciBhbGxvY2F0aW9uIHRoYXQKKyAgICAgICAgYSB0
ZW1wbGF0ZSBiYXNlZCBmdW5jdG9yIG9yIFdURjo6RnVuY3Rpb24gd291bGQgcmVxdWlyZSByZXNw
ZWN0aXZlbHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NG
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBjb25zdCk6CisgICAgICAgIEZhY3Rv
ciBvdXQgUGxhdGZvcm1JbWFnZVB0ciBjcmVhdGlvbiBpbnRvIGl0cyBvd24gZnVuY3Rpb24uIFRo
aXMgcmVwbGFjZXMgdGhlCisgICAgICAgIHRvQ0ZEYXRhIHZpcnR1YWwgZnVuY3Rpb24sIGFuZCBp
cyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGRhdGEvZGF0YVVSTAorICAgICAgICBmdW5j
dGlvbnMgaW4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQgdG8gcHJvZHVjZSB0aGUgZW5jb2RlZCBkYXRh
LgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29u
c3QpOgorICAgICAgICBSZXdvcmsgdG8gdXNlIGNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2Rpbmcg
YW5kIGRhdGEvZGF0YVVSTCBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZAorICAgICAgICB0byBwcm9k
dWNlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
dG9DRkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBMaWtlIHRvQ0ZEYXRhIGJlZm9yZSBp
dCwgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBpcyB2aXJ0dWFsIGFsbG93aW5nIGZvciB0
aGlzCisgICAgICAgIG92ZXJyaWRlIGluIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVU
b1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVUb0RhdGFVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OmVuY29kZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgUmVwbGFjZSBlbmNvZGVJbWFnZSgpLCB3aGljaCB1c2UgYSBmaWxsZWQgaW4gYSBDRk11dGFi
bGVEYXRhUmVmIHdpdGggb3ZlcmxvYWRzCisgICAgICAgIG9mIGRhdGEgYW5kIGRhdGFVUkwgdGhh
dCBub3cgdXNlIGEgY2FsbGJhY2sgYmFzZWQgQ0dEYXRhQ29uc3VtZXIgYW5kIHNvbWUgY2FsbGJh
Y2sKKyAgICAgICAgZnVuY3RvcnMgdG8gYWxsb3cgdGhlIGVuY29kZWQgZGF0YSB0byBiZSBjb25z
dW1lZCBhcyBpdCBpcyBiZWluZyBjcmVhdGVkLgorICAgICAgICBBbHNvIG1ha2VzIHVzZSBvZiBu
ZXcgYmFzZTY0RW5jb2RlZCgpIGFkYXB0ZXIgdG8gYmFzZTY0IGVuY29kZSBkaXJlY3RseSBpbiBt
YWtlU3RyaW5nKCkuCisKIDIwMjEtMDUtMTYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgogCiAgICAgICAgIFN1cHBvcnQgc2VyaWFsaXppbmcgSW1hZ2VEYXRhIG9iamVjdCBjb2xvclNw
YWNlIHByb3BlcnR5IGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjgsMjAgKzE2OCwxMSBAQCB2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjbGlwVG9NYXNrKEdy
CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLWRlc3RSZWN0LngoKSwgLWRl
c3RSZWN0Lm1heFkoKSk7CiB9CiAKLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CitQ
bGF0Zm9ybUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZv
ckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewotI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAg
ICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLSNlbHNlCi0gICAg
QVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVm
ZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUGxhdGZvcm1J
bWFnZVB0ciBpbWFnZTsKKyAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVUSSwganBlZ1VUSSgp
KSkgeworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdGhlIHNhbWUgbG9n
aWMgYXMgSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRz8KIAotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQo
KSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNo
YW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4K
ICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IgfTsKICAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgbG9naWNhbFJlY3QoKSk7CkBAIC0xOTcsNDkgKzE4OCw1OCBAQCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5LmxlYWtSZWYo
KSwgZGF0YSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKiwgc2l6ZV90
KSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4oY29u
dGV4dCktPmRlcmVmKCk7CiAgICAgICAgIH0pKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghZGF0
YVByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0byBp
bWFnZVNpemUgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAz
MiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2UocGl4ZWxCdWZmZXIt
PmZvcm1hdCgpLmNvbG9yU3BhY2UpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAocmVzb2x1dGlvblNjYWxlKCkg
PT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwg
aW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRD
R0NvbG9yU3BhY2UocGl4ZWxCdWZmZXItPmZvcm1hdCgpLmNvbG9yU3BhY2UpLCBrQ0dCaXRtYXBC
eXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVy
LmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKwor
ICAgIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykgewogICAgICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29w
eU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIW5hdGl2ZUltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlID0gbmF0aXZlSW1h
Z2UtPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgYXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpOwotICAg
ICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNr
ZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5k
U2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFj
a2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRT
aXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKKyAgICAgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdl
KCk7CisgICAgICAgIHJldHVybiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5n
ZXQoKSwgYmFja2VuZFNpemUoKSk7CiAgICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKKyAgICAKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgYXV0byBpbWFnZSA9IG5h
dGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0KSk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwg
Q0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVp
Z2h0KCkpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpLCBp
bWFnZS5nZXQoKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dC5nZXQoKSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0
b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisgICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisjZWxzZQor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworI2VuZGlmCisKKyAgICBhdXRvIGRlc3RpbmF0aW9uVVRJID0g
dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIGF1dG8gaW1hZ2UgPSBj
b3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nKGRlc3RpbmF0aW9uVVRJLmdldCgpLCBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpkYXRhKGltYWdlLmdldCgp
LCBkZXN0aW5hdGlvblVUSS5nZXQoKSwgcXVhbGl0eSk7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHBy
ZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisgICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisjZWxzZQor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworI2VuZGlmCisKKyAgICBhdXRvIGRlc3RpbmF0aW9uVVRJID0g
dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIGF1dG8gaW1hZ2UgPSBj
b3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nKGRlc3RpbmF0aW9uVVRJLmdldCgpLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmRhdGFVUkwoaW1hZ2UuZ2V0KCks
IGRlc3RpbmF0aW9uVVRJLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y3JlYXRlRmx1c2hlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAgcHJvdGVjdGVkOgog
CiAgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgc2V0dXBDb250ZXh0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtSW1hZ2VQdHIgY29weVBsYXRmb3JtSW1hZ2VG
b3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpkcmF3Q28KICAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdl
KCppbWFnZSwgYmFja2VuZFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK1BsYXRmb3Jt
SW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZv
ckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewogICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVy
UHV0UGl4ZWxCdWZmZXIpIHsKICAgICAgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJm
YWNlIGNhY2hlZCBpbWFnZS4KQEAgLTE3NCw3ICsxNzQsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJl
Y3QoMSwgMSwgMCwgMCkpOwogICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZm
ZXIgPSBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NG
RGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoZGVzdGlu
YXRpb25VVEksIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJh
d0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25z
dCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CkBAIC03OCw2ICs3Nyw5IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKIAorICAg
IC8vIEltYWdlQnVmZmVyQ0dCYWNrZW5kIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUltYWdlUHRy
IGNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgZmluYWw7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiBtX3N1cmZhY2U7CiAgICAgbXV0YWJsZSBib29sIG1fcmVxdWlyZXNEcmF3QWZ0
ZXJQdXRQaXhlbEJ1ZmZlciB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8
d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC00MSw2ICs0Miw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAordXNpbmcgUHV0Qnl0ZXNDYWxsYmFjayA9IHNpemVfdChjb25zdCB2b2lkKiwgc2l6ZV90KTsK
KwogdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyU2l6ZSk7
CkBAIC05MywzNyArOTYsNDYgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4K
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogfQogCi1ib29sIGVuY29kZUltYWdl
KENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCitzdGF0aWMgYm9vbCBlbmNvZGUoQ0dJbWFnZVJl
ZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgY29uc3QgU2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+JiBmdW5jdGlvbikKIHsK
LSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgaWYgKCFpbWFnZSB8fCAhZGVz
dGluYXRpb25VVEkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZGVzdGluYXRp
b24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwg
MSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBDR0RhdGFDb25zdW1lckNhbGxiYWNrcyBjYWxsYmFja3MgeworICAgICAgICBbXSh2b2lkKiBj
b250ZXh0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAg
ICAgICAgICAgIGF1dG8gZnVuY3RvciA9ICpzdGF0aWNfY2FzdDxjb25zdCBTY29wZWRMYW1iZGE8
UHV0Qnl0ZXNDYWxsYmFjaz4qPihjb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdG9y
KGJ1ZmZlciwgY291bnQpOworICAgICAgICB9LAorICAgICAgICBudWxscHRyCisgICAgfTsKIAot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKLSAgICBpZiAo
Q0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFs
aXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgotICAgICAgICBhdXRvIGNvbXByZXNz
aW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtl
eSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKLSAgICAgICAg
Y29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7Ci0gICAgICAgIGlt
YWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1
ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlW
YWx1ZUNhbGxCYWNrcykpOwotICAgIH0KKyAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0Rh
dGFDb25zdW1lckNyZWF0ZShjb25zdF9jYXN0PFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNr
Pio+KCZmdW5jdGlvbiksICZjYWxsYmFja3MpKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRv
cHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YUNvbnN1bWVyKGNvbnN1bWVyLmdl
dCgpLCBkZXN0aW5hdGlvblVUSSwgMSwgbnVsbHB0cikpOworICAgIAorICAgIGF1dG8gaW1hZ2VQ
cm9wZXJ0aWVzID0gWyZdICgpIC0+IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHsKKyAgICAg
ICAgaWYgKENGRXF1YWwoZGVzdGluYXRpb25VVEksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgICAgICAvLyBBcHBs
eSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4K
KyAgICAgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkp
KTsKKyAgICAgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3Nz
eUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29t
cHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0oKTsKIAotICAgIC8vIFNldHRpbmcga0NHSW1h
Z2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4g
aW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gRklYTUU6IFNldHRp
bmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBp
bWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCiAgICAgLy8gaW4g
dGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCiAKICAg
ICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGlt
YWdlUHJvcGVydGllcy5nZXQoKSk7CisKICAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmlu
YWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJl
Zj4gY2ZEYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBib29sIGVuY29kZShjb25zdCBQ
aXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFn
ZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKKyAgICBhdXRvIGRl
c3RpbmF0aW9uVVRJID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwogCiAg
ICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CiAg
ICAgCkBAIC0xMzIsMTAgKzE0NCwxMiBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZE
YXRhKGNvbnN0CiAKICAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CiAKLSAg
ICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICBpZiAoQ0ZFcXVhbChk
ZXN0aW5hdGlvblVUSS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBGSVhNRTogVXNl
IFBpeGVsQnVmZmVyQ29udmVyc2lvbiBmb3IgdGhpcyBvbmNlIGl0IHN1cHBvcnRzIFJHQlguCisK
ICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCiAgICAgICAgIGlmICghcHJl
bXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KGRhdGFTaXplKSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHBy
ZW11bHRpcGxpZWREYXRhLmdyb3coZGF0YVNpemUpOwogICAgICAgICB1bnNpZ25lZCBjaGFyKiBi
dWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CkBAIC0xNjUsNDAgKzE3OSw1MiBAQCBz
dGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAgICAgYXV0byBpbWFnZVNp
emUgPSBzb3VyY2Uuc2l6ZSgpOwogICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVh
dGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBpbWFn
ZVNpemUud2lkdGgoKSwgY2FjaGVkQ0dDb2xvclNwYWNlKHNvdXJjZS5mb3JtYXQoKS5jb2xvclNw
YWNlKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKIAotICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBlbmNvZGUoaW1hZ2UuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLmdldCgpLCBxdWFsaXR5LCBm
dW5jdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgU291cmNl
RGVzY3JpcHRpb24+IHN0YXRpYyBWZWN0b3I8dWludDhfdD4gZW5jb2RlVG9WZWN0b3IoU291cmNl
JiYgc291cmNlLCBTb3VyY2VEZXNjcmlwdGlvbiYmIHNvdXJjZURlc2NyaXB0aW9uLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKworICAg
IGJvb2wgc3VjY2VzcyA9IGVuY29kZShzdGQ6OmZvcndhcmQ8U291cmNlPihzb3VyY2UpLCBzdGQ6
OmZvcndhcmQ8U291cmNlRGVzY3JpcHRpb24+KHNvdXJjZURlc2NyaXB0aW9uKSwgcXVhbGl0eSwg
c2NvcGVkTGFtYmRhUmVmPFB1dEJ5dGVzQ2FsbGJhY2s+KFsmXSAoY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IGxlbmd0aCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9
KSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFdURk1vdmUoY2ZEYXRhKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TdHJpbmcgZGF0YVVS
TChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFNvdXJjZSwgdHlwZW5hbWUgU291cmNlRGVzY3JpcHRpb24+IHN0YXRpYyBTdHJpbmcgZW5j
b2RlVG9EYXRhVVJMKFNvdXJjZSYmIHNvdXJjZSwgU291cmNlRGVzY3JpcHRpb24mJiBzb3VyY2VE
ZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQogewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShD
RkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEp
OworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB3aXRo
IGEgc3RyZWFtaW5nIGJhc2U2NCBlbmNvZGVyLgogCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1l
VHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIGF1dG8gZW5jb2RlZERhdGEgPSBl
bmNvZGVUb1ZlY3RvcihzdGQ6OmZvcndhcmQ8U291cmNlPihzb3VyY2UpLCBzdGQ6OmZvcndhcmQ8
U291cmNlRGVzY3JpcHRpb24+KHNvdXJjZURlc2NyaXB0aW9uKSwgcXVhbGl0eSk7CisgICAgaWYg
KGVuY29kZWREYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiX3M7CisKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0
RW5jb2RlZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSkpOworfQorCitW
ZWN0b3I8dWludDhfdD4gZGF0YShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiBkZXN0aW5h
dGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIHJldHVybiBlbmNvZGVU
b1ZlY3RvcihpbWFnZSwgZGVzdGluYXRpb25VVEksIHF1YWxpdHkpOwogfQogCi1TdHJpbmcgZGF0
YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWlt
ZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1l
VHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7CisgICAgcmV0dXJuIGVuY29kZVRvVmVjdG9y
KHBpeGVsQnVmZmVyLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBk
YXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCitTdHJpbmcgZGF0YVVSTChDR0ltYWdlUmVmIGlt
YWdlLCBDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwot
ICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiBlbmNvZGVUb0RhdGFVUkwo
aW1hZ2UsIGRlc3RpbmF0aW9uVVRJLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKLVZlY3Rvcjx1
aW50OF90PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1N0cmluZyBkYXRhVVJMKGNvbnN0IFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQogewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBt
aW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkp
OwotICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVuY29kZVRvRGF0YVVSTChwaXhlbEJ1ZmZl
ciwgbWltZVR5cGUsIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAkocmV2aXNpb24gMjc3NTY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsNiBAQAogI2lmIFVTRShDRykKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxNCAr
MzgsMTIgQEAgV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcgogQ0ZTdHJp
bmdSZWYganBlZ1VUSSgpOwogUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKIAotYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVm
LCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0
YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiBkZXN0
aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KTsKIAotU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIGRl
c3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOwogU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwogCi1WZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxC
dWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ0cpCg==
</data>
<flag name="commit-queue"
          id="449834"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428806</attachid>
            <date>2021-05-16 16:32:31 -0700</date>
            <delta_ts>2021-05-16 19:26:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210516163230.patch</filename>
            <type>text/plain</type>
            <size>38010</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA1LTE2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwgYW5kIHRv
QmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgU3Ry
aW5nVHlwZUFkYXB0ZXIgZm9yIGlubGluZSBiYXNlNjQgZW5jb2RpbmcgZGF0YSBpbiBlaXRoZXIg
bWFrZVN0cmluZygpCisgICAgICAgIG9yIFN0cmluZ0J1aWxkZXIuIFRvIG1ha2UgdGhpcyB3b3Jr
LCBhIGZldyBtb2RpZmljYXRpb25zIHdlcmUgbmVlZCB0byB0aGUgCisgICAgICAgIGJhc2U2NEVu
Y29kZSgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5j
dGlvbi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlz
IG5vdyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAg
VGhpcyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkg
YmFzZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29k
aW5nIHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0
aW1hdGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAg
ZG93biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVy
bmFsIHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5l
dyAKKyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVD
aGFyKiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3Ig
dG8gd3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFs
bCBjaGFuZ2UgaXMgdGhhdCBhbGwgdXNlIG9mIEJhc2U2NFVSTFBvbGljeSBub3cgcmVzdWx0cyBp
biB1c2luZyAKKyAgICAgICAgYmFzZTY0VVJMRW5jTWFwLCBub3QganVzdCB3aGVuIGNhbGxlZCBm
cm9tIGJhc2U2NFVSTEVuY29kZS4gVGhlcmUgYXJlIG5vIGNhbGxlcnMgd2hvCisgICAgICAgIGdv
IGRvd24gdGhpcyBwYXRoIGN1cnJlbnRseSwgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVu
dGF0aW9uIGFuZCBtYWtlcyBpdCBtb3JlCisgICAgICAgIGNvbnNpc3RlbnQuCisKKyAgICAgICAg
KiB3dGYvRm9yd2FyZC5oOgorICAgICAgICBBZGQgU2NvcGVkTGFtYmRhIHNvIGl0IGNhbiBiZSB1
c2VkIGluIGhlYWRlcnMgd2l0aG91dCBiZWluZyBkaXJlY3RseSBpbmNsdWRlZC4KKworICAgICAg
ICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVy
bmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0
VVJMRW5jb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6
Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVk
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OlN0cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFz
ZTY0U3BlY2lmaWNhdGlvbj46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5
cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjppczhCaXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6d3JpdGVUbyBjb25z
dCk6CisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHBy
ZXBhcmF0aW9uCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IFJhd1B0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgPSBSYXdQdHJUcmFpdHM8VD4sIHR5cGVuYW1lID0gRGVmYXVsdFJlZkRlcmVmVHJh
aXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmV0YWluUHRy
OwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFNjb3BlZExhbWJkYTsKIHRlbXBsYXRlPHR5cGVu
YW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5n
UGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNz
IFN0cmluZ1R5cGVBZGFwdGVyOwpAQCAtMTM5LDYgKzE0MCw3IEBAIHVzaW5nIFdURjo6UmVmOwog
dXNpbmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5nIFdURjo6U0hB
MTsKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBX
VEY6OlN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmln
aHQgKEMpIDIwMDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkxLDkzICs5MSw5OSBAQCBz
dGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwg
MHgzMywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClb
NjRdKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB2b2lk
IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5n
dGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhh
biBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0g
ICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2
IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5
KSA/IGJhc2U2NFVSTEVuY01hcDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9
IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0g
ICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGlu
c2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0TEZzICYmIGRlc3RpbmF0aW9uTGVuZ3Ro
ID4gNzYpOwogCi0gICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGlt
aXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9
PSBCYXNlNjRJbnNlcnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMp
Ci0gICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50
IGNvdW50ID0gMDsKLSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRv
IDQtYnl0ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgot
ICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAg
IGlmIChpbnB1dExlbmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0
aCAtIDIpIHsKICAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKICAgICAgICAgICAgICAgICBp
ZiAoY291bnQgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgr
K10gPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9ICdcbic7CiAgICAgICAgICAgICAgICAgY291bnQgKz0gNDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhdID4+IDIpICYg
MDc3XTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8
ICgoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzcpXTsKLSAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gZW5jb2RlTWFwW2RhdGFbc2lkeCArIDJdICYgMDc3XTsKKworICAgICAgICAgICAgZGVzdGlu
YXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lk
eCAgICBdID4+IDIpICYgMDc3XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltk
aWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAx
NykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzcpXTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRh
QnVmZmVyW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
MV0gPDwgMikgJiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWyAgaW5wdXREYXRhQnVmZmVyW3NpZHggKyAyXSAgICAgICAmIDA3N107
CiAgICAgICAgICAgICBzaWR4ICs9IDM7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoc2lk
eCA8IGxlbikgeworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKICAgICAgICAgaWYgKGlu
c2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9ICdcbic7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsr
XSA9ICdcbic7CiAKLSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0g
Pj4gMikgJiAwNzddOwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAg
IG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwg
KChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVu
Y29kZU1hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+
IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXRE
YXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4
XSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgr
K10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0
YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAw
NzddOwogICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNl
NjRVUkxQb2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0g
Jz0nOwotICAgICAgICAgICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAh
PSBCYXNlNjRVUkxQb2xpY3kgfHwgZGlkeCA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7CisKKyAgICB3
aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKSB7CisgICAgICAgIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlcltkaWR4XSA9ICc9JzsKKyAgICAgICAgKytkaWR4OwogICAgIH0KIH0KIAotU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3kpCitzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgVmVjdG9yPGNoYXI+JiBkZXN0aW5hdGlvblZlY3RvciwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCBy
ZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmNsZWFyKCk7Cisg
ICAgCisgICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRT
aXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmdyb3coZGVzdGluYXRpb25M
ZW5ndGgpOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGlj
eSk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxl
biwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitTdHJpbmcg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50
ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwg
cG9saWN5LCBiYXNlNjRFbmNNYXApOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5KSk7Cit9CisKK3ZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIFZlY3RvcjxjaGFyPiYgZGVzdGluYXRpb25WZWN0b3IsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3kpCit7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZl
Y3RvciwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXRE
YXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAg
IGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0
aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9p
ZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0
dXJuOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKIH0KIAotU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgp
CiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBC
YXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0
RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKLXZvaWQgYmFz
ZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+
JiBvdXQpCit2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIs
IHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIGRlc3RpbmF0aW9uVmVjdG9yKQog
ewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsK
KyAgICBiYXNlNjRFbmNvZGUoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgZGVzdGluYXRp
b25WZWN0b3IsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNiw3ICszNyw3IEBAIG5hbWVzcGFjZSBX
VEYgewogZW51bSBCYXNlNjRFbmNvZGVQb2xpY3kgewogICAgIEJhc2U2NERvTm90SW5zZXJ0TEZz
LAogICAgIEJhc2U2NEluc2VydExGcywKLSAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGlu
Zywgbm8gTEZzLgorICAgIEJhc2U2NFVSTFBvbGljeSAvLyBObyBwYWRkaW5nLCBubyBMRnMsIHVz
ZXMgJy0nIGFuZCAnXycgaW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuLgogfTsK
IAogZW51bSBCYXNlNjREZWNvZGVPcHRpb25zIHsKQEAgLTQ2LDYgKzQ3LDEwIEBAIGVudW0gQmFz
ZTY0RGVjb2RlT3B0aW9ucyB7CiAgICAgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiID0gMSA8PCAy
LAogfTsKIAorLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwg
anVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBlcmZlY3RseSBwcmVj
aXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBVSU5UX01BWCAvIDc3ICog
NzYgLyA0ICogMyAtIDI7CisKIGNsYXNzIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciB7CiBwdWJsaWM6CiAgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rv
cjxjaGFyPiYgdmVjdG9yKQpAQCAtMTQ0LDEyICsxNDksMTQgQEAgcHJpdmF0ZToKICAgICB9IG1f
dmVjdG9yOwogfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQs
IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5z
aWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVu
c2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK3ZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Cit2b2lkIGJhc2U2NEVuY29k
ZShjb25zdCBDU3RyaW5nJiwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNp
Z25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBi
YXNlNjREZWNvZGUoU3RyaW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
LCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CkBAIC0yMTksMTUgKzIyNiw4MSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGlz
QVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScg
fHwgYyA9PSAnXyc7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSh1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sK
KyAgICBpZiAoIWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1
dExlbmd0aCA+IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAg
ICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OworCisgICAgYXV0
byBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0
TGVuZ3RoICogNCkgKyAyKSAvIDM7CisgICAgfTsKKworICAgIHN3aXRjaCAocG9saWN5KSB7Cisg
ICAgY2FzZSBCYXNlNjREb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRF
bmNvZGVkU2l6ZSgpOworCisgICAgY2FzZSBCYXNlNjRJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+
IDc2KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyA3Nik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRVUkxQb2xpY3k6
CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KKwor
c3RydWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsK
KyAgICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
OworfTsKKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2
b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRh
LCBpbnB1dExlbmd0aCwgcG9saWN5IH07Cit9CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVB
ZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkKKyAgICAgICAgOiBtX2Jh
c2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3RoIHsgY2FsY3VsYXRlQmFz
ZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQucG9saWN5KSB9CisgICAg
eworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rl
ZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3Rl
clR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgYmFzZTY0RW5jb2RlKG1f
YmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uLCBtX2Vu
Y29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJh
c2U2NFNwZWNpZmljYXRpb24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3Ro
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6QmFzZTY0RW5jb2RlUG9s
aWN5OwordXNpbmcgV1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7CiB1c2luZyBXVEY6OkJh
c2U2NERvTm90SW5zZXJ0TEZzOwordXNpbmcgV1RGOjpCYXNlNjRFbmNvZGVQb2xpY3k7Cit1c2lu
ZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwogdXNpbmcgV1RGOjpCYXNlNjRJ
bnNlcnRMRnM7Cit1c2luZyBXVEY6OkJhc2U2NFNwZWNpZmljYXRpb247CiB1c2luZyBXVEY6OkJh
c2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3
TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6
YmFzZTY0RW5jb2RlOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2
NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKIHVzaW5nIFdURjo6YmFzZTY0VVJM
RGVjb2RlOwogdXNpbmcgV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjc3NTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDUtMTYgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50IHRvRGF0YVVSTCBh
bmQgdG9CbG9iIGRvIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzIHRocm91Z2ggYSBDRkRhdGFSZWYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg1Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdHJ5
aW5nIHRvIGVuY29kZSBlaXRoZXIgYSBQaXhlbEJ1ZmZlciBvciBhIEltYWdlQnVmZmVyIHRvIGFu
IGltYWdlIGZvcgorICAgICAgICBibG9iIG9yIGRhdGFVUkwgY3JlYXRpb24sIHdlIHdlcmUgdXNp
bmcgYSBtZXRob2QgdGhhdCByZXF1aXJlZCBhbHdheXMgZmlyc3QKKyAgICAgICAgY3JlYXRpbmcg
YSBDRkRhdGFSZWYgYW5kIHRoZW4gY29weWluZyB0aGF0IENGRGF0YVJlZidzIGRhdGEgaW50byB3
aGF0IHdlIG5lZWRlZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSBjYW4gdXNlIGEgY2FsbGJhY2sg
YmFzZWQgQ0dEYXRhQ29uc3VtZXIgYW5kIHNvbWUgcGFzc2VkIGFyb3VuZAorICAgICAgICBmdW5j
dG9ycyB0byBnZXQgdGhlIGRhdGEgZGlyZWN0bHkgYXMgaXQgaXMgYmVpbmcgZW5jb2RlZCBhbmQg
cHJvY2VzcyBpdCBhcworICAgICAgICBuZWVkZWQuIFNjb3BlZExhbWJkYSBpcyB1c2VkIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGlubGluaW5nIG9yIGFsbG9jYXRpb24gdGhhdAorICAgICAgICBhIHRl
bXBsYXRlIGJhc2VkIGZ1bmN0b3Igb3IgV1RGOjpGdW5jdGlvbiB3b3VsZCByZXF1aXJlIHJlc3Bl
Y3RpdmVseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGNvbnN0KToKKyAgICAgICAgRmFjdG9y
IG91dCBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbi4gVGhp
cyByZXBsYWNlcyB0aGUKKyAgICAgICAgdG9DRkRhdGEgdmlydHVhbCBmdW5jdGlvbiwgYW5kIGlz
IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZGF0YS9kYXRhVVJMCisgICAgICAgIGZ1bmN0
aW9ucyBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZCB0byBwcm9kdWNlIHRoZSBlbmNvZGVkIGRhdGEu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25z
dCk6CisgICAgICAgIFJld29yayB0byB1c2UgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBh
bmQgZGF0YS9kYXRhVVJMIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAgICAgIHRvIHByb2R1
Y2UgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0
b0NGRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIExpa2UgdG9DRkRhdGEgYmVmb3JlIGl0
LCBjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGlzIHZpcnR1YWwgYWxsb3dpbmcgZm9yIHRo
aXMKKyAgICAgICAgb3ZlcnJpZGUgaW4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRv
VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRvRGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOiBEZWxldGVkLgorICAgICAg
ICBSZXBsYWNlIGVuY29kZUltYWdlKCksIHdoaWNoIHVzZSBhIGZpbGxlZCBpbiBhIENGTXV0YWJs
ZURhdGFSZWYgd2l0aCBvdmVybG9hZHMKKyAgICAgICAgb2YgZGF0YSBhbmQgZGF0YVVSTCB0aGF0
IG5vdyB1c2UgYSBjYWxsYmFjayBiYXNlZCBDR0RhdGFDb25zdW1lciBhbmQgc29tZSBjYWxsYmFj
aworICAgICAgICBmdW5jdG9ycyB0byBhbGxvdyB0aGUgZW5jb2RlZCBkYXRhIHRvIGJlIGNvbnN1
bWVkIGFzIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICAgIEFsc28gbWFrZXMgdXNlIG9mIG5l
dyBiYXNlNjRFbmNvZGVkKCkgYWRhcHRlciB0byBiYXNlNjQgZW5jb2RlIGRpcmVjdGx5IGluIG1h
a2VTdHJpbmcoKS4KKwogMjAyMS0wNS0xNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgU3VwcG9ydCBzZXJpYWxpemluZyBJbWFnZURhdGEgb2JqZWN0IGNvbG9yU3Bh
Y2UgcHJvcGVydHkgaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCwyMCArMTY4LDExIEBAIHZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNsaXBUb01hc2soR3IK
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtZGVzdFJlY3QueCgpLCAtZGVz
dFJlY3QubWF4WSgpKTsKIH0KIAotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK1Bs
YXRmb3JtSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9y
RW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAg
IEFTU0VSVF9JTVBMSUVTKCFpc0luR1BVUHJvY2VzcygpLCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2Vsc2UKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLSNlbmRpZgotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBQbGF0Zm9ybUlt
YWdlUHRyIGltYWdlOworICAgIGlmIChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLCBqcGVnVVRJKCkp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0aGUgc2FtZSBsb2dp
YyBhcyBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHPwogCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgp
LCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hh
bm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgog
ICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQiB9OwogICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCBsb2dpY2FsUmVjdCgpKTsKQEAgLTE5Nyw0OSArMTg4LDU4IEBAIFJldGFpblB0cjxDRkRh
dGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigp
LCBkYXRhLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250
ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwotICAgICAgICAKICAgICAgICAgaWYgKCFkYXRh
UHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBhdXRvIGlt
YWdlU2l6ZSA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMy
LCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+
Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olllcykgewor
ICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENH
Q29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisg
ICAgaWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghbmF0aXZlSW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpOwotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlm
TmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLSAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAg
ICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tl
bmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRT
aXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNr
ZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNp
emUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5n
ZXQoKSkpOworICAgICAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2Uo
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdl
dCgpLCBiYWNrZW5kU2l6ZSgpKTsKICAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkp
KQorICAgIAorICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKKyAgICBhdXRvIGltYWdlID0gbmF0
aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkhvc3QpKTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NH
QmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWln
aHQoKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtl
KDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGlt
YWdlLmdldCgpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNv
cHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmRhdGEoaW1hZ2UuZ2V0KCks
IGRlc3RpbmF0aW9uVVRJLmdldCgpLCBxdWFsaXR5KTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAogewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJl
c2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNv
cHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIHByZXNlcnZl
UmVzb2x1dGlvbik7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGF0YVVSTChpbWFnZS5nZXQoKSwg
ZGVzdGluYXRpb25VVEkuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPFRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpjcmVhdGVGbHVzaGVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2Uo
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgdm9pZCBzZXR1cENvbnRleHQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdDsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1JbWFnZVB0ciBjb3B5UGxhdGZvcm1JbWFnZUZv
ckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmRyYXdDbwogICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
KmltYWdlLCBiYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7
CiB9CiAKLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorUGxhdGZvcm1J
bWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9y
RW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQ
dXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZh
Y2UgY2FjaGVkIGltYWdlLgpAQCAtMTc0LDcgKzE3NCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+
IEltYWdlQnVmZmVySU9TdXJmYWMKICAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVj
dCgxLCAxLCAwLCAwKSk7CiAgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZl
ciA9IGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIHJldHVybiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhkZXN0aW5h
dGlvblVUSSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0
IFBpeGVsQnVmZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKQEAgLTc4LDYgKzc3LDkgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwogCisgICAg
Ly8gSW1hZ2VCdWZmZXJDR0JhY2tlbmQgb3ZlcnJpZGVzLgorICAgIFBsYXRmb3JtSW1hZ2VQdHIg
Y29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBtdXRhYmxlIGJvb2wgbV9yZXF1aXJlc0RyYXdBZnRl
clB1dFBpeGVsQnVmZmVyIHsgZmFsc2UgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKQEAgLTQxLDYgKzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Cit1c2luZyBQdXRCeXRlc0NhbGxiYWNrID0gc2l6ZV90KGNvbnN0IHZvaWQqLCBzaXplX3QpOwor
CiB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChidWZmZXJTaXplKTsK
QEAgLTkzLDM3ICs5Niw0NiBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgog
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiB9CiAKLWJvb2wgZW5jb2RlSW1hZ2Uo
Q0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3N0YXRpYyBib29sIGVuY29kZShDR0ltYWdlUmVm
IGltYWdlLCBDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKQogewot
ICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICBpZiAoIWltYWdlIHx8ICFkZXN0
aW5hdGlvblVUSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBkZXN0aW5hdGlv
biA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAx
LCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyB7CisgICAgICAgIFtdKHZvaWQqIGNv
bnRleHQsIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KSAtPiBzaXplX3QgeworICAg
ICAgICAgICAgYXV0byBmdW5jdG9yID0gKnN0YXRpY19jYXN0PGNvbnN0IFNjb3BlZExhbWJkYTxQ
dXRCeXRlc0NhbGxiYWNrPio+KGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3Io
YnVmZmVyLCBjb3VudCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIKKyAgICB9OwogCi0g
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChD
RkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAq
cXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxp
dHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Np
b25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5
ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBj
b25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1h
Z2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVl
LCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQorICAgIGF1dG8gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0
YUNvbnN1bWVyQ3JlYXRlKGNvbnN0X2Nhc3Q8U2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+
Kj4oJmZ1bmN0aW9uKSwgJmNhbGxiYWNrcykpOworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9w
dENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0
KCksIGRlc3RpbmF0aW9uVVRJLCAxLCBudWxscHRyKSk7CisgICAgCisgICAgYXV0byBpbWFnZVBy
b3BlcnRpZXMgPSBbJl0gKCkgLT4gUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4geworICAgICAg
ICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVUSSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgICAgIC8vIEFwcGx5
IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgor
ICAgICAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkp
OworICAgICAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5
Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21w
cmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSgpOwogCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFn
ZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBp
bWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBGSVhNRTogU2V0dGlu
ZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGlt
YWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKICAgICAvLyBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KIAogICAg
IENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1h
Z2VQcm9wZXJ0aWVzLmdldCgpKTsKKwogICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5h
bGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBjZkRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IFBp
eGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgY29uc3QgU2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+JiBmdW5jdGlv
bikKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIAotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdl
QnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOworICAgIGF1dG8gZGVz
dGluYXRpb25VVEkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CiAKICAg
ICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKICAg
ICAKQEAgLTEzMiwxMCArMTQ0LDEyIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QKIAogICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKIAotICAg
IGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgIGlmIChDRkVxdWFsKGRl
c3RpbmF0aW9uVVRJLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBVc2Ug
UGl4ZWxCdWZmZXJDb252ZXJzaW9uIGZvciB0aGlzIG9uY2UgaXQgc3VwcG9ydHMgUkdCWC4KKwog
ICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUg
dG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KICAgICAgICAgaWYgKCFwcmVt
dWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoZGF0YVNpemUpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcHJl
bXVsdGlwbGllZERhdGEuZ3JvdyhkYXRhU2l6ZSk7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1
ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKQEAgLTE2NSw0MCArMTc5LDUyIEBAIHN0
YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKICAgICBhdXRvIGltYWdlU2l6
ZSA9IHNvdXJjZS5zaXplKCk7CiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgNCAqIGltYWdl
U2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2Uoc291cmNlLmZvcm1hdCgpLmNvbG9yU3Bh
Y2UpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogCi0gICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwg
cXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIGVuY29kZShpbWFnZS5nZXQoKSwgZGVzdGluYXRpb25VVEkuZ2V0KCksIHF1YWxpdHksIGZ1
bmN0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBTb3VyY2VE
ZXNjcmlwdGlvbj4gc3RhdGljIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVUb1ZlY3RvcihTb3VyY2Um
JiBzb3VyY2UsIFNvdXJjZURlc2NyaXB0aW9uJiYgc291cmNlRGVzY3JpcHRpb24sIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworCisgICAg
Ym9vbCBzdWNjZXNzID0gZW5jb2RlKHN0ZDo6Zm9yd2FyZDxTb3VyY2U+KHNvdXJjZSksIHN0ZDo6
Zm9yd2FyZDxTb3VyY2VEZXNjcmlwdGlvbj4oc291cmNlRGVzY3JpcHRpb24pLCBxdWFsaXR5LCBz
Y29wZWRMYW1iZGFSZWY8UHV0Qnl0ZXNDYWxsYmFjaz4oWyZdIChjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3QgbGVuZ3RoKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0p
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4g
V1RGTW92ZShjZkRhdGEpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVN0cmluZyBkYXRhVVJM
KENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQordGVtcGxhdGU8dHlwZW5h
bWUgU291cmNlLCB0eXBlbmFtZSBTb3VyY2VEZXNjcmlwdGlvbj4gc3RhdGljIFN0cmluZyBlbmNv
ZGVUb0RhdGFVUkwoU291cmNlJiYgc291cmNlLCBTb3VyY2VEZXNjcmlwdGlvbiYmIHNvdXJjZURl
c2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENG
RGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7
CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5IHdpdGgg
YSBzdHJlYW1pbmcgYmFzZTY0IGVuY29kZXIuCiAKLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVU
eXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVu
Y29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxTb3VyY2U+KHNvdXJjZSksIHN0ZDo6Zm9yd2FyZDxT
b3VyY2VEZXNjcmlwdGlvbj4oc291cmNlRGVzY3JpcHRpb24pLCBxdWFsaXR5KTsKKyAgICBpZiAo
ZW5jb2RlZERhdGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6LCJfczsKKworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIsIG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRF
bmNvZGVkKGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKSk7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0
aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgcmV0dXJuIGVuY29kZVRv
VmVjdG9yKGltYWdlLCBkZXN0aW5hdGlvblVUSSwgcXVhbGl0eSk7CiB9CiAKLVN0cmluZyBkYXRh
VVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQogewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1l
VHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVU
eXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyAgICByZXR1cm4gZW5jb2RlVG9WZWN0b3Io
cGl4ZWxCdWZmZXIsIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IGRh
dGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK1N0cmluZyBkYXRhVVJMKENHSW1hZ2VSZWYgaW1h
Z2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
Y2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgcmV0dXJuIGVuY29kZVRvRGF0YVVSTChp
bWFnZSwgZGVzdGluYXRpb25VVEksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAotVmVjdG9yPHVp
bnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1p
bWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7
Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlVG9EYXRhVVJMKHBpeGVsQnVmZmVy
LCBtaW1lVHlwZSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCw2IEBACiAjaWYgVVNFKENHKQogCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE0ICsz
OCwxMiBAQCBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVyCiBDRlN0cmlu
Z1JlZiBqcGVnVVRJKCk7CiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwogCi1ib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYs
IENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRh
UmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIGRlc3Rp
bmF0aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOwogCi1TdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgZGVz
dGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSk7CiBTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CiAKLVZlY3Rvcjx1aW50OF90PiBk
YXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1
ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShDRykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428807</attachid>
            <date>2021-05-16 19:26:52 -0700</date>
            <delta_ts>2021-05-17 09:10:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210516192651.patch</filename>
            <type>text/plain</type>
            <size>38201</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA1LTE2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwgYW5kIHRv
QmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgU3Ry
aW5nVHlwZUFkYXB0ZXIgZm9yIGlubGluZSBiYXNlNjQgZW5jb2RpbmcgZGF0YSBpbiBlaXRoZXIg
bWFrZVN0cmluZygpCisgICAgICAgIG9yIFN0cmluZ0J1aWxkZXIuIFRvIG1ha2UgdGhpcyB3b3Jr
LCBhIGZldyBtb2RpZmljYXRpb25zIHdlcmUgbmVlZCB0byB0aGUgCisgICAgICAgIGJhc2U2NEVu
Y29kZSgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5j
dGlvbi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlz
IG5vdyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAg
VGhpcyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkg
YmFzZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29k
aW5nIHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0
aW1hdGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAg
ZG93biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVy
bmFsIHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5l
dyAKKyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVD
aGFyKiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3Ig
dG8gd3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFs
bCBjaGFuZ2UgaXMgdGhhdCBhbGwgdXNlIG9mIEJhc2U2NFVSTFBvbGljeSBub3cgcmVzdWx0cyBp
biB1c2luZyAKKyAgICAgICAgYmFzZTY0VVJMRW5jTWFwLCBub3QganVzdCB3aGVuIGNhbGxlZCBm
cm9tIGJhc2U2NFVSTEVuY29kZS4gVGhlcmUgYXJlIG5vIGNhbGxlcnMgd2hvCisgICAgICAgIGdv
IGRvd24gdGhpcyBwYXRoIGN1cnJlbnRseSwgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVu
dGF0aW9uIGFuZCBtYWtlcyBpdCBtb3JlCisgICAgICAgIGNvbnNpc3RlbnQuCisKKyAgICAgICAg
KiB3dGYvRm9yd2FyZC5oOgorICAgICAgICBBZGQgU2NvcGVkTGFtYmRhIHNvIGl0IGNhbiBiZSB1
c2VkIGluIGhlYWRlcnMgd2l0aG91dCBiZWluZyBkaXJlY3RseSBpbmNsdWRlZC4KKworICAgICAg
ICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVy
bmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0
VVJMRW5jb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6
Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVk
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OlN0cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFz
ZTY0U3BlY2lmaWNhdGlvbj46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5
cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjppczhCaXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6d3JpdGVUbyBjb25z
dCk6CisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHBy
ZXBhcmF0aW9uCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IFJhd1B0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgPSBSYXdQdHJUcmFpdHM8VD4sIHR5cGVuYW1lID0gRGVmYXVsdFJlZkRlcmVmVHJh
aXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmV0YWluUHRy
OwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFNjb3BlZExhbWJkYTsKIHRlbXBsYXRlPHR5cGVu
YW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5n
UGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNz
IFN0cmluZ1R5cGVBZGFwdGVyOwpAQCAtMTM5LDYgKzE0MCw3IEBAIHVzaW5nIFdURjo6UmVmOwog
dXNpbmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5nIFdURjo6U0hB
MTsKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBX
VEY6OlN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmln
aHQgKEMpIDIwMDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkxLDkzICs5MSw5OSBAQCBz
dGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwg
MHgzMywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClb
NjRdKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB2b2lk
IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5n
dGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhh
biBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0g
ICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2
IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5
KSA/IGJhc2U2NFVSTEVuY01hcDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9
IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0g
ICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGlu
c2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0TEZzICYmIGRlc3RpbmF0aW9uTGVuZ3Ro
ID4gNzYpOwogCi0gICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGlt
aXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9
PSBCYXNlNjRJbnNlcnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMp
Ci0gICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50
IGNvdW50ID0gMDsKLSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRv
IDQtYnl0ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgot
ICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAg
IGlmIChpbnB1dExlbmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0
aCAtIDIpIHsKICAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKICAgICAgICAgICAgICAgICBp
ZiAoY291bnQgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgr
K10gPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9ICdcbic7CiAgICAgICAgICAgICAgICAgY291bnQgKz0gNDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhdID4+IDIpICYg
MDc3XTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8
ICgoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzcpXTsKLSAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gZW5jb2RlTWFwW2RhdGFbc2lkeCArIDJdICYgMDc3XTsKKworICAgICAgICAgICAgZGVzdGlu
YXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lk
eCAgICBdID4+IDIpICYgMDc3XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltk
aWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAx
NykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzcpXTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRh
QnVmZmVyW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
MV0gPDwgMikgJiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWyAgaW5wdXREYXRhQnVmZmVyW3NpZHggKyAyXSAgICAgICAmIDA3N107
CiAgICAgICAgICAgICBzaWR4ICs9IDM7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoc2lk
eCA8IGxlbikgeworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKICAgICAgICAgaWYgKGlu
c2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9ICdcbic7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsr
XSA9ICdcbic7CiAKLSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0g
Pj4gMikgJiAwNzddOwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAg
IG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwg
KChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVu
Y29kZU1hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+
IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXRE
YXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4
XSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgr
K10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0
YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAw
NzddOwogICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNl
NjRVUkxQb2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0g
Jz0nOwotICAgICAgICAgICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAh
PSBCYXNlNjRVUkxQb2xpY3kgfHwgZGlkeCA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7CisKKyAgICB3
aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKSB7CisgICAgICAgIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlcltkaWR4XSA9ICc9JzsKKyAgICAgICAgKytkaWR4OwogICAgIH0KIH0KIAotU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3kpCitzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgVmVjdG9yPGNoYXI+JiBkZXN0aW5hdGlvblZlY3RvciwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCBy
ZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmNsZWFyKCk7Cisg
ICAgCisgICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRT
aXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmdyb3coZGVzdGluYXRpb25M
ZW5ndGgpOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGlj
eSk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxl
biwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitTdHJpbmcg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50
ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwg
cG9saWN5LCBiYXNlNjRFbmNNYXApOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5KSk7Cit9CisKK3ZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIFZlY3RvcjxjaGFyPiYgZGVzdGluYXRpb25WZWN0b3IsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3kpCit7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZl
Y3RvciwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXRE
YXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAg
IGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0
aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9p
ZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0
dXJuOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKIH0KIAotU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgp
CiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBC
YXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0
RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKLXZvaWQgYmFz
ZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+
JiBvdXQpCit2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIs
IHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIGRlc3RpbmF0aW9uVmVjdG9yKQog
ewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsK
KyAgICBiYXNlNjRFbmNvZGUoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgZGVzdGluYXRp
b25WZWN0b3IsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNiw3ICszNyw3IEBAIG5hbWVzcGFjZSBX
VEYgewogZW51bSBCYXNlNjRFbmNvZGVQb2xpY3kgewogICAgIEJhc2U2NERvTm90SW5zZXJ0TEZz
LAogICAgIEJhc2U2NEluc2VydExGcywKLSAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGlu
Zywgbm8gTEZzLgorICAgIEJhc2U2NFVSTFBvbGljeSAvLyBObyBwYWRkaW5nLCBubyBMRnMsIHVz
ZXMgJy0nIGFuZCAnXycgaW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuLgogfTsK
IAogZW51bSBCYXNlNjREZWNvZGVPcHRpb25zIHsKQEAgLTQ2LDYgKzQ3LDEwIEBAIGVudW0gQmFz
ZTY0RGVjb2RlT3B0aW9ucyB7CiAgICAgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiID0gMSA8PCAy
LAogfTsKIAorLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwg
anVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBlcmZlY3RseSBwcmVj
aXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBVSU5UX01BWCAvIDc3ICog
NzYgLyA0ICogMyAtIDI7CisKIGNsYXNzIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciB7CiBwdWJsaWM6CiAgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rv
cjxjaGFyPiYgdmVjdG9yKQpAQCAtMTQ0LDEyICsxNDksMTQgQEAgcHJpdmF0ZToKICAgICB9IG1f
dmVjdG9yOwogfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQs
IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5z
aWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVu
c2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK3ZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Cit2b2lkIGJhc2U2NEVuY29k
ZShjb25zdCBDU3RyaW5nJiwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNp
Z25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBi
YXNlNjREZWNvZGUoU3RyaW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
LCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CkBAIC0yMTksMTUgKzIyNiw4MSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGlz
QVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScg
fHwgYyA9PSAnXyc7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSh1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sK
KyAgICBpZiAoIWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1
dExlbmd0aCA+IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAg
ICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OworCisgICAgYXV0
byBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0
TGVuZ3RoICogNCkgKyAyKSAvIDM7CisgICAgfTsKKworICAgIHN3aXRjaCAocG9saWN5KSB7Cisg
ICAgY2FzZSBCYXNlNjREb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRF
bmNvZGVkU2l6ZSgpOworCisgICAgY2FzZSBCYXNlNjRJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+
IDc2KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyA3Nik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRVUkxQb2xpY3k6
CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KKwor
c3RydWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsK
KyAgICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
OworfTsKKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2
b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRh
LCBpbnB1dExlbmd0aCwgcG9saWN5IH07Cit9CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVB
ZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkKKyAgICAgICAgOiBtX2Jh
c2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3RoIHsgY2FsY3VsYXRlQmFz
ZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQucG9saWN5KSB9CisgICAg
eworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rl
ZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3Rl
clR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgYmFzZTY0RW5jb2RlKG1f
YmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uLCBtX2Vu
Y29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJh
c2U2NFNwZWNpZmljYXRpb24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3Ro
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6QmFzZTY0RW5jb2RlUG9s
aWN5OwordXNpbmcgV1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7CiB1c2luZyBXVEY6OkJh
c2U2NERvTm90SW5zZXJ0TEZzOwordXNpbmcgV1RGOjpCYXNlNjRFbmNvZGVQb2xpY3k7Cit1c2lu
ZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwogdXNpbmcgV1RGOjpCYXNlNjRJ
bnNlcnRMRnM7Cit1c2luZyBXVEY6OkJhc2U2NFNwZWNpZmljYXRpb247CiB1c2luZyBXVEY6OkJh
c2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3
TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6
YmFzZTY0RW5jb2RlOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2
NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKIHVzaW5nIFdURjo6YmFzZTY0VVJM
RGVjb2RlOwogdXNpbmcgV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjc3NTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDUtMTYgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50IHRvRGF0YVVSTCBh
bmQgdG9CbG9iIGRvIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzIHRocm91Z2ggYSBDRkRhdGFSZWYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg1Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdHJ5
aW5nIHRvIGVuY29kZSBlaXRoZXIgYSBQaXhlbEJ1ZmZlciBvciBhIEltYWdlQnVmZmVyIHRvIGFu
IGltYWdlIGZvcgorICAgICAgICBibG9iIG9yIGRhdGFVUkwgY3JlYXRpb24sIHdlIHdlcmUgdXNp
bmcgYSBtZXRob2QgdGhhdCByZXF1aXJlZCBhbHdheXMgZmlyc3QKKyAgICAgICAgY3JlYXRpbmcg
YSBDRkRhdGFSZWYgYW5kIHRoZW4gY29weWluZyB0aGF0IENGRGF0YVJlZidzIGRhdGEgaW50byB3
aGF0IHdlIG5lZWRlZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSBjYW4gdXNlIGEgY2FsbGJhY2sg
YmFzZWQgQ0dEYXRhQ29uc3VtZXIgYW5kIHNvbWUgcGFzc2VkIGFyb3VuZAorICAgICAgICBmdW5j
dG9ycyB0byBnZXQgdGhlIGRhdGEgZGlyZWN0bHkgYXMgaXQgaXMgYmVpbmcgZW5jb2RlZCBhbmQg
cHJvY2VzcyBpdCBhcworICAgICAgICBuZWVkZWQuIFNjb3BlZExhbWJkYSBpcyB1c2VkIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGlubGluaW5nIG9yIGFsbG9jYXRpb24gdGhhdAorICAgICAgICBhIHRl
bXBsYXRlIGJhc2VkIGZ1bmN0b3Igb3IgV1RGOjpGdW5jdGlvbiB3b3VsZCByZXF1aXJlIHJlc3Bl
Y3RpdmVseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGNvbnN0KToKKyAgICAgICAgRmFjdG9y
IG91dCBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbi4gVGhp
cyByZXBsYWNlcyB0aGUKKyAgICAgICAgdG9DRkRhdGEgdmlydHVhbCBmdW5jdGlvbiwgYW5kIGlz
IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZGF0YS9kYXRhVVJMCisgICAgICAgIGZ1bmN0
aW9ucyBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZCB0byBwcm9kdWNlIHRoZSBlbmNvZGVkIGRhdGEu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25z
dCk6CisgICAgICAgIFJld29yayB0byB1c2UgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBh
bmQgZGF0YS9kYXRhVVJMIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAgICAgIHRvIHByb2R1
Y2UgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0
b0NGRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIExpa2UgdG9DRkRhdGEgYmVmb3JlIGl0
LCBjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGlzIHZpcnR1YWwgYWxsb3dpbmcgZm9yIHRo
aXMKKyAgICAgICAgb3ZlcnJpZGUgaW4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRv
VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRvRGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOiBEZWxldGVkLgorICAgICAg
ICBSZXBsYWNlIGVuY29kZUltYWdlKCksIHdoaWNoIHVzZSBhIGZpbGxlZCBpbiBhIENGTXV0YWJs
ZURhdGFSZWYgd2l0aCBvdmVybG9hZHMKKyAgICAgICAgb2YgZGF0YSBhbmQgZGF0YVVSTCB0aGF0
IG5vdyB1c2UgYSBjYWxsYmFjayBiYXNlZCBDR0RhdGFDb25zdW1lciBhbmQgc29tZSBjYWxsYmFj
aworICAgICAgICBmdW5jdG9ycyB0byBhbGxvdyB0aGUgZW5jb2RlZCBkYXRhIHRvIGJlIGNvbnN1
bWVkIGFzIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICAgIEFsc28gbWFrZXMgdXNlIG9mIG5l
dyBiYXNlNjRFbmNvZGVkKCkgYWRhcHRlciB0byBiYXNlNjQgZW5jb2RlIGRpcmVjdGx5IGluIG1h
a2VTdHJpbmcoKS4KKwogMjAyMS0wNS0xNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgU3VwcG9ydCBzZXJpYWxpemluZyBJbWFnZURhdGEgb2JqZWN0IGNvbG9yU3Bh
Y2UgcHJvcGVydHkgaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTY4LDIwICsxNjksMTEgQEAgdm9pZCBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y2xpcFRvTWFzayhHcgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQs
IC1kZXN0UmVjdC54KCksIC1kZXN0UmVjdC5tYXhZKCkpOwogfQogCi1SZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAorUGxhdGZvcm1JbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKLSNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCi0gICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVU
eXBlKSk7Ci0jZWxzZQotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2VuZGlmCi0KLSAgICBhdXRvIHV0
aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRp
KTsKKyAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVUSSwganBlZ1VUSSgpKSkgeworICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdGhlIHNhbWUgbG9naWMgYXMgSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRz8KIAotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7Ci0KLSAgICBp
ZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9u
J3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0
ZSBvbiB0b3Agb2YgYmxhY2suCiAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGF1dG8gcGl4ZWxCdWZmZXIg
PSBnZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGxvZ2ljYWxSZWN0KCkpOwpAQCAtMTk3LDQ5ICsxODks
NTggQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgogICAgICAgICBh
dXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgm
cGl4ZWxBcnJheS5sZWFrUmVmKCksIGRhdGEsIGRhdGFTaXplLCBbXSAodm9pZCogY29udGV4dCwg
Y29uc3Qgdm9pZCosIHNpemVfdCkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50
OENsYW1wZWRBcnJheSo+KGNvbnRleHQpLT5kZXJlZigpOwogICAgICAgICB9KSk7Ci0gICAgICAg
IAogICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLSAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdl
U2l6ZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBpbWFnZVNpemUud2lkdGgoKSwgY2FjaGVkQ0dDb2xv
clNwYWNlKHBpeGVsQnVmZmVyLT5mb3JtYXQoKS5jb2xvclNwYWNlKSwga0NHQml0bWFwQnl0ZU9y
ZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYg
KHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUo
aW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBpbWFnZVNp
emUud2lkdGgoKSwgY2FjaGVkQ0dDb2xvclNwYWNlKHBpeGVsQnVmZmVyLT5mb3JtYXQoKS5jb2xv
clNwYWNlKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tp
cExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERl
ZmF1bHQpKTsKKyAgICB9CisKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0gMSB8fCBwcmVz
ZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKICAgICAgICAgYXV0
byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICAg
ICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgICAgIGltYWdlID0g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXplKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlID0gbmF0aXZlSW1hZ2UtPnBs
YXRmb3JtSW1hZ2UoKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdo
dCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0
KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWln
aHQoKSkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkp
LCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJ
bWFnZS0+cGxhdGZvcm1JbWFnZSgpOworICAgICAgICByZXR1cm4gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXplKCkpOwogICAgIH0KLQotICAgIGF1
dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1
YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgCisgICAgYXV0byBuYXRpdmVJbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFuYXRpdmVJbWFnZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwor
ICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpOworICAgIGF1dG8g
Y29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tlbmRTaXplKCku
d2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgp
LCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5k
U2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKIH0KIAogVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAogewotICAgIGlmIChhdXRvIGRhdGEgPSB0
b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07CisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIEFTU0VSVF9JTVBMSUVTKCFpc0luR1BVUHJvY2Vzcygp
LCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpOworI2Vsc2UKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbmRpZgorCisgICAgYXV0
byBkZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICBhdXRvIGltYWdlID0gY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhkZXN0aW5hdGlv
blVUSS5nZXQoKSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisKKyAgICByZXR1cm4gV2ViQ29y
ZTo6ZGF0YShpbWFnZS5nZXQoKSwgZGVzdGluYXRpb25VVEkuZ2V0KCksIHF1YWxpdHkpOwogfQog
CiBTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1p
bWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1cm4gZGF0
YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7CisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIEFTU0VSVF9JTVBMSUVTKCFpc0luR1BVUHJvY2Vzcygp
LCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpOworI2Vsc2UKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbmRpZgorCisgICAgYXV0
byBkZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICBhdXRvIGltYWdlID0gY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhkZXN0aW5hdGlv
blVUSS5nZXQoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpk
YXRhVVJMKGltYWdlLmdldCgpLCBkZXN0aW5hdGlvblVUSS5nZXQoKSwgbWltZVR5cGUsIHF1YWxp
dHkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkU2FmZUltYWdlQnVmZmVyRmx1c2hlcj4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUZsdXNoZXIoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw4IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIHNl
dHVwQ29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAgdmlydHVhbCBQbGF0Zm9ybUltYWdlUHRy
IGNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3
NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvCiAgICAgICAgIGRlc3RDb250
ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0CitQbGF0Zm9ybUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAo
bV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyKSB7CiAgICAgICAgIC8vIEZvcmNlIHJl
Y3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCkBAIC0xNzQsNyArMTc0LDcgQEAg
UmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhYwogICAgICAgICBjb250ZXh0
KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKICAgICAgICAgbV9yZXF1aXJlc0Ry
YXdBZnRlclB1dFBpeGVsQnVmZmVyID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFn
ZUZvckVuY29kaW5nKGRlc3RpbmF0aW9uVVRJLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCiBW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAy
Nzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
Z2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNzgsNiArNzcsOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29u
c3Qgb3ZlcnJpZGU7CiAKKyAgICAvLyBJbWFnZUJ1ZmZlckNHQmFja2VuZCBvdmVycmlkZXMuCisg
ICAgUGxhdGZvcm1JbWFnZVB0ciBjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nKENGU3RyaW5n
UmVmIGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOworCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwogICAgIG11dGFibGUgYm9v
bCBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNDEsNiArNDIsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIFB1dEJ5dGVzQ2FsbGJhY2sgPSBzaXplX3QoY29u
c3Qgdm9pZCosIHNpemVfdCk7CisKIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGJ1ZmZlclNpemUpOwpAQCAtOTMsMzcgKzk2LDQ2IEBAIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0K
IAotYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQorc3RhdGljIGJv
b2wgZW5jb2RlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxi
YWNrPiYgZnVuY3Rpb24pCiB7Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAg
IGlmICghaW1hZ2UgfHwgIWRlc3RpbmF0aW9uVVRJKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzIHsK
KyAgICAgICAgW10odm9pZCogY29udGV4dCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291
bnQpIC0+IHNpemVfdCB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0b3IgPSAqc3RhdGljX2Nhc3Q8
Y29uc3QgU2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+Kj4oY29udGV4dCk7CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3RvcihidWZmZXIsIGNvdW50KTsKKyAgICAgICAgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgIH07CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVBy
b3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYg
KnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0
aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAg
ICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAg
ICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lv
blF1YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5
LmdldCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9CisgICAgYXV0byBjb25z
dW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJDcmVhdGUoY29uc3RfY2FzdDxTY29wZWRMYW1i
ZGE8UHV0Qnl0ZXNDYWxsYmFjaz4qPigmZnVuY3Rpb24pLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0
byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFD
b25zdW1lcihjb25zdW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEksIDEsIG51bGxwdHIpKTsKKyAg
ICAKKyAgICBhdXRvIGltYWdlUHJvcGVydGllcyA9IFsmXSAoKSAtPiBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiB7CisgICAgICAgIGlmIChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLCBqcGVnVVRJ
KCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewor
ICAgICAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcg
aW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91
YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJ
bWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgICAgICBjb25z
dCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KCk7CiAKLSAg
ICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sg
Zm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAor
ICAgIC8vIEZJWE1FOiBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3Ig
dG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNv
bWUgbWF0aAogICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qg
c2VlbSB0byB3b3JrLgogCiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworCiAgICAgcmV0dXJuIENH
SW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIH0KIAotc3RhdGlj
IFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitzdGF0aWMg
Ym9vbCBlbmNvZGUoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0
ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgYXV0
byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJU
KHV0aSk7CisgICAgYXV0byBkZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKG1pbWVUeXBlKTsKIAogICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtD
R0ltYWdlQWxwaGFMYXN0OwogICAgIApAQCAtMTMyLDEwICsxNDQsMTIgQEAgc3RhdGljIFJldGFp
blB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11
bHRpcGxpZWREYXRhOwogCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7
CisgICAgaWYgKENGRXF1YWwoZGVzdGluYXRpb25VVEkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFVzZSBQaXhlbEJ1ZmZlckNvbnZlcnNpb24gZm9yIHRoaXMgb25jZSBp
dCBzdXBwb3J0cyBSR0JYLgorCiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNr
LgogICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShkYXRh
U2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KGRhdGFTaXplKTsKICAgICAg
ICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwpAQCAt
MTY1LDQwICsxNzksNTIgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25z
dAogICAgIGF1dG8gaW1hZ2VTaXplID0gc291cmNlLnNpemUoKTsKICAgICBhdXRvIGltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0
KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShzb3Vy
Y2UuZm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRh
QWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7CiAKLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW5jb2RlKGltYWdlLmdldCgpLCBkZXN0aW5hdGlvblVU
SS5nZXQoKSwgcXVhbGl0eSwgZnVuY3Rpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3Vy
Y2UsIHR5cGVuYW1lIFNvdXJjZURlc2NyaXB0aW9uPiBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y29kZVRvVmVjdG9yKFNvdXJjZSYmIHNvdXJjZSwgU291cmNlRGVzY3JpcHRpb24mJiBzb3VyY2VE
ZXNjcmlwdGlvbiwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIFZlY3Rvcjx1aW50
OF90PiByZXN1bHQ7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBlbmNvZGUoc3RkOjpmb3J3YXJkPFNv
dXJjZT4oc291cmNlKSwgc3RkOjpmb3J3YXJkPFNvdXJjZURlc2NyaXB0aW9uPihzb3VyY2VEZXNj
cmlwdGlvbiksIHF1YWxpdHksIHNjb3BlZExhbWJkYVJlZjxQdXRCeXRlc0NhbGxiYWNrPihbJl0g
KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAgICAgIHJl
dHVybiBsZW5ndGg7CisgICAgfSkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lIFNvdXJjZURlc2NyaXB0aW9u
PiBzdGF0aWMgU3RyaW5nIGVuY29kZVRvRGF0YVVSTChTb3VyY2UmJiBzb3VyY2UsIFNvdXJjZURl
c2NyaXB0aW9uJiYgc291cmNlRGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsK
LSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBkb25lIG1v
cmUgZWZmaWNpZW50bHkgd2l0aCBhIHN0cmVhbWluZyBiYXNlNjQgZW5jb2Rlci4KIAotICAgIHJl
dHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBh
dXRvIGVuY29kZWREYXRhID0gZW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFNvdXJjZT4oc291
cmNlKSwgc3RkOjpmb3J3YXJkPFNvdXJjZURlc2NyaXB0aW9uPihzb3VyY2VEZXNjcmlwdGlvbiks
IHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAiZGF0YTosIl9zOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUs
ICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0
YS5zaXplKCkpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoQ0dJbWFnZVJlZiBpbWFnZSwg
Q0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sK
KyAgICByZXR1cm4gZW5jb2RlVG9WZWN0b3IoaW1hZ2UsIGRlc3RpbmF0aW9uVVRJLCBxdWFsaXR5
KTsKIH0KIAotU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9
IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFV
UkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOworICAgIHJl
dHVybiBlbmNvZGVUb1ZlY3RvcihwaXhlbEJ1ZmZlciwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQog
Ci1WZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQorU3RyaW5nIGRh
dGFVUkwoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0
YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICByZXR1
cm4gZW5jb2RlVG9EYXRhVVJMKGltYWdlLCBkZXN0aW5hdGlvblVUSSwgbWltZVR5cGUsIHF1YWxp
dHkpOwogfQogCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitTdHJp
bmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBpZiAoYXV0byBkYXRh
ID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0
YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVU
b0RhdGFVUkwocGl4ZWxCdWZmZXIsIG1pbWVUeXBlLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJl
dmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDYgQEAK
ICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDIsMTQgKzM4LDEyIEBAIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5
SW1hZ2VCdWZmZXIKIENGU3RyaW5nUmVmIGpwZWdVVEkoKTsKIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CiAKLWJvb2wgZW5j
b2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoQ0dJbWFnZVJl
ZiwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7
CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CiAKLVN0cmluZyBkYXRhVVJMKENG
RGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChDR0ltYWdl
UmVmLCBDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKIFN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVm
ZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsK
IAotVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKLVZlY3Rvcjx1aW50OF90
PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gVVNFKENHKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428835</attachid>
            <date>2021-05-17 09:10:07 -0700</date>
            <delta_ts>2021-05-18 07:05:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210517091006.patch</filename>
            <type>text/plain</type>
            <size>38129</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA1LTE2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwgYW5kIHRv
QmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgU3Ry
aW5nVHlwZUFkYXB0ZXIgZm9yIGlubGluZSBiYXNlNjQgZW5jb2RpbmcgZGF0YSBpbiBlaXRoZXIg
bWFrZVN0cmluZygpCisgICAgICAgIG9yIFN0cmluZ0J1aWxkZXIuIFRvIG1ha2UgdGhpcyB3b3Jr
LCBhIGZldyBtb2RpZmljYXRpb25zIHdlcmUgbmVlZCB0byB0aGUgCisgICAgICAgIGJhc2U2NEVu
Y29kZSgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5j
dGlvbi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlz
IG5vdyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAg
VGhpcyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkg
YmFzZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29k
aW5nIHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0
aW1hdGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAg
ZG93biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVy
bmFsIHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5l
dyAKKyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVD
aGFyKiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3Ig
dG8gd3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFs
bCBjaGFuZ2UgaXMgdGhhdCBhbGwgdXNlIG9mIEJhc2U2NFVSTFBvbGljeSBub3cgcmVzdWx0cyBp
biB1c2luZyAKKyAgICAgICAgYmFzZTY0VVJMRW5jTWFwLCBub3QganVzdCB3aGVuIGNhbGxlZCBm
cm9tIGJhc2U2NFVSTEVuY29kZS4gVGhlcmUgYXJlIG5vIGNhbGxlcnMgd2hvCisgICAgICAgIGdv
IGRvd24gdGhpcyBwYXRoIGN1cnJlbnRseSwgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVu
dGF0aW9uIGFuZCBtYWtlcyBpdCBtb3JlCisgICAgICAgIGNvbnNpc3RlbnQuCisKKyAgICAgICAg
KiB3dGYvRm9yd2FyZC5oOgorICAgICAgICBBZGQgU2NvcGVkTGFtYmRhIHNvIGl0IGNhbiBiZSB1
c2VkIGluIGhlYWRlcnMgd2l0aG91dCBiZWluZyBkaXJlY3RseSBpbmNsdWRlZC4KKworICAgICAg
ICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVy
bmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0
VVJMRW5jb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6
Y2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVk
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46
OlN0cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFz
ZTY0U3BlY2lmaWNhdGlvbj46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5
cGVBZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjppczhCaXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6d3JpdGVUbyBjb25z
dCk6CisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHBy
ZXBhcmF0aW9uCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSA9IFJhd1B0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgPSBSYXdQdHJUcmFpdHM8VD4sIHR5cGVuYW1lID0gRGVmYXVsdFJlZkRlcmVmVHJh
aXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmV0YWluUHRy
OwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFNjb3BlZExhbWJkYTsKIHRlbXBsYXRlPHR5cGVu
YW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5n
UGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNz
IFN0cmluZ1R5cGVBZGFwdGVyOwpAQCAtMTM5LDYgKzE0MCw3IEBAIHVzaW5nIFdURjo6UmVmOwog
dXNpbmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5nIFdURjo6U0hB
MTsKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBX
VEY6OlN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QmFzZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmln
aHQgKEMpIDIwMDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkxLDkzICs5MSw5OSBAQCBz
dGF0aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwg
MHgzMywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQs
IG5vbkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4m
IG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClb
NjRdKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB2b2lk
IGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0RGF0YUJ1ZmZl
ciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCiB7Ci0gICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRl
QmFzZTY0RW5jb2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5n
dGgpOwogCi0gICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJn
ZSwganVzdCByZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRoZSAib3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhh
biBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0g
ICAgY29uc3QgdW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2
IC8gNCAqIDMgLSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGVuY29kZU1hcCA9IChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5
KSA/IGJhc2U2NFVSTEVuY01hcDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9
IDA7CiAgICAgdW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0g
ICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGlu
c2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0TEZzICYmIGRlc3RpbmF0aW9uTGVuZ3Ro
ID4gNzYpOwogCi0gICAgLy8gRGVhbCB3aXRoIHRoZSA3NiBjaGFyYWN0ZXIgcGVyIGxpbmUgbGlt
aXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1LgotICAgIGJvb2wgaW5zZXJ0TEZzID0gKHBvbGljeSA9
PSBCYXNlNjRJbnNlcnRMRnMgJiYgb3V0TGVuZ3RoID4gNzYpOwotICAgIGlmIChpbnNlcnRMRnMp
Ci0gICAgICAgIG91dExlbmd0aCArPSAoKG91dExlbmd0aCAtIDEpIC8gNzYpOwotCi0gICAgaW50
IGNvdW50ID0gMDsKLSAgICBvdXQuZ3JvdyhvdXRMZW5ndGgpOwotCi0gICAgLy8gMy1ieXRlIHRv
IDQtYnl0ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgot
ICAgIGlmIChsZW4gPiAxKSB7Ci0gICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAg
IGlmIChpbnB1dExlbmd0aCA+IDEpIHsKKyAgICAgICAgd2hpbGUgKHNpZHggPCBpbnB1dExlbmd0
aCAtIDIpIHsKICAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKICAgICAgICAgICAgICAgICBp
ZiAoY291bnQgJiYgIShjb3VudCAlIDc2KSkKLSAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgr
K10gPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9ICdcbic7CiAgICAgICAgICAgICAgICAgY291bnQgKz0gNDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhdID4+IDIpICYg
MDc3XTsKLSAgICAgICAgICAgIG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsg
MV0gPj4gNCkgJiAwMTcpIHwgKChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRhdGFbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8
ICgoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzcpXTsKLSAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gZW5jb2RlTWFwW2RhdGFbc2lkeCArIDJdICYgMDc3XTsKKworICAgICAgICAgICAgZGVzdGlu
YXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lk
eCAgICBdID4+IDIpICYgMDc3XTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltk
aWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAx
NykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAwNzcpXTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXREYXRh
QnVmZmVyW3NpZHggKyAyXSA+PiA2KSAmIDAwMykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsg
MV0gPDwgMikgJiAwNzcpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4
KytdID0gZW5jb2RlTWFwWyAgaW5wdXREYXRhQnVmZmVyW3NpZHggKyAyXSAgICAgICAmIDA3N107
CiAgICAgICAgICAgICBzaWR4ICs9IDM7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoc2lk
eCA8IGxlbikgeworICAgIGlmIChzaWR4IDwgaW5wdXRMZW5ndGgpIHsKICAgICAgICAgaWYgKGlu
c2VydExGcyAmJiAoY291bnQgPiAwKSAmJiAhKGNvdW50ICUgNzYpKQotICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9ICdcbic7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeCsr
XSA9ICdcbic7CiAKLSAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0g
Pj4gMikgJiAwNzddOwotICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAg
IG91dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAwMTcpIHwg
KChkYXRhW3NpZHhdIDw8IDQpICYgMDc3KV07Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVu
Y29kZU1hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoaW5wdXREYXRhQnVmZmVyW3NpZHhdID4+
IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBpbnB1dExlbmd0aCAtIDEpIHsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWygoaW5wdXRE
YXRhQnVmZmVyW3NpZHggKyAxXSA+PiA0KSAmIDAxNykgfCAoKGlucHV0RGF0YUJ1ZmZlcltzaWR4
XSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgr
K10gPSBlbmNvZGVNYXBbIChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoZGF0
YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJb
ZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAgIF0gPDwgNCkgJiAw
NzddOwogICAgIH0KIAotICAgIC8vIEFkZCBwYWRkaW5nCi0gICAgaWYgKHBvbGljeSA9PSBCYXNl
NjRVUkxQb2xpY3kpCi0gICAgICAgIG91dC5yZXNpemUoZGlkeCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewotICAgICAgICAgICAgb3V0W2RpZHhdID0g
Jz0nOwotICAgICAgICAgICAgKytkaWR4OwotICAgICAgICB9CisgICAgQVNTRVJUKHBvbGljeSAh
PSBCYXNlNjRVUkxQb2xpY3kgfHwgZGlkeCA9PSBkZXN0aW5hdGlvbkxlbmd0aCk7CisKKyAgICB3
aGlsZSAoZGlkeCA8IGRlc3RpbmF0aW9uTGVuZ3RoKSB7CisgICAgICAgIGRlc3RpbmF0aW9uRGF0
YUJ1ZmZlcltkaWR4XSA9ICc9JzsKKyAgICAgICAgKytkaWR4OwogICAgIH0KIH0KIAotU3RyaW5n
IGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEJhc2U2NEVu
Y29kZVBvbGljeSBwb2xpY3kpCitzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJu
YWwoY29uc3QgdW5zaWduZWQgY2hhciogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExl
bmd0aCwgVmVjdG9yPGNoYXI+JiBkZXN0aW5hdGlvblZlY3RvciwgQmFzZTY0RW5jb2RlUG9saWN5
IHBvbGljeSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgbGVuZ3RoLCBy
ZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHJlc3VsdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmNsZWFyKCk7Cisg
ICAgCisgICAgYXV0byBkZXN0aW5hdGlvbkxlbmd0aCA9IGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRT
aXplKGlucHV0TGVuZ3RoLCBwb2xpY3kpOworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRlc3RpbmF0aW9uVmVjdG9yLmdyb3coZGVzdGluYXRpb25M
ZW5ndGgpOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRM
ZW5ndGgsIGRlc3RpbmF0aW9uVmVjdG9yLmRhdGEoKSwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGlj
eSk7CiB9CiAKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxl
biwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCitTdHJpbmcg
YmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRM
ZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgYmFzZTY0RW5jb2RlSW50
ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwg
cG9saWN5LCBiYXNlNjRFbmNNYXApOworICAgIHJldHVybiBtYWtlU3RyaW5nKGJhc2U2NEVuY29k
ZWQoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgcG9saWN5KSk7Cit9CisKK3ZvaWQgYmFz
ZTY0RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIFZlY3RvcjxjaGFyPiYgZGVzdGluYXRpb25WZWN0b3IsIEJhc2U2NEVuY29kZVBvbGljeSBw
b2xpY3kpCit7CisgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0RGF0YUJ1ZmZlciksIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZl
Y3RvciwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXRE
YXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVUNoYXIqIGRlc3RpbmF0aW9uRGF0YUJ1
ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAg
IGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVmZmVyLCBkZXN0
aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKK30KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9p
ZCogaW5wdXREYXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgTENoYXIqIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlciwgdW5zaWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBv
bGljeSBwb2xpY3kpCit7CisgICAgaWYgKCFkZXN0aW5hdGlvbkxlbmd0aCkKKyAgICAgICAgcmV0
dXJuOworICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1dExlbmd0aCwgZGVzdGluYXRpb25EYXRhQnVm
ZmVyLCBkZXN0aW5hdGlvbkxlbmd0aCwgcG9saWN5KTsKIH0KIAotU3RyaW5nIGJhc2U2NFVSTEVu
Y29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCitTdHJpbmcgYmFzZTY0VVJM
RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgp
CiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBC
YXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVSTEVuY01hcCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0
RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKLXZvaWQgYmFz
ZTY0VVJMRW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+
JiBvdXQpCit2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIs
IHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIGRlc3RpbmF0aW9uVmVjdG9yKQog
ewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihkYXRhKSwgbGVuLCBvdXQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJMRW5jTWFwKTsK
KyAgICBiYXNlNjRFbmNvZGUoaW5wdXREYXRhQnVmZmVyLCBpbnB1dExlbmd0aCwgZGVzdGluYXRp
b25WZWN0b3IsIEJhc2U2NFVSTFBvbGljeSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmgJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvQmFzZTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNiw3ICszNyw3IEBAIG5hbWVzcGFjZSBX
VEYgewogZW51bSBCYXNlNjRFbmNvZGVQb2xpY3kgewogICAgIEJhc2U2NERvTm90SW5zZXJ0TEZz
LAogICAgIEJhc2U2NEluc2VydExGcywKLSAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGlu
Zywgbm8gTEZzLgorICAgIEJhc2U2NFVSTFBvbGljeSAvLyBObyBwYWRkaW5nLCBubyBMRnMsIHVz
ZXMgJy0nIGFuZCAnXycgaW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuLgogfTsK
IAogZW51bSBCYXNlNjREZWNvZGVPcHRpb25zIHsKQEAgLTQ2LDYgKzQ3LDEwIEBAIGVudW0gQmFz
ZTY0RGVjb2RlT3B0aW9ucyB7CiAgICAgQmFzZTY0RGlzY2FyZFZlcnRpY2FsVGFiID0gMSA8PCAy
LAogfTsKIAorLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwg
anVzdCByZXR1cm4gbm90aGluZy4KKy8vIFJhdGhlciB0aGFuIGJlaW5nIHBlcmZlY3RseSBwcmVj
aXNlLCB0aGlzIGlzIGEgYml0IGNvbnNlcnZhdGl2ZS4KK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUgPSBVSU5UX01BWCAvIDc3ICog
NzYgLyA0ICogMyAtIDI7CisKIGNsYXNzIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRl
ciB7CiBwdWJsaWM6CiAgICAgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKFZlY3Rv
cjxjaGFyPiYgdmVjdG9yKQpAQCAtMTQ0LDEyICsxNDksMTQgQEAgcHJpdmF0ZToKICAgICB9IG1f
dmVjdG9yOwogfTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2ln
bmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9
IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLXZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcm
LCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExG
cyk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwg
dW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5zaWduZWQs
IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiwgdW5z
aWduZWQsIFVDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2
b2lkKiwgdW5zaWduZWQsIExDaGFyKiwgdW5zaWduZWQsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJh
c2U2NERvTm90SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVu
c2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90
SW5zZXJ0TEZzKTsKIFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIEJhc2U2NEVu
Y29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK3ZvaWQgYmFzZTY0RW5jb2RlKENv
bnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4mLCBCYXNl
NjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7Cit2b2lkIGJhc2U2NEVuY29k
ZShjb25zdCBDU3RyaW5nJiwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjREZWNv
ZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCB1bnNp
Z25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBi
YXNlNjREZWNvZGUoU3RyaW5nVmlldywgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
LCB1bnNpZ25lZCBvcHRpb25zID0gQmFzZTY0RGVmYXVsdCk7CkBAIC0yMTksMTUgKzIyNiw4MSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgCiAgICAgcmV0dXJuIGlz
QVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnKycgfHwgYyA9PSAnLycgfHwgYyA9PSAnLScg
fHwgYyA9PSAnXyc7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCYXNlNjRFbmNvZGVk
U2l6ZSh1bnNpZ25lZCBpbnB1dExlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKK3sK
KyAgICBpZiAoIWlucHV0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpbnB1
dExlbmd0aCA+IG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRCdWZmZXJTaXplKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGF1dG8gYmFzZVBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAg
ICAgcmV0dXJuICgoaW5wdXRMZW5ndGggKyAyKSAvIDMpICogNDsKKyAgICB9OworCisgICAgYXV0
byBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSA9IFsmXSB7CisgICAgICAgIHJldHVybiAoKGlucHV0
TGVuZ3RoICogNCkgKyAyKSAvIDM7CisgICAgfTsKKworICAgIHN3aXRjaCAocG9saWN5KSB7Cisg
ICAgY2FzZSBCYXNlNjREb05vdEluc2VydExGczoKKyAgICAgICAgcmV0dXJuIGJhc2VQYWRkZWRF
bmNvZGVkU2l6ZSgpOworCisgICAgY2FzZSBCYXNlNjRJbnNlcnRMRnM6IHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBiYXNlUGFkZGVkRW5jb2RlZFNpemUoKTsKKyAgICAgICAgaWYgKHJlc3VsdCA+
IDc2KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICgocmVzdWx0IC0gMSkgLyA3Nik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRVUkxQb2xpY3k6
CisgICAgICAgIHJldHVybiBiYXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KKwor
c3RydWN0IEJhc2U2NFNwZWNpZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsK
KyAgICB1bnNpZ25lZCBpbnB1dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
OworfTsKKworaW5saW5lIEJhc2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2
b2lkKiBpbnB1dERhdGEsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kg
cG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRh
LCBpbnB1dExlbmd0aCwgcG9saWN5IH07Cit9CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVB
ZGFwdGVyKGNvbnN0IEJhc2U2NFNwZWNpZmljYXRpb24mIGJhc2U2NCkKKyAgICAgICAgOiBtX2Jh
c2U2NCB7IGJhc2U2NCB9CisgICAgICAgICwgbV9lbmNvZGVkTGVuZ3RoIHsgY2FsY3VsYXRlQmFz
ZTY0RW5jb2RlZFNpemUoYmFzZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQucG9saWN5KSB9CisgICAg
eworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rl
ZExlbmd0aDsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3Rl
clR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgYmFzZTY0RW5jb2RlKG1f
YmFzZTY0LmlucHV0RGF0YSwgbV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uLCBtX2Vu
Y29kZWRMZW5ndGgsIG1fYmFzZTY0LnBvbGljeSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJh
c2U2NFNwZWNpZmljYXRpb24gbV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3Ro
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6QmFzZTY0RW5jb2RlUG9s
aWN5OwordXNpbmcgV1RGOjpCYXNlNjREaXNjYXJkVmVydGljYWxUYWI7CiB1c2luZyBXVEY6OkJh
c2U2NERvTm90SW5zZXJ0TEZzOwordXNpbmcgV1RGOjpCYXNlNjRFbmNvZGVQb2xpY3k7Cit1c2lu
ZyBXVEY6OkJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzOwogdXNpbmcgV1RGOjpCYXNlNjRJ
bnNlcnRMRnM7Cit1c2luZyBXVEY6OkJhc2U2NFNwZWNpZmljYXRpb247CiB1c2luZyBXVEY6OkJh
c2U2NFZhbGlkYXRlUGFkZGluZzsKLXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3
TGluZXM7Ci11c2luZyBXVEY6OkJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6
YmFzZTY0RW5jb2RlOwogdXNpbmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2
NEVuY29kZTsKK3VzaW5nIFdURjo6YmFzZTY0RW5jb2RlZDsKIHVzaW5nIFdURjo6YmFzZTY0VVJM
RGVjb2RlOwogdXNpbmcgV1RGOjppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjc3NTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDUtMTYgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50IHRvRGF0YVVSTCBh
bmQgdG9CbG9iIGRvIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzIHRocm91Z2ggYSBDRkRhdGFSZWYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg1Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdHJ5
aW5nIHRvIGVuY29kZSBlaXRoZXIgYSBQaXhlbEJ1ZmZlciBvciBhIEltYWdlQnVmZmVyIHRvIGFu
IGltYWdlIGZvcgorICAgICAgICBibG9iIG9yIGRhdGFVUkwgY3JlYXRpb24sIHdlIHdlcmUgdXNp
bmcgYSBtZXRob2QgdGhhdCByZXF1aXJlZCBhbHdheXMgZmlyc3QKKyAgICAgICAgY3JlYXRpbmcg
YSBDRkRhdGFSZWYgYW5kIHRoZW4gY29weWluZyB0aGF0IENGRGF0YVJlZidzIGRhdGEgaW50byB3
aGF0IHdlIG5lZWRlZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSBjYW4gdXNlIGEgY2FsbGJhY2sg
YmFzZWQgQ0dEYXRhQ29uc3VtZXIgYW5kIHNvbWUgcGFzc2VkIGFyb3VuZAorICAgICAgICBmdW5j
dG9ycyB0byBnZXQgdGhlIGRhdGEgZGlyZWN0bHkgYXMgaXQgaXMgYmVpbmcgZW5jb2RlZCBhbmQg
cHJvY2VzcyBpdCBhcworICAgICAgICBuZWVkZWQuIFNjb3BlZExhbWJkYSBpcyB1c2VkIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IGlubGluaW5nIG9yIGFsbG9jYXRpb24gdGhhdAorICAgICAgICBhIHRl
bXBsYXRlIGJhc2VkIGZ1bmN0b3Igb3IgV1RGOjpGdW5jdGlvbiB3b3VsZCByZXF1aXJlIHJlc3Bl
Y3RpdmVseS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGNvbnN0KToKKyAgICAgICAgRmFjdG9y
IG91dCBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbi4gVGhp
cyByZXBsYWNlcyB0aGUKKyAgICAgICAgdG9DRkRhdGEgdmlydHVhbCBmdW5jdGlvbiwgYW5kIGlz
IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZGF0YS9kYXRhVVJMCisgICAgICAgIGZ1bmN0
aW9ucyBpbiBJbWFnZUJ1ZmZlckNHQmFja2VuZCB0byBwcm9kdWNlIHRoZSBlbmNvZGVkIGRhdGEu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25z
dCk6CisgICAgICAgIFJld29yayB0byB1c2UgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBh
bmQgZGF0YS9kYXRhVVJMIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAgICAgIHRvIHByb2R1
Y2UgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0
b0NGRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIExpa2UgdG9DRkRhdGEgYmVmb3JlIGl0
LCBjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nIGlzIHZpcnR1YWwgYWxsb3dpbmcgZm9yIHRo
aXMKKyAgICAgICAgb3ZlcnJpZGUgaW4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRv
VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRvRGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOiBEZWxldGVkLgorICAgICAg
ICBSZXBsYWNlIGVuY29kZUltYWdlKCksIHdoaWNoIHVzZSBhIGZpbGxlZCBpbiBhIENGTXV0YWJs
ZURhdGFSZWYgd2l0aCBvdmVybG9hZHMKKyAgICAgICAgb2YgZGF0YSBhbmQgZGF0YVVSTCB0aGF0
IG5vdyB1c2UgYSBjYWxsYmFjayBiYXNlZCBDR0RhdGFDb25zdW1lciBhbmQgc29tZSBjYWxsYmFj
aworICAgICAgICBmdW5jdG9ycyB0byBhbGxvdyB0aGUgZW5jb2RlZCBkYXRhIHRvIGJlIGNvbnN1
bWVkIGFzIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCisgICAgICAgIEFsc28gbWFrZXMgdXNlIG9mIG5l
dyBiYXNlNjRFbmNvZGVkKCkgYWRhcHRlciB0byBiYXNlNjQgZW5jb2RlIGRpcmVjdGx5IGluIG1h
a2VTdHJpbmcoKS4KKwogMjAyMS0wNS0xNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgU3VwcG9ydCBzZXJpYWxpemluZyBJbWFnZURhdGEgb2JqZWN0IGNvbG9yU3Bh
Y2UgcHJvcGVydHkgaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCwyMCArMTY4LDExIEBAIHZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNsaXBUb01hc2soR3IK
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtZGVzdFJlY3QueCgpLCAtZGVz
dFJlY3QubWF4WSgpKTsKIH0KIAotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK1Bs
YXRmb3JtSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9y
RW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAg
IEFTU0VSVF9JTVBMSUVTKCFpc0luR1BVUHJvY2VzcygpLCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2Vsc2UKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLSNlbmRpZgotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBQbGF0Zm9ybUlt
YWdlUHRyIGltYWdlOworICAgIGlmIChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLCBqcGVnVVRJKCkp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0aGUgc2FtZSBsb2dp
YyBhcyBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHPwogCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgp
LCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hh
bm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgog
ICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQiB9OwogICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCBsb2dpY2FsUmVjdCgpKTsKQEAgLTE5Nyw0OSArMTg4LDU4IEBAIFJldGFpblB0cjxDRkRh
dGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW4KICAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigp
LCBkYXRhLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250
ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwotICAgICAgICAKICAgICAgICAgaWYgKCFkYXRh
UHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBhdXRvIGlt
YWdlU2l6ZSA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMy
LCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+
Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olllcykgewor
ICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENH
Q29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisg
ICAgaWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghbmF0aXZlSW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpOwotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlm
TmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLSAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAg
ICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tl
bmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRT
aXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNr
ZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNp
emUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5n
ZXQoKSkpOworICAgICAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2Uo
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdl
dCgpLCBiYWNrZW5kU2l6ZSgpKTsKICAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkp
KQorICAgIAorICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKKyAgICBhdXRvIGltYWdlID0gbmF0
aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkhvc3QpKTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NH
QmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWln
aHQoKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtl
KDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGlt
YWdlLmdldCgpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNv
cHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmRhdGEoaW1hZ2UuZ2V0KCks
IGRlc3RpbmF0aW9uVVRJLmdldCgpLCBxdWFsaXR5KTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAogewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJl
c2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNv
cHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIHByZXNlcnZl
UmVzb2x1dGlvbik7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGF0YVVSTChpbWFnZS5nZXQoKSwg
ZGVzdGluYXRpb25VVEkuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPFRocmVhZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpjcmVhdGVGbHVzaGVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAkocmV2aXNpb24gMjc3
NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShDRykK
IAogI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw3ICs1NCw4IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JT
cGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICB2b2lkIHNldHVwQ29udGV4dCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0OworCisgICAgdmlydHVhbCBQbGF0Zm9ybUltYWdlUHRyIGNvcHlQbGF0Zm9ybUlt
YWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvCiAgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKIH0KIAotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CitQbGF0
Zm9ybUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weVBsYXRmb3JtSW1h
Z2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKICAgICBpZiAobV9yZXF1aXJlc0RyYXdB
ZnRlclB1dFBpeGVsQnVmZmVyKSB7CiAgICAgICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElP
U3VyZmFjZSBjYWNoZWQgaW1hZ2UuCkBAIC0xNzQsNyArMTc0LDcgQEAgUmV0YWluUHRyPENGRGF0
YVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhYwogICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0KDEsIDEsIDAsIDApKTsKICAgICAgICAgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVs
QnVmZmVyID0gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgcmV0
dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nKGRl
c3RpbmF0aW9uVVRJLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCiBWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtNzgsNiArNzcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOwogICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CiAK
KyAgICAvLyBJbWFnZUJ1ZmZlckNHQmFja2VuZCBvdmVycmlkZXMuCisgICAgUGxhdGZvcm1JbWFn
ZVB0ciBjb3B5UGxhdGZvcm1JbWFnZUZvckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0aW9u
VVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IGZpbmFsOworCiAgICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwogICAgIG11dGFibGUgYm9vbCBtX3JlcXVpcmVzRHJh
d0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmNwcAkocmV2aXNpb24gMjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEltYWdl
SU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1
ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNDEsNiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3VzaW5nIFB1dEJ5dGVzQ2FsbGJhY2sgPSBzaXplX3QoY29uc3Qgdm9pZCosIHNpemVf
dCk7CisKIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJ1ZmZlclNp
emUpOwpAQCAtOTMsMzcgKzk2LDQ2IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KIAotYm9vbCBlbmNvZGVJ
bWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQorc3RhdGljIGJvb2wgZW5jb2RlKENHSW1h
Z2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPiYgZnVuY3Rpb24p
CiB7Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgIGlmICghaW1hZ2UgfHwg
IWRlc3RpbmF0aW9uVVRJKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1
dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzIHsKKyAgICAgICAgW10odm9p
ZCogY29udGV4dCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpIC0+IHNpemVfdCB7
CisgICAgICAgICAgICBhdXRvIGZ1bmN0b3IgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgU2NvcGVkTGFt
YmRhPFB1dEJ5dGVzQ2FsbGJhY2s+Kj4oY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gZnVu
Y3RvcihidWZmZXIsIGNvdW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0cgorICAgIH07
CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAg
aWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4w
ICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24g
cXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21w
cmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lk
KiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAg
ICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAm
dmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9CisgICAgYXV0byBjb25zdW1lciA9IGFkb3B0Q0Yo
Q0dEYXRhQ29uc3VtZXJDcmVhdGUoY29uc3RfY2FzdDxTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxs
YmFjaz4qPigmZnVuY3Rpb24pLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9
IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1l
ci5nZXQoKSwgZGVzdGluYXRpb25VVEksIDEsIG51bGxwdHIpKTsKKyAgICAKKyAgICBhdXRvIGlt
YWdlUHJvcGVydGllcyA9IFsmXSAoKSAtPiBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB7Cisg
ICAgICAgIGlmIChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkg
JiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAgICAgLy8g
QXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRp
b24uCisgICAgICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1i
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFs
aXR5KSk7CisgICAgICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9u
TG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9
IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KCk7CiAKLSAgICAvLyBTZXR0aW5nIGtD
R0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2Vz
IGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIEZJWE1FOiBT
ZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQ
RUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAogICAgIC8v
IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgog
CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdl
LCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworCiAgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDRkRh
dGFSZWY+IGNmRGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitzdGF0aWMgYm9vbCBlbmNvZGUoY29u
c3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4mIGZ1
bmN0aW9uKQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgYXV0byB1dGkgPSB1dGlGcm9t
SW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7CisgICAgYXV0
byBkZXN0aW5hdGlvblVUSSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
IAogICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0
OwogICAgIApAQCAtMTMyLDEwICsxNDQsMTIgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+
IGNmRGF0YShjb25zdAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwog
Ci0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgaWYgKENGRXF1
YWwoZGVzdGluYXRpb25VVEkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6
IFVzZSBQaXhlbEJ1ZmZlckNvbnZlcnNpb24gZm9yIHRoaXMgb25jZSBpdCBzdXBwb3J0cyBSR0JY
LgorCiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2Ug
aGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgogICAgICAgICBpZiAo
IXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShkYXRhU2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KGRhdGFTaXplKTsKICAgICAgICAgdW5zaWduZWQgY2hh
ciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwpAQCAtMTY1LDQwICsxNzksNTIg
QEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgIGF1dG8gaW1h
Z2VTaXplID0gc291cmNlLnNpemUoKTsKICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICog
aW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShzb3VyY2UuZm9ybWF0KCkuY29s
b3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRh
UHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAK
LSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdl
dCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gZW5jb2RlKGltYWdlLmdldCgpLCBkZXN0aW5hdGlvblVUSS5nZXQoKSwgcXVhbGl0
eSwgZnVuY3Rpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lIFNv
dXJjZURlc2NyaXB0aW9uPiBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZVRvVmVjdG9yKFNv
dXJjZSYmIHNvdXJjZSwgU291cmNlRGVzY3JpcHRpb24mJiBzb3VyY2VEZXNjcmlwdGlvbiwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisK
KyAgICBib29sIHN1Y2Nlc3MgPSBlbmNvZGUoc3RkOjpmb3J3YXJkPFNvdXJjZT4oc291cmNlKSwg
c3RkOjpmb3J3YXJkPFNvdXJjZURlc2NyaXB0aW9uPihzb3VyY2VEZXNjcmlwdGlvbiksIHF1YWxp
dHksIHNjb3BlZExhbWJkYVJlZjxQdXRCeXRlc0NhbGxiYWNrPihbJl0gKGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YSksIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBsZW5ndGg7Cisg
ICAgfSkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJl
dHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lIFNvdXJjZURlc2NyaXB0aW9uPiBzdGF0aWMgU3RyaW5n
IGVuY29kZVRvRGF0YVVSTChTb3VyY2UmJiBzb3VyY2UsIFNvdXJjZURlc2NyaXB0aW9uJiYgc291
cmNlRGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNv
ZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjRE
YXRhKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkg
d2l0aCBhIHN0cmVhbWluZyBiYXNlNjQgZW5jb2Rlci4KIAotICAgIHJldHVybiAiZGF0YToiICsg
bWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICBhdXRvIGVuY29kZWREYXRh
ID0gZW5jb2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFNvdXJjZT4oc291cmNlKSwgc3RkOjpmb3J3
YXJkPFNvdXJjZURlc2NyaXB0aW9uPihzb3VyY2VEZXNjcmlwdGlvbiksIHF1YWxpdHkpOworICAg
IGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIl9zOwor
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJh
c2U2NEVuY29kZWQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpKTsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgZGVz
dGluYXRpb25VVEksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICByZXR1cm4gZW5j
b2RlVG9WZWN0b3IoaW1hZ2UsIGRlc3RpbmF0aW9uVVRJLCBxdWFsaXR5KTsKIH0KIAotU3RyaW5n
IGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2Us
IG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwg
bWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOworICAgIHJldHVybiBlbmNvZGVUb1Zl
Y3RvcihwaXhlbEJ1ZmZlciwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCi1WZWN0b3I8dWludDhf
dD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQorU3RyaW5nIGRhdGFVUkwoQ0dJbWFnZVJl
ZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExl
bmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICByZXR1cm4gZW5jb2RlVG9EYXRh
VVJMKGltYWdlLCBkZXN0aW5hdGlvblVUSSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCi1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJj
ZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdl
dCgpKTsKLSAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVUb0RhdGFVUkwocGl4ZWxC
dWZmZXIsIG1pbWVUeXBlLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDYgQEAKICNpZiBVU0UoQ0cpCiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIs
MTQgKzM4LDEyIEBAIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXIKIENG
U3RyaW5nUmVmIGpwZWdVVEkoKTsKIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdl
QnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CiAKLWJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFn
ZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJs
ZURhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYg
ZGVzdGluYXRpb25VVEksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitWZWN0b3I8dWludDhf
dD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSk7CiAKLVN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChDR0ltYWdlUmVmLCBDRlN0cmluZ1Jl
ZiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKIFN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKIAotVmVjdG9yPHVpbnQ4
X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKENHKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428932</attachid>
            <date>2021-05-18 07:05:59 -0700</date>
            <delta_ts>2021-05-19 12:00:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210518070558.patch</filename>
            <type>text/plain</type>
            <size>38382</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc1NzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA1LTE4ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCB0b0RhdGFVUkwgYW5kIHRv
QmxvYiBkbyB1bm5lY2Vzc2FyeSBkYXRhIGNvcGllcyB0aHJvdWdoIGEgQ0ZEYXRhUmVmCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgYSBuZXcgU3RyaW5n
VHlwZUFkYXB0ZXIgZm9yIGlubGluZSBiYXNlNjQgZW5jb2RpbmcgZGF0YSBpbiBlaXRoZXIgbWFr
ZVN0cmluZygpCisgICAgICAgIG9yIFN0cmluZ0J1aWxkZXIuIFRvIG1ha2UgdGhpcyB3b3JrLCBh
IGZldyBtb2RpZmljYXRpb25zIHdlcmUgbmVlZCB0byB0aGUgCisgICAgICAgIGJhc2U2NEVuY29k
ZSgpIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBmaXhlZCBzaXplIHdyaXRlVG8oKSBmdW5jdGlv
bi4KKworICAgICAgICBGaXJzdCwgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIGlzIG5v
dyBjb21wdXRlZCB1cCBmcm9udCBkZXBlbmRpbmcgb24gdGhlIHBvbGljeS4KKyAgICAgICAgVGhp
cyBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBhIG5ldyBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6
ZSgpIGZ1bmN0aW9uIHVzZWQgYnkgYm90aAorICAgICAgICB0aGUgYWRhcHRvciBhbmQgYnkgYmFz
ZTY0RW5jb2RlIHdoZW4gcGFzc2VkIGEgVmVjdG9yLiBQcmV2aW91c2x5LCB3aGVuIGVuY29kaW5n
IHVzaW5nCisgICAgICAgIHNvbWUgcG9saWNpZXMsIHRoZSBzaXplIHdhcyBhbiBvdmVyZXN0aW1h
dGUgYW5kIHRoZSByZXN1bHRpbmcgVmVjdG9yIHdvdWxkIGJlIHJlc2l6ZWQKKyAgICAgICAgZG93
biBhZnRlciBlbmNvZGluZy4KKworICAgICAgICBTZWNvbmQsIGJhc2U2NEVuY29kZUludGVybmFs
IHdhcyBtYWRlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBhbGxvdyBmb3IgdHdvIG5ldyAK
KyAgICAgICAgYmFzZTY0RW5jb2RlIGZ1bmN0aW9ucywgb25lIG9mIHdoaWNoIGhhcyBhIFVDaGFy
KiBkZXN0aW5hdGlvbi4gVGhlc2UgYXJlIHVzZWQgYnkgdGhlCisgICAgICAgIGFkYXB0b3IgdG8g
d3JpdGUgdGhlIGVuY29kZWQgZGF0YS4KKworICAgICAgICBPbmUgYWRkaXRpb25hbCBzbWFsbCBj
aGFuZ2UgaXMgdGhhdCBhbGwgdXNlIG9mIEJhc2U2NFVSTFBvbGljeSBub3cgcmVzdWx0cyBpbiB1
c2luZyAKKyAgICAgICAgYmFzZTY0VVJMRW5jTWFwLCBub3QganVzdCB3aGVuIGNhbGxlZCBmcm9t
IGJhc2U2NFVSTEVuY29kZS4gVGhlcmUgYXJlIG5vIGNhbGxlcnMgd2hvCisgICAgICAgIGdvIGRv
d24gdGhpcyBwYXRoIGN1cnJlbnRseSwgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0
aW9uIGFuZCBtYWtlcyBpdCBtb3JlCisgICAgICAgIGNvbnNpc3RlbnQuCisKKyAgICAgICAgKiB3
dGYvRm9yd2FyZC5oOgorICAgICAgICBBZGQgU2NvcGVkTGFtYmRhIHNvIGl0IGNhbiBiZSB1c2Vk
IGluIGhlYWRlcnMgd2l0aG91dCBiZWluZyBkaXJlY3RseSBpbmNsdWRlZC4KKworICAgICAgICAq
IHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZUludGVybmFs
KToKKyAgICAgICAgKFdURjo6YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKFdURjo6YmFzZTY0VVJM
RW5jb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAgICAgKFdURjo6Y2Fs
Y3VsYXRlQmFzZTY0RW5jb2RlZFNpemUpOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGVkKToK
KyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3BlY2lmaWNhdGlvbj46OlN0
cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0
U3BlY2lmaWNhdGlvbj46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVB
ZGFwdGVyPEJhc2U2NFNwZWNpZmljYXRpb24+OjppczhCaXQgY29uc3QpOgorICAgICAgICAoV1RG
OjpTdHJpbmdUeXBlQWRhcHRlcjxCYXNlNjRTcGVjaWZpY2F0aW9uPjo6d3JpdGVUbyBjb25zdCk6
CisKIDIwMjEtMDUtMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBNb2Rlcm5pemUgLyBPcHRpbWl6ZSBTUUxpdGVTdGF0ZW1lbnQgY3JlYXRpb24gYW5kIHByZXBh
cmF0aW9uCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWU+IHN0cnVjdCBSYXdQdHJUcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSA9IFJhd1B0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgPSBSYXdQdHJUcmFpdHM8VD4sIHR5cGVuYW1lID0gRGVmYXVsdFJlZkRlcmVmVHJhaXRz
PFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgUmV0YWluUHRyOwor
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFNjb3BlZExhbWJkYTsKIHRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5nUGFy
c2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyOwpAQCAtMTM5LDYgKzE0MCw3IEBAIHVzaW5nIFdURjo6UmVmOwogdXNp
bmcgV1RGOjpSZWZQdHI7CiB1c2luZyBXVEY6OlJldGFpblB0cjsKIHVzaW5nIFdURjo6U0hBMTsK
K3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6
OlN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL3RleHQvQmFzZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgICBDb3B5cmlnaHQg
KEMpIDIwMDAtMjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgogICAgQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+Ci0gICBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTkxLDkzICs5MSw5OSBAQCBzdGF0
aWMgY29uc3QgY2hhciBiYXNlNjRVUkxEZWNNYXBbMTI4XSA9CiAgICAgMHgzMSwgMHgzMiwgMHgz
Mywgbm9uQWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQsIG5v
bkFscGhhYmV0CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwo
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcj4mIG91
dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSwgY29uc3QgY2hhciAoJmVuY29kZU1hcClbNjRd
KQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGlubGluZSB2b2lkIGJh
c2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4X3QqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlciwgdW5z
aWduZWQgZGVzdGluYXRpb25MZW5ndGgsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0g
ICAgb3V0LmNsZWFyKCk7Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoZGVzdGluYXRpb25MZW5ndGggPiAwKTsKKyAgICBBU1NFUlQoY2FsY3VsYXRlQmFzZTY0RW5j
b2RlZFNpemUoaW5wdXRMZW5ndGgsIHBvbGljeSkgPT0gZGVzdGluYXRpb25MZW5ndGgpOwogCi0g
ICAgLy8gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBwYXRob2xvZ2ljYWxseSBsYXJnZSwganVzdCBy
ZXR1cm4gbm90aGluZy4KLSAgICAvLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSAi
b3V0TGVuZ3RoIiBjb21wdXRhdGlvbiBiZWxvdy4KLSAgICAvLyBSYXRoZXIgdGhhbiBiZWluZyBw
ZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRpdmUuCi0gICAgY29uc3Qg
dW5zaWduZWQgbWF4SW5wdXRCdWZmZXJTaXplID0gVUlOVF9NQVggLyA3NyAqIDc2IC8gNCAqIDMg
LSAyOwotICAgIGlmIChsZW4gPiBtYXhJbnB1dEJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGVuY29kZU1hcCA9IChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5KSA/IGJhc2U2
NFVSTEVuY01hcDogYmFzZTY0RW5jTWFwOwogCiAgICAgdW5zaWduZWQgc2lkeCA9IDA7CiAgICAg
dW5zaWduZWQgZGlkeCA9IDA7CisgICAgdW5zaWduZWQgY291bnQgPSAwOwogCi0gICAgdW5zaWdu
ZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsKKyAgICBib29sIGluc2VydExGcyA9
IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0TEZzICYmIGRlc3RpbmF0aW9uTGVuZ3RoID4gbWF4aW11
bUJhc2U2NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzKTsKIAotICAgIC8vIERlYWwgd2l0aCB0
aGUgNzYgY2hhcmFjdGVyIHBlciBsaW5lIGxpbWl0IHNwZWNpZmllZCBpbiBSRkMgMjA0NS4KLSAg
ICBib29sIGluc2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0SW5zZXJ0TEZzICYmIG91dExlbmd0
aCA+IDc2KTsKLSAgICBpZiAoaW5zZXJ0TEZzKQotICAgICAgICBvdXRMZW5ndGggKz0gKChvdXRM
ZW5ndGggLSAxKSAvIDc2KTsKLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAgb3V0Lmdyb3cob3V0
TGVuZ3RoKTsKLQotICAgIC8vIDMtYnl0ZSB0byA0LWJ5dGUgY29udmVyc2lvbiArIDAtNjMgdG8g
YXNjaWkgcHJpbnRhYmxlIGNvbnZlcnNpb24KLSAgICBpZiAobGVuID4gMSkgewotICAgICAgICB3
aGlsZSAoc2lkeCA8IGxlbiAtIDIpIHsKKyAgICBpZiAoaW5wdXRMZW5ndGggPiAxKSB7CisgICAg
ICAgIHdoaWxlIChzaWR4IDwgaW5wdXRMZW5ndGggLSAyKSB7CiAgICAgICAgICAgICBpZiAoaW5z
ZXJ0TEZzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50ICYmICEoY291bnQgJSA3NikpCi0g
ICAgICAgICAgICAgICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKKyAgICAgICAgICAgICAgICBp
ZiAoY291bnQgJiYgIShjb3VudCAlIG1heGltdW1CYXNlNjRMaW5lTGVuZ3RoV2hlbkluc2VydGlu
Z0xGcykpCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4Kytd
ID0gJ1xuJzsKICAgICAgICAgICAgICAgICBjb3VudCArPSA0OwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzdd
OwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKChkYXRhW3NpZHggKyAxXSA+
PiA0KSAmIDAxNykgfCAoKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzcpXTsKLSAgICAgICAgICAgIG91
dFtkaWR4KytdID0gZW5jb2RlTWFwWygoZGF0YVtzaWR4ICsgMl0gPj4gNikgJiAwMDMpIHwgKChk
YXRhW3NpZHggKyAxXSA8PCAyKSAmIDA3NyldOwotICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBl
bmNvZGVNYXBbZGF0YVtzaWR4ICsgMl0gJiAwNzddOworCisgICAgICAgICAgICBkZXN0aW5hdGlv
bkRhdGFCdWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsgKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICAg
IF0gPj4gMikgJiAwNzddOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgr
K10gPSBlbmNvZGVNYXBbKChpbnB1dERhdGFCdWZmZXJbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8
ICgoaW5wdXREYXRhQnVmZmVyW3NpZHggICAgXSA8PCA0KSAmIDA3NyldOworICAgICAgICAgICAg
ZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbKChpbnB1dERhdGFCdWZm
ZXJbc2lkeCArIDJdID4+IDYpICYgMDAzKSB8ICgoaW5wdXREYXRhQnVmZmVyW3NpZHggKyAxXSA8
PCAyKSAmIDA3NyldOworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10g
PSBlbmNvZGVNYXBbICBpbnB1dERhdGFCdWZmZXJbc2lkeCArIDJdICAgICAgICYgMDc3XTsKICAg
ICAgICAgICAgIHNpZHggKz0gMzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChzaWR4IDwg
bGVuKSB7Ci0gICAgICAgIGlmIChpbnNlcnRMRnMgJiYgKGNvdW50ID4gMCkgJiYgIShjb3VudCAl
IDc2KSkKLSAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOwotCi0gICAgICAgIG91dFtkaWR4
KytdID0gZW5jb2RlTWFwWyhkYXRhW3NpZHhdID4+IDIpICYgMDc3XTsKLSAgICAgICAgaWYgKHNp
ZHggPCBsZW4gLSAxKSB7Ci0gICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGRh
dGFbc2lkeCArIDFdID4+IDQpICYgMDE3KSB8ICgoZGF0YVtzaWR4XSA8PCA0KSAmIDA3NyldOwot
ICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeCArIDFdIDw8IDIp
ICYgMDc3XTsKKyAgICBpZiAoc2lkeCA8IGlucHV0TGVuZ3RoKSB7CisgICAgICAgIGlmIChpbnNl
cnRMRnMgJiYgKGNvdW50ID4gMCkgJiYgIShjb3VudCAlIG1heGltdW1CYXNlNjRMaW5lTGVuZ3Ro
V2hlbkluc2VydGluZ0xGcykpCisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlk
eCsrXSA9ICdcbic7CisKKyAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBl
bmNvZGVNYXBbKGlucHV0RGF0YUJ1ZmZlcltzaWR4XSA+PiAyKSAmIDA3N107CisgICAgICAgIGlm
IChzaWR4IDwgaW5wdXRMZW5ndGggLSAxKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkRhdGFC
dWZmZXJbZGlkeCsrXSA9IGVuY29kZU1hcFsoKGlucHV0RGF0YUJ1ZmZlcltzaWR4ICsgMV0gPj4g
NCkgJiAwMTcpIHwgKChpbnB1dERhdGFCdWZmZXJbc2lkeF0gPDwgNCkgJiAwNzcpXTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uRGF0YUJ1ZmZlcltkaWR4KytdID0gZW5jb2RlTWFwWyAoaW5wdXRE
YXRhQnVmZmVyW3NpZHggKyAxXSA8PCAyKSAmIDA3N107CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgb3V0W2RpZHgrK10gPSBlbmNvZGVNYXBbKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzddOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhQnVmZmVyW2RpZHgrK10gPSBlbmNvZGVNYXBbIChp
bnB1dERhdGFCdWZmZXJbc2lkeCAgICBdIDw8IDQpICYgMDc3XTsKICAgICB9CiAKLSAgICAvLyBB
ZGQgcGFkZGluZwotICAgIGlmIChwb2xpY3kgPT0gQmFzZTY0VVJMUG9saWN5KQotICAgICAgICBv
dXQucmVzaXplKGRpZHgpOwotICAgIGVsc2UgewotICAgICAgICB3aGlsZSAoZGlkeCA8IG91dC5z
aXplKCkpIHsKLSAgICAgICAgICAgIG91dFtkaWR4XSA9ICc9JzsKLSAgICAgICAgICAgICsrZGlk
eDsKLSAgICAgICAgfQorICAgIEFTU0VSVChwb2xpY3kgIT0gQmFzZTY0VVJMUG9saWN5IHx8IGRp
ZHggPT0gZGVzdGluYXRpb25MZW5ndGgpOworCisgICAgd2hpbGUgKGRpZHggPCBkZXN0aW5hdGlv
bkxlbmd0aCkgeworICAgICAgICBkZXN0aW5hdGlvbkRhdGFCdWZmZXJbZGlkeF0gPSAnPSc7Cisg
ICAgICAgICsrZGlkeDsKICAgICB9CiB9CiAKLVN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorc3Rh
dGljIGlubGluZSB2b2lkIGJhc2U2NEVuY29kZUludGVybmFsKGNvbnN0IHVpbnQ4X3QqIGlucHV0
RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFZlY3RvcjxjaGFyPiYgZGVzdGluYXRp
b25WZWN0b3IsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7Ci0gICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oZGF0YSksIGxlbmd0aCwgcmVzdWx0LCBwb2xpY3ksIGJhc2U2NEVuY01hcCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBk
ZXN0aW5hdGlvblZlY3Rvci5jbGVhcigpOworICAgIAorICAgIGF1dG8gZGVzdGluYXRpb25MZW5n
dGggPSBjYWxjdWxhdGVCYXNlNjRFbmNvZGVkU2l6ZShpbnB1dExlbmd0aCwgcG9saWN5KTsKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uTGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0aW5h
dGlvblZlY3Rvci5ncm93KGRlc3RpbmF0aW9uTGVuZ3RoKTsKKyAgICBiYXNlNjRFbmNvZGVJbnRl
cm5hbChpbnB1dERhdGFCdWZmZXIsIGlucHV0TGVuZ3RoLCBkZXN0aW5hdGlvblZlY3Rvci5kYXRh
KCksIGRlc3RpbmF0aW9uTGVuZ3RoLCBwb2xpY3kpOwogfQogCi12b2lkIGJhc2U2NEVuY29kZShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5KQorU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1
dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9s
aWN5KQogewotICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihkYXRhKSwgbGVuLCBvdXQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKKyAgICBy
ZXR1cm4gbWFrZVN0cmluZyhiYXNlNjRFbmNvZGVkKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5n
dGgsIHBvbGljeSkpOworfQorCit2b2lkIGJhc2U2NEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERh
dGFCdWZmZXIsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBWZWN0b3I8Y2hhcj4mIGRlc3RpbmF0aW9u
VmVjdG9yLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIGJhc2U2NEVuY29kZUlu
dGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbnB1dERhdGFCdWZmZXIpLCBpbnB1
dExlbmd0aCwgZGVzdGluYXRpb25WZWN0b3IsIHBvbGljeSk7Cit9CisKK3ZvaWQgYmFzZTY0RW5j
b2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgsIFVD
aGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3RoLCBC
YXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIGlmICghZGVzdGluYXRpb25MZW5ndGgp
CisgICAgICAgIHJldHVybjsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9u
RGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSk7Cit9CisKK3ZvaWQgYmFzZTY0
RW5jb2RlKGNvbnN0IHZvaWQqIGlucHV0RGF0YUJ1ZmZlciwgdW5zaWduZWQgaW5wdXRMZW5ndGgs
IExDaGFyKiBkZXN0aW5hdGlvbkRhdGFCdWZmZXIsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTGVuZ3Ro
LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIGlmICghZGVzdGluYXRpb25MZW5n
dGgpCisgICAgICAgIHJldHVybjsKKyAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5wdXREYXRhQnVmZmVyKSwgaW5wdXRMZW5ndGgsIGRlc3RpbmF0
aW9uRGF0YUJ1ZmZlciwgZGVzdGluYXRpb25MZW5ndGgsIHBvbGljeSk7CiB9CiAKLVN0cmluZyBi
YXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorU3RyaW5n
IGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBpbnB1dERhdGFCdWZmZXIsIHVuc2lnbmVkIGlu
cHV0TGVuZ3RoKQogewotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYmFzZTY0RW5jb2Rl
SW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRhdGEpLCBsZW5ndGgs
IHJlc3VsdCwgQmFzZTY0VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOwotICAgIHJldHVybiBT
dHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShpbnB1dERhdGFCdWZmZXIsIGlucHV0TGVuZ3RoLCBCYXNlNjRVUkxQb2xpY3kpOwogfQog
Ci12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZl
Y3RvcjxjaGFyPiYgb3V0KQordm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCogaW5wdXRE
YXRhQnVmZmVyLCB1bnNpZ25lZCBpbnB1dExlbmd0aCwgVmVjdG9yPGNoYXI+JiBkZXN0aW5hdGlv
blZlY3RvcikKIHsKLSAgICBiYXNlNjRFbmNvZGVJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oZGF0YSksIGxlbiwgb3V0LCBCYXNlNjRVUkxQb2xpY3ksIGJhc2U2NFVS
TEVuY01hcCk7CisgICAgYmFzZTY0RW5jb2RlKGlucHV0RGF0YUJ1ZmZlciwgaW5wdXRMZW5ndGgs
IGRlc3RpbmF0aW9uVmVjdG9yLCBCYXNlNjRVUkxQb2xpY3kpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKIGVudW0gQmFzZTY0RW5jb2RlUG9saWN5IHsKICAgICBCYXNlNjREb05v
dEluc2VydExGcywKICAgICBCYXNlNjRJbnNlcnRMRnMsCi0gICAgQmFzZTY0VVJMUG9saWN5IC8v
IE5vIHBhZGRpbmcsIG5vIExGcy4KKyAgICBCYXNlNjRVUkxQb2xpY3kgLy8gTm8gcGFkZGluZywg
bm8gTEZzLCB1c2VzICctJyBhbmQgJ18nIGluc3RlYWQgb2YgJysnIGFuZCAnLycgcmVzcGVjdGl2
ZWx5Li4KIH07CiAKIGVudW0gQmFzZTY0RGVjb2RlT3B0aW9ucyB7CkBAIC00Niw2ICs0NywxMiBA
QCBlbnVtIEJhc2U2NERlY29kZU9wdGlvbnMgewogICAgIEJhc2U2NERpc2NhcmRWZXJ0aWNhbFRh
YiA9IDEgPDwgMiwKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUJhc2U2
NExpbmVMZW5ndGhXaGVuSW5zZXJ0aW5nTEZzID0gNzY7CisKKy8vIElmIHRoZSBpbnB1dCBzdHJp
bmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3QgcmV0dXJuIG5vdGhpbmcuCisvLyBSYXRo
ZXIgdGhhbiBiZWluZyBwZXJmZWN0bHkgcHJlY2lzZSwgdGhpcyBpcyBhIGJpdCBjb25zZXJ2YXRp
dmUuCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1CYXNlNjRFbmNvZGVySW5wdXRC
dWZmZXJTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gNzcgKiA3
NiAvIDQgKiAzIC0gMjsKKwogY2xhc3MgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVy
IHsKIHB1YmxpYzoKICAgICBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIoVmVjdG9y
PGNoYXI+JiB2ZWN0b3IpCkBAIC0xNDQsMTIgKzE1MSwxNCBAQCBwcml2YXRlOgogICAgIH0gbV92
ZWN0b3I7CiB9OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjREb05vdEluc2VydExGcyk7Ci12b2lkIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWdu
ZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwotdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYs
IFZlY3RvcjxjaGFyPiYsIEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZz
KTsKIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1
bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
VmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMp
OworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNp
Z25lZCwgVUNoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJ
bnNlcnRMRnMpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IHZv
aWQqLCB1bnNpZ25lZCwgTENoYXIqLCB1bnNpZ25lZCwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFz
ZTY0RG9Ob3RJbnNlcnRMRnMpOwogU3RyaW5nIGJhc2U2NEVuY29kZShDb25zdFNpZ25lZE9yVW5z
aWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJ
bnNlcnRMRnMpOwogU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiwgQmFzZTY0RW5j
b2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwordm9pZCBiYXNlNjRFbmNvZGUoQ29u
c3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIFZlY3RvcjxjaGFyPiYsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKK3ZvaWQgYmFzZTY0RW5jb2Rl
KGNvbnN0IENTdHJpbmcmLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjREb05vdEluc2VydExGcyk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NERlY29k
ZShjb25zdCBTdHJpbmcmLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIHVuc2ln
bmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJh
c2U2NERlY29kZShTdHJpbmdWaWV3LCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIs
IHVuc2lnbmVkIG9wdGlvbnMgPSBCYXNlNjREZWZhdWx0KTsKQEAgLTIxOSwxNSArMjI4LDc5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICByZXR1cm4gaXNB
U0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcrJyB8fCBjID09ICcvJyB8fCBjID09ICctJyB8
fCBjID09ICdfJzsKIH0KIAoraW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJhc2U2NEVuY29kZWRT
aXplKHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQorewor
ICAgIGlmICghaW5wdXRMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGlucHV0
TGVuZ3RoID4gbWF4aW11bUJhc2U2NEVuY29kZXJJbnB1dEJ1ZmZlclNpemUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgYXV0byBiYXNlUGFkZGVkRW5jb2RlZFNpemUgPSBbJl0geworICAgICAg
ICByZXR1cm4gKChpbnB1dExlbmd0aCArIDIpIC8gMykgKiA0OworICAgIH07CisKKyAgICBhdXRv
IGJhc2VVbnBhZGRlZEVuY29kZWRTaXplID0gWyZdIHsKKyAgICAgICAgcmV0dXJuICgoaW5wdXRM
ZW5ndGggKiA0KSArIDIpIC8gMzsKKyAgICB9OworCisgICAgc3dpdGNoIChwb2xpY3kpIHsKKyAg
ICBjYXNlIEJhc2U2NERvTm90SW5zZXJ0TEZzOgorICAgICAgICByZXR1cm4gYmFzZVBhZGRlZEVu
Y29kZWRTaXplKCk7CisKKyAgICBjYXNlIEJhc2U2NEluc2VydExGczogeworICAgICAgICBhdXRv
IHJlc3VsdCA9IGJhc2VQYWRkZWRFbmNvZGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0
ICsgKChyZXN1bHQgLSAxKSAvIG1heGltdW1CYXNlNjRMaW5lTGVuZ3RoV2hlbkluc2VydGluZ0xG
cyk7CisgICAgfQorCisgICAgY2FzZSBCYXNlNjRVUkxQb2xpY3k6CisgICAgICAgIHJldHVybiBi
YXNlVW5wYWRkZWRFbmNvZGVkU2l6ZSgpOworICAgIH0KK30KKworc3RydWN0IEJhc2U2NFNwZWNp
ZmljYXRpb24geworICAgIGNvbnN0IHZvaWQqIGlucHV0RGF0YTsKKyAgICB1bnNpZ25lZCBpbnB1
dExlbmd0aDsKKyAgICBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5OworfTsKKworaW5saW5lIEJh
c2U2NFNwZWNpZmljYXRpb24gYmFzZTY0RW5jb2RlZChjb25zdCB2b2lkKiBpbnB1dERhdGEsIHVu
c2lnbmVkIGlucHV0TGVuZ3RoLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5ID0gQmFzZTY0RG9O
b3RJbnNlcnRMRnMpCit7CisgICAgcmV0dXJuIHsgaW5wdXREYXRhLCBpbnB1dExlbmd0aCwgcG9s
aWN5IH07Cit9CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8QmFzZTY0U3Bl
Y2lmaWNhdGlvbj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEJhc2U2
NFNwZWNpZmljYXRpb24mIGJhc2U2NCkKKyAgICAgICAgOiBtX2Jhc2U2NCB7IGJhc2U2NCB9Cisg
ICAgICAgICwgbV9lbmNvZGVkTGVuZ3RoIHsgY2FsY3VsYXRlQmFzZTY0RW5jb2RlZFNpemUoYmFz
ZTY0LmlucHV0TGVuZ3RoLCBiYXNlNjQucG9saWN5KSB9CisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZExlbmd0aDsgfQorICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9u
KSBjb25zdAorICAgIHsKKyAgICAgICAgYmFzZTY0RW5jb2RlKG1fYmFzZTY0LmlucHV0RGF0YSwg
bV9iYXNlNjQuaW5wdXRMZW5ndGgsIGRlc3RpbmF0aW9uLCBtX2VuY29kZWRMZW5ndGgsIG1fYmFz
ZTY0LnBvbGljeSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2U2NFNwZWNpZmljYXRpb24g
bV9iYXNlNjQ7CisgICAgdW5zaWduZWQgbV9lbmNvZGVkTGVuZ3RoOworfTsKKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6QmFzZTY0RW5jb2RlUG9saWN5OwordXNpbmcgV1RGOjpC
YXNlNjREaXNjYXJkVmVydGljYWxUYWI7CiB1c2luZyBXVEY6OkJhc2U2NERvTm90SW5zZXJ0TEZz
OwordXNpbmcgV1RGOjpCYXNlNjRFbmNvZGVQb2xpY3k7Cit1c2luZyBXVEY6OkJhc2U2NElnbm9y
ZVNwYWNlc0FuZE5ld0xpbmVzOwogdXNpbmcgV1RGOjpCYXNlNjRJbnNlcnRMRnM7Cit1c2luZyBX
VEY6OkJhc2U2NFNwZWNpZmljYXRpb247CiB1c2luZyBXVEY6OkJhc2U2NFZhbGlkYXRlUGFkZGlu
ZzsKLXVzaW5nIFdURjo6QmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXM7Ci11c2luZyBXVEY6
OkJhc2U2NERpc2NhcmRWZXJ0aWNhbFRhYjsKLXVzaW5nIFdURjo6YmFzZTY0RW5jb2RlOwogdXNp
bmcgV1RGOjpiYXNlNjREZWNvZGU7Cit1c2luZyBXVEY6OmJhc2U2NEVuY29kZTsKK3VzaW5nIFdU
Rjo6YmFzZTY0RW5jb2RlZDsKIHVzaW5nIFdURjo6YmFzZTY0VVJMRGVjb2RlOwogdXNpbmcgV1RG
Ojppc0Jhc2U2NE9yQmFzZTY0VVJMQ2hhcmFjdGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
Mjc3NTc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNTQgQEAKKzIwMjEtMDUtMTggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgor
CisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50IHRvRGF0YVVSTCBhbmQgdG9CbG9iIGRvIHVubmVj
ZXNzYXJ5IGRhdGEgY29waWVzIHRocm91Z2ggYSBDRkRhdGFSZWYKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg1MworCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdoZW4gdHJ5aW5nIHRvIGVuY29kZSBlaXRoZXIg
YSBQaXhlbEJ1ZmZlciBvciBhIEltYWdlQnVmZmVyIHRvIGFuIGltYWdlIGZvcgorICAgICAgICBi
bG9iIG9yIGRhdGFVUkwgY3JlYXRpb24sIHdlIHdlcmUgdXNpbmcgYSBtZXRob2QgdGhhdCByZXF1
aXJlZCBhbHdheXMgZmlyc3QKKyAgICAgICAgY3JlYXRpbmcgYSBDRkRhdGFSZWYgYW5kIHRoZW4g
Y29weWluZyB0aGF0IENGRGF0YVJlZidzIGRhdGEgaW50byB3aGF0IHdlIG5lZWRlZC4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBjYW4gdXNlIGEgY2FsbGJhY2sgYmFzZWQgQ0dEYXRhQ29uc3VtZXIg
YW5kIHNvbWUgcGFzc2VkIGFyb3VuZAorICAgICAgICBmdW5jdG9ycyB0byBnZXQgdGhlIGRhdGEg
ZGlyZWN0bHkgYXMgaXQgaXMgYmVpbmcgZW5jb2RlZCBhbmQgcHJvY2VzcyBpdCBhcworICAgICAg
ICBuZWVkZWQuIFNjb3BlZExhbWJkYSBpcyB1c2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGlubGlu
aW5nIG9yIGFsbG9jYXRpb24gdGhhdAorICAgICAgICBhIHRlbXBsYXRlIGJhc2VkIGZ1bmN0b3Ig
b3IgV1RGOjpGdW5jdGlvbiB3b3VsZCByZXF1aXJlIHJlc3BlY3RpdmVseS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5UGxhdGZvcm1JbWFn
ZUZvckVuY29kaW5nIGNvbnN0KToKKyAgICAgICAgRmFjdG9yIG91dCBQbGF0Zm9ybUltYWdlUHRy
IGNyZWF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbi4gVGhpcyByZXBsYWNlcyB0aGUKKyAgICAg
ICAgdG9DRkRhdGEgdmlydHVhbCBmdW5jdGlvbiwgYW5kIGlzIHVzZWQgaW4gY29uanVuY3Rpb24g
d2l0aCB0aGUgZGF0YS9kYXRhVVJMCisgICAgICAgIGZ1bmN0aW9ucyBpbiBJbWFnZUJ1ZmZlckNH
QmFja2VuZCB0byBwcm9kdWNlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIFJld29yayB0
byB1c2UgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBhbmQgZGF0YS9kYXRhVVJMIGluIElt
YWdlQnVmZmVyQ0dCYWNrZW5kCisgICAgICAgIHRvIHByb2R1Y2UgdGhlIGVuY29kZWQgZGF0YS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIExpa2UgdG9DRkRhdGEgYmVmb3JlIGl0LCBjb3B5UGxhdGZvcm1JbWFnZUZv
ckVuY29kaW5nIGlzIHZpcnR1YWwgYWxsb3dpbmcgZm9yIHRoaXMKKyAgICAgICAgb3ZlcnJpZGUg
aW4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRvVmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmVuY29kZVRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRhdGFWZWN0b3IpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGVuY29kZUltYWdl
KCksIHdoaWNoIGZpbGxlZCBpbiBhIENGTXV0YWJsZURhdGFSZWYsIHdpdGggb3ZlcmxvYWRzIG9m
IGRhdGEoKSBhbmQKKyAgICAgICAgZGF0YVVSTCgpIHRoYXQgbm93IHVzZSBhIGNhbGxiYWNrIGJh
c2VkIENHRGF0YUNvbnN1bWVyIGFuZCBzb21lIGNhbGxiYWNrIGZ1bmN0b3JzIHRvIAorICAgICAg
ICBhbGxvdyB0aGUgZW5jb2RlZCBkYXRhIHRvIGJlIGNvbnN1bWVkIGFzIGl0IGlzIGJlaW5nIGNy
ZWF0ZWQuIEFsc28gbWFrZXMgdXNlIG9mIG5ldyAKKyAgICAgICAgYmFzZTY0RW5jb2RlZCgpIGFk
YXB0ZXIgdG8gYmFzZTY0IGVuY29kZSBkaXJlY3RseSBpbiBtYWtlU3RyaW5nKCkuCisKIDIwMjEt
MDUtMTYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQg
c2VyaWFsaXppbmcgSW1hZ2VEYXRhIG9iamVjdCBjb2xvclNwYWNlIHByb3BlcnR5IGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkocmV2aXNpb24g
Mjc3NTY5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsMjAgKzE2OCwxMSBAQCB2b2lk
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjbGlwVG9NYXNrKEdyCiAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNnQ29udGV4dCwgLWRlc3RSZWN0LngoKSwgLWRlc3RSZWN0Lm1heFkoKSk7CiB9CiAK
LVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYg
ZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0CiB7Ci0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgIEFTU0VSVF9JTVBMSUVTKCFpc0lu
R1BVUHJvY2VzcygpLCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2Vsc2UKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLSNlbmRp
ZgotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7
Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBQbGF0Zm9ybUltYWdlUHRyIGltYWdlOworICAgIGlm
IChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHPwogCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAg
ICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBt
YW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgogICAgICAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiB9OwogICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gZ2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBsb2dpY2FsUmVjdCgpKTsK
QEAgLTE5Nyw0OSArMTg4LDU3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dC
YWNrZW4KICAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigpLCBkYXRhLCBkYXRhU2l6ZSwgW10g
KHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAg
ICAgfSkpOwotICAgICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVy
LT5zaXplKCk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6
ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRo
KCksIGNhY2hlZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Zm9ybWF0KCkuY29sb3JTcGFjZSks
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7
Ci0gICAgfSBlbHNlIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICByZXR1cm4gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgs
IDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hlZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZl
ci0+Zm9ybWF0KCkuY29sb3JTcGFjZSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KSB7CiAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7CiAgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpOwot
ICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgp
LCBiYWNrZW5kU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIG5hdGl2ZUltYWdl
ID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaWYgKCFu
YXRpdmVJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbWFnZSA9
IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFj
a2VuZFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJh
Y2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5k
U2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgICAgICByZXR1
cm4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkobmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1h
Z2UoKS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CiAgICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAg
IGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRh
LmdldCgpKSkKKyAgICAKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7CisgICAgYXV0byBpbWFn
ZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7CisgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNr
ZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0KSk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCkpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0
KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVU
eXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisgICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Cisj
ZWxzZQorICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworI2VuZGlmCisKKyAgICBhdXRvIGRlc3RpbmF0aW9u
VVRJID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIGF1dG8gaW1h
Z2UgPSBjb3B5Q0dJbWFnZUZvckVuY29kaW5nKGRlc3RpbmF0aW9uVVRJLmdldCgpLCBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpkYXRhKGltYWdlLmdldCgp
LCBkZXN0aW5hdGlvblVUSS5nZXQoKSwgcXVhbGl0eSk7CiB9CiAKIFN0cmluZyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHBy
ZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisgICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9jZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisjZWxzZQor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworI2VuZGlmCisKKyAgICBhdXRvIGRlc3RpbmF0aW9uVVRJID0g
dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIGF1dG8gaW1hZ2UgPSBj
b3B5Q0dJbWFnZUZvckVuY29kaW5nKGRlc3RpbmF0aW9uVVRJLmdldCgpLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmRhdGFVUkwoaW1hZ2UuZ2V0KCksIGRlc3Rp
bmF0aW9uVVRJLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWRTYWZlSW1hZ2VCdWZmZXJGbHVzaGVyPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3Jl
YXRlRmx1c2hlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzU2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDkgQEAKICNpZiBVU0UoQ0cpCiAKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTMsNyArNTYsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAgICAgdm9pZCBzZXR1cENvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJldGFp
blB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworICAgIHZpcnR1
YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdS
ZWYgZGVzdGluYXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Niw3ICsxNjYsNyBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0Nv
CiAgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXpl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotUmV0YWluUHRyPENG
RGF0YVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0CitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENGU3RyaW5nUmVm
IGRlc3RpbmF0aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAogewogICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIpIHsKICAg
ICAgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KQEAg
LTE3NCw3ICsxNzQsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFj
CiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwogICAg
ICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgPSBmYWxzZTsKICAgICB9Ci0g
ICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEksIHByZXNlcnZlUmVzb2x1dGlv
bik7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRv
QkdSQURhdGEoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJ
KHJldmlzaW9uIDI3NzU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAKLSAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIE9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC03OCw2ICs3Nyw5IEBA
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4
dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3coKSBjb25zdCBvdmVycmlkZTsKIAorICAgIC8vIEltYWdlQnVmZmVyQ0dCYWNrZW5kIG92
ZXJyaWRlcy4KKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGlu
ZyhDRlN0cmluZ1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBm
aW5hbDsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBt
dXRhYmxlIGJvb2wgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyIHsgZmFsc2UgfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3NzU2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQxLDYgKzQy
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBQdXRCeXRlc0NhbGxiYWNrID0g
c2l6ZV90KGNvbnN0IHZvaWQqLCBzaXplX3QpOworCiB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChidWZmZXJTaXplKTsKQEAgLTkzLDM3ICs5Niw0NiBAQCBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiB9CiAKLWJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdS
ZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkK
K3N0YXRpYyBib29sIGVuY29kZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiBkZXN0aW5h
dGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBjb25zdCBTY29wZWRMYW1iZGE8UHV0
Qnl0ZXNDYWxsYmFjaz4mIGZ1bmN0aW9uKQogewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAh
ZGF0YSkKKyAgICBpZiAoIWltYWdlIHx8ICFkZXN0aW5hdGlvblVUSSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0
aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlv
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNh
bGxiYWNrcyB7CisgICAgICAgIFtdKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGNvdW50KSAtPiBzaXplX3QgeworICAgICAgICAgICAgYXV0byBmdW5jdG9yID0gKnN0
YXRpY19jYXN0PGNvbnN0IFNjb3BlZExhbWJkYTxQdXRCeXRlc0NhbGxiYWNrPio+KGNvbnRleHQp
OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYnVmZmVyLCBjb3VudCk7CisgICAgICAgIH0s
CisgICAgICAgIG51bGxwdHIKKyAgICB9OwogCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBx
dWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGlu
YXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxp
dHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5
Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNz
aW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQorICAg
IGF1dG8gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlKGNvbnN0X2Nhc3Q8
U2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2FsbGJhY2s+Kj4oJmZ1bmN0aW9uKSwgJmNhbGxiYWNrcykp
OworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLCAxLCBudWxs
cHRyKSk7CisgICAgCisgICAgYXV0byBpbWFnZVByb3BlcnRpZXMgPSBbJl0gKCkgLT4gUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4geworICAgICAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVU
SSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8
PSAxLjApIHsKKyAgICAgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRv
IHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICAgICAgYXV0byBjb21wcmVzc2lv
blF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICAgICAgY29uc3Qgdm9pZCog
a2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAg
ICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVl
LCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fSgpOwogCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9y
IHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBz
b21lIG1hdGgKKyAgICAvLyBGSVhNRTogU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dy
b3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291
bGQgc2F2ZSBzb21lIG1hdGgKICAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBp
dCBkb2Vzbid0IHNlZW0gdG8gd29yay4KIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdl
KGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKwogICAg
IHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9
CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgUGl4ZWxCdWZmZXIm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQorc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgY29uc3QgU2NvcGVkTGFt
YmRhPFB1dEJ5dGVzQ2FsbGJhY2s+JiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
IAotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwot
ICAgIEFTU0VSVCh1dGkpOworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CiAKICAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBo
YUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKICAgICAKQEAgLTEzMiwxMCArMTQ0LDEyIEBAIHN0
YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKIAogICAgIFZlY3Rvcjx1aW50
OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKIAotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgeworICAgIGlmIChDRkVxdWFsKGRlc3RpbmF0aW9uVVRJLmdldCgpLCBqcGVnVVRJ
KCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBVc2UgUGl4ZWxCdWZmZXJDb252ZXJzaW9uIGZvciB0
aGlzIG9uY2UgaXQgc3VwcG9ydHMgUkdCWC4KKwogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZl
IGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRv
cCBvZiBibGFjay4KICAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2Fw
YWNpdHkoZGF0YVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhkYXRhU2l6
ZSk7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKQEAgLTE2NSw0MCArMTc5LDUyIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QKICAgICBhdXRvIGltYWdlU2l6ZSA9IHNvdXJjZS5zaXplKCk7CiAgICAgYXV0
byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpLCA4LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9y
U3BhY2Uoc291cmNlLmZvcm1hdCgpLmNvbG9yU3BhY2UpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZh
dWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOwogCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2Rl
SW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGVuY29kZShpbWFnZS5nZXQoKSwgZGVz
dGluYXRpb25VVEkuZ2V0KCksIHF1YWxpdHksIGZ1bmN0aW9uKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgU291cmNlLCB0eXBlbmFtZSBTb3VyY2VEZXNjcmlwdGlvbj4gc3RhdGljIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGVUb1ZlY3RvcihTb3VyY2UmJiBzb3VyY2UsIFNvdXJjZURlc2NyaXB0aW9u
JiYgc291cmNlRGVzY3JpcHRpb24sIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0OworCisgICAgYm9vbCBzdWNjZXNzID0gZW5jb2RlKHN0ZDo6
Zm9yd2FyZDxTb3VyY2U+KHNvdXJjZSksIHN0ZDo6Zm9yd2FyZDxTb3VyY2VEZXNjcmlwdGlvbj4o
c291cmNlRGVzY3JpcHRpb24pLCBxdWFsaXR5LCBzY29wZWRMYW1iZGFSZWY8UHV0Qnl0ZXNDYWxs
YmFjaz4oWyZdIChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwor
ICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0pKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLVN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQordGVtcGxhdGU8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSBTb3VyY2VE
ZXNjcmlwdGlvbj4gc3RhdGljIFN0cmluZyBlbmNvZGVUb0RhdGFVUkwoU291cmNlJiYgc291cmNl
LCBTb3VyY2VEZXNjcmlwdGlvbiYmIHNvdXJjZURlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0
YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgZG9uZSBtb3JlIGVmZmljaWVudGx5IHdpdGggYSBzdHJlYW1pbmcgYmFzZTY0IGVuY29kZXIu
CiAKLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29kZVRvVmVjdG9yKHN0ZDo6Zm9yd2FyZDxT
b3VyY2U+KHNvdXJjZSksIHN0ZDo6Zm9yd2FyZDxTb3VyY2VEZXNjcmlwdGlvbj4oc291cmNlRGVz
Y3JpcHRpb24pLCBxdWFsaXR5KTsKKyAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gImRhdGE6LCJfczsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOiIs
IG1pbWVUeXBlLCAiO2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGVkKGVuY29kZWREYXRhLmRhdGEoKSwg
ZW5jb2RlZERhdGEuc2l6ZSgpKSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKENHSW1hZ2VS
ZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpCit7CisgICAgcmV0dXJuIGVuY29kZVRvVmVjdG9yKGltYWdlLCBkZXN0aW5hdGlvblVU
SSwgcXVhbGl0eSk7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewotICAgIGlmIChh
dXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJl
dHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJf
czsKKyAgICByZXR1cm4gZW5jb2RlVG9WZWN0b3IocGl4ZWxCdWZmZXIsIG1pbWVUeXBlLCBxdWFs
aXR5KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkK
K1N0cmluZyBkYXRhVVJMKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9u
VVRJLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0
ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7
CisgICAgcmV0dXJuIGVuY29kZVRvRGF0YVVSTChpbWFnZSwgZGVzdGluYXRpb25VVEksIG1pbWVU
eXBlLCBxdWFsaXR5KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZm
ZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQorU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgaWYg
KGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAg
cmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1
cm4gZW5jb2RlVG9EYXRhVVJMKHBpeGVsQnVmZmVyLCBtaW1lVHlwZSwgbWltZVR5cGUsIHF1YWxp
dHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oCShyZXZpc2lvbiAyNzc1NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEw
ICsyOCw2IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE0ICszOCwxMiBAQCBXRUJDT1JFX0VYUE9SVCB1aW50
OF90IHZlcmlmeUltYWdlQnVmZmVyCiBDRlN0cmluZ1JlZiBqcGVnVVRJKCk7CiBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwog
Ci1ib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRh
KENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwogCi1TdHJpbmcg
ZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFV
UkwoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CiBTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CiAKLVZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIFVTRShDRykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429082</attachid>
            <date>2021-05-19 12:00:13 -0700</date>
            <delta_ts>2021-05-19 14:19:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225853-20210519120012.patch</filename>
            <type>text/plain</type>
            <size>23365</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zvcndh
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IFJhd1B0clRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gUmF3
UHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9
IFJhd1B0clRyYWl0czxUPiwgdHlwZW5hbWUgPSBEZWZhdWx0UmVmRGVyZWZUcmFpdHM8VD4+IGNs
YXNzIFJlZlB0cjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBSZXRhaW5QdHI7Cit0ZW1wbGF0
ZTx0eXBlbmFtZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNz
IFN0cmluZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBTdHJpbmdQYXJzaW5nQnVm
ZmVyOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI7CkBAIC0xMzksNiArMTQwLDcgQEAgdXNpbmcgV1RGOjpSZWY7CiB1c2luZyBXVEY6
OlJlZlB0cjsKIHVzaW5nIFdURjo6UmV0YWluUHRyOwogdXNpbmcgV1RGOjpTSEExOwordXNpbmcg
V1RGOjpTY29wZWRMYW1iZGE7CiB1c2luZyBXVEY6OlN0cmluZzsKIHVzaW5nIFdURjo6U3RyaW5n
QnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMjc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMjEtMDUtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50IHRvRGF0YVVSTCBhbmQgdG9CbG9iIGRvIHVu
bmVjZXNzYXJ5IGRhdGEgY29waWVzIHRocm91Z2ggYSBDRkRhdGFSZWYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg1MworCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdoZW4gdHJ5aW5nIHRvIGVuY29kZSBlaXRo
ZXIgYSBQaXhlbEJ1ZmZlciBvciBhIEltYWdlQnVmZmVyIHRvIGFuIGltYWdlIGZvcgorICAgICAg
ICBibG9iIG9yIGRhdGFVUkwgY3JlYXRpb24sIHdlIHdlcmUgdXNpbmcgYSBtZXRob2QgdGhhdCBy
ZXF1aXJlZCBhbHdheXMgZmlyc3QKKyAgICAgICAgY3JlYXRpbmcgYSBDRkRhdGFSZWYgYW5kIHRo
ZW4gY29weWluZyB0aGF0IENGRGF0YVJlZidzIGRhdGEgaW50byB3aGF0IHdlIG5lZWRlZC4KKwor
ICAgICAgICBJbnN0ZWFkLCB3ZSBjYW4gdXNlIGEgY2FsbGJhY2sgYmFzZWQgQ0dEYXRhQ29uc3Vt
ZXIgYW5kIHNvbWUgcGFzc2VkIGFyb3VuZAorICAgICAgICBmdW5jdG9ycyB0byBnZXQgdGhlIGRh
dGEgZGlyZWN0bHkgYXMgaXQgaXMgYmVpbmcgZW5jb2RlZCBhbmQgcHJvY2VzcyBpdCBhcworICAg
ICAgICBuZWVkZWQuIFNjb3BlZExhbWJkYSBpcyB1c2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGlu
bGluaW5nIG9yIGFsbG9jYXRpb24gdGhhdAorICAgICAgICBhIHRlbXBsYXRlIGJhc2VkIGZ1bmN0
b3Igb3IgV1RGOjpGdW5jdGlvbiB3b3VsZCByZXF1aXJlIHJlc3BlY3RpdmVseS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5UGxhdGZvcm1J
bWFnZUZvckVuY29kaW5nIGNvbnN0KToKKyAgICAgICAgRmFjdG9yIG91dCBQbGF0Zm9ybUltYWdl
UHRyIGNyZWF0aW9uIGludG8gaXRzIG93biBmdW5jdGlvbi4gVGhpcyByZXBsYWNlcyB0aGUKKyAg
ICAgICAgdG9DRkRhdGEgdmlydHVhbCBmdW5jdGlvbiwgYW5kIGlzIHVzZWQgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgZGF0YS9kYXRhVVJMCisgICAgICAgIGZ1bmN0aW9ucyBpbiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZCB0byBwcm9kdWNlIHRoZSBlbmNvZGVkIGRhdGEuCisKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIFJld29y
ayB0byB1c2UgY29weVBsYXRmb3JtSW1hZ2VGb3JFbmNvZGluZyBhbmQgZGF0YS9kYXRhVVJMIGlu
IEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAgICAgIHRvIHByb2R1Y2UgdGhlIGVuY29kZWQgZGF0
YS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvcHlQbGF0Zm9ybUltYWdlRm9yRW5jb2RpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIExpa2UgdG9DRkRhdGEgYmVmb3JlIGl0LCBjb3B5UGxhdGZvcm1JbWFn
ZUZvckVuY29kaW5nIGlzIHZpcnR1YWwgYWxsb3dpbmcgZm9yIHRoaXMKKyAgICAgICAgb3ZlcnJp
ZGUgaW4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZVRvVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZVRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlSW1hZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmRhdGFWZWN0b3IpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlIGVuY29kZUlt
YWdlKCksIHdoaWNoIGZpbGxlZCBpbiBhIENGTXV0YWJsZURhdGFSZWYsIHdpdGggb3ZlcmxvYWRz
IG9mIGRhdGEoKSBhbmQKKyAgICAgICAgZGF0YVVSTCgpIHRoYXQgbm93IHVzZSBhIGNhbGxiYWNr
IGJhc2VkIENHRGF0YUNvbnN1bWVyIGFuZCBzb21lIGNhbGxiYWNrIGZ1bmN0b3JzIHRvIAorICAg
ICAgICBhbGxvdyB0aGUgZW5jb2RlZCBkYXRhIHRvIGJlIGNvbnN1bWVkIGFzIGl0IGlzIGJlaW5n
IGNyZWF0ZWQuIEFsc28gbWFrZXMgdXNlIG9mIG5ldyAKKyAgICAgICAgYmFzZTY0RW5jb2RlZCgp
IGFkYXB0ZXIgdG8gYmFzZTY0IGVuY29kZSBkaXJlY3RseSBpbiBtYWtlU3RyaW5nKCkuCisKIDIw
MjEtMDUtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4gV2ViS2l0IGNv
bnZlbnRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzc3NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMCArMTY4LDExIEBAIHZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmNsaXBUb01hc2soR3IKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y2dDb250ZXh0LCAtZGVzdFJlY3QueCgpLCAtZGVzdFJlY3QubWF4WSgpKTsKIH0KIAotUmV0YWlu
UHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmluZ1JlZiBkZXN0aW5h
dGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsK
LSNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgQVNTRVJUX0lNUExJRVMoIWlzSW5HUFVQcm9j
ZXNzKCksIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKSk7Ci0jZWxzZQotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotI2VuZGlmCi0KLSAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBB
U1NFUlQodXRpKTsKLQotICAgIFBsYXRmb3JtSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKENGRXF1
YWwoZGVzdGluYXRpb25VVEksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGJlIHVzaW5nIHRoZSBzYW1lIGxvZ2ljIGFzIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0c/
CiAKLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKICAgICAgICAgLy8g
SlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5
IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCiAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCIH07CiAgICAgICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGxvZ2ljYWxSZWN0KCkpOwpAQCAtMTk3
LDQ5ICsxODgsNTcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgog
ICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIGRhdGEsIGRhdGFTaXplLCBbXSAodm9pZCog
Y29udGV4dCwgY29uc3Qgdm9pZCosIHNpemVfdCkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KGNvbnRleHQpLT5kZXJlZigpOwogICAgICAgICB9KSk7
Ci0gICAgICAgIAogICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBpbWFnZVNpemUud2lkdGgoKSwgY2Fj
aGVkQ0dDb2xvclNwYWNlKHBpeGVsQnVmZmVyLT5mb3JtYXQoKS5jb2xvclNwYWNlKSwga0NHQml0
bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9
IGVsc2UgaWYgKHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1h
Z2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIDQg
KiBpbWFnZVNpemUud2lkdGgoKSwgY2FjaGVkQ0dDb2xvclNwYWNlKHBpeGVsQnVmZmVyLT5mb3Jt
YXQoKS5jb2xvclNwYWNlKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpKTsKKyAgICB9CisKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlKCkgPT0g
MSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKICAg
ICAgICAgYXV0byBuYXRpdmVJbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KTsKICAgICAgICAgaWYgKCFuYXRpdmVJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBpbWFnZSA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCk7Ci0gICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tl
bmRTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpZiAoIW5hdGl2ZUlt
YWdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlID0gbmF0aXZl
SW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgp
LCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNp
emUoKS5oZWlnaHQoKSkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCku
aGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBiYWNrZW5kU2l6ZSgpKTsKICAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkp
KQorICAgIAorICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKKyAgICBhdXRvIGltYWdlID0gbmF0
aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkhvc3QpKTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NH
QmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWln
aHQoKSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtl
KDAsIDAsIGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGlt
YWdlLmdldCgpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7CiB9CiAKIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyAgICBBU1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNv
cHlDR0ltYWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmRhdGEoaW1hZ2UuZ2V0KCksIGRlc3Rp
bmF0aW9uVVRJLmdldCgpLCBxdWFsaXR5KTsKIH0KIAogU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewot
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUp
OwotICAgIHJldHVybiAiZGF0YTosIl9zOworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBB
U1NFUlRfSU1QTElFUyghaXNJbkdQVVByb2Nlc3MoKSwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyNlbHNlCisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisjZW5kaWYKKworICAgIGF1dG8gZGVzdGluYXRpb25VVEkgPSB1dGlGcm9t
SW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgYXV0byBpbWFnZSA9IGNvcHlDR0lt
YWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEkuZ2V0KCksIHByZXNlcnZlUmVzb2x1dGlvbik7
CisKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGF0YVVSTChpbWFnZS5nZXQoKSwgZGVzdGluYXRpb25V
VEkuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFRocmVh
ZFNhZmVJbWFnZUJ1ZmZlckZsdXNoZXI+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVGbHVz
aGVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAkocmV2aXNpb24gMjc3NzQwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUg
IkltYWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK3R5cGVk
ZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNTMsNyArNTYsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAg
ICAgdm9pZCBzZXR1cENvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRh
dGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGNvcHlDR0ltYWdlRm9yRW5jb2RpbmcoQ0ZTdHJpbmdSZWYgZGVzdGlu
YXRpb25VVEksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsx
NjYsNyBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvCiAgICAgICAg
IGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGJhY2tlbmRTaXplLCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotUmV0YWluUHRyPENGRGF0YVJlZj4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0CitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb3B5Q0dJbWFnZUZvckVuY29kaW5nKENGU3RyaW5nUmVmIGRlc3RpbmF0
aW9uVVRJLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAogewog
ICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIpIHsKICAgICAgICAgLy8g
Rm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KQEAgLTE3NCw3ICsx
NzQsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFjCiAgICAgICAg
IGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwogICAgICAgICBtX3Jl
cXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgPSBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJu
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlDR0lt
YWdlRm9yRW5jb2RpbmcoZGVzdGluYXRpb25VVEksIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAK
IFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3Nzc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0
b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC03OCw2ICs3Nyw5IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3Bh
Y2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBj
b25zdCBvdmVycmlkZTsKIAorICAgIC8vIEltYWdlQnVmZmVyQ0dCYWNrZW5kIG92ZXJyaWRlcy4K
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weUNHSW1hZ2VGb3JFbmNvZGluZyhDRlN0cmlu
Z1JlZiBkZXN0aW5hdGlvblVUSSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBmaW5hbDsKKwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBtdXRhYmxlIGJv
b2wgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyIHsgZmFsc2UgfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI3Nzc0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MSw2ICs0Miw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgUHV0Qnl0ZXNDYWxsYmFjayA9IHNpemVfdChj
b25zdCB2b2lkKiwgc2l6ZV90KTsKKwogdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5v
dWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoYnVmZmVyU2l6ZSk7CkBAIC05MywzNyArOTYsNDYgQEAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfQkVHSU4KIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
fQogCi1ib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCitzdGF0aWMg
Ym9vbCBlbmNvZGUoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgZGVzdGluYXRpb25VVEks
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgY29uc3QgU2NvcGVkTGFtYmRhPFB1dEJ5dGVzQ2Fs
bGJhY2s+JiBmdW5jdGlvbikKIHsKLSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisg
ICAgaWYgKCFpbWFnZSB8fCAhZGVzdGluYXRpb25VVEkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBDR0RhdGFDb25zdW1lckNhbGxiYWNrcyBjYWxsYmFja3Mg
eworICAgICAgICBbXSh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBj
b3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIGF1dG8gZnVuY3RvciA9ICpzdGF0aWNfY2Fz
dDxjb25zdCBTY29wZWRMYW1iZGE8UHV0Qnl0ZXNDYWxsYmFjaz4qPihjb250ZXh0KTsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdG9yKGJ1ZmZlciwgY291bnQpOworICAgICAgICB9LAorICAgICAg
ICBudWxscHRyCisgICAgfTsKIAotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdl
UHJvcGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAm
JiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5
IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgot
ICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0g
ICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNz
aW9uUXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxp
dHkuZ2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KKyAgICBhdXRvIGNv
bnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZShjb25zdF9jYXN0PFNjb3BlZExh
bWJkYTxQdXRCeXRlc0NhbGxiYWNrPio+KCZmdW5jdGlvbiksICZjYWxsYmFja3MpKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0
YUNvbnN1bWVyKGNvbnN1bWVyLmdldCgpLCBkZXN0aW5hdGlvblVUSSwgMSwgbnVsbHB0cikpOwor
ICAgIAorICAgIGF1dG8gaW1hZ2VQcm9wZXJ0aWVzID0gWyZdICgpIC0+IFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHsKKyAgICAgICAgaWYgKENGRXF1YWwoZGVzdGluYXRpb25VVEksIGpwZWdV
VEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7
CisgICAgICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBF
RyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJE
b3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtD
R0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgICAgIGNv
bnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0oKTsKIAot
ICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFj
ayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRo
CisgICAgLy8gRklYTUU6IFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xv
ciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUg
c29tZSBtYXRoCiAgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24n
dCBzZWVtIHRvIHdvcmsuCiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5h
dGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisKICAgICByZXR1cm4g
Q0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogfQogCi1zdGF0
aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRp
YyBib29sIGVuY29kZShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGNvbnN0IFNjb3BlZExhbWJkYTxQdXRC
eXRlc0NhbGxiYWNrPiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKLSAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NF
UlQodXRpKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uVVRJID0gdXRpRnJvbUltYWdlQnVmZmVyTUlN
RVR5cGUobWltZVR5cGUpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0g
a0NHSW1hZ2VBbHBoYUxhc3Q7CiAgICAgCkBAIC0xMzIsMTAgKzE0NCwxMiBAQCBzdGF0aWMgUmV0
YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAKICAgICBWZWN0b3I8dWludDhfdD4gcHJl
bXVsdGlwbGllZERhdGE7CiAKLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkp
IHsKKyAgICBpZiAoQ0ZFcXVhbChkZXN0aW5hdGlvblVUSS5nZXQoKSwganBlZ1VUSSgpKSkgewor
ICAgICAgICAvLyBGSVhNRTogVXNlIFBpeGVsQnVmZmVyQ29udmVyc2lvbiBmb3IgdGhpcyBvbmNl
IGl0IHN1cHBvcnRzIFJHQlguCisKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxh
Y2suCiAgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KGRh
dGFTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coZGF0YVNpemUpOwogICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CkBA
IC0xNjUsMzcgKzE3OSw1MiBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNv
bnN0CiAgICAgYXV0byBpbWFnZVNpemUgPSBzb3VyY2Uuc2l6ZSgpOwogICAgIGF1dG8gaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWln
aHQoKSwgOCwgMzIsIDQgKiBpbWFnZVNpemUud2lkdGgoKSwgY2FjaGVkQ0dDb2xvclNwYWNlKHNv
dXJjZS5mb3JtYXQoKS5jb2xvclNwYWNlKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRh
dGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKIAotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGlt
YWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBlbmNvZGUoaW1hZ2UuZ2V0KCksIGRlc3RpbmF0aW9u
VVRJLmdldCgpLCBxdWFsaXR5LCBmdW5jdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNv
dXJjZSwgdHlwZW5hbWUgU291cmNlRGVzY3JpcHRpb24+IHN0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZW5jb2RlVG9WZWN0b3IoU291cmNlJiYgc291cmNlLCBTb3VyY2VEZXNjcmlwdGlvbiYmIHNvdXJj
ZURlc2NyaXB0aW9uLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3VsdDsKKworICAgIGJvb2wgc3VjY2VzcyA9IGVuY29kZShzdGQ6OmZvcndhcmQ8
U291cmNlPihzb3VyY2UpLCBzdGQ6OmZvcndhcmQ8U291cmNlRGVzY3JpcHRpb24+KHNvdXJjZURl
c2NyaXB0aW9uKSwgcXVhbGl0eSwgc2NvcGVkTGFtYmRhUmVmPFB1dEJ5dGVzQ2FsbGJhY2s+KFsm
XSAoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworICAgICAgICByZXN1bHQuYXBw
ZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIGxlbmd0aDsKKyAgICB9KSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU291
cmNlLCB0eXBlbmFtZSBTb3VyY2VEZXNjcmlwdGlvbj4gc3RhdGljIFN0cmluZyBlbmNvZGVUb0Rh
dGFVUkwoU291cmNlJiYgc291cmNlLCBTb3VyY2VEZXNjcmlwdGlvbiYmIHNvdXJjZURlc2NyaXB0
aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7
CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5IHdpdGgg
YSBzdHJlYW1pbmcgYmFzZTY0IGVuY29kZXIuCisKKyAgICBhdXRvIGVuY29kZWREYXRhID0gZW5j
b2RlVG9WZWN0b3Ioc3RkOjpmb3J3YXJkPFNvdXJjZT4oc291cmNlKSwgc3RkOjpmb3J3YXJkPFNv
dXJjZURlc2NyaXB0aW9uPihzb3VyY2VEZXNjcmlwdGlvbiksIHF1YWxpdHkpOworICAgIGlmIChl
bmNvZGVkRGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIl9zOwogCi0gICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBt
aW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZChlbmNvZGVkRGF0YSkpOwogfQogCi1T
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0
aW9uVVRJLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgcmV0dXJuIG1ha2VTdHJp
bmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWQoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpKSk7CisgICAgcmV0dXJuIGVuY29k
ZVRvVmVjdG9yKGltYWdlLCBkZXN0aW5hdGlvblVUSSwgcXVhbGl0eSk7CiB9CiAKLVN0cmluZyBk
YXRhVVJMKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQogewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBt
aW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKKyAgICByZXR1cm4gZW5jb2RlVG9WZWN0
b3IocGl4ZWxCdWZmZXIsIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK1N0cmluZyBkYXRhVVJMKENHSW1hZ2VSZWYg
aW1hZ2UsIENGU3RyaW5nUmVmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7
Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5n
dGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgcmV0dXJuIGVuY29kZVRvRGF0YVVS
TChpbWFnZSwgZGVzdGluYXRpb25VVEksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAotVmVjdG9y
PHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorU3RyaW5nIGRhdGFVUkwoY29uc3Qg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCiB7Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2Us
IG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQo
KSk7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlVG9EYXRhVVJMKHBpeGVsQnVm
ZmVyLCBtaW1lVHlwZSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCShyZXZpc2lvbiAyNzc3NDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsNiBAQAogI2lmIFVTRShDRykKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Miwx
NCArMzgsMTIgQEAgV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcgogQ0ZT
dHJpbmdSZWYganBlZ1VUSSgpOwogUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKIAotYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdl
UmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxl
RGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiBk
ZXN0aW5hdGlvblVUSSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKK1ZlY3Rvcjx1aW50OF90
PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KTsKIAotU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVm
IGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpOwogU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwogCi1WZWN0b3I8dWludDhf
dD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4
ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ0cpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>